mirror of
https://github.com/LazoCoder/Pokemon-Terminal
synced 2024-11-27 06:10:29 +00:00
65 lines
1.6 KiB
Python
65 lines
1.6 KiB
Python
from argparse import Action
|
|
from pokemonterminal.database import Database, Pokemon
|
|
|
|
|
|
class Filter(Action):
|
|
POKEMON_LIST = Database().get_all()
|
|
filtered_list = [p for p in POKEMON_LIST]
|
|
FILTERS = []
|
|
EXAMPLE_VAL = None
|
|
|
|
def matches(self, pokemon, value):
|
|
raise NotImplementedError
|
|
|
|
def __init_subclass__(cls, **kwargs):
|
|
Filter.FILTERS.append(cls)
|
|
|
|
def __call__(self, parser, namespace, value, option_string=None):
|
|
Filter.filtered_list = [pkmn for pkmn in Filter.filtered_list
|
|
if self.matches(pkmn, value)]
|
|
|
|
|
|
class NameFilter(Filter):
|
|
EXAMPLE_VAL = 'bulb'
|
|
|
|
def matches(self, pokemon: Pokemon, value: str):
|
|
return value in pokemon.get_name()
|
|
|
|
|
|
class RegionFilter(Filter):
|
|
EXAMPLE_VAL = ['kanto']
|
|
|
|
def matches(self, pokemon: Pokemon, value: list):
|
|
return pokemon.get_region() in value
|
|
|
|
|
|
class LightFilter(Filter):
|
|
EXAMPLE_VAL = 0.7
|
|
|
|
def matches(self, pokemon: Pokemon, value: float):
|
|
return pokemon.get_dark_threshold() > value
|
|
|
|
|
|
class DarkFilter(Filter):
|
|
EXAMPLE_VAL = 0.4
|
|
|
|
def matches(self, pokemon: Pokemon, value: float):
|
|
return pokemon.get_dark_threshold() < value
|
|
|
|
|
|
class TypeFilter(Filter):
|
|
EXAMPLE_VAL = ['water']
|
|
|
|
def matches(self, pokemon: Pokemon, value: list):
|
|
return pokemon.get_pkmn_type() in value or \
|
|
pokemon.get_pkmn_type_secondary() in value
|
|
|
|
|
|
class NonExtrasFilter(Filter):
|
|
def matches(self, pokemon: Pokemon, value):
|
|
return not pokemon.is_extra()
|
|
|
|
|
|
class ExtrasFilter(Filter):
|
|
def matches(self, pokemon: Pokemon, value):
|
|
return pokemon.is_extra()
|