def test_reciprocating_reciprocated(self): """ You can't reciprocate an already reciprocated property""" create_type(s, "Master", "master", domain_id) create_type(s, "Servant", "servant", domain_id) create_property(s, "Servants", "servants", domain_id + "/master", domain_id + "/servant", unique=False) reciprocate_property(s, "Masters", "masters", domain_id + "/master/servants", unique=False) self.assertRaises(MetawebError, lambda: reciprocate_property(s, "Buddies", "buddies", domain_id + "/master/servants", unique=False))
def test_property_moving(self): person = create_type(s, "Person", "person", domain_id) date_of_birth = create_property(s, "DB", "db", domain_id + "/person", "/type/datetime", False, tip="Date of Birth of a Person") goblin = create_type(s, "Goblin", "goblin", domain_id) self.assertEqual(s.mqlread({"id": domain_id + "/goblin/db"}), None) copy_property(s, domain_id + "/person/db", domain_id + "/goblin/db") self.assertNotEqual(s.mqlread({"id": domain_id + "/goblin/db"}), None) self.assertEqual( s.mqlread({ "id": domain_id + "/goblin/db", "/freebase/documented_object/tip": None })["/freebase/documented_object/tip"], "Date of Birth of a Person") # But we don't actually want that to be the tip, we should be able to change it dragon = create_type(s, "Dragon", "dragon", domain_id) copy_property( s, domain_id + "/person/db", domain_id + "/dragon/db", **{ "/freebase/documented_object/tip": "Date of Birth of a Dragon!" }) self.assertEqual( s.mqlread({ "id": domain_id + "/dragon/db", "/freebase/documented_object/tip": None })["/freebase/documented_object/tip"], "Date of Birth of a Dragon!") # let's test with a slightly move obtuse property, unit! create_property(s, "Magnetic Moment", "mmoment", domain_id + "/person", "/type/float", True, extra={ "unit": { "connect": "insert", "id": "/en/nuclear_magneton" } }) copy_property(s, domain_id + "/person/mmoment", domain_id + "/goblin/mmoment") self.assertEqual( s.mqlread({ "id": domain_id + "/goblin/mmoment", "/type/property/unit": { "id": None } })["/type/property/unit"]["id"], "/en/nuclear_magneton")
def test_create_over_created(self): """ No creating a property on top of an already created one...""" create_type(s, "Rapper", "rapper", domain_id) create_property(s, "Styles", "styles", domain_id+"/rapper", "/music/genre") # now we mistakenly create the same prop # it should just exit as if it finished successfully... but, it shouldn't actually do anything create_property(s, "Styles", "styles", domain_id+"/rapper", "/music/genre") # we also mistakenly create the same type, again create_type(s, "Rapper", "rapper", domain_id)
def test_create_over_created(self): """ No creating a property on top of an already created one...""" create_type(s, "Rapper", "rapper", domain_id) create_property(s, "Styles", "styles", domain_id + "/rapper", "/music/genre") # now we mistakenly create the same prop # it should just exit as if it finished successfully... but, it shouldn't actually do anything create_property(s, "Styles", "styles", domain_id + "/rapper", "/music/genre") # we also mistakenly create the same type, again create_type(s, "Rapper", "rapper", domain_id)
def test_rename_property(self): grendel = create_type(s, "Grendel", "grendel", domain_id) # a mistake date_of_bbirth = create_property(s, "Date of Bbirth", "dbb", domain_id + "/grendel", "/type/datetime", False, tip="Date of Bbirth of Grendel") self.assertEqual(s.mqlread({"id" : domain_id + "/grendel/dbb", "name" : None})["name"], "Date of Bbirth") # let's fix it move_property(s, domain_id + "/grendel/dbb", domain_id + "/grendel/db", name="Date of Birth", **{"/freebase/documented_object/tip":"Date of Birth of Grendel"}) self.assertEqual(s.mqlread({"id" : domain_id + "/grendel/db", "name" : None})["name"], "Date of Birth") # sometimes freebase still thinks /grendel/dbb exists... i hate id -> guid caches. self.assertEqual(s.mqlread({"id" : domain_id + "/grendel/dbb", "key" : [{"value" : None}]}), None)
def test_property_moving(self): person = create_type(s, "Person", "person", domain_id) date_of_birth = create_property(s, "DB", "db", domain_id + "/person", "/type/datetime", False, tip="Date of Birth of a Person") goblin = create_type(s, "Goblin", "goblin", domain_id) self.assertEqual(s.mqlread({"id" : domain_id + "/goblin/db"}), None) copy_property(s, domain_id + "/person/db", domain_id + "/goblin/db") self.assertNotEqual(s.mqlread({"id" : domain_id + "/goblin/db"}), None) self.assertEqual(s.mqlread({"id" : domain_id + "/goblin/db", "/freebase/documented_object/tip" : None})["/freebase/documented_object/tip"], "Date of Birth of a Person") # But we don't actually want that to be the tip, we should be able to change it dragon = create_type(s, "Dragon", "dragon", domain_id) copy_property(s, domain_id + "/person/db", domain_id + "/dragon/db", **{"/freebase/documented_object/tip": "Date of Birth of a Dragon!"}) self.assertEqual(s.mqlread({"id" : domain_id + "/dragon/db", "/freebase/documented_object/tip" : None})["/freebase/documented_object/tip"], "Date of Birth of a Dragon!") # let's test with a slightly move obtuse property, unit! create_property(s, "Magnetic Moment", "mmoment", domain_id + "/person", "/type/float", True, extra={"unit" : {"connect" : "insert", "id" : "/en/nuclear_magneton"}}) copy_property(s, domain_id + "/person/mmoment", domain_id + "/goblin/mmoment") self.assertEqual(s.mqlread({"id" : domain_id + "/goblin/mmoment", "/type/property/unit" : {"id" : None}})["/type/property/unit"]["id"], "/en/nuclear_magneton")
def test_recreate_contractbridge_base(self): base = domain_id create_type(s, "Bridge Player", "bridge_player", base, tip="A bridge player", included=["/people/person", "/common/topic"]) create_type(s, "Bridge Tournament", "bridge_tournament", base, tip="A bridge tournament", included=["/event/event", "/common/topic"]) create_type(s, "Bridge Tournament Standings", "bridge_tournament_standings", base, cvt=True, tip="Bridge Tournamen Results") player = base + "/bridge_player" tourney = base + "/bridge_tournament" standing = base + "/bridge_tournament_standings" # tournament standings # ideas: create a cvt could be a function, disambig always True, same schema, iono, whatever create_property(s, "Year", "year", standing, "/type/datetime", True, disambig=True, tip="Year") create_property(s, "First Place", "first_place", standing, player, False, disambig=True) create_property(s, "Second Place", "second_place", standing, player, False, disambig=True) create_property(s, "Tournament", "tournament", standing, tourney, True, disambig=True) # tournament reciprocate_property(s, "Standing", "standing", standing + "/tournament", False, disambig=True) create_property(s, "Location", "location", tourney, "/location/citytown", False, disambig=True) # bridge player # standings must be reverses! reciprocate_property(s, "First Place Finish", "first_place_finish", standing + "/first_place", False, False) reciprocate_property(s, "Second Place Finish", "second_place_finish", standing + "/second_place", False, False) #delegator property test delegate_property(s, "/people/person/date_of_birth", player, "Date of Birth", "db")
def test_reciprocating_reciprocated(self): """ You can't reciprocate an already reciprocated property""" create_type(s, "Master", "master", domain_id) create_type(s, "Servant", "servant", domain_id) create_property(s, "Servants", "servants", domain_id + "/master", domain_id + "/servant", unique=False) reciprocate_property(s, "Masters", "masters", domain_id + "/master/servants", unique=False) self.assertRaises( MetawebError, lambda: reciprocate_property(s, "Buddies", "buddies", domain_id + "/master/servants", unique=False))
def cmd_mktype(fb, id, name=''): """create a new type -- EXPERIMENTAL %prog mktype new_id name create a new object with type Type at the given namespace location. this doesn't create any type hints. if present, name gives the display name of the new property For more options when creating a type, use the python library """ id = fb.absid(id) ns, key = dirsplit(id) return create_type(s, name, key, ns, cvt=False, tip=None, included=None, extra=None)
def test_rename_property(self): grendel = create_type(s, "Grendel", "grendel", domain_id) # a mistake date_of_bbirth = create_property(s, "Date of Bbirth", "dbb", domain_id + "/grendel", "/type/datetime", False, tip="Date of Bbirth of Grendel") self.assertEqual( s.mqlread({ "id": domain_id + "/grendel/dbb", "name": None })["name"], "Date of Bbirth") # let's fix it move_property( s, domain_id + "/grendel/dbb", domain_id + "/grendel/db", name="Date of Birth", **{"/freebase/documented_object/tip": "Date of Birth of Grendel"}) self.assertEqual( s.mqlread({ "id": domain_id + "/grendel/db", "name": None })["name"], "Date of Birth") # sometimes freebase still thinks /grendel/dbb exists... i hate id -> guid caches. self.assertEqual( s.mqlread({ "id": domain_id + "/grendel/dbb", "key": [{ "value": None }] }), None)