| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- from __future__ import annotations
- import collections
- import math
- import sys
- import typing
- import cache
- from config import config
- import market
- import supply
- if typing.TYPE_CHECKING:
- import supply
- def main() -> None:
- (ship,) = sys.argv[1:]
- ship_inventory = get_ship_storage(ship)
- warehouse_inventory = supply.warehouse_inventory()
- raw_prices: typing.Mapping[str, market.RawPrice] = {p['MaterialTicker']: p
- for p in cache.get('https://refined-prun.github.io/refined-prices/all.json') if p['ExchangeCode'] == 'IC1'}
- consumption = get_consumption()
- for item in ship_inventory:
- ticker = item['MaterialTicker']
- print(f'{item["MaterialAmount"]:5} {ticker:3}:', end=' ')
- have = item['MaterialAmount'] + warehouse_inventory.get(ticker, 0)
- need = math.ceil(consumption.get(ticker, 0) * 14)
- sell = min(have - need, item['MaterialAmount'])
- keep = item['MaterialAmount'] - sell
- if sell > 0:
- print('sell', sell, end=' ')
- if keep > 0:
- print('keep', keep, end= ' ')
- print()
- def get_ship_storage(ship_name: str) -> typing.Sequence[market.StorageItem]:
- ship_name = ship_name.casefold()
- stores: typing.Sequence[market.Storage] = cache.get('https://rest.fnar.net/storage/' + config.username,
- headers={'Authorization': config.fio_api_key})
- for store in stores:
- if store['Type'] == 'SHIP_STORE' and store['Name'].casefold() == ship_name:
- return store['StorageItems']
- raise Exception(f'ship storage {ship_name} not found')
- def get_consumption() -> typing.Mapping[str, float]:
- '''get consumption on planets that consume each mat'''
- planets = [supply.Planet(fio_burn) for fio_burn in cache.get('https://rest.fnar.net/fioweb/burn/user/' + config.username,
- headers={'Authorization': config.fio_api_key})]
- consumption: dict[str, float] = collections.defaultdict(float)
- for planet in planets:
- supply_config = config.supply_config(planet.name)
- for mat, amount in planet.net_consumption.items():
- if mat not in supply_config.ignore_materials and amount > 0:
- consumption[mat] += amount
- return consumption
- if __name__ == '__main__':
- main()
|