def fb_save_base(): op = OptionParser(usage='%prog [options] baseid') op.disable_interspersed_args() op.add_option('-s', '--service', dest='service_host', metavar='HOST', default="freebase.com", help='Freebase HTTP service address:port') op.add_option('-S', '--sandbox', dest='use_sandbox', default=False, action='store_true', help='shortcut for --service=sandbox-freebase.com') options, args = op.parse_args() service_host = options.service_host if options.use_sandbox: service_host = "sandbox-freebase.com" if len(args) < 1: op.error('Required baseid missing') if len(args) > 1: op.error('Too many arguments') s = HTTPMetawebSession(service_host) print json.dumps(dump_base(s, args[0]), indent=2)
def test_restore_over_restore(self): domain_id = _create_domain() graph = dump_base(s, "/base/contractbridge") restore(s, graph, domain_id) # now we restore again... it should raise a MetawebError self.assertRaises(MetawebError, restore, s, graph, domain_id)
def cmd_dump_base(fb, baseid): """dump a base to stdout %prog dump_base baseid Dump a base by outputting a json representation of the types and properties involved. """ print >> sys.stdout, json.dumps(dump_base(fb.mss, baseid), indent=2)
def test_copy_an_entire_domain(self): domain_id = _create_domain() ex_domain_id = "/base/contractbridge" # example domain id ex_domain_type = "bridge_player" ex_domain_type_id = ex_domain_id + "/" + ex_domain_type graph = dump_base(s, ex_domain_id) restore(s, graph, domain_id) newperson, realperson = s.mqlreadmulti([{"id" : domain_id + "/" + ex_domain_type, "/type/type/properties" : {"return" : "count" }}, {"id" : ex_domain_type_id, "/type/type/properties" : {"return" : "count" }}]) self.assertEqual(newperson["/type/type/properties"], realperson["/type/type/properties"]) # let's try and check everything. # - check all the types are there realtypes = s.mqlread([{"id" : None, "type" : "/type/type", "domain" : ex_domain_id}]) newtypes = s.mqlread([{"id" : None, "type" : "/type/type", "domain" : domain_id}]) l = lambda q: sorted(map(f, q)) realtypes = l(realtypes) newtypes = l(newtypes) self.assertEqual(len(realtypes), len(newtypes)) for i in range(len(realtypes)): self.assertEqual(realtypes[i].rsplit("/", 1)[-1], newtypes[i].rsplit("/", 1)[-1]) # - check the properties are the same def get_properties(types): properties = set() for i in s.mqlreadmulti([{"id" : id, "/type/type/properties" : [{"id" : None}]} for id in types]): properties.update(map(lambda x: x["id"], i["/type/type/properties"])) return properties realproperties = sorted(list(get_properties(realtypes))) newproperties = sorted(list(get_properties(newtypes))) def ignore_base(id): return id.rsplit("/", 1)[-1] self.assertEqual(len(realproperties), len(newproperties)) self.assertEqual([ignore_base(prop_id) for prop_id in realproperties], [ignore_base(prop_id) for prop_id in newproperties])
def test_copy_an_entire_domain(self): domain_id = _create_domain() ex_domain_id = "/base/contractbridge" # example domain id ex_domain_type = "bridge_player" ex_domain_type_id = ex_domain_id + "/" + ex_domain_type graph = dump_base(s, ex_domain_id) restore(s, graph, domain_id) newperson, realperson = s.mqlreadmulti([{ "id": domain_id + "/" + ex_domain_type, "/type/type/properties": { "return": "count" } }, { "id": ex_domain_type_id, "/type/type/properties": { "return": "count" } }]) self.assertEqual(newperson["/type/type/properties"], realperson["/type/type/properties"]) # let's try and check everything. # - check all the types are there realtypes = s.mqlread([{ "id": None, "type": "/type/type", "domain": ex_domain_id }]) newtypes = s.mqlread([{ "id": None, "type": "/type/type", "domain": domain_id }]) l = lambda q: sorted(map(f, q)) realtypes = l(realtypes) newtypes = l(newtypes) self.assertEqual(len(realtypes), len(newtypes)) for i in range(len(realtypes)): self.assertEqual(realtypes[i].rsplit("/", 1)[-1], newtypes[i].rsplit("/", 1)[-1]) # - check the properties are the same def get_properties(types): properties = set() for i in s.mqlreadmulti([{ "id": id, "/type/type/properties": [{ "id": None }] } for id in types]): properties.update( map(lambda x: x["id"], i["/type/type/properties"])) return properties realproperties = sorted(list(get_properties(realtypes))) newproperties = sorted(list(get_properties(newtypes))) def ignore_base(id): return id.rsplit("/", 1)[-1] self.assertEqual(len(realproperties), len(newproperties)) self.assertEqual([ignore_base(prop_id) for prop_id in realproperties], [ignore_base(prop_id) for prop_id in newproperties])