from __future__ import annotations import sys import typing import cache from config import config def main() -> None: planet = sys.argv[1] print('getting prices...') prices = get_prices() print('\r') infras: typing.Sequence[Infrastructure] = cache.get( 'https://api.fnar.net/infrastructure?include_contributions=true&infrastructure=' + planet) for infra in infras: print(infra['Type']) for contribution in infra['Contributions']: if contribution['ContributerName'] != config.username: continue print('\t' + contribution['Time']) for mat in contribution['Materials']: price = prices[mat['Ticker']] print(f'\t\t{mat["Ticker"]} {mat["Amount"]} @ {price} = {mat["Amount"] * price}') def get_prices() -> typing.Mapping[str, float]: cxos_users: typing.Mapping = cache.get('https://api.fnar.net/cx/cxos/?username=' + config.username, headers={'Authorization': 'FIOAPIKey ' + config.fio_api_key}) (cxos_user,) = cxos_users['UserNameToData'].values() cxos: list[CXOSOrder] = cxos_user['Data'] cxos.reverse() prices: dict[str, float] = {} for order in cxos: if order['OrderType'] == 'BUYING' and order['Status'] == 'FILLED': prices[order['MaterialTicker']] = order['LimitAmount'] return prices class Infrastructure(typing.TypedDict): Type: str Contributions: typing.Sequence[Contribution] class Contribution(typing.TypedDict): ContributerName: str Time: str Materials: typing.Sequence[Material] class Material(typing.TypedDict): Ticker: str Amount: int class CXOSOrder(typing.TypedDict): OrderType: typing.Literal['BUYING', 'SELLING'] Status: typing.Literal['PLACED', 'PARTIALLY_FILLED', 'FILLED'] MaterialTicker: str LimitAmount: float if __name__ == '__main__': main()