def get_args(data: Dict[str, Any], key: str, _id: Any, default=None, type_check=None, _type="pokmon") -> Any: value = None if default is not None: value = data[key] if key in data else None if default == "NONE" else default else: if key not in data: raise err.PokemonParseError("No {} value for a {} ({}) !".format(key, _type, _id)) value = data[key] if type_check: if value and not isinstance(value, type_check): raise err.PokemonParseError( "Invalid var type for {} need be {} for {} ({})".format(key, type_check, _type, _id)) return value
def __init__(self, id_: int, data: Dict): self.id_: int = id_ self.parent: int = utils.get_args(data, "parent", id_, default=0, type_check=int) if not (0 <= self.parent <= NB_POKEMON) or (self.parent == id_ and id_ != 0): raise err.PokemonParseError( "Pokemon ({}) have invalid parent !".format(id_)) self.types: List['pok_t.Type'] = [ pok_t.TYPES[t] for t in utils.get_args(data, "type", id_) ] self.xp_points: int = utils.get_args(data, "xp_point", id_, type_check=int) self.color: str = utils.get_args(data, "color", id_, type_check=str) self.evolution: List[Dict[str, Any]] = utils.get_args(data, "evolution", id_, default=[]) self.female_rate: float = utils.get_args(data, "female_rate", id_) # self.display: displayer.Displayer = displayer.parse(utils.get_args(data, "display", id_), # "pokemon/" + to_3_digit(id_)) # self.back_display: displayer.Displayer = displayer.parse(utils.get_args(data, "back_display", id_), # "pokemon/" + to_3_digit(id_)) self.have_female_image = os.path.isfile( f'assets/textures/pokemon/female/{self.id_}.png') self.curve_name: str = utils.get_args(data, "curve", id_, type_check=str) self.curve: Callable[[int], float] = CURVE[self.curve_name] self.base_stats: Dict[str, int] = utils.get_args(data, "base_stats", id_) self.ability: Dict[str, int] = utils.get_args(data, "ability", id_, default={}) self.catch_rate: float = utils.get_args(data, "catch_rate", id_) self.size = utils.get_args(data, "size", id_, default=0) self.weight = utils.get_args(data, "weight", id_, default=0)