Exemple #1
0
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
Exemple #2
0
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
Exemple #3
0
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
Exemple #4
0
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
Exemple #5
0
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
Exemple #6
0
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
Exemple #7
0
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
Exemple #8
0
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
Exemple #9
0
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
Exemple #10
0
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
Exemple #11
0
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
Exemple #12
0
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]
Exemple #13
0
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
Exemple #14
0
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
Exemple #15
0
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
Exemple #16
0
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
Exemple #17
0
def get_pokemon_by_name(name):
    pokemon = Pokemon.get_or_none(name=name)
    if pokemon is None:
        raise PokemonNotFoundError(name)
    return pokemon
Exemple #18
0
def get_pokemon_by_name(name):
    pokemon = Pokemon.get_or_none(name=name)
    return pokemon
Exemple #19
0
def get_hp_moy():
    avg = Pokemon.select(fn.AVG(Pokemon.hp).alias('avg_hp'))
    return avg