| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- from __future__ import annotations
- import collections
- import concurrent.futures
- import sys
- import typing
- import cache
- import integration
- def main() -> None:
- code = sys.argv[1]
- company: Company = cache.get('https://rest.fnar.net/company/code/' + code)
- cogc_planets: dict[str, list[str]] = collections.defaultdict(list)
- with concurrent.futures.ThreadPoolExecutor(max_workers=4) as executor:
- futures: list[concurrent.futures.Future[Planet]] = [
- executor.submit(cache.get, 'https://rest.fnar.net/planet/' + planet['PlanetNaturalId'])
- for planet in company['Planets']]
- for future in futures:
- planet = future.result()
- cogc = None
- cogcs = planet['COGCPrograms']
- if len(cogcs) > 1:
- cogcs.sort(key=lambda c: c['StartEpochMs'], reverse=True)
- cogc = cogcs[1]['ProgramType']
- if cogc is not None:
- cogc = cogc.removeprefix('ADVERTISING_')
- print(planet['PlanetName'], cogc)
- if cogc is not None:
- cogc_planets[cogc].append(planet['PlanetName'])
- buildings: typing.Sequence[Building] = cache.get('https://rest.fnar.net/building/allbuildings')
- experts: dict[str, str] = {}
- for building in buildings:
- for recipe in building['Recipes']:
- for output in recipe['Outputs']:
- experts[output['CommodityTicker']] = building['Expertise']
- print()
- company_report = integration.pmmg_monthly_report()[company['CompanyId']]
- for mat in company_report.keys():
- expertise = experts.get(mat)
- print(mat, expertise, ', '.join(cogc_planets.get(expertise, []))) # pyright: ignore[reportArgumentType, reportCallIssue]
- class Company(typing.TypedDict):
- CompanyId: str
- Planets: typing.Sequence[CompanyPlanet]
- class CompanyPlanet(typing.TypedDict):
- PlanetNaturalId: str
- class Planet(typing.TypedDict):
- PlanetId: str
- PlanetName: str
- COGCPrograms: list[PlanetCOGC]
- class PlanetCOGC(typing.TypedDict):
- ProgramType: str | None
- StartEpochMs: float
- class Building(typing.TypedDict):
- Recipes: typing.Sequence[BuildingRecipe]
- Expertise: str
- class BuildingRecipe(typing.TypedDict):
- Outputs: typing.Sequence[BuildingMat]
- class BuildingMat(typing.TypedDict):
- CommodityTicker: str
- Amount: int
- if __name__ == '__main__':
- main()
|