def load_pokemon_abilities_from_api(name): request = requests.get(f'https://pokeapi.co/api/v2/pokemon/{name}') pokemon_data = request.json() pokemon = get_pokemon_by_name(name) PokemonAbilities.delete().where( PokemonAbilities.pokemon == pokemon).execute() abilities = [] for api_ability in pokemon_data['abilities']: ability_name = api_ability['ability']['name'] ability = Ability.get_or_none(name=ability_name) if ability is None: ability = Ability.create(name=ability_name, url=api_ability['ability']['url']) pokemon_ability = PokemonAbilities.create( pokemon=pokemon, ability=ability, is_hidden=api_ability['is_hidden'], slot=api_ability['slot']) abilities.append(pokemon_ability) return abilities
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_pokemons_from_ability(ability_id): pokemons = [] pokemon_abilities = PokemonAbilities.select( PokemonAbilities, Pokemon).join(Pokemon).where(PokemonAbilities.ability == ability_id) for pokemon_ability in pokemon_abilities: pokemons.append(pokemon_ability.pokemon) return pokemons
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_abilities_of_pokemons(pokemon): abilities = PokemonAbilities.select().where( PokemonAbilities.pokemon == pokemon) return abilities