def create_pokemon(name, hp, special_attack, defense, attack, special_defense, speed): stats = { 'hp': hp, 'special_attack': special_attack, 'defense': defense, 'attack': attack, 'special_defense': special_defense, 'speed': speed } pokemon = Pokemon.get_or_none(name=name) if pokemon is None: pokemon = Pokemon.create(name=name, **stats) return pokemon
def search_pokemons(query, type=None, ability=None, limit=None): query = query.lower() pokemons = Pokemon.select().where(Pokemon.name.contains(query)) if ability is not None: filtered_pokemons = [] for pokemon in pokemons: abilities = [] pokemons_abilities_of_this_pokemon = PokemonAbilities.select( ).where(PokemonAbilities.pokemon == pokemon) # possibility to limit here? for pokemon_ability in pokemons_abilities_of_this_pokemon: ability_name = pokemon_ability.ability.name abilities.append(ability_name) if ability in abilities: filtered_pokemons.append(pokemon) return filtered_pokemons if type is not None: filtered_pokemons = [] for pokemon in pokemons: # types = [t.type.name for t in pokemon.types] types = [] pokemontypes_of_this_pokemon = PokemonTypes.select().where( PokemonTypes.pokemon == pokemon) for pokemontype in pokemontypes_of_this_pokemon: type_name = pokemontype.type.name types.append(type_name) if type in types: filtered_pokemons.append(pokemon) return filtered_pokemons[0:10] return pokemons
def get_moyenne(): pokemons = Pokemon.select() stats = [pokemon.stats for pokemon in pokemons] moyenne = {} for key in stats[0].keys(): moyenne[key] = sum(float(d[key]) for d in stats) / len(stats) return moyenne
def load_pokemon_species_from_api(name): request = requests.get(f'https://pokeapi.co/api/v2/pokemon-species/{name}') data = request.json() species = PokemonSpecies.get_or_none(name=name) if species is None: db_data = { 'name': data['name'], 'order': data['order'], 'gender_rate': data['gender_rate'], 'capture_rate': data['capture_rate'], 'base_happiness': data['base_happiness'], 'is_baby': data['is_baby'] } species = PokemonSpecies.create(**db_data) PokemonSpeciesEggGroups.delete().where( PokemonSpeciesEggGroups.pokemon_species == species).execute() for api_egg_group in data['egg_groups']: egg_group = EggGroup.get_or_none(name=api_egg_group['name']) PokemonSpeciesEggGroups.create(pokemon_species=species, egg_group=egg_group) PokemonSpeciesVariety.delete().where( PokemonSpeciesVariety.pokemon_species == species).execute() for variety in data['varieties']: pokemon = Pokemon.get_or_none(name=variety['pokemon']['name']) PokemonSpeciesVariety.create(pokemon_species=species, is_default=variety['is_default'], pokemon=pokemon) return species
def get_pokemons_by_hp(min_hp): results = [] pokemons = Pokemon.select() for pokemon in pokemons: if pokemon.hp >= min_hp: results.append(pokemon) return results
def get_pokemons_from_egg_group(egg_group_id): egg_group = EggGroup.get_by_id(egg_group_id) pokemons = Pokemon.select() \ .join(PokemonSpeciesVariety) \ .join(PokemonSpecies) \ .join(PokemonSpeciesEggGroups) \ .where(PokemonSpeciesEggGroups.egg_group == egg_group) return pokemons
def create_pokemon(name, hp, special_attack, defense, attack, special_defense, speed): stats = {'hp': hp, 'special_attack': special_attack, 'defense': defense, 'attack': attack, 'special_defense': special_defense, 'speed': speed} try: pokemon = get_pokemon_by_name(name) update_model_from_dict(pokemon, stats) pokemon.save() except PokemonNotFoundError: pokemon = Pokemon.create(name=name, **stats) return pokemon
def search_pokemons(query=None, type=None, limit=100): pokemons = Pokemon.select() if query is not None: query = query.lower() pokemons = Pokemon.select().where(Pokemon.name.contains(query)) if type is not None and (len(type) > 0): filtered_pokemons = [] for pokemon in pokemons: # types = [t.type.name for t in pokemon.types] types = [] pokemontypes_de_ce_pokemon = PokemonTypes.select().where( PokemonTypes.pokemon == pokemon) for pokemontype in pokemontypes_de_ce_pokemon: type_name = pokemontype.type.name types.append(type_name) if type in types: filtered_pokemons.append(pokemon) return filtered_pokemons[:limit] if len( filtered_pokemons) > limit else filtered_pokemons return pokemons[:limit] if len(pokemons) > limit else pokemons
def load_pokemon_from_api(name): request = requests.get(f'https://pokeapi.co/api/v2/pokemon/{name}') pokemon_data = request.json() stats = {} for stat in pokemon_data['stats']: stat_name = stat['stat']['name'].replace('-', '_') stat_value = int(stat['base_stat']) stats[stat_name] = stat_value sprite_front = pokemon_data['sprites']['front_default'] sprite_back = pokemon_data['sprites']['back_default'] pokemon = Pokemon.get_or_none(name=name) data = {'sprite_front': sprite_front, 'sprite_back': sprite_back, **stats} if pokemon is None: pokemon = Pokemon.create(name=name, **data) else: update_model_from_dict(pokemon, data) pokemon.save() return pokemon
def search_pokemons(query, type): query = query.lower() pokemons = Pokemon.select().where(Pokemon.name.contains(query)).limit(20) if type is not None: filtered_pokemons = [] for pokemon in pokemons: types = [t.type.name for t in pokemon.types] if type in types: filtered_pokemons.append(pokemon) return filtered_pokemons return pokemons
def load_pokemon_from_api(name): request = requests.get(f"https://pokeapi.co/api/v2/pokemon/{name}") pokemon_data = request.json() stats = {} for stat in pokemon_data["stats"]: stat_name = stat["stat"]["name"].replace("-", "_") stat_value = int(stat["base_stat"]) stats[stat_name] = stat_value sprite_front = pokemon_data["sprites"]["front_default"] sprite_back = pokemon_data["sprites"]["back_default"] pokemon = Pokemon.get_or_none(name=name) data = {"sprite_front": sprite_front, "sprite_back": sprite_back, **stats} if pokemon is None: pokemon = Pokemon.create(name=name, **data) else: update_model_from_dict(pokemon, data) pokemon.save() return pokemon
def search_pokemons(query, ability_query=None, type_query=None): query = query.lower() if query is 'all': pokemons = Pokemon.select() else: pokemons = Pokemon.select().where(Pokemon.name.contains(query)) if type_query is not None: filtered_pokemons = [] for pokemon in pokemons: # types = [t.type.name for t in pokemon.types] types = [] pokemontypes_de_ce_pokemon = PokemonTypes.select().where(PokemonTypes.pokemon == pokemon) for pokemontype in pokemontypes_de_ce_pokemon: type_name = pokemontype.type.name types.append(type_name) if type_query in types: filtered_pokemons.append(pokemon) pokemons = filtered_pokemons if ability_query is not None: filtered_pokemons = [] for pokemon in pokemons: # types = [t.type.name for t in pokemon.types] abilities = [] pokemonabilities_de_ce_pokemon = PokemonAbilities.select().where(PokemonAbilities.pokemon == pokemon) for pokemonability in pokemonabilities_de_ce_pokemon: ability_name = pokemonability.ability.name abilities.append(ability_name) if ability_query in abilities: filtered_pokemons.append(pokemon) pokemons = filtered_pokemons return pokemons[:10]
def get_stat_average(): query = Pokemon.select(fn.AVG(Pokemon.hp).alias('hp_avg'), fn.AVG(Pokemon.special_attack).alias('special_attack_avg'), fn.AVG(Pokemon.defense).alias('defense_avg'), fn.AVG(Pokemon.attack).alias('attack_avg'), fn.AVG(Pokemon.special_defense).alias('special_defense_avg'), fn.AVG(Pokemon.speed).alias('speed_avg'), ) # fn.AVG(Sample.value).over(partition_by=[Sample.counter]).alias('cavg')) sample = query[0] sample_dict = {'hp_avg': sample.hp_avg, 'special_attack_avg': sample.special_attack_avg, 'defense_avg': sample.defense_avg, 'attack_avg': sample.attack_avg, 'special_defense_avg': sample.special_defense_avg, 'speed_avg': sample.special_defense_avg} return sample_dict
def load_pokemon_form_from_api(name): request = requests.get(f'https://pokeapi.co/api/v2/pokemon-form/{name}') data = request.json() pokemon = Pokemon.get(name=data['pokemon']['name']) form = PokemonForm.get_or_none(name=name) if form is None: db_data = {'name': data['name'], 'order': data['order'], 'form_order': data['form_order'], 'is_default': data['is_default'], 'is_battle_only': data['is_battle_only'], 'is_mega': data['is_mega'], 'form_name': data['form_name'], 'pokemon': pokemon} form = PokemonForm.create(**db_data) return form
def create_pokemon(name, hp, special_attack, defense, attack, special_defense, speed): stats = { "hp": hp, "special_attack": special_attack, "defense": defense, "attack": attack, "special_defense": special_defense, "speed": speed, } try: pokemon = get_pokemon_by_name(name) update_model_from_dict(pokemon, stats) pokemon.save() except PokemonNotFoundError: pokemon = Pokemon.create(name=name, **stats) return pokemon
def search_pokemons(query, type): query = query.lower() pokemons = Pokemon.select().where(Pokemon.name.contains(query)).limit(10) if type is not None: filtered_pokemons = [] for pokemon in pokemons: # types = [t.type.name for t in pokemon.types] types = [] pokemontypes_de_ce_pokemon = PokemonTypes.select().where( PokemonTypes.pokemon == pokemon) for pokemontype in pokemontypes_de_ce_pokemon: type_name = pokemontype.type.name types.append(type_name) if type in types: filtered_pokemons.append(pokemon) return filtered_pokemons return pokemons
def get_pokemon_by_name(name): pokemon = Pokemon.get_or_none(name=name) if pokemon is None: raise PokemonNotFoundError(name) return pokemon
def get_pokemon_by_name(name): pokemon = Pokemon.get_or_none(name=name) return pokemon
def get_hp_moy(): avg = Pokemon.select(fn.AVG(Pokemon.hp).alias('avg_hp')) return avg