| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- from __future__ import annotations
- import collections
- import json
- import sys
- import typing
- import cache
- import company
- import integration
- import planet_bases
- def main() -> None:
- cx, ticker = sys.argv[1:]
- (expertise,) = iter_expertise(ticker)
- with open('www/closest.json') as f:
- planet_ids = {planet_id for planet_id, closest_cx in json.load(f).items() if closest_cx == cx}
- planets = []
- print(len(planets), expertise, 'planets near', cx)
- for planet, cogc in company.iter_planet_cogc():
- if planet['PlanetId'] in planet_ids and cogc == expertise:
- planets.append(planet['PlanetName'])
- coid_code: dict[str, str] = {}
- coid_bases = collections.defaultdict(list)
- for planet in planets:
- print('\t' + planet)
- bases = planet_bases.get_bases(planet)
- for base in bases:
- if (code := base['OwnerCode']) is None:
- continue
- coid_code[base['OwnerId']] = code
- coid_bases[base['OwnerId']].append(planet)
- coid_users: dict[str, str] = {company_id: d['Username']
- for company_id, d in cache.get('https://pmmg-products.github.io/reports/data/knownCompanies.json', expiry=cache.ONE_DAY).items()}
- for company_id, co_production in integration.pmmg_monthly_report().items():
- if (mat_production := co_production.get(ticker)) is None:
- continue
- if bases := coid_bases.get(company_id):
- code = coid_code[company_id]
- username = coid_users[company_id]
- print(f'{code}\t{username}')
- print(f'{mat_production["amount"]:10.1f}', ', '.join(bases))
- def iter_expertise(ticker: str) -> typing.Iterator[str]:
- buildings: typing.Sequence[company.Building] = cache.get('https://rest.fnar.net/building/allbuildings', expiry=cache.ONE_DAY)
- for building in buildings:
- for recipe in building['Recipes']:
- for output in recipe['Outputs']:
- if output['CommodityTicker'] == ticker:
- print(ticker, 'requires', building['Expertise'])
- yield building['Expertise']
- if __name__ == '__main__':
- main()
|