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))
示例#9
0
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)
示例#10
0
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)
    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")