diff --git a/EDMarketConnector.py b/EDMarketConnector.py index 3bf232f2..5f4efc45 100755 --- a/EDMarketConnector.py +++ b/EDMarketConnector.py @@ -265,9 +265,9 @@ import plug import prefs import stats import td -import util_ships from commodity import COMMODITY_CSV from dashboard import dashboard +from edmc_data import ship_name_map from hotkey import hotkeymgr from l10n import Translations from monitor import monitor @@ -824,7 +824,7 @@ class AppWindow(object): self.dump_capi_data(data) if not monitor.state['ShipType']: # Started game in SRV or fighter - self.ship['text'] = util_ships.ship_map.get(data['ship']['name'].lower(), data['ship']['name']) + self.ship['text'] = ship_name_map.get(data['ship']['name'].lower(), data['ship']['name']) monitor.state['ShipID'] = data['ship']['id'] monitor.state['ShipType'] = data['ship']['name'].lower() @@ -928,7 +928,7 @@ class AppWindow(object): ship_text = monitor.state['ShipName'] else: - ship_text = util_ships.ship_map.get(monitor.state['ShipType'], monitor.state['ShipType']) + ship_text = ship_name_map.get(monitor.state['ShipType'], monitor.state['ShipType']) if not ship_text: ship_text = '' diff --git a/collate.py b/collate.py index 10bb24b6..591f073b 100755 --- a/collate.py +++ b/collate.py @@ -11,9 +11,8 @@ from os.path import isfile from traceback import print_exc import companion -import data import outfitting -import util_ships +from edmc_data import ship_name_map def __make_backup(file_name: str, suffix: str = '.bak') -> None: @@ -108,7 +107,7 @@ def addmodules(data): raise ValueError('id: {} != {}'.format(key, module['id'])) try: - new = outfitting.lookup(module, util_ships.ship_map, True) + new = outfitting.lookup(module, ship_name_map, True) except Exception: print('{}, {}:'.format(module['id'], module['name'])) @@ -166,7 +165,7 @@ def addships(data): for ship in tuple(data_ships.get('shipyard_list', {}).values()) + data_ships.get('unavailable_list'): # sanity check key = int(ship['id']) - new = {'id': key, 'symbol': ship['name'], 'name': util_ships.ship_map.get(ship['name'].lower())} + new = {'id': key, 'symbol': ship['name'], 'name': ship_name_map.get(ship['name'].lower())} if new: old = ships.get(key) if old: diff --git a/commodity.py b/commodity.py index 5ad0830c..a3fd0fc4 100644 --- a/commodity.py +++ b/commodity.py @@ -6,7 +6,7 @@ import hashlib import time from config import config -from data import commodity_bracketmap as bracketmap +from edmc_data import commodity_bracketmap as bracketmap # DEFAULT means semi-colon separation diff --git a/companion.py b/companion.py index c8b3e015..da56a229 100644 --- a/companion.py +++ b/companion.py @@ -27,7 +27,7 @@ from typing import TYPE_CHECKING, Any, Dict, List, Union, cast import requests from config import appname, appversion, config -from data import companion_category_map as category_map +from edmc_data import companion_category_map as category_map from EDMCLogging import get_main_logger from monitor import monitor from protocol import protocolhandler diff --git a/coriolis.py b/coriolis.py index 36a61afe..a8493a9f 100755 --- a/coriolis.py +++ b/coriolis.py @@ -4,20 +4,15 @@ # import csv -import base64 -from collections import OrderedDict -import pickle import json +import pickle import subprocess import sys +from collections import OrderedDict from traceback import print_exc -from config import config import outfitting -import companion -import util_ships -from data import coriolis_ship_map - +from edmc_data import coriolis_ship_map, ship_name_map if __name__ == "__main__": @@ -32,7 +27,7 @@ if __name__ == "__main__": data = json.load(open('coriolis-data/dist/index.json')) # Symbolic name from in-game name - reverse_ship_map = {v: k for k, v in list(util_ships.ship_map.items())} + reverse_ship_map = {v: k for k, v in list(ship_name_map.items())} bulkheads = list(outfitting.armour_map.keys()) @@ -91,7 +86,7 @@ if __name__ == "__main__": reader = csv.DictReader(csvfile, restval='') for row in reader: try: - module = outfitting.lookup({ 'id': row['id'], 'name': row['symbol'] }, util_ships.ship_map) + module = outfitting.lookup({ 'id': row['id'], 'name': row['symbol'] }, ship_name_map) except: print(row['symbol']) print_exc() diff --git a/data.py b/edmc_data.py similarity index 88% rename from data.py rename to edmc_data.py index ef50c9a9..1d51d185 100644 --- a/data.py +++ b/edmc_data.py @@ -424,3 +424,50 @@ GuiFocusOrrery = 8 GuiFocusFSS = 9 GuiFocusSAA = 10 GuiFocusCodex = 11 + +ship_name_map = { + 'adder': 'Adder', + 'anaconda': 'Anaconda', + 'asp': 'Asp Explorer', + 'asp_scout': 'Asp Scout', + 'belugaliner': 'Beluga Liner', + 'cobramkiii': 'Cobra MkIII', + 'cobramkiv': 'Cobra MkIV', + 'clipper': 'Panther Clipper', + 'cutter': 'Imperial Cutter', + 'diamondback': 'Diamondback Scout', + 'diamondbackxl': 'Diamondback Explorer', + 'dolphin': 'Dolphin', + 'eagle': 'Eagle', + 'empire_courier': 'Imperial Courier', + 'empire_eagle': 'Imperial Eagle', + 'empire_fighter': 'Imperial Fighter', + 'empire_trader': 'Imperial Clipper', + 'federation_corvette': 'Federal Corvette', + 'federation_dropship': 'Federal Dropship', + 'federation_dropship_mkii': 'Federal Assault Ship', + 'federation_gunship': 'Federal Gunship', + 'federation_fighter': 'F63 Condor', + 'ferdelance': 'Fer-de-Lance', + 'hauler': 'Hauler', + 'independant_trader': 'Keelback', + 'independent_fighter': 'Taipan Fighter', + 'krait_mkii': 'Krait MkII', + 'krait_light': 'Krait Phantom', + 'mamba': 'Mamba', + 'orca': 'Orca', + 'python': 'Python', + 'scout': 'Taipan Fighter', + 'sidewinder': 'Sidewinder', + 'testbuggy': 'Scarab', + 'type6': 'Type-6 Transporter', + 'type7': 'Type-7 Transporter', + 'type9': 'Type-9 Heavy', + 'type9_military': 'Type-10 Defender', + 'typex': 'Alliance Chieftain', + 'typex_2': 'Alliance Crusader', + 'typex_3': 'Alliance Challenger', + 'viper': 'Viper MkIII', + 'viper_mkiv': 'Viper MkIV', + 'vulture': 'Vulture', +} diff --git a/edshipyard.py b/edshipyard.py index 0f29f7b6..ad19d518 100644 --- a/edshipyard.py +++ b/edshipyard.py @@ -1,20 +1,23 @@ # Export ship loadout in E:D Shipyard plain text format -import pickle -from collections import defaultdict import os -from os.path import join +import pickle import re import time +from collections import defaultdict +from os.path import join +from typing import Dict, List, Union -from config import config -from data import edshipyard_slot_map as slot_map import outfitting import util_ships +from config import config +from edmc_data import edshipyard_slot_map as slot_map +from edmc_data import ship_name_map -from typing import Dict, Union, List __Module = Dict[str, Union[str, List[str]]] +# Map API ship names to ED Shipyard names +ship_map = ship_name_map.copy() # Ship masses # TODO: prefer something other than pickle for this storage (dev readability, security) @@ -142,11 +145,11 @@ def export(data, filename=None): string += '---\nCargo : {} T\nFuel : {} T\n'.format(cargo, fuel) # Add mass and range - assert data['ship']['name'].lower() in util_ships.ship_map, data['ship']['name'] - assert util_ships.ship_map[data['ship']['name'].lower()] in ships, util_ships.ship_map[data['ship']['name'].lower()] + assert data['ship']['name'].lower() in ship_name_map, data['ship']['name'] + assert ship_name_map[data['ship']['name'].lower()] in ships, ship_name_map[data['ship']['name'].lower()] try: - mass += ships[util_ships.ship_map[data['ship']['name'].lower()]]['hullMass'] + mass += ships[ship_name_map[data['ship']['name'].lower()]]['hullMass'] string += 'Mass : {:.2f} T empty\n {:.2f} T full\n'.format(mass, mass + fuel + cargo) multiplier = pow(min(fuel, fsd['maxfuel']) / fsd['fuelmul'], 1.0 / fsd['fuelpower']) * fsd['optmass'] diff --git a/outfitting.py b/outfitting.py index 714f5c06..eb60f4b1 100644 --- a/outfitting.py +++ b/outfitting.py @@ -1,28 +1,27 @@ -from collections import OrderedDict import pickle -from os.path import join import time +from collections import OrderedDict +from os.path import join -import util_ships from config import config -from data import outfitting_armour_map as armour_map -from data import outfitting_weapon_map as weapon_map -from data import outfitting_missiletype_map as missiletype_map -from data import outfitting_weaponmount_map as weaponmount_map -from data import outfitting_weaponclass_map as weaponclass_map -from data import outfitting_weaponrating_map as weaponrating_map -from data import outfitting_weaponoldvariant_map as weaponoldvariant_map -from data import outfitting_countermeasure_map as countermeasure_map -from data import outfitting_utility_map as utility_map -from data import outfitting_cabin_map as cabin_map -from data import outfitting_rating_map as rating_map -from data import outfitting_corrosion_rating_map as corrosion_rating_map -from data import outfitting_planet_rating_map as planet_rating_map -from data import outfitting_fighter_rating_map as fighter_rating_map -from data import outfitting_misc_internal_map as misc_internal_map -from data import outfitting_standard_map as standard_map -from data import outfitting_internal_map as internal_map - +from edmc_data import outfitting_armour_map as armour_map +from edmc_data import outfitting_cabin_map as cabin_map +from edmc_data import outfitting_corrosion_rating_map as corrosion_rating_map +from edmc_data import outfitting_countermeasure_map as countermeasure_map +from edmc_data import outfitting_fighter_rating_map as fighter_rating_map +from edmc_data import outfitting_internal_map as internal_map +from edmc_data import outfitting_misc_internal_map as misc_internal_map +from edmc_data import outfitting_missiletype_map as missiletype_map +from edmc_data import outfitting_planet_rating_map as planet_rating_map +from edmc_data import outfitting_rating_map as rating_map +from edmc_data import outfitting_standard_map as standard_map +from edmc_data import outfitting_utility_map as utility_map +from edmc_data import outfitting_weapon_map as weapon_map +from edmc_data import outfitting_weaponclass_map as weaponclass_map +from edmc_data import outfitting_weaponmount_map as weaponmount_map +from edmc_data import outfitting_weaponoldvariant_map as weaponoldvariant_map +from edmc_data import outfitting_weaponrating_map as weaponrating_map +from edmc_data import ship_name_map # Module mass, FSD data etc moduledata = OrderedDict() @@ -30,7 +29,7 @@ moduledata = OrderedDict() # Given a module description from the Companion API returns a description of the module in the form of a # dict { category, name, [mount], [guidance], [ship], rating, class } using the same terms found in the # English langauge game. For fitted modules, dict also includes { enabled, priority }. -# ship_map tells us what ship names to use for Armour - i.e. EDDN schema names or in-game names. +# ship_name_map tells us what ship names to use for Armour - i.e. EDDN schema names or in-game names. # # Returns None if the module is user-specific (i.e. decal, paintjob, kit) or PP-specific in station outfitting. # (Given the ad-hocery in this implementation a big lookup table might have been simpler and clearer). @@ -209,7 +208,7 @@ def export(data, filename): h.write(header) for v in list(data['lastStarport'].get('modules', {}).values()): try: - m = lookup(v, util_ships.ship_map) + m = lookup(v, ship_name_map) if m: h.write('%s,%s,%s,%s,%s,%s,%s,%s,%s,%s\n' % (rowheader, m['category'], m['name'], m.get('mount',''), m.get('guidance',''), m.get('ship',''), m['class'], m['rating'], m['id'], data['timestamp'])) except AssertionError as e: diff --git a/shipyard.py b/shipyard.py index 2a8edfdd..78961ad7 100644 --- a/shipyard.py +++ b/shipyard.py @@ -3,7 +3,7 @@ import time from config import config -from util_ships import ship_map +from edmc_data import ship_name_map def export(data, filename): @@ -19,6 +19,6 @@ def export(data, filename): h = open(filename, 'wt') h.write(header) - for (name,fdevid) in [(ship_map.get(ship['name'].lower(), ship['name']), ship['id']) for ship in list((data['lastStarport']['ships'].get('shipyard_list') or {}).values()) + data['lastStarport']['ships'].get('unavailable_list')]: + for (name,fdevid) in [(ship_name_map.get(ship['name'].lower(), ship['name']), ship['id']) for ship in list((data['lastStarport']['ships'].get('shipyard_list') or {}).values()) + data['lastStarport']['ships'].get('unavailable_list')]: h.write('%s,%s,%s,%s\n' % (rowheader, name, fdevid, data['timestamp'])) h.close() diff --git a/stats.py b/stats.py index baf5894a..fcd514cc 100644 --- a/stats.py +++ b/stats.py @@ -8,9 +8,9 @@ from typing import TYPE_CHECKING, Any, AnyStr, Dict, List, NamedTuple, Optional, import companion import EDMCLogging import myNotebook as nb # noqa: N813 +from edmc_data import ship_name_map from l10n import Locale from monitor import monitor -from util_ships import ship_map logger = EDMCLogging.get_main_logger() @@ -216,7 +216,7 @@ def ships(companion_data: Dict[str, Any]) -> List[ShipRet]: # Set current system, not last docked out.append(ShipRet( id=str(ships[0]['id']), - type=ship_map.get(ships[0]['name'].lower(), ships[0]['name']), + type=ship_name_map.get(ships[0]['name'].lower(), ships[0]['name']), name=str(ships[0].get('shipName', '')), system=companion_data['lastSystem']['name'], station='', @@ -225,7 +225,7 @@ def ships(companion_data: Dict[str, Any]) -> List[ShipRet]: out.extend( ShipRet( id=str(ship['id']), - type=ship_map.get(ship['name'].lower(), ship['name']), + type=ship_name_map.get(ship['name'].lower(), ship['name']), name=ship.get('shipName', ''), system=ship['starsystem']['name'], station=ship['station']['name'], @@ -238,7 +238,7 @@ def ships(companion_data: Dict[str, Any]) -> List[ShipRet]: return [ ShipRet( id=str(ship['id']), - type=ship_map.get(ship['name'].lower(), ship['name']), + type=ship_name_map.get(ship['name'].lower(), ship['name']), name=ship.get('shipName', ''), system=ship['starsystem']['name'], station=ship['station']['name'], diff --git a/td.py b/td.py index 0476703c..13c32edd 100644 --- a/td.py +++ b/td.py @@ -11,7 +11,7 @@ import time from config import applongname, appversion, config -# These are specific to Trade Dangerous, so don't move to data.py +# These are specific to Trade Dangerous, so don't move to edmc_data.py demandbracketmap = { 0: '?', 1: 'L', 2: 'M', diff --git a/util_ships.py b/util_ships.py index 9aad1cc4..204e21f5 100644 --- a/util_ships.py +++ b/util_ships.py @@ -1,57 +1,9 @@ """Utility functions relating to ships.""" - - -ship_map = { - 'adder': 'Adder', - 'anaconda': 'Anaconda', - 'asp': 'Asp Explorer', - 'asp_scout': 'Asp Scout', - 'belugaliner': 'Beluga Liner', - 'cobramkiii': 'Cobra MkIII', - 'cobramkiv': 'Cobra MkIV', - 'clipper': 'Panther Clipper', - 'cutter': 'Imperial Cutter', - 'diamondback': 'Diamondback Scout', - 'diamondbackxl': 'Diamondback Explorer', - 'dolphin': 'Dolphin', - 'eagle': 'Eagle', - 'empire_courier': 'Imperial Courier', - 'empire_eagle': 'Imperial Eagle', - 'empire_fighter': 'Imperial Fighter', - 'empire_trader': 'Imperial Clipper', - 'federation_corvette': 'Federal Corvette', - 'federation_dropship': 'Federal Dropship', - 'federation_dropship_mkii': 'Federal Assault Ship', - 'federation_gunship': 'Federal Gunship', - 'federation_fighter': 'F63 Condor', - 'ferdelance': 'Fer-de-Lance', - 'hauler': 'Hauler', - 'independant_trader': 'Keelback', - 'independent_fighter': 'Taipan Fighter', - 'krait_mkii': 'Krait MkII', - 'krait_light': 'Krait Phantom', - 'mamba': 'Mamba', - 'orca': 'Orca', - 'python': 'Python', - 'scout': 'Taipan Fighter', - 'sidewinder': 'Sidewinder', - 'testbuggy': 'Scarab', - 'type6': 'Type-6 Transporter', - 'type7': 'Type-7 Transporter', - 'type9': 'Type-9 Heavy', - 'type9_military': 'Type-10 Defender', - 'typex': 'Alliance Chieftain', - 'typex_2': 'Alliance Crusader', - 'typex_3': 'Alliance Challenger', - 'viper': 'Viper MkIII', - 'viper_mkiv': 'Viper MkIV', - 'vulture': 'Vulture', -} - +from edmc_data import ship_name_map def ship_file_name(ship_name: str, ship_type: str) -> str: """Return a ship name suitable for a filename.""" - name = str(ship_name or ship_map.get(ship_type.lower(), ship_type)).strip() + name = str(ship_name or ship_name_map.get(ship_type.lower(), ship_type)).strip() if name.endswith('.'): name = name[:-2]