Exemple #1
0
def create_characters():
    with open("../anapioficeandfire/characters.json") as char_file:
        characters = json.load(char_file)

    for d in characters:
        id = d["url"].split("/").pop()
        name = d["name"]
        gender = d["gender"]
        culture = d["culture"]
        born = d["born"]
        died = d["died"]
        father = d["father"]
        mother = d["mother"]

        c = Character.query.get(id)
        if not c:
            c = Character(
                id=id, name=name, gender=gender, culture=culture, born=born,
                died=died, father=father, mother=mother)
        else:
            c.name = name
            c.gender = gender
            c.culture = culture
            c.born = born
            c.died = died
            c.father = father
            c.mother = mother

        create_rel_spouse(c, d["spouse"])
        create_rel_allegiances(c, d["allegiances"])
        create_rel_books(c, d["books"])
        create_rel_povbooks(c, d["povBooks"])

        db.session.add(c)
        print(c)
Exemple #2
0
    def store_character_session(self):
        db_char = Character()

        db_char.name = self.cc.character_dict['name']
        db_char.species = self.cc.character_dict['species']
        db_char.species_size = self.cc.character_dict['species_size']
        db_char.sex = self.cc.character_dict['sex']
        db_char.faction = self.cc.character_dict['faction']
        db_char.alg = self.cc.character_dict['alg']
        pocc = ''.join(self.cc.character_dict['pocc'].keys())
        pocc_instance = self.db.query(PoccDb).filter_by(pocc=pocc).first()
        db_char.pocc = pocc_instance.id
        socc = ''.join(self.cc.character_dict['socc'].keys())
        socc_instance = self.db.query(SoccDb).filter_by(socc=socc).first()
        db_char.socc = socc_instance.id
        db_char.exp_total = self.cc.character_dict['exp_total']
        db_char.exp_remaining = self.cc.character_dict['exp_remaining']
        db_char.natural_hp = self.cc.character_dict['natural_hp']
        db_char.hp = self.cc.character_dict['hp']
        db_char.soak = self.cc.character_dict['soak']
        db_char.stuffing = self.cc.character_dict['stuffing']
        db_char.sanity = self.cc.character_dict['sanity']
        db_char.str = self.cc.character_dict['str']
        db_char.int = self.cc.character_dict['int']
        db_char.dex = self.cc.character_dict['dex']
        db_char.con = self.cc.character_dict['con']
        db_char.wis = self.cc.character_dict['wis']
        db_char.cha = self.cc.character_dict['cha']
        db_char.code = 1
        self.db.add(db_char)
        self.db.commit()
        char_id = db_char.id
        self.store_character_skills_session(char_id=char_id)
        self.store_merits_flaws(char_id=char_id)
        return char_id, self.cc.character_dict['name']
Exemple #3
0
def insert_chars_from_guild(realm, guild_name, chars_to_scan):
    data = load_json_from_url(GUILD_API_URL.format(region=realm.region, realm=realm.name, guild_name=guild_name))

    # sometimes api returns error for a valid guild name
    try:
        members = data["members"]
    except KeyError:
        logging.exception("No data return for guild name: %s, realm: %s" % (guild_name, realm.name))
        return

    for member in members:
        name = member["character"]["name"]

        # sometimes there is a character without realm. Possibly because it was deleted/transferred/renamed recently
        realm_name = member["character"].get("realm")
        if realm_name is None:
            continue

        realm = get_realm(realm.region, realm.name)
        char = Character()
        char.name = name
        char.realm = realm
        char.retrieve_guild = False
        if not session.query(Character).filter(Character.name == char.name,
                                               Character.realm == char.realm).first() and char not in session:
            session.add(char)
            chars_to_scan.append(char)
    session.commit()
Exemple #4
0
def characters(id=None):
    if request.method == 'GET':
        if id is not None:
            character = Character.query.get(id)    
            if not character:
                return jsonify({"fail": "Character not found"}), 404
            return jsonify({
                "success": "Character found",
                "character": character.serialize()
            }), 200
        else:
            characters = Character.query.all()
            characters = list(map(lambda character: character.serialize(), characters))
            return jsonify({
                "total": len(characters),
                "results": characters
            }), 200
    if request.method == 'POST':
        name = request.json.get('name')
        gender = request.json.get('gender')
        hair_color = request.json.get('hair_color')
        eye_color = request.json.get('eye_color')
        height = request.json.get('height')
        skin_color = request.json.get('skin_color')
        birth_year = request.json.get('birth_year')


        character = Character()
        character.name = name
        character.gender = gender
        character.hair_color = hair_color
        character.eye_color = eye_color
        character.height = height
        character.skin_color = skin_color
        character.birth_year = birth_year
        character.save()

        return jsonify({
            "success": "character created!",
            "character": character.serialize()
        }), 201

    if request.method == 'PUT':
        pass
    if request.method == 'DELETE':
        character = Character.query.get(id)
        if not character: 
            return jsonify({"fail": "character not found"}), 404
        character.delete()
        return jsonify({"success": "character deleted"}), 200
Exemple #5
0
def insert_chars_from_auc(realm):
    """
    Insert all player characters represented in auction house into database
    note: realm names in auction house dump are always localised, with spaces removed
    """
    auc_data = load_auction_data(realm)
    region = realm.region
    unique_auc_chars = set((lot["owner"], lot["ownerRealm"]) for lot in auc_data["auctions"]["auctions"])
    print("Unique chars currently on %s auction house: %d" % (realm.name, len(unique_auc_chars)))
    for name, realm_name_localised in unique_auc_chars:
        realm = get_realm(region, realm_name_localised)
        char = Character()
        char.name = name
        char.realm = realm
        char.retrieve_guild = True
        if not session.query(Character).filter(Character.name == char.name,
                                               Character.realm == char.realm).first():
            session.add(char)
    session.commit()