config.py 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. from __future__ import annotations
  2. import dataclasses
  3. import tomllib
  4. import typing
  5. @dataclasses.dataclass(eq=False, frozen=True, slots=True)
  6. class Config:
  7. username: str
  8. company: str
  9. fio_rest_key: str
  10. fio_api_key: str
  11. punoted_api_key: str
  12. junk: JunkConfig
  13. market: MarketConfig
  14. supply: dict[str, SupplyConfig]
  15. def __init__(self) -> None:
  16. with open('config.toml', 'rb') as f:
  17. config = tomllib.load(f)
  18. for k, v in config.items():
  19. match k:
  20. case 'junk':
  21. v = JunkConfig(**v)
  22. case 'market':
  23. v = MarketConfig(**v)
  24. case 'supply':
  25. v = {planet_name: SupplyConfig(**planet_config) for planet_name, planet_config in v.items()}
  26. object.__setattr__(self, k, v)
  27. def supply_config(self, planet_name: str) -> SupplyConfig:
  28. if (planet_config := self.supply.get(planet_name.lower())) is not None:
  29. return planet_config
  30. else:
  31. return SupplyConfig()
  32. @dataclasses.dataclass(eq=False, frozen=True, slots=True)
  33. class JunkConfig:
  34. ignore_materials: typing.Sequence[str] = dataclasses.field(default_factory=list)
  35. @dataclasses.dataclass(eq=False, frozen=True, slots=True)
  36. class MarketConfig:
  37. mm_items: typing.Mapping[str, int]
  38. @dataclasses.dataclass(eq=False, frozen=True, slots=True)
  39. class SupplyConfig:
  40. ignore_materials: typing.Sequence[str] = dataclasses.field(default_factory=list)
  41. config = Config()