1
0
mirror of https://github.com/EDCD/EDMarketConnector.git synced 2025-04-17 01:22:19 +03:00

Merge pull request #707 from EDCD/fix/671-no-modules

Catch where station modules and shipyard from CAPI aren't as expected.
This commit is contained in:
Athanasius 2020-09-18 13:00:40 +01:00 committed by GitHub
commit 7c9b8861fc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 32 additions and 22 deletions

View File

@ -530,11 +530,11 @@ class Session(object):
"""Perform general CAPI /profile endpoint query."""
return self.query(URL_QUERY)
def station(self) -> Union[CAPIData, None]:
def station(self) -> CAPIData:
"""Perform CAPI /profile endpoint query for station data."""
data = self.query(URL_QUERY)
if not data['commander'].get('docked'):
return None
return data
services = data['lastStarport'].get('services', {})

View File

@ -11,9 +11,9 @@ from collections import OrderedDict
from os import SEEK_SET
from os.path import join
from platform import system
from typing import TYPE_CHECKING, Any, AnyStr, Dict, Iterator, List, Mapping, MutableMapping, Optional
from typing import TYPE_CHECKING, Any, AnyStr, Dict, Iterator, List, Mapping, MutableMapping, Optional, Tuple
from typing import OrderedDict as OrderedDictT
from typing import Sequence, TextIO, Tuple
from typing import Sequence, TextIO
import requests
@ -262,6 +262,32 @@ Msg:\n{msg}''')
this.commodities = commodities
def safe_modules_and_ships(self, data: Mapping[str, Any]) -> Tuple[Dict, Dict]:
modules: Dict[str, Any] = data['lastStarport'].get('modules')
if modules is None or not isinstance(modules, dict):
if modules is None:
logger.debug('modules was None. FC or Damaged Station?')
elif isinstance(modules, list):
if len(modules) == 0:
logger.debug('modules is empty list. Damaged Station?')
else:
logger.error(f'modules is non-empty list: {modules!r}')
else:
logger.error(f'modules was not None, a list, or a dict! type = {type(modules)}')
# Set a safe value
modules = {}
ships: Dict[str, Any] = data['lastStarport'].get('ships')
if ships is None or not isinstance(ships, dict):
if ships is None:
logger.debug('ships was None')
else:
logger.error(f'ships was neither None nor a Dict! Type = {type(ships)}')
# Set a safe value
ships = {'shipyard_list': {}, 'unavailable_list': []}
return modules, ships
def export_outfitting(self, data: Mapping[str, Any], is_beta: bool) -> None:
"""
export_outfitting updates EDDN with the current (lastStarport) station's outfitting options, if any.
@ -270,15 +296,7 @@ Msg:\n{msg}''')
:param data: dict containing the outfitting data
:param is_beta: whether or not we're currently in beta mode
"""
modules: Dict[str, Any] = data['lastStarport'].get('modules')
if modules is None:
logger.debug('modules was None')
modules = {}
ships: Dict[str, Any] = data['lastStarport'].get('ships')
if ships is None:
logger.debug('ships was None')
ships = {'shipyard_list': {}, 'unavailable_list': []}
modules, ships = self.safe_modules_and_ships(data)
# Horizons flag - will hit at least Int_PlanetApproachSuite other than at engineer bases ("Colony"),
# prison or rescue Megaships, or under Pirate Attack etc
@ -321,15 +339,7 @@ Msg:\n{msg}''')
:param data: dict containing the shipyard data
:param is_beta: whether or not we are in beta mode
"""
modules: Dict[str, Any] = data['lastStarport'].get('modules')
if modules is None:
logger.debug('modules was None')
modules = {}
ships: Dict[str, Any] = data['lastStarport'].get('ships')
if ships is None:
logger.debug('ships was None')
ships = {'shipyard_list': {}, 'unavailable_list': []}
modules, ships = self.safe_modules_and_ships(data)
horizons: bool = is_horizons(
data['lastStarport'].get('economies', {}),