Kaynağa Gözat

planet_bases: all bases in sectors

raylu 1 ay önce
ebeveyn
işleme
aa517dd2b7
1 değiştirilmiş dosya ile 42 ekleme ve 0 silme
  1. 42 0
      planet_bases.py

+ 42 - 0
planet_bases.py

@@ -0,0 +1,42 @@
+from __future__ import annotations
+
+import concurrent.futures
+import typing
+
+import tap
+
+import cache
+
+class Args(tap.Tap):
+	sector: tuple[str, ...] = ()
+
+def main() -> None:
+	args = Args().parse_args()
+	planets = []
+	if args.sector:
+		all_planets: typing.Sequence[Planet] = cache.get('https://rest.fnar.net/planet/allplanets')
+		for planet in all_planets:
+			if planet['PlanetNaturalId'].startswith(args.sector):
+				planets.append(planet['PlanetName'])
+
+	with concurrent.futures.ThreadPoolExecutor(max_workers=2) as executor:
+		for planet, bases in zip(planets, executor.map(get_bases, planets)):
+			print(planet)
+			for base in bases:
+				if base['OwnerCode'] is None:
+					continue
+				print(f'\t{base["OwnerCode"]}\t{base["OwnerName"]}')
+
+def get_bases(planet: str) -> typing.Sequence[Site]:
+	return cache.get('https://rest.fnar.net/planet/sites/' + planet)
+
+class Planet(typing.TypedDict):
+	PlanetNaturalId: str
+	PlanetName: str
+
+class Site(typing.TypedDict):
+	OwnerName: int
+	OwnerCode: str | None
+
+if __name__ == '__main__':
+	main()