コード例 #1
0
ファイル: routes.py プロジェクト: ncdg-misaki/unigames_webapp
def tag_create():
    form = createTagForm()
    if form.validate_on_submit():
        tag_exists = Tag.search_for_by_name(db_manager.mongo, form.name.data)
        if tag_exists is None:
            new_tag = Tag(form.name.data, [], [])
            new_tag.write_to_db(db_manager.mongo)
            return 'tag created'
        else:
            return 'the tag already exists'
    return render_template('admin-pages/lib-man/tag-man/tag-create.html',
                           form=form)
コード例 #2
0
    def test(self):
        #create a book tag
        book_tag = Tag.search_for_by_name(self.mongo, "Book")
        if book_tag is None:
            book_tag = Tag("Book", [], [])
            book_tag.write_to_db(self.mongo)

        #create a multiplayer tag
        multiplayer_tag = Tag.search_for_by_name(self.mongo, "Multiplayer")
        if multiplayer_tag is None:
            multiplayer_tag = Tag("Multiplayer", [], [])
            multiplayer_tag.write_to_db(self.mongo)

        #create a player number tag
        players_tag = Tag.search_for_by_name(self.mongo, "Players: {}")
        if players_tag is None:
            players_tag = Tag("Players: {}",
                              [TagParameter.new_integer_range(0, 2, None)],
                              [TagImplication(multiplayer_tag.id, [])])
            players_tag.write_to_db(self.mongo)

        #create a damaged tag
        damaged_tag = Tag.search_for_by_name(self.mongo, "Damaged")
        if damaged_tag is None:
            damaged_tag = Tag("Damaged", [], [])
            damaged_tag.write_to_db(self.mongo)

        #create an added by tag
        added_by_tag = Tag.search_for_by_name(self.mongo, "Added By: {}")
        if added_by_tag is None:
            added_by_tag = Tag("Added By: {}", [TagParameter.new_string(0)],
                               [])
            added_by_tag.write_to_db(self.mongo)

        #create a borrowed by tag
        borrowed_by_tag = Tag.search_for_by_name(self.mongo, "Borrowed By: {}")
        if borrowed_by_tag is None:
            borrowed_by_tag = Tag("Borrowed By: {}",
                                  [TagParameter.new_string(0)], [])
            borrowed_by_tag.write_to_db(self.mongo)

        #create a None tag (all root tags point to this tag for easier management)
        root_tag = Tag.search_for_by_name(self.mongo, "None")
        if root_tag is None:
            root_tag = Tag("None", [], [])
            root_tag.write_to_db(self.mongo)

        #create an attribute for name
        item_name_attrib = AttributeOption.search_for_by_name(
            self.mongo, "name")
        if item_name_attrib is None:
            item_name_attrib = AttributeOption("name",
                                               AttributeTypes.SingleLineString)
            item_name_attrib.write_to_db(self.mongo)

        #create an attribute for author
        item_author_attrib = AttributeOption.search_for_by_name(
            self.mongo, "author")
        if item_author_attrib is None:
            item_author_attrib = AttributeOption(
                "author", AttributeTypes.SingleLineString)
            item_author_attrib.write_to_db(self.mongo)

        #create an attribute for description
        item_description_attrib = AttributeOption.search_for_by_name(
            self.mongo, "description")
        if item_description_attrib is None:
            item_description_attrib = AttributeOption(
                "description", AttributeTypes.MultiLineString)
            item_description_attrib.write_to_db(self.mongo)

        #search for item by its name attribute
        bob_book_item = Item.search_for_by_attribute(self.mongo,
                                                     item_name_attrib,
                                                     "Bob's Grand Adventure")
        #create a new item if no search result returned
        if not bob_book_item:
            bob_book_item = Item(
                {
                    "name": "Bob's Grand Adventure",
                    "author": "Mingchuan Tian"
                }, [
                    TagReference(book_tag.id, []),
                    TagReference(players_tag.id, [
                        TagParameterImpl.new_integer_range(
                            players_tag.parameters[0], 3, 5)
                    ])
                ])
            bob_book_item.write_to_db(self.mongo)
        else:
            bob_book_item = bob_book_item[0]

        #recalculates all implied tags for the item
        bob_book_item.recalculate_implied_tags(self.mongo)

        print("Multiplayer items: " +
              str(Item.search_for_by_tag_id(self.mongo, multiplayer_tag.id)))

        #search for the uuid attribute
        instance_uuid_attrib = AttributeOption.search_for_by_name(
            self.mongo, "uuid")
        #if none returned, create a new uuid attribute
        if instance_uuid_attrib is None:
            instance_uuid_attrib = AttributeOption(
                "uuid", AttributeTypes.SingleLineString)
            instance_uuid_attrib.write_to_db(self.mongo)

        #search for the Damage Report attribute
        instance_damage_report_attrib = AttributeOption.search_for_by_name(
            self.mongo, "Damage Report")
        #if none returned, create a Damage Report attribute
        if instance_damage_report_attrib is None:
            instance_damage_report_attrib = AttributeOption(
                "Damage Report", AttributeTypes.MultiLineString)
            instance_damage_report_attrib.write_to_db(self.mongo)

        #search for an instance with uuid 1093..
        bob_book_instance_1 = Instance.search_for_by_attribute(
            self.mongo, instance_uuid_attrib, "109358180")
        #if none returned, create a new instance with further info
        if not bob_book_instance_1:
            bob_book_instance_1 = Instance(
                bob_book_item.id, {
                    "uuid":
                    "109358180",
                    "Damage Report":
                    "(4/5/2017): Page 57 has a small section of the top right corner torn off, no text missing, still serviceable"
                }, [TagReference(damaged_tag.id, [])])
            bob_book_instance_1.write_to_db(self.mongo)
        else:
            bob_book_instance_1 = bob_book_instance_1[0]

        #recalculate implied tags for instance
        bob_book_instance_1.recalculate_implied_tags(self.mongo)

        #search for a damaged item
        print("Damaged items /w Instance: " + str(
            Item.search_for_by_tag_id_with_instance(self.mongo,
                                                    damaged_tag.id)))
        print("Damaged items /w Common Instance: " + str(
            Item.search_for_by_tag_id_with_common_instance(
                self.mongo, damaged_tag.id)))

        bob_book_instance_2 = Instance.search_for_by_attribute(
            self.mongo, instance_uuid_attrib, "109358181")
        if not bob_book_instance_2:
            bob_book_instance_2 = Instance(bob_book_item.id,
                                           {"uuid": "109358181"}, [])
            bob_book_instance_2.write_to_db(self.mongo)
        else:
            bob_book_instance_2 = bob_book_instance_2[0]

        bob_book_instance_2.recalculate_implied_tags(self.mongo)

        print("Damaged items /w Instance: " + str(
            Item.search_for_by_tag_id_with_instance(self.mongo,
                                                    damaged_tag.id)))
        print("Damaged items /w Common Instance: " + str(
            Item.search_for_by_tag_id_with_common_instance(
                self.mongo, damaged_tag.id)))

        everyone_role = Role.search_for_by_name(self.mongo, "everyone")
        if everyone_role is None:  # -1 is overridden by everything, an 'everyone' is required for sake of a default
            everyone_role = Role("everyone", -1, {
                Permissions.CanEditItems: False,
                Permissions.CanEditUsers: False
            })
            everyone_role.write_to_db(self.mongo)

        admin_role = Role.search_for_by_name(self.mongo, "admin")
        if admin_role is None:  # 0 overrides everything
            admin_role = Role("admin", 0, {
                Permissions.CanEditItems: True,
                Permissions.CanEditUsers: True
            })
            admin_role.write_to_db(self.mongo)

        added_by_item_relation = RelationOption.search_for_by_name(
            self.mongo, "Added")
        if added_by_item_relation is None:
            added_by_item_relation = RelationOption("Added", [
                TagImplication(added_by_tag.id, [
                    TagParameterImpl.new_needs_override(
                        added_by_tag.parameters[0])
                ])
            ])
            added_by_item_relation.write_to_db(self.mongo)

        borrowing_item_relation = RelationOption.search_for_by_name(
            self.mongo, "Borrowing")
        if borrowing_item_relation is None:
            borrowing_item_relation = RelationOption("Borrowing", [
                TagImplication(borrowed_by_tag.id, [
                    TagParameterImpl.new_needs_override(
                        borrowed_by_tag.parameters[0])
                ])
            ])
            borrowing_item_relation.write_to_db(self.mongo)

        matthew_user = User.search_for_by_display_name(self.mongo, "Matthew")
        if matthew_user is None:
            matthew_user = User("Matthew", [admin_role.id])
            matthew_user.write_to_db(self.mongo)

        matthew_bob_book_added_relation = Relation.search_for_by_item_id(
            self.mongo, bob_book_item.id)
        if not matthew_bob_book_added_relation:
            matthew_bob_book_added_relation = Relation.new_item(
                matthew_user.id, added_by_item_relation.id, bob_book_item.id, [
                    TagImplication(added_by_tag.id, [
                        TagParameterImpl.new_string(added_by_tag.parameters[0],
                                                    "Matthew")
                    ])
                ])

            matthew_bob_book_added_relation.write_to_db(self.mongo)
        else:
            matthew_bob_book_added_relation = matthew_bob_book_added_relation[
                0]

        matthew_bob_borrow_added_relation = Relation.search_for_by_instance_id(
            self.mongo, bob_book_instance_2.id)
        if not matthew_bob_borrow_added_relation:
            matthew_bob_borrow_added_relation = Relation.new_instance(
                matthew_user.id, borrowing_item_relation.id,
                bob_book_instance_2.id, [
                    TagImplication(borrowed_by_tag.id, [
                        TagParameterImpl.new_string(
                            borrowed_by_tag.parameters[0], "Matthew")
                    ])
                ])
            matthew_bob_borrow_added_relation.write_to_db(self.mongo)
        else:
            matthew_bob_borrow_added_relation = matthew_bob_borrow_added_relation[
                0]

        bob_book_instance_1.recalculate_implied_tags(self.mongo)
        bob_book_instance_2.recalculate_implied_tags(self.mongo)
        bob_book_item.recalculate_implied_tags(self.mongo)
コード例 #3
0
    def test(self):
        # create a book tag
        book_tag = Tag.search_for_by_name(self.mongo, "Book")
        if book_tag is None:
            book_tag = Tag("Book", [])
            book_tag.write_to_db(self.mongo)

        # create a multiplayer tag
        multiplayer_tag = Tag.search_for_by_name(self.mongo, "Multiplayer")
        if multiplayer_tag is None:
            multiplayer_tag = Tag("Multiplayer", [])
            multiplayer_tag.write_to_db(self.mongo)

        # create a player 1 tag
        players_tag_1 = Tag.search_for_by_name(self.mongo, "Players: 1")
        if players_tag_1 is None:
            players_tag_1 = Tag("Players: 1", [])
            players_tag_1.write_to_db(self.mongo)

        # create a player 2 tag
        players_tag_2 = Tag.search_for_by_name(self.mongo, "Players: 2")
        if players_tag_2 is None:
            players_tag_2 = Tag("Players: 2", [TagReference(multiplayer_tag)])
            players_tag_2.write_to_db(self.mongo)

        # create a player 3 tag
        players_tag_3 = Tag.search_for_by_name(self.mongo, "Players: 3")
        if players_tag_3 is None:
            players_tag_3 = Tag("Players: 3", [TagReference(multiplayer_tag)])
            players_tag_3.write_to_db(self.mongo)

        # create a player 4 tag
        players_tag_4 = Tag.search_for_by_name(self.mongo, "Players: 4")
        if players_tag_4 is None:
            players_tag_4 = Tag("Players: 4", [TagReference(multiplayer_tag)])
            players_tag_4.write_to_db(self.mongo)

        # create a player 5 tag
        players_tag_5 = Tag.search_for_by_name(self.mongo, "Players: 5")
        if players_tag_5 is None:
            players_tag_5 = Tag("Players: 5", [TagReference(multiplayer_tag)])
            players_tag_5.write_to_db(self.mongo)

        # create a player 6 tag
        players_tag_6 = Tag.search_for_by_name(self.mongo, "Players: 6")
        if players_tag_6 is None:
            players_tag_6 = Tag("Players: 6", [TagReference(multiplayer_tag)])
            players_tag_6.write_to_db(self.mongo)

        # create a damaged tag
        damaged_tag = Tag.search_for_by_name(self.mongo, "Damaged")
        if damaged_tag is None:
            damaged_tag = Tag("Damaged", [])
            damaged_tag.write_to_db(self.mongo)

        # create a borrowed out tag
        borrowed_out_tag = Tag.search_for_by_name(self.mongo, "Borrowed Out")
        if borrowed_out_tag is None:
            borrowed_out_tag = Tag("Borrowed Out", [])
            borrowed_out_tag.write_to_db(self.mongo)

        # create a None tag (all root tags point to this tag for easier management)
        root_tag = Tag.search_for_by_name(self.mongo, "None")
        if root_tag is None:
            root_tag = Tag("None", [])
            root_tag.write_to_db(self.mongo)

        # load image from disk, normally one would upload it from the website
        test_image = self.fs.find_one({"filename": "dungeons.jpg"})
        if test_image is None:
            with open("../frontend/games-img/dungeons.jpg", "rb") as f:
                test_image = self.fs.put(f,
                                         filename="dungeons.jpg",
                                         content_type='image/jpg')
        else:
            test_image = test_image._id

        # search for item by its name attribute
        bob_book_item = Item.search_for_by_attribute(self.mongo,
                                                     self.name_attrib,
                                                     "Bob's Grand Adventure")
        # create a new item if no search result returned
        if not bob_book_item:
            bob_book_item = Item([
                SingleLineStringAttribute(self.name_attrib,
                                          "Bob's Grand Adventure"),
                MultiLineStringAttribute(self.description_attrib,
                                         ["No Description"]),
                PictureAttribute(self.main_picture, test_image)
            ], [
                TagReference(book_tag),
                TagReference(players_tag_3),
                TagReference(players_tag_4),
                TagReference(players_tag_5)
            ], [])

            bob_book_item.instances.append(
                Instance([
                    MultiLineStringAttribute(
                        self.description_attrib,
                        ["No Description", "uuid: 109358180"]),
                    MultiLineStringAttribute(self.hidden_description_attrib, [
                        "Damage Report: (4/5/2017): Page 57 has a small section of the top right corner torn off, no text missing, still serviceable"
                    ])
                ], [TagReference(damaged_tag)], True))
            bob_book_item.instances.append(
                Instance([
                    MultiLineStringAttribute(
                        self.description_attrib,
                        ["No Description", "uuid: 109358181"])
                ], []))

            bob_book_item.write_to_db(self.mongo)
        else:
            bob_book_item = bob_book_item[0]

        # search for item by its name attribute
        steve_hidden_book_item = Item.search_for_by_attribute(
            self.mongo, self.name_attrib, "Steve's Grand Adventure")
        # create a new item if no search result returned
        if not steve_hidden_book_item:
            steve_hidden_book_item = Item([
                SingleLineStringAttribute(self.name_attrib,
                                          "Steve's Grand Adventure")
            ], [TagReference(book_tag),
                TagReference(players_tag_4)], [], True)

            steve_hidden_book_item.instances.append(
                Instance([
                    MultiLineStringAttribute(
                        self.description_attrib,
                        ["No Description", "uuid: 109354180"])
                ], []))
            steve_hidden_book_item.instances.append(
                Instance([
                    MultiLineStringAttribute(
                        self.description_attrib,
                        ["No Description", "uuid: 109354181"])
                ], []))

            steve_hidden_book_item.write_to_db(self.mongo)
        else:
            steve_hidden_book_item = steve_hidden_book_item[0]

        # recalculates all implied tags for the item and instances
        bob_book_item.recalculate_implied_tags(self.mongo, True)

        borrowing_item_relation = RelationOption.search_for_by_name(
            self.mongo, "Borrowing")
        if borrowing_item_relation is None:
            borrowing_item_relation = RelationOption(
                "Borrowing", [TagReference(borrowed_out_tag)])
            borrowing_item_relation.write_to_db(self.mongo)

        emptycheck = self.mongo.db.users.count()
        default_user = User.search_for_by_display_name(self.mongo,
                                                       "DefaultAdmin")
        if emptycheck == 0:
            default_user = User("DefaultAdmin", [self.admin_role.id],
                                "*****@*****.**",
                                generate_password_hash("password"), "Test",
                                "LastTest")
            default_user.write_to_db(self.mongo)

        # this code should never be needed normally, this is modeling a human performing this action, if you want to automate this properlly then properlly add a uuid attribute
        inst_0_id = [
            inst for inst in bob_book_item.instances if len([
                a for a in inst.attributes
                if isinstance(a, MultiLineStringAttribute) and len([
                    line
                    for line in a.value if line.find("uuid: 109358180") != -1
                ]) != 0
            ]) != 0
        ][0].id
        inst_1_id = [
            inst for inst in bob_book_item.instances if len([
                a for a in inst.attributes
                if isinstance(a, MultiLineStringAttribute) and len([
                    line
                    for line in a.value if line.find("uuid: 109358181") != -1
                ]) != 0
            ]) != 0
        ][0].id

        matthew_bob_borrow_relation = Relation.search_for_by_instance_id(
            self.mongo, inst_1_id)
        if not matthew_bob_borrow_relation:
            matthew_bob_borrow_relation = Relation.new_instance(
                default_user.id, borrowing_item_relation.id, inst_1_id)
            matthew_bob_borrow_relation.write_to_db(self.mongo)
        else:
            matthew_bob_borrow_relation = matthew_bob_borrow_relation[0]

        bob_book_item.recalculate_implied_tags(self.mongo, True)

        #Page load testing
        '''