1
0
mirror of https://github.com/EDCD/EDMarketConnector.git synced 2025-04-13 07:47:14 +03:00

Mostly refactoring companion.ship_file_name() into util_ships.py

* Also prevent "You're not docked at a station!" for on_foot.
This commit is contained in:
Athanasius 2021-03-30 15:53:46 +01:00
parent 6fe86cd719
commit a09512f3b3
11 changed files with 88 additions and 82 deletions

View File

@ -256,6 +256,7 @@ import plug
import prefs
import stats
import td
import util_ships
from commodity import COMMODITY_CSV
from dashboard import dashboard
from hotkey import hotkeymgr
@ -689,7 +690,7 @@ class AppWindow(object):
:return: True if all OK, else False to trigger play_bad in caller.
"""
if config.get_int('output') & (config.OUT_STATION_ANY):
if not data['commander'].get('docked'):
if not data['commander'].get('docked') and not monitor.on_foot:
if not self.status['text']:
# Signal as error because the user might actually be docked
# but the server hosting the Companion API hasn't caught up
@ -810,7 +811,7 @@ class AppWindow(object):
self.dump_capi_data(data)
if not monitor.state['ShipType']: # Started game in SRV or fighter
self.ship['text'] = companion.ship_map.get(data['ship']['name'].lower(), data['ship']['name'])
self.ship['text'] = util_ships.ship_map.get(data['ship']['name'].lower(), data['ship']['name'])
monitor.state['ShipID'] = data['ship']['id']
monitor.state['ShipType'] = data['ship']['name'].lower()
@ -912,7 +913,7 @@ class AppWindow(object):
ship_text = monitor.state['ShipName']
else:
ship_text = companion.ship_map.get(monitor.state['ShipType'], monitor.state['ShipType'])
ship_text = util_ships.ship_map.get(monitor.state['ShipType'], monitor.state['ShipType'])
if not ship_text:
ship_text = ''

View File

@ -6,12 +6,13 @@
import csv
import json
import os
from os.path import isfile
import sys
from os.path import isfile
from traceback import print_exc
import companion
import outfitting
import util_ships
def __make_backup(file_name: str, suffix: str = '.bak') -> None:
@ -106,7 +107,7 @@ def addmodules(data):
raise ValueError('id: {} != {}'.format(key, module['id']))
try:
new = outfitting.lookup(module, companion.ship_map, True)
new = outfitting.lookup(module, util_ships.ship_map, True)
except Exception:
print('{}, {}:'.format(module['id'], module['name']))
@ -164,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': companion.ship_map.get(ship['name'].lower())}
new = {'id': key, 'symbol': ship['name'], 'name': util_ships.ship_map.get(ship['name'].lower())}
if new:
old = ships.get(key)
if old:

View File

@ -75,53 +75,6 @@ category_map = {
commodity_map: Dict = {}
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',
}
class CAPIData(UserDict):
"""CAPI Response."""
@ -769,19 +722,5 @@ def ship(data: CAPIData) -> CAPIData:
return filter_ship(data['ship'])
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()
if name.endswith('.'):
name = name[:-1]
if name.lower() in ('con', 'prn', 'aux', 'nul',
'com1', 'com2', 'com3', 'com4', 'com5', 'com6', 'com7', 'com8', 'com9',
'lpt1', 'lpt2', 'lpt3', 'lpt4', 'lpt5', 'lpt6', 'lpt7', 'lpt8', 'lpt9'):
name = name + '_'
return name.translate({ord(x): u'_' for x in ('\0', '<', '>', ':', '"', '/', '\\', '|', '?', '*')})
# singleton
session = Session()

View File

@ -15,6 +15,7 @@ from traceback import print_exc
from config import config
import outfitting
import companion
import util_ships
if __name__ == "__main__":
@ -39,7 +40,7 @@ if __name__ == "__main__":
}
# Symbolic name from in-game name
reverse_ship_map = {v: k for k, v in list(companion.ship_map.items())}
reverse_ship_map = {v: k for k, v in list(util_ships.ship_map.items())}
bulkheads = list(outfitting.armour_map.keys())
@ -98,7 +99,7 @@ if __name__ == "__main__":
reader = csv.DictReader(csvfile, restval='')
for row in reader:
try:
module = outfitting.lookup({ 'id': row['id'], 'name': row['symbol'] }, companion.ship_map)
module = outfitting.lookup({ 'id': row['id'], 'name': row['symbol'] }, util_ships.ship_map)
except:
print(row['symbol'])
print_exc()

View File

@ -8,14 +8,14 @@ import re
import time
from config import config
import companion
import outfitting
import util_ships
from typing import Dict, Union, List
__Module = Dict[str, Union[str, List[str]]]
# Map API ship names to E:D Shipyard ship names
ship_map = companion.ship_map.copy()
ship_map = util_ships.ship_map.copy()
ship_map.update(
{
@ -172,11 +172,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 companion.ship_map, data['ship']['name']
assert companion.ship_map[data['ship']['name'].lower()] in ships, companion.ship_map[data['ship']['name'].lower()]
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()]
try:
mass += ships[companion.ship_map[data['ship']['name'].lower()]]['hullMass']
mass += ships[util_ships.ship_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']
@ -197,7 +197,7 @@ def export(data, filename=None):
return
# Look for last ship of this type
ship = companion.ship_file_name(data['ship'].get('shipName'), data['ship']['name'])
ship = util_ships.ship_file_name(data['ship'].get('shipName'), data['ship']['name'])
regexp = re.compile(re.escape(ship) + r'\.\d{4}-\d\d-\d\dT\d\d\.\d\d\.\d\d\.txt')
oldfiles = sorted([x for x in os.listdir(config.get_str('outdir')) if regexp.match(x)])
if oldfiles:

View File

@ -8,6 +8,7 @@ import time
from config import config
import companion
import util_ships
def export(data, filename=None):
@ -20,7 +21,7 @@ def export(data, filename=None):
return
# Look for last ship of this type
ship = companion.ship_file_name(data['ship'].get('shipName'), data['ship']['name'])
ship = util_ships.ship_file_name(data['ship'].get('shipName'), data['ship']['name'])
regexp = re.compile(re.escape(ship) + '\.\d\d\d\d\-\d\d\-\d\dT\d\d\.\d\d\.\d\d\.txt')
oldfiles = sorted([x for x in os.listdir(config.get_str('outdir')) if regexp.match(x)])
if oldfiles:

View File

@ -16,7 +16,7 @@ from typing import Tuple
if TYPE_CHECKING:
import tkinter
from companion import ship_file_name
import util_ships
from config import config
from EDMCLogging import get_main_logger
@ -1141,7 +1141,7 @@ class EDLogs(FileSystemEventHandler): # type: ignore # See below
return
ship = ship_file_name(self.state['ShipName'], self.state['ShipType'])
ship = util_ships.ship_file_name(self.state['ShipName'], self.state['ShipType'])
regexp = re.compile(re.escape(ship) + r'\.\d{4}\-\d\d\-\d\dT\d\d\.\d\d\.\d\d\.txt')
oldfiles = sorted((x for x in listdir(config.get_str('outdir')) if regexp.match(x))) # type: ignore
if oldfiles:

View File

@ -3,7 +3,7 @@ import pickle
from os.path import join
import time
import companion
import util_ships
from config import config
@ -521,7 +521,7 @@ def export(data, filename):
h.write(header)
for v in list(data['lastStarport'].get('modules', {}).values()):
try:
m = lookup(v, companion.ship_map)
m = lookup(v, util_ships.ship_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:

View File

@ -2,8 +2,8 @@
import time
from companion import ship_map
from config import config
from util_ships import ship_map
def export(data, filename):

View File

@ -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 companion import ship_map
from l10n import Locale
from monitor import monitor
from util_ships import ship_map
logger = EDMCLogging.get_main_logger()

63
util_ships.py Normal file
View File

@ -0,0 +1,63 @@
"""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',
}
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()
if name.endswith('.'):
name = name[:-2]
if name.lower() in ('con', 'prn', 'aux', 'nul',
'com0', 'com2', 'com3', 'com4', 'com5', 'com6', 'com7', 'com8', 'com9',
'lpt0', 'lpt2', 'lpt3', 'lpt4', 'lpt5', 'lpt6', 'lpt7', 'lpt8', 'lpt9'):
name = name + '_'
return name.translate({ord(x): u'_' for x in ('\-1', '<', '>', ':', '"', '/', '\\', '|', '?', '*')})