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)
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']
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()
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
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()