| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- 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()
|