Source code for pokemaster2.db.tables

"""The pokedex database models."""
from typing import List

import peewee

database = peewee.SqliteDatabase(None)


[docs]class BaseModel(peewee.Model): """BaseModel for all pokdex Models.""" class Meta: """All BaseModel uses database.""" database = database
[docs]class Pokemon(BaseModel): """A Pokémon. The core to this whole mess. This table defines "Pokémon" the same way the games do: a form with different types, moves, or other game-changing properties counts as a different Pokémon. For example, this table contains four rows for Deoxys, but only one for Unown. Non-default forms have IDs above 10000. IDs below 10000 match the species_id column, for convenience. """ id = peewee.IntegerField(primary_key=True) # noqa: A003 identifier = peewee.CharField( max_length=79, help_text="An identifier, including form iff this row corresponds to a single, named form", ) species_id = peewee.IntegerField( help_text="ID of the species this Pokémon belongs to", ) height = peewee.IntegerField( help_text="The height of the Pokémon, in tenths of a meter (decimeters)", ) weight = peewee.IntegerField( help_text="The weight of the Pokémon, in tenths of a kilogram (hectograms)", ) base_experience = peewee.IntegerField( help_text="The base EXP gained when defeating this Pokémon", ) order = peewee.IntegerField( index=True, help_text=( "Order for sorting. Almost national order, " "except families are grouped together." ), ) is_default = peewee.BooleanField( index=True, help_text="Set for exactly one pokemon used as the default for each species.", )
[docs]class PokemonSpecies(BaseModel): """A Pokémon species: the standard 1–151. Or 649. Whatever. ID matches the National Pokédex number of the species. """ id = peewee.IntegerField(primary_key=True) # noqa: A003 identifier = peewee.CharField( max_length=79, help_text="An identifier", ) # generation_id = peewee.ForeignKeyField( # "Generation", # backref="pokemon_species", # help_text="ID of the generation this species first appeared in", # ) evolves_from_species_id = peewee.ForeignKeyField( "self", backref="evolves_to", null=True, help_text="The species from which this one evolves", ) # evolution_chain_id = peewee.ForeignKeyField( # "EvolutionChain", # backref="pokemon_species", # help_text="ID of the species' evolution chain (a.k.a. family)", # ) # color_id = peewee.ForeignKeyField( # "PokemonColor", # backref="pokemon_species", # help_text="ID of this Pokémon's Pokédex color, as used for a gimmick search function in the games.", # ) # shape_id = peewee.ForeignKeyField( # "PokemonShape", # backref="pokemon_species", # help_text="ID of this Pokémon's body shape, as used for a gimmick search function in the games.", # ) # habitat_id = peewee.ForeignKeyField( # "PokemonHabitat", # backref="pokemon_species", # null=True, # help_text="ID of this Pokémon's habitat, as used for a gimmick search function in the games.", # ) gender_rate = peewee.IntegerField( help_text="The chance of this Pokémon being female, in eighths; or -1 for genderless", ) capture_rate = peewee.IntegerField(help_text="The base capture rate; up to 255") base_happiness = peewee.IntegerField(help_text="The tameness when caught by a normal ball") is_baby = peewee.BooleanField( help_text="True iff the Pokémon is a baby, i.e. a lowest-stage Pokémon that cannot breed but whose evolved form can.", ) hatch_counter = peewee.IntegerField( help_text="Initial hatch counter: one must walk 255 × (hatch_counter + 1) steps before this Pokémon's egg hatches, unless utilizing bonuses like Flame Body's", ) has_gender_differences = peewee.BooleanField( help_text="Set iff the species exhibits enough sexual dimorphism to have separate sets of sprites in Gen IV and beyond.", ) # growth_rate_id = peewee.ForeignKeyField( # "PokemonGrowthRate", # backref="pokemon_species", # help_text="ID of the growth rate for this family", # ) forms_switchable = peewee.BooleanField( help_text="True iff a particular individual of this species can switch between its different forms.", ) order = peewee.IntegerField( index=True, help_text="The order in which species should be sorted. Based on National Dex order, except families are grouped together and sorted by stage.", ) conquest_order = peewee.IntegerField( null=True, index=True, help_text="The order in which species should be sorted for Pokémon Conquest-related tables. Matches gallery order.", )
Pokemon.species = peewee.ForeignKeyField(PokemonSpecies)
[docs]def get_pokemon(identifier: str) -> List[Pokemon]: """Find a single `Pokemon` instance.""" pokemon_set = ( Pokemon.select(Pokemon, PokemonSpecies) .join(PokemonSpecies, on=(Pokemon.species_id == PokemonSpecies.id)) .where(Pokemon.identifier == identifier) ) return pokemon_set
MODELS = [Pokemon, PokemonSpecies]