import csv from enum import Enum class Difficulty(Enum): Terrible = -2 Low = -1 Moderate = 0 High = 1 Extreme = 2 @classmethod def from_str(cls, name): name = name.strip().lower() for member in cls: if member.name.lower() == name: return member raise ValueError(f"{name!r} is not a valid {cls.__name__}") def load_csv(name, value_parser=None): if value_parser is None: value_parser = lambda x:x res = dict() # Table by level and Difficulty with open(f"creature_stats/{name}.csv", newline='', encoding='utf8') as file: reader = csv.DictReader(file) for row in reader: level = int(row.pop("Level")) res[level] = {Difficulty.from_str(name): value_parser(val) for name,val in row.items()} return res def parse_range(str_data): try: value = int(str_data) return (value, value) except ValueError: return tuple([int(i) for i in str_data.split("-")[:2]]) class StatsDB: def __init__(self) -> None: self.ac = load_csv("ac", int) self.saves = load_csv("saves", int) self.hp = load_csv("hp", parse_range) stats = StatsDB() # if __name__ == '__main__': # main()