Files
EDMarketConnector/shipyard.py

41 lines
1.4 KiB
Python

"""Export list of ships as CSV."""
from __future__ import annotations
import csv
from itertools import chain
import companion
from edmc_data import ship_name_map
def export(data: companion.CAPIData, filename: str) -> None:
"""
Write shipyard data in Companion API CSV format.
:param data: The CAPI data.
:param filename: Target CSV filename
"""
if not (system_name := data.get('lastSystem', {}).get('name')):
raise ValueError("Missing 'name' in 'lastSystem'")
if not (starport := data.get('lastStarport')):
raise ValueError("Missing 'lastStarport' in data")
if not (station_name := starport.get('name')):
raise ValueError("Missing 'name' in 'lastStarport'")
if not (ships_info := starport.get('ships')):
raise ValueError("Missing 'ships' in 'lastStarport'")
shipyard_list = ships_info.get('shipyard_list', {}).values()
unavailable_list = ships_info.get('unavailable_list', [])
all_ships = chain(shipyard_list, unavailable_list)
with open(filename, 'w', newline='', encoding='utf-8') as f:
writer = csv.writer(f)
writer.writerow(['System', 'Station', 'Ship', 'FDevID', 'Date'])
for ship in all_ships:
name = ship_name_map.get(ship['name'].lower(), ship['name'])
fdevid = ship['id']
writer.writerow([system_name, station_name, name, fdevid, data['timestamp']])