import csv
import io
import sys
import urllib.request
SOURCE = "https://raw.githubusercontent.com/PokeAPI/pokeapi/master/data/v2/csv"
STAT_IDS = [1, 2, 3, 4, 5, 6]
def fetch(name):
with urllib.request.urlopen(f"{SOURCE}/{name}") as response:
return list(csv.DictReader(io.TextIOWrapper(response, encoding="utf-8")))
def main():
names = {int(row["id"]): row["identifier"] for row in fetch("pokemon.csv")}
stats = {}
for row in fetch("pokemon_stats.csv"):
stats.setdefault(int(row["pokemon_id"]), {})[int(row["stat_id"])] = int(
row["base_stat"]
)
out = sys.stdout
out.write("# Generated by scripts/base-stats.py from PokeAPI's CSV data.\n")
out.write("# name\thp\tatk\tdef\tspa\tspd\tspe\n")
for pokemon_id in sorted(names):
row = stats.get(pokemon_id, {})
if any(stat not in row for stat in STAT_IDS):
sys.exit(f"{names[pokemon_id]} is missing a base stat")
values = "\t".join(str(row[stat]) for stat in STAT_IDS)
out.write(f"{names[pokemon_id]}\t{values}\n")
if __name__ == "__main__":
main()