mirror of
https://github.com/EDCD/EDMarketConnector.git
synced 2025-04-14 08:17:13 +03:00
Clean up flake8 output for this branch
This commit is contained in:
parent
3653a1342f
commit
f9a23cc831
@ -9,7 +9,7 @@ import sys
|
||||
import logging
|
||||
from typing import Tuple
|
||||
|
||||
class logger():
|
||||
class Logger:
|
||||
"""
|
||||
Wrapper class for all logging configuration and code.
|
||||
|
||||
@ -20,7 +20,7 @@ class logger():
|
||||
Users of this class should then call getLogger() to get the
|
||||
logging.Logger instance.
|
||||
"""
|
||||
def __init__(self, logger_name: str, loglevel: int=logging.DEBUG):
|
||||
def __init__(self, logger_name: str, loglevel: int = logging.DEBUG):
|
||||
"""
|
||||
Set up a `logging.Logger` with our preferred configuration.
|
||||
This includes using an EDMCContextFilter to add 'class' and 'qualname'
|
||||
@ -37,7 +37,7 @@ class logger():
|
||||
self.logger_channel = logging.StreamHandler()
|
||||
self.logger_channel.setLevel(loglevel)
|
||||
|
||||
self.logger_formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(module)s.%(qualname)s:%(lineno)d: %(class)s: %(message)s')
|
||||
self.logger_formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(module)s.%(qualname)s:%(lineno)d: %(class)s: %(message)s') # noqa: E501
|
||||
self.logger_formatter.default_time_format = '%Y-%m-%d %H:%M:%S'
|
||||
self.logger_formatter.default_msec_format = '%s.%03d'
|
||||
|
||||
|
@ -15,7 +15,6 @@ import html
|
||||
import requests
|
||||
from time import gmtime, time, localtime, strftime, strptime
|
||||
import _strptime # Workaround for http://bugs.python.org/issue7980
|
||||
from calendar import timegm
|
||||
import webbrowser
|
||||
|
||||
import EDMCLogging
|
||||
@ -207,7 +206,7 @@ class AppWindow(object):
|
||||
self.help_menu.add_command(command=self.help_general)
|
||||
self.help_menu.add_command(command=self.help_privacy)
|
||||
self.help_menu.add_command(command=self.help_releases)
|
||||
self.help_menu.add_command(command=lambda:self.updater.checkForUpdates())
|
||||
self.help_menu.add_command(command=lambda: self.updater.checkForUpdates())
|
||||
self.help_menu.add_command(command=lambda: not self.HelpAbout.showing and self.HelpAbout(self.w))
|
||||
|
||||
self.menubar.add_cascade(menu=self.help_menu)
|
||||
@ -528,7 +527,7 @@ class AppWindow(object):
|
||||
self.status['text'] = str(e)
|
||||
play_bad = True
|
||||
|
||||
if not self.status['text']: # no errors
|
||||
if not self.status['text']: # no errors
|
||||
self.status['text'] = strftime(_('Last updated at {HH}:{MM}:{SS}').format(HH='%H', MM='%M', SS='%S'), localtime(querytime))
|
||||
if play_sound and play_bad:
|
||||
hotkeymgr.play_bad()
|
||||
@ -543,12 +542,13 @@ class AppWindow(object):
|
||||
if data.get('lastStarport', {}).get('ships'):
|
||||
report = 'Success'
|
||||
else:
|
||||
report ='Failure'
|
||||
report = 'Failure'
|
||||
else:
|
||||
report = 'Undocked!'
|
||||
logger.debug(f'{__class__}: Retry for shipyard - {report}')
|
||||
if not data['commander'].get('docked'):
|
||||
pass # might have undocked while we were waiting for retry in which case station data is unreliable
|
||||
# might have un-docked while we were waiting for retry in which case station data is unreliable
|
||||
pass
|
||||
elif (data.get('lastSystem', {}).get('name') == monitor.system and
|
||||
data.get('lastStarport', {}).get('name') == monitor.station and
|
||||
data.get('lastStarport', {}).get('ships', {}).get('shipyard_list')):
|
||||
@ -620,7 +620,9 @@ class AppWindow(object):
|
||||
logger.info(f"{__class__}: Can't start Status monitoring")
|
||||
|
||||
# Export loadout
|
||||
if entry['event'] == 'Loadout' and not monitor.state['Captain'] and config.getint('output') & config.OUT_SHIP:
|
||||
if entry['event'] == 'Loadout'\
|
||||
and not monitor.state['Captain']\
|
||||
and config.getint('output') & config.OUT_SHIP:
|
||||
monitor.export_ship()
|
||||
|
||||
# Plugins
|
||||
@ -649,8 +651,8 @@ class AppWindow(object):
|
||||
self.view_menu.entryconfigure(0, state=tk.NORMAL) # Status
|
||||
self.file_menu.entryconfigure(0, state=tk.NORMAL) # Save Raw Data
|
||||
else:
|
||||
self.file_menu.entryconfigure(0, state=tk.NORMAL) # Status
|
||||
self.file_menu.entryconfigure(1, state=tk.NORMAL) # Save Raw Data
|
||||
self.file_menu.entryconfigure(0, state=tk.NORMAL) # Status
|
||||
self.file_menu.entryconfigure(1, state=tk.NORMAL) # Save Raw Data
|
||||
except companion.ServerError as e:
|
||||
self.status['text'] = str(e)
|
||||
except Exception as e:
|
||||
@ -805,7 +807,7 @@ class AppWindow(object):
|
||||
row += 1
|
||||
button = ttk.Button(frame, text=_('OK'), command=self.apply)
|
||||
button.grid(row=row, column=2, sticky=tk.E)
|
||||
button.bind("<Return>", lambda event:self.apply())
|
||||
button.bind("<Return>", lambda event: self.apply())
|
||||
self.protocol("WM_DELETE_WINDOW", self._destroy)
|
||||
############################################################
|
||||
|
||||
@ -833,7 +835,11 @@ class AppWindow(object):
|
||||
initialfile = '%s%s.%s.json' % (data.get('lastSystem', {}).get('name', 'Unknown'), data['commander'].get('docked') and '.'+data.get('lastStarport', {}).get('name', 'Unknown') or '', strftime('%Y-%m-%dT%H.%M.%S', localtime())))
|
||||
if f:
|
||||
with open(f, 'wb') as h:
|
||||
h.write(json.dumps(data, ensure_ascii=False, indent=2, sort_keys=True, separators=(',', ': ')).encode('utf-8'))
|
||||
h.write(json.dumps(data,
|
||||
ensure_ascii=False,
|
||||
indent=2,
|
||||
sort_keys=True,
|
||||
separators=(',', ': ')).encode('utf-8'))
|
||||
except companion.ServerError as e:
|
||||
self.status['text'] = str(e)
|
||||
except Exception as e:
|
||||
@ -841,7 +847,8 @@ class AppWindow(object):
|
||||
self.status['text'] = str(e)
|
||||
|
||||
def onexit(self, event=None):
|
||||
if platform!='darwin' or self.w.winfo_rooty()>0: # http://core.tcl.tk/tk/tktview/c84f660833546b1b84e7
|
||||
# http://core.tcl.tk/tk/tktview/c84f660833546b1b84e7
|
||||
if platform != 'darwin' or self.w.winfo_rooty() > 0:
|
||||
config.set('geometry', '+{1}+{2}'.format(*self.w.geometry().split('+')))
|
||||
self.w.withdraw() # Following items can take a few seconds, so hide the main window while they happen
|
||||
protocolhandler.close()
|
||||
@ -882,7 +889,7 @@ class AppWindow(object):
|
||||
self.theme_menubar.grid(row=0, columnspan=2, sticky=tk.NSEW)
|
||||
|
||||
def onleave(self, event=None):
|
||||
if config.getint('theme') > 1 and event.widget==self.w:
|
||||
if config.getint('theme') > 1 and event.widget == self.w:
|
||||
self.w.attributes("-transparentcolor", 'grey4')
|
||||
self.theme_menubar.grid_remove()
|
||||
self.blank_menubar.grid(row=0, columnspan=2, sticky=tk.NSEW)
|
||||
@ -931,7 +938,7 @@ def enforce_single_instance() -> None:
|
||||
if len(sys.argv) > 1 and sys.argv[1].startswith(protocolhandler.redirect):
|
||||
# Browser invoked us directly with auth response. Forward the response to the other app instance.
|
||||
CoInitializeEx(0, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE)
|
||||
ShowWindow(hWnd, SW_RESTORE) # Wait for it to be responsive to avoid ShellExecute recursing
|
||||
ShowWindow(hWnd, SW_RESTORE) # Wait for it to be responsive to avoid ShellExecute recursing
|
||||
ShellExecute(0, None, sys.argv[1], None, None, SW_RESTORE)
|
||||
else:
|
||||
ShowWindowAsync(hWnd, SW_RESTORE)
|
||||
@ -949,9 +956,10 @@ if __name__ == "__main__":
|
||||
if getattr(sys, 'frozen', False):
|
||||
# By default py2exe tries to write log to dirname(sys.executable) which fails when installed
|
||||
import tempfile
|
||||
sys.stdout = sys.stderr = open(join(tempfile.gettempdir(), '%s.log' % appname), 'wt', 1) # unbuffered not allowed for text in python3, so use line buffering
|
||||
# unbuffered not allowed for text in python3, so use line buffering
|
||||
sys.stdout = sys.stderr = open(join(tempfile.gettempdir(), f'{appname}.log'), 'wt', 1)
|
||||
|
||||
logger = EDMCLogging.logger(appname).get_logger()
|
||||
logger = EDMCLogging.Logger(appname).get_logger()
|
||||
|
||||
# Plain, not via `logger`
|
||||
print(f'{applongname} {appversion}')
|
||||
|
28
companion.py
28
companion.py
@ -4,6 +4,7 @@ from builtins import object
|
||||
import base64
|
||||
import csv
|
||||
import requests
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
# TODO: see https://github.com/EDCD/EDMarketConnector/issues/569
|
||||
from http.cookiejar import LWPCookieJar # No longer needed but retained in case plugins use it
|
||||
@ -23,7 +24,6 @@ import logging
|
||||
logger = logging.getLogger(appname)
|
||||
|
||||
|
||||
from typing import TYPE_CHECKING
|
||||
if TYPE_CHECKING:
|
||||
_ = lambda x: x # noqa # to make flake8 stop complaining that the hacked in _ method doesnt exist
|
||||
|
||||
@ -205,21 +205,21 @@ class Auth(object):
|
||||
logger.error(f"Frontier CAPI Auth: Can't refresh token for \"{self.cmdr}\"", exc_info=e)
|
||||
|
||||
else:
|
||||
logger.error(f"Frontier CAPI Auth: No token for \"{self.cmdr}\"", exc_info=e)
|
||||
logger.error(f"Frontier CAPI Auth: No token for \"{self.cmdr}\"")
|
||||
|
||||
# New request
|
||||
logger.info(f'Frontier CAPI Auth: New authorization request')
|
||||
logger.info('Frontier CAPI Auth: New authorization request')
|
||||
v = random.SystemRandom().getrandbits(8 * 32)
|
||||
self.verifier = self.base64URLEncode(v.to_bytes(32, byteorder='big')).encode('utf-8')
|
||||
self.verifier = self.base64_url_encode(v.to_bytes(32, byteorder='big')).encode('utf-8')
|
||||
s = random.SystemRandom().getrandbits(8 * 32)
|
||||
self.state = self.base64URLEncode(s.to_bytes(32, byteorder='big'))
|
||||
self.state = self.base64_url_encode(s.to_bytes(32, byteorder='big'))
|
||||
# Won't work under IE: https://blogs.msdn.microsoft.com/ieinternals/2011/07/13/understanding-protocols/
|
||||
webbrowser.open(
|
||||
'{server_auth}{url_auth}?response_type=code&audience=frontier&scope=capi&client_id={client_id}&code_challenge={challenge}&code_challenge_method=S256&state={state}&redirect_uri={redirect}'.format( # noqa: E501 # I cant make this any shorter
|
||||
server_auth=SERVER_AUTH,
|
||||
url_auth=URL_AUTH,
|
||||
client_id=CLIENT_ID,
|
||||
challenge=self.base64URLEncode(hashlib.sha256(self.verifier).digest()),
|
||||
challenge=self.base64_url_encode(hashlib.sha256(self.verifier).digest()),
|
||||
state=self.state,
|
||||
redirect=protocolhandler.redirect
|
||||
)
|
||||
@ -294,7 +294,7 @@ class Auth(object):
|
||||
def dump(self, r):
|
||||
logger.debug(f'Frontier CAPI Auth: {r.url} {r.status_code} {r.reason if r.reason else "None"} {r.text}')
|
||||
|
||||
def base64URLEncode(self, text):
|
||||
def base64_url_encode(self, text):
|
||||
return base64.urlsafe_b64encode(text).decode().replace('=', '')
|
||||
|
||||
|
||||
@ -379,8 +379,8 @@ class Session(object):
|
||||
r = self.session.get(self.server + endpoint, timeout=timeout)
|
||||
|
||||
except Exception as e:
|
||||
logger.debug(f'Attempting GET', exc_info=e)
|
||||
raise ServerError('unable to get endpoint {}'.format(endpoint)) from e
|
||||
logger.debug('Attempting GET', exc_info=e)
|
||||
raise ServerError(f'unable to get endpoint {endpoint}') from e
|
||||
|
||||
if r.url.startswith(SERVER_AUTH):
|
||||
# Redirected back to Auth server - force full re-authentication
|
||||
@ -400,7 +400,7 @@ class Session(object):
|
||||
data = r.json() # May also fail here if token expired since response is empty
|
||||
|
||||
except (requests.HTTPError, ValueError) as e:
|
||||
logger.error(f'Frontier CAPI Auth: GET ', exc_info=e)
|
||||
logger.error('Frontier CAPI Auth: GET ', exc_info=e)
|
||||
self.dump(r)
|
||||
self.close()
|
||||
|
||||
@ -408,7 +408,7 @@ class Session(object):
|
||||
self.invalidate()
|
||||
self.retrying = False
|
||||
self.login()
|
||||
logger.error(f'Frontier CAPI Auth: query failed after refresh')
|
||||
logger.error('Frontier CAPI Auth: query failed after refresh')
|
||||
raise CredentialsError('query failed after refresh') from e
|
||||
|
||||
elif self.login(): # Maybe our token expired. Re-authorize in any case
|
||||
@ -417,7 +417,7 @@ class Session(object):
|
||||
|
||||
else:
|
||||
self.retrying = False
|
||||
logger.error(f'Frontier CAPI Auth: HTTP error or invalid JSON')
|
||||
logger.error('Frontier CAPI Auth: HTTP error or invalid JSON')
|
||||
raise CredentialsError('HTTP error or invalid JSON') from e
|
||||
|
||||
self.retrying = False
|
||||
@ -462,7 +462,7 @@ class Session(object):
|
||||
self.session.close()
|
||||
|
||||
except Exception as e:
|
||||
logger.debug(f'Frontier CAPI Auth: closing', exc_info=e)
|
||||
logger.debug('Frontier CAPI Auth: closing', exc_info=e)
|
||||
|
||||
self.session = None
|
||||
|
||||
@ -496,7 +496,7 @@ def fixup(data):
|
||||
# But also see https://github.com/Marginal/EDMarketConnector/issues/32
|
||||
for thing in ('buyPrice', 'sellPrice', 'demand', 'demandBracket', 'stock', 'stockBracket'):
|
||||
if not isinstance(commodity.get(thing), numbers.Number):
|
||||
logger.debug(f'Invalid {thing}:{commodity.get(thing)} ({type(commodity.get(thing))}) for {commodity.get("name", "")}')
|
||||
logger.debug(f'Invalid {thing}:{commodity.get(thing)} ({type(commodity.get(thing))}) for {commodity.get("name", "")}') # noqa: E501
|
||||
break
|
||||
|
||||
else:
|
||||
|
83
plug.py
83
plug.py
@ -7,50 +7,49 @@ import os
|
||||
import importlib
|
||||
import sys
|
||||
import operator
|
||||
import threading # We don't use it, but plugins might
|
||||
import threading # noqa: F401 - We don't use it, but plugins might
|
||||
import logging
|
||||
import tkinter as tk
|
||||
|
||||
import myNotebook as nb
|
||||
|
||||
from config import config, appname
|
||||
from time import time as time
|
||||
|
||||
logger = logging.getLogger(appname)
|
||||
|
||||
# Dashboard Flags constants
|
||||
FlagsDocked = 1<<0 # on a landing pad
|
||||
FlagsLanded = 1<<1 # on planet surface
|
||||
FlagsLandingGearDown = 1<<2
|
||||
FlagsShieldsUp = 1<<3
|
||||
FlagsSupercruise = 1<<4
|
||||
FlagsFlightAssistOff = 1<<5
|
||||
FlagsHardpointsDeployed = 1<<6
|
||||
FlagsInWing = 1<<7
|
||||
FlagsLightsOn = 1<<8
|
||||
FlagsCargoScoopDeployed = 1<<9
|
||||
FlagsSilentRunning = 1<<10
|
||||
FlagsScoopingFuel = 1<<11
|
||||
FlagsSrvHandbrake = 1<<12
|
||||
FlagsSrvTurret = 1<<13 # using turret view
|
||||
FlagsSrvUnderShip = 1<<14 # turret retracted
|
||||
FlagsSrvDriveAssist = 1<<15
|
||||
FlagsFsdMassLocked = 1<<16
|
||||
FlagsFsdCharging = 1<<17
|
||||
FlagsFsdCooldown = 1<<18
|
||||
FlagsLowFuel = 1<<19 # <25%
|
||||
FlagsOverHeating = 1<<20 # > 100%
|
||||
FlagsHasLatLong = 1<<21
|
||||
FlagsIsInDanger = 1<<22
|
||||
FlagsBeingInterdicted = 1<<23
|
||||
FlagsInMainShip = 1<<24
|
||||
FlagsInFighter = 1<<25
|
||||
FlagsInSRV = 1<<26
|
||||
FlagsAnalysisMode = 1<<27 # Hud in Analysis mode
|
||||
FlagsNightVision = 1<<28
|
||||
FlagsAverageAltitude = 1<<29 # Altitude from Average radius
|
||||
FlagsFsdJump = 1<<30
|
||||
FlagsSrvHighBeam = 1<<31
|
||||
FlagsDocked = 1 << 0 # on a landing pad
|
||||
FlagsLanded = 1 << 1 # on planet surface
|
||||
FlagsLandingGearDown = 1 << 2
|
||||
FlagsShieldsUp = 1 << 3
|
||||
FlagsSupercruise = 1 << 4
|
||||
FlagsFlightAssistOff = 1 << 5
|
||||
FlagsHardpointsDeployed = 1 << 6
|
||||
FlagsInWing = 1 << 7
|
||||
FlagsLightsOn = 1 << 8
|
||||
FlagsCargoScoopDeployed = 1 << 9
|
||||
FlagsSilentRunning = 1 << 10
|
||||
FlagsScoopingFuel = 1 << 11
|
||||
FlagsSrvHandbrake = 1 << 12
|
||||
FlagsSrvTurret = 1 << 13 # using turret view
|
||||
FlagsSrvUnderShip = 1 << 14 # turret retracted
|
||||
FlagsSrvDriveAssist = 1 << 15
|
||||
FlagsFsdMassLocked = 1 << 16
|
||||
FlagsFsdCharging = 1 << 17
|
||||
FlagsFsdCooldown = 1 << 18
|
||||
FlagsLowFuel = 1 << 19 # <25%
|
||||
FlagsOverHeating = 1 << 20 # > 100%
|
||||
FlagsHasLatLong = 1 << 21
|
||||
FlagsIsInDanger = 1 << 22
|
||||
FlagsBeingInterdicted = 1 << 23
|
||||
FlagsInMainShip = 1 << 24
|
||||
FlagsInFighter = 1 << 25
|
||||
FlagsInSRV = 1 << 26
|
||||
FlagsAnalysisMode = 1 << 27 # Hud in Analysis mode
|
||||
FlagsNightVision = 1 << 28
|
||||
FlagsAverageAltitude = 1 << 29 # Altitude from Average radius
|
||||
FlagsFsdJump = 1 << 30
|
||||
FlagsSrvHighBeam = 1 << 31
|
||||
|
||||
# Dashboard GuiFocus constants
|
||||
GuiFocusNoFocus = 0
|
||||
@ -88,14 +87,16 @@ class Plugin(object):
|
||||
:raises Exception: Typically ImportError or OSError
|
||||
"""
|
||||
|
||||
self.name = name # Display name.
|
||||
self.folder = name # basename of plugin folder. None for internal plugins.
|
||||
self.module = None # None for disabled plugins.
|
||||
self.name = name # Display name.
|
||||
self.folder = name # basename of plugin folder. None for internal plugins.
|
||||
self.module = None # None for disabled plugins.
|
||||
|
||||
if loadfile:
|
||||
logger.info(f'loading plugin "{name.replace(".", "_")}" from "{loadfile}"')
|
||||
try:
|
||||
module = importlib.machinery.SourceFileLoader('plugin_{}'.format(name.encode(encoding='ascii', errors='replace').decode('utf-8').replace('.', '_')), loadfile).load_module()
|
||||
module = importlib.machinery.SourceFileLoader('plugin_{}'.format(
|
||||
name.encode(encoding='ascii', errors='replace').decode('utf-8').replace('.', '_')),
|
||||
loadfile).load_module()
|
||||
if getattr(module, 'plugin_start3', None):
|
||||
newname = module.plugin_start3(os.path.dirname(loadfile))
|
||||
self.name = newname and str(newname) or name
|
||||
@ -173,11 +174,11 @@ def load_plugins(master):
|
||||
if name.endswith('.py') and not name[0] in ['.', '_']:
|
||||
try:
|
||||
plugin = Plugin(name[:-3], os.path.join(config.internal_plugin_dir, name))
|
||||
plugin.folder = None # Suppress listing in Plugins prefs tab
|
||||
plugin.folder = None # Suppress listing in Plugins prefs tab
|
||||
internal.append(plugin)
|
||||
except Exception as e:
|
||||
logger.error(f'Failure loading internal Plugin "{name}"', exc_info=e)
|
||||
PLUGINS.extend(sorted(internal, key = lambda p: operator.attrgetter('name')(p).lower()))
|
||||
PLUGINS.extend(sorted(internal, key=lambda p: operator.attrgetter('name')(p).lower()))
|
||||
|
||||
# Add plugin folder to load path so packages can be loaded from plugin folder
|
||||
sys.path.append(config.plugin_dir)
|
||||
@ -199,7 +200,7 @@ def load_plugins(master):
|
||||
except Exception as e:
|
||||
logger.error(f'Failure loading found Plugin "{name}"', exc_info=e)
|
||||
pass
|
||||
PLUGINS.extend(sorted(found, key = lambda p: operator.attrgetter('name')(p).lower()))
|
||||
PLUGINS.extend(sorted(found, key=lambda p: operator.attrgetter('name')(p).lower()))
|
||||
|
||||
def provides(fn_name):
|
||||
"""
|
||||
|
@ -8,7 +8,6 @@ from platform import system
|
||||
import re
|
||||
import requests
|
||||
import sys
|
||||
import uuid
|
||||
import logging
|
||||
|
||||
import tkinter as tk
|
||||
@ -25,7 +24,7 @@ from companion import category_map
|
||||
|
||||
logger = logging.getLogger(appname)
|
||||
|
||||
this = sys.modules[__name__] # For holding module globals
|
||||
this = sys.modules[__name__] # For holding module globals
|
||||
|
||||
# Track location to add to Journal events
|
||||
this.systemaddress = None
|
||||
@ -61,15 +60,15 @@ class EDDN(object):
|
||||
try:
|
||||
# Try to open existing file
|
||||
self.replayfile = open(filename, 'r+', buffering=1)
|
||||
except Exception as e:
|
||||
except Exception:
|
||||
if exists(filename):
|
||||
raise # Couldn't open existing file
|
||||
raise # Couldn't open existing file
|
||||
else:
|
||||
self.replayfile = open(filename, 'w+', buffering=1) # Create file
|
||||
if sys.platform != 'win32': # open for writing is automatically exclusive on Windows
|
||||
lockf(self.replayfile, LOCK_EX|LOCK_NB)
|
||||
self.replayfile = open(filename, 'w+', buffering=1) # Create file
|
||||
if sys.platform != 'win32': # open for writing is automatically exclusive on Windows
|
||||
lockf(self.replayfile, LOCK_EX | LOCK_NB)
|
||||
except Exception as e:
|
||||
logger.debug(f'Failed opening "replay.jsonl"', exc_info=e)
|
||||
logger.debug('Failed opening "replay.jsonl"', exc_info=e)
|
||||
if self.replayfile:
|
||||
self.replayfile.close()
|
||||
self.replayfile = None
|
||||
@ -104,18 +103,12 @@ class EDDN(object):
|
||||
|
||||
r = self.session.post(self.UPLOAD, data=json.dumps(msg), timeout=self.TIMEOUT)
|
||||
if r.status_code != requests.codes.ok:
|
||||
logger.debug(f''':
|
||||
Status\t{r.status_code}
|
||||
URL\t{r.url}
|
||||
Headers\t{r.headers}'
|
||||
Content:\n{r.text}
|
||||
'''
|
||||
)
|
||||
logger.debug(f':\nStatus\t{r.status_code}URL\t{r.url}Headers\t{r.headers}Content:\n{r.text}')
|
||||
r.raise_for_status()
|
||||
|
||||
def sendreplay(self):
|
||||
if not self.replayfile:
|
||||
return # Probably closing app
|
||||
return # Probably closing app
|
||||
|
||||
status = self.parent.children['status']
|
||||
|
||||
@ -148,17 +141,18 @@ Content:\n{r.text}
|
||||
status['text'] = _("Error: Can't connect to EDDN")
|
||||
return # stop sending
|
||||
except Exception as e:
|
||||
logger.debug(f'Failed sending', exc_info=e)
|
||||
logger.debug('Failed sending', exc_info=e)
|
||||
status['text'] = str(e)
|
||||
return # stop sending
|
||||
return # stop sending
|
||||
|
||||
self.parent.after(self.REPLAYPERIOD, self.sendreplay)
|
||||
|
||||
def export_commodities(self, data, is_beta):
|
||||
commodities = []
|
||||
for commodity in data['lastStarport'].get('commodities') or []:
|
||||
if (category_map.get(commodity['categoryname'], True) and # Check marketable
|
||||
not commodity.get('legality')): # check not prohibited
|
||||
# Check 'marketable' and 'not prohibited'
|
||||
if (category_map.get(commodity['categoryname'], True)
|
||||
and not commodity.get('legality')):
|
||||
commodities.append(OrderedDict([
|
||||
('name', commodity['name'].lower()),
|
||||
('meanPrice', int(commodity['meanPrice'])),
|
||||
@ -446,7 +440,7 @@ def journal_entry(cmdr, is_beta, system, station, entry, state):
|
||||
logger.debug(f'Failed in export_journal_entry', exc_info=e)
|
||||
return _("Error: Can't connect to EDDN")
|
||||
except Exception as e:
|
||||
logger.debug(f'Failed in export_journal_entry', exc_info=e)
|
||||
logger.debug('Failed in export_journal_entry', exc_info=e)
|
||||
return str(e)
|
||||
|
||||
elif (config.getint('output') & config.OUT_MKT_EDDN and not state['Captain'] and
|
||||
@ -472,6 +466,7 @@ def journal_entry(cmdr, is_beta, system, station, entry, state):
|
||||
logger.debug(f'Failed exporting {entry["event"]}', exc_info=e)
|
||||
return str(e)
|
||||
|
||||
|
||||
def cmdr_data(data, is_beta):
|
||||
if data['commander'].get('docked') and config.getint('output') & config.OUT_MKT_EDDN:
|
||||
try:
|
||||
@ -492,9 +487,9 @@ def cmdr_data(data, is_beta):
|
||||
status.update_idletasks()
|
||||
|
||||
except requests.RequestException as e:
|
||||
logger.debug(f'Failed exporting data', exc_info=e)
|
||||
logger.debug('Failed exporting data', exc_info=e)
|
||||
return _("Error: Can't connect to EDDN")
|
||||
|
||||
except Exception as e:
|
||||
logger.debug(f'Failed exporting data', exc_info=e)
|
||||
logger.debug('Failed exporting data', exc_info=e)
|
||||
return str(e)
|
||||
|
@ -15,7 +15,9 @@ import json
|
||||
import requests
|
||||
import sys
|
||||
import time
|
||||
import urllib.request, urllib.error, urllib.parse
|
||||
import urllib.request
|
||||
import urllib.error
|
||||
import urllib.parse
|
||||
from queue import Queue
|
||||
from threading import Thread
|
||||
import logging
|
||||
@ -357,7 +359,10 @@ def worker():
|
||||
r.raise_for_status()
|
||||
reply = r.json()
|
||||
(msgnum, msg) = reply['msgnum'], reply['msg']
|
||||
# 1xx = OK, 2xx = fatal error, 3&4xx not generated at top-level, 5xx = error but events saved for later processing
|
||||
# 1xx = OK
|
||||
# 2xx = fatal error
|
||||
# 3&4xx not generated at top-level
|
||||
# 5xx = error but events saved for later processing
|
||||
if msgnum // 100 == 2:
|
||||
logger.warning(f'EDSM\t{msgnum} {msg}\t{json.dumps(pending, separators = (",", ": "))}')
|
||||
plug.show_error(_('Error: EDSM {MSG}').format(MSG=msg))
|
||||
@ -366,9 +371,11 @@ def worker():
|
||||
if not closing and e['event'] in ['StartUp', 'Location', 'FSDJump', 'CarrierJump']:
|
||||
# Update main window's system status
|
||||
this.lastlookup = r
|
||||
this.system_link.event_generate('<<EDSMStatus>>', when="tail") # calls update_status in main thread
|
||||
# calls update_status in main thread
|
||||
this.system_link.event_generate('<<EDSMStatus>>', when="tail")
|
||||
elif r['msgnum'] // 100 != 1:
|
||||
logger.warning(f'EDSM\t{r["msgnum"]} {r["msg"]}\t{json.dumps(e, separators = (",", ": "))}')
|
||||
logger.warning(f'EDSM\t{r["msgnum"]} {r["msg"]}\t'
|
||||
f'{json.dumps(e, separators = (",", ": "))}')
|
||||
pending = []
|
||||
|
||||
break
|
||||
|
@ -456,7 +456,7 @@ def journal_entry(cmdr, is_beta, system, station, entry, state):
|
||||
call()
|
||||
|
||||
except Exception as e:
|
||||
logger.debug(f'Adding events', exc_info=e)
|
||||
logger.debug('Adding events', exc_info=e)
|
||||
return str(e)
|
||||
|
||||
#
|
||||
@ -895,11 +895,11 @@ def worker():
|
||||
status = reply['header']['eventStatus']
|
||||
if callback:
|
||||
callback(reply)
|
||||
elif status // 100 != 2: # 2xx == OK (maybe with warnings)
|
||||
elif status // 100 != 2: # 2xx == OK (maybe with warnings)
|
||||
# Log fatal errors
|
||||
log.warning(f'Inara\t{status} {reply["header"].get("eventStatusText", "")}')
|
||||
log.debug(f'JSON data:\n{json.dumps(data, indent=2, separators = (",", ": "))}')
|
||||
plug.show_error(_('Error: Inara {MSG}').format(MSG = reply['header'].get('eventStatusText', status)))
|
||||
logger.warning(f'Inara\t{status} {reply["header"].get("eventStatusText", "")}')
|
||||
logger.debug(f'JSON data:\n{json.dumps(data, indent=2, separators = (",", ": "))}')
|
||||
plug.show_error(_('Error: Inara {MSG}').format(MSG=reply['header'].get('eventStatusText', status)))
|
||||
else:
|
||||
# Log individual errors and warnings
|
||||
for data_event, reply_event in zip(data['events'], reply['events']):
|
||||
@ -907,17 +907,20 @@ def worker():
|
||||
logger.warning(f'Inara\t{status} {reply_event.get("eventStatusText", "")}')
|
||||
logger.debug(f'JSON data:\n{json.dumps(data_event)}')
|
||||
if reply_event['eventStatus'] // 100 != 2:
|
||||
plug.show_error(_('Error: Inara {MSG}').format(MSG = '%s, %s' % (data_event['eventName'], reply_event.get('eventStatusText', reply_event['eventStatus']))))
|
||||
plug.show_error(_('Error: Inara {MSG}').format(
|
||||
MSG=f'{data_event["eventName"]},'
|
||||
f'{reply_event.get("eventStatusText", reply_event["eventStatus"])}'))
|
||||
if data_event['eventName'] in ['addCommanderTravelCarrierJump', 'addCommanderTravelDock', 'addCommanderTravelFSDJump', 'setCommanderTravelLocation']:
|
||||
this.lastlocation = reply_event.get('eventData', {})
|
||||
this.system_link.event_generate('<<InaraLocation>>', when="tail") # calls update_location in main thread
|
||||
elif data_event['eventName'] in ['addCommanderShip', 'setCommanderShip']:
|
||||
this.lastship = reply_event.get('eventData', {})
|
||||
this.system_link.event_generate('<<InaraShip>>', when="tail") # calls update_ship in main thread
|
||||
# calls update_ship in main thread
|
||||
this.system_link.event_generate('<<InaraShip>>', when="tail")
|
||||
|
||||
break
|
||||
except Exception as e:
|
||||
logger.debug(f'Sending events', exc_info=e)
|
||||
logger.debug('Sending events', exc_info=e)
|
||||
retrying += 1
|
||||
else:
|
||||
if callback:
|
||||
|
Loading…
x
Reference in New Issue
Block a user