planet_bases.py 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. from __future__ import annotations
  2. import concurrent.futures
  3. import typing
  4. import tap
  5. import cache
  6. class Args(tap.Tap):
  7. sector: tuple[str, ...] = ()
  8. def main() -> None:
  9. args = Args().parse_args()
  10. planets = []
  11. if args.sector:
  12. all_planets: typing.Sequence[Planet] = cache.get('https://rest.fnar.net/planet/allplanets')
  13. for planet in all_planets:
  14. if planet['PlanetNaturalId'].startswith(args.sector):
  15. planets.append(planet['PlanetName'])
  16. with concurrent.futures.ThreadPoolExecutor(max_workers=2) as executor:
  17. for planet, bases in zip(planets, executor.map(get_bases, planets)):
  18. print(planet)
  19. for base in bases:
  20. if base['OwnerCode'] is None:
  21. continue
  22. print(f'\t{base["OwnerCode"]}\t{base["OwnerName"]}')
  23. def get_bases(planet: str) -> typing.Sequence[Site]:
  24. return cache.get('https://rest.fnar.net/planet/sites/' + planet)
  25. class Planet(typing.TypedDict):
  26. PlanetNaturalId: str
  27. PlanetName: str
  28. class Site(typing.TypedDict):
  29. OwnerName: int
  30. OwnerCode: str | None
  31. if __name__ == '__main__':
  32. main()