1
0
mirror of https://github.com/EDCD/EDMarketConnector.git synced 2025-06-08 03:12:33 +03:00

CAPI: EDMC - converted to the queue request/response format

This commit is contained in:
Athanasius 2021-08-24 12:56:12 +01:00
parent 3df688ecd4
commit 332d4cf975
No known key found for this signature in database
GPG Key ID: AE3E527847057C7D
2 changed files with 38 additions and 5 deletions

37
EDMC.py
View File

@ -6,9 +6,11 @@ import argparse
import json import json
import locale import locale
import os import os
import queue
import re import re
import sys import sys
from os.path import getmtime, join from os.path import getmtime, join
from queue import Queue
from time import sleep, time from time import sleep, time
from typing import TYPE_CHECKING, Any, List, Optional from typing import TYPE_CHECKING, Any, List, Optional
@ -270,9 +272,40 @@ sys.path: {sys.path}'''
companion.session.login(monitor.cmdr, monitor.is_beta) companion.session.login(monitor.cmdr, monitor.is_beta)
# Set up the response queue
capi_response_queue: Queue = Queue()
companion.session.set_capi_response_queue(capi_response_queue)
# Initiate CAPI queries
querytime = int(time()) querytime = int(time())
data = companion.session.station() companion.session.station(query_time=querytime)
config.set('querytime', querytime)
# Wait for the response
_capi_request_timeout = 60
try:
capi_response = capi_response_queue.get(block=True, timeout=_capi_request_timeout)
except queue.Empty:
logger.error(f'CAPI requests timed out after {_capi_request_timeout} seconds')
sys.exit(EXIT_SERVER)
else:
if isinstance(capi_response, companion.CAPIFailedRequest):
logger.trace_if('capi.worker', f'Failed Request: {capi_response.message}')
if capi_response.exception:
raise capi_response.exception
else:
raise ValueError(capi_response.message)
logger.trace_if('capi.worker', 'Answer is not a Failure')
if not isinstance(capi_response, companion.EDMCCAPIResponse):
msg = f"Response was neither CAPIFailedRequest nor EDMCAPIResponse: {type(capi_response)}"
logger.error(msg)
raise ValueError(msg)
data = capi_response.capi_data
config.set('querytime', querytime)
# Validation # Validation
if not deep_get(data, 'commander', 'name', default='').strip(): if not deep_get(data, 'commander', 'name', default='').strip():

View File

@ -587,7 +587,7 @@ class Session(object):
self.tk_master: Optional[tk.Tk] = None self.tk_master: Optional[tk.Tk] = None
self.capi_raw_data = CAPIDataRaw() self.capi_raw_data = CAPIDataRaw()
logger.info('Starting CAPI queries thread...') logger.debug('Starting CAPI queries thread...')
self.capi_response_queue: Queue self.capi_response_queue: Queue
self.capi_query_queue: Queue = Queue() self.capi_query_queue: Queue = Queue()
self.capi_query_thread = threading.Thread( self.capi_query_thread = threading.Thread(
@ -596,7 +596,7 @@ class Session(object):
name='CAPI worker' name='CAPI worker'
) )
self.capi_query_thread.start() self.capi_query_thread.start()
logger.info('Done') logger.debug('Done')
def set_capi_response_queue(self, capi_response_queue: Queue) -> None: def set_capi_response_queue(self, capi_response_queue: Queue) -> None:
"""Set a reference to the CAPI response data queue.""" """Set a reference to the CAPI response data queue."""
@ -711,7 +711,7 @@ class Session(object):
###################################################################### ######################################################################
def capi_query_worker(self): # noqa: C901, CCR001 def capi_query_worker(self): # noqa: C901, CCR001
"""Worker thread that performs actual CAPI queries.""" """Worker thread that performs actual CAPI queries."""
logger.info('CAPI worker thread starting') logger.debug('CAPI worker thread starting')
def capi_single_query(capi_endpoint: str, timeout: int = capi_default_timeout) -> CAPIData: # noqa: CCR001 def capi_single_query(capi_endpoint: str, timeout: int = capi_default_timeout) -> CAPIData: # noqa: CCR001
""" """