mirror of
https://github.com/EDCD/EDMarketConnector.git
synced 2026-10-22 17:22:09 +03:00
63 lines
2.4 KiB
Python
63 lines
2.4 KiB
Python
"""Export data for Trade Dangerous."""
|
|
|
|
import pathlib
|
|
from datetime import datetime
|
|
from collections import defaultdict
|
|
from operator import itemgetter
|
|
from platform import system
|
|
|
|
from companion import CAPIData
|
|
from config import applongname, appversion, config
|
|
|
|
# These are specific to Trade Dangerous, so don't move to edmc_data.py
|
|
demandbracketmap = {0: '?',
|
|
1: 'L',
|
|
2: 'M',
|
|
3: 'H', }
|
|
stockbracketmap = {0: '-',
|
|
1: 'L',
|
|
2: 'M',
|
|
3: 'H', }
|
|
|
|
|
|
def export(data: CAPIData) -> None:
|
|
"""Export market data in TD format."""
|
|
data_path = pathlib.Path(config.get_str('outdir'))
|
|
|
|
# parse timestamp once
|
|
ts = datetime.fromisoformat(data['timestamp'].replace('Z', '+00:00'))
|
|
ts_file = ts.strftime('%Y-%m-%dT%H.%M.%S')
|
|
ts_data = ts.strftime('%Y-%m-%d %H:%M:%S')
|
|
|
|
system_name = data['lastSystem']['name'].strip()
|
|
starport_name = data['lastStarport']['name'].strip()
|
|
cmdr_name = data['commander']['name'].strip()
|
|
|
|
data_filename = f"{system_name}.{starport_name}.{ts_file}.prices"
|
|
|
|
with open(data_path / data_filename, 'w', encoding='utf-8', newline='\n') as h:
|
|
h.write('#! trade.py import -\n')
|
|
h.write(f'# Created by {applongname} {appversion()} on {system()} for Cmdr {cmdr_name}.\n')
|
|
h.write('#\n# <item name> <sellCR> <buyCR> <demand> <stock> <timestamp>\n\n')
|
|
h.write(f'@ {system_name}/{starport_name}\n')
|
|
|
|
# group by category
|
|
by_category = defaultdict(list)
|
|
for commodity in data['lastStarport']['commodities']:
|
|
by_category[commodity['categoryname']].append(commodity)
|
|
|
|
for category in sorted(by_category):
|
|
h.write(f' + {category}\n')
|
|
for commodity in sorted(by_category[category], key=itemgetter('name')):
|
|
demand_val = str(int(commodity['demand'])) if commodity['demandBracket'] else ''
|
|
stock_val = str(int(commodity['stock'])) if commodity['stockBracket'] else ''
|
|
|
|
h.write(
|
|
f" {commodity['name']:<23}"
|
|
f" {int(commodity['sellPrice']):7d}"
|
|
f" {int(commodity['buyPrice']):7d}"
|
|
f" {demand_val:9}{demandbracketmap[commodity['demandBracket']]:1}"
|
|
f" {stock_val:8}{stockbracketmap[commodity['stockBracket']]:1}"
|
|
f" {ts_data}\n"
|
|
)
|