1
0
mirror of https://github.com/EDCD/EDMarketConnector.git synced 2025-04-18 01:52:20 +03:00

251 Commits

Author SHA1 Message Date
Athanasius
26caf76cf4
CAPI: Declare request/response queue member types 2021-08-25 11:56:32 +01:00
Athanasius
027455984b
CAPI: EDMCCAPIFailedRequest itself, not inside a tuple
* Also str(e.args) when setting the message.
2021-08-25 11:53:04 +01:00
Athanasius
e1c6a0e9f8
CAPI: Create response queue in companion.Session
No need to create in callers and then use setter.
2021-08-25 11:50:56 +01:00
Athanasius
69d0d03b9b
CAPI: Rename to EDMCCAPIFailedRequest & comment queues
* The 'EDMC' prefix on all these classes is to make it clear they're for
  internal passing around of requests/responses, rather than holding the
  literal raw CAPI request and response.

* The request and response queues are now commented, including the
  detail that the response queue is created by the caller and then set
  'here' by Session.set_capi_response_queue().
2021-08-25 11:42:53 +01:00
Athanasius
2e27a2ba00
CAPIData: Make JSON encodable, and use that elsewhere
* It's no use `dict(CAPIData)` if that contains other `CAPIData`.  So,
  rather than write something to do that recursively just implement a
  simple JSON Encoder class and specify its use.
2021-08-24 13:22:13 +01:00
Athanasius
332d4cf975
CAPI: EDMC - converted to the queue request/response format 2021-08-24 12:56:12 +01:00
Athanasius
1dcefafc73
CAPI: Pass tk_response_event in Request to optionally use in response
EDMC.py will also need to make CAPI queries using the new threaded
method, but it has no tkinter, thus we need to pass in the event name
when we expect one to be generated, and only generate it if this is not
None.
2021-08-24 12:41:02 +01:00
Athanasius
1c93c3a9fa
CAPI: 'Save Raw Data' now using cached copy
It will write a file containing JSON that has a top level dict with a
key per endpoint we have data for, and within each of those a dict with
keys for query_time and the raw_data.

Everything from the opening `{` in that raw_data value until the
matching closing `}` is the raw data from the CAPI service.

The whole file happily goes through `jq -S -C '.'` to examine the
output.
2021-08-23 18:29:37 +01:00
Athanasius
c71fe042cd
companion: Saw *raw* copies of CAPI data
* Using global dict on class CAPIDataRaw as there should only ever be
  one of these.  *Any* querying of CAPI should record the response data
  in this single place.

* But as there'll be multiple endpoints recorded, class
  CAPIDataRawEndpoint uses instance variables.

* It is the raw string from
  `requests.Response.content.decode(encoding='utf-8')` that is recorded,
  not the result of JSON decoding.

* The recording happens in the worker capi_single_query() so it's as
  close as possible to where the data came back.  The query_time is
  allowed to take on the default utc_now() value, rather than matching
  the nominal query_time of the request as passed in.
2021-08-23 18:29:36 +01:00
Athanasius
d53b567fca
CAPI: s/querytime/query_time/ in variable names
But not in the config setting, as that would require a migration.
2021-08-23 18:29:36 +01:00
Athanasius
f80623e025
CAPI: Convert full Update flow to class passing
* Base the following on common EDMCCAPIReturn: EDMCFailedrequest,
  EDMCCAPIRequest, EDMCCAPIResponse.  This saves repeating a bunch of
  variable types and comments.
* Use the above throughout the 'Update' button flow.
* Still need to address 'Save Raw Data', i.e. AppWindow.save_raw().
2021-08-23 18:29:36 +01:00
Athanasius
c6f93bd3c6
companion: Update "close down" check for using EDMCAPIRequest 2021-08-23 18:29:36 +01:00
Athanasius
dc705b92e5
companion: Convert to EDMCCAPIRequest class, not bare tuple 2021-08-23 18:29:36 +01:00
Athanasius
92e3ce9f4b
CAPI: Notes/dummy classes for using them to encapsulate requests/responses 2021-08-23 18:29:35 +01:00
Athanasius
3f817c0fc0
companion: TODO: store /profile data for use elsewhere 2021-08-23 18:29:35 +01:00
Athanasius
e5d200311e
companion: mypy pass
* Still need to change stats.py to use a cached copy of CAPI data,
  rather than it querying that itself.  That means actually storing that
  cached copy whilst in the capi worker.
2021-08-23 18:29:35 +01:00
Athanasius
62b1f0dd0d
companion: flake8 pass 2021-08-23 18:29:35 +01:00
Athanasius
c1deb9113e
CAPI: 'station' query going via work queue
* Defined inner functions in the worker function to handle the actual
  queries.  This allows for *them* to simply return data or raise
  exceptions to be caught by the main worker function.  *IT* then
  handles returning any error appropriately via the queue to AppWindow.

* Due to the coupling between AppWindow and these queries there are
  several extra parameters passed into the queue worker and then back
  out.  This is largely due to having to split AppWindow.getandsend()
  into two functions: capi_request_data() and capi_handle_response().

  This might get changed to use a class to encapsulate those values,
  rather than the bare tuple currently being used.

* No full flake8 & mypy pass done yet.

* Some companion.py globals renamed so their use is more obvious.
2021-08-23 18:29:34 +01:00
Athanasius
3fe097a955
companion: Start moving CAPI 'station' query into thread worker 2021-08-23 18:29:34 +01:00
Athanasius
305ba157ec
companion: s/URL_SHIPYARD/Session.FRONTIER_CAPI_PATH_SHIPYARD/g 2021-08-23 18:29:34 +01:00
Athanasius
58ea0abd5e
companion: s/URL_MARKET/Session.FRONTIER_CAPI_PATH_MARKET/g 2021-08-23 18:29:34 +01:00
Athanasius
6f9f71d699
companion: s/FRONTIER_PATH/FRONTIER_AUTH_PATH/g
This is so as to keep Frontier *auth* separate from Frontier *CAPI*.
2021-08-23 18:29:34 +01:00
Athanasius
661ffb100b
companion: URL_DECODE -> Auth.FRONTIER_PATH_DECODE 2021-08-23 18:29:33 +01:00
Athanasius
52a6eeb82a
companion: URL_TOKEN -> Auth.FRONTIER_PATH_TOKEN
Also, rename FRONTIER_AUTH_PATH to FRONTIER_PATH_AUTH.
2021-08-23 18:29:33 +01:00
Athanasius
f5bde2dcc6
companion: Rename URL_AUTH to FRONTIER_AUTH_PATH, in class Auth 2021-08-23 18:29:33 +01:00
Athanasius
a823106556
companion: Rename SERVER_AUTH to FRONTIER_AUTH_SERVER
Also moves back to global scope, as it's used in both Auth and Session
classes.
2021-08-23 18:29:33 +01:00
Athanasius
692b014cda
companion: Correct import order of tkinter 2021-08-23 18:29:33 +01:00
Athanasius
23e67dab82
companion: Move global constants into appropriate classes 2021-08-23 18:29:32 +01:00
Athanasius
454c9f3d0c
CAPI: Continuing code moving/cleanup up/testing
1. Sending back a spurious CredentialsError() to check it's now handled,
   but other issues blocking the code from getting there currently.
2. Move the "Update suit data from CAPI" call into the AppWindow
   handler.
3. Move some more of the old query() exception handling into the worker.
4. session.query() no longer returns anything, and neither should
   anything that calls it (like session.station()).  This is going to
   take quite some unwinding and code moving.
2021-08-23 18:29:32 +01:00
Athanasius
018b4563b3
CAPI: return good data from worker & start handling reauth 2021-08-23 18:29:32 +01:00
Athanasius
ce02cfdf2d
CAPI: Remove "test failure propogration" forced error 2021-08-23 18:29:32 +01:00
Athanasius
655c7ea1ca
CAPI: Some progress in using a Queue to signal result/error
Due to main app being Tk we can't just use Python async functionality.

So instead we have a class to hold a message and optional exception.
And instance of that goes into a queue.
The reading of that in the main thread is triggered by sending a Tk
event.

Much more to come.
2021-08-23 18:29:31 +01:00
Athanasius
11916f1387
companion; Dummy CAPI worker enqueue to test code
This properly triggered the logging in the worker thread
2021-08-23 18:29:30 +01:00
Athanasius
9661d770cb
companion: Implement, and use, asking CAPI thread to close down 2021-08-23 18:29:30 +01:00
Athanasius
c5af0a3397
companion: Create CAPI worker thread on startup
Confirmed to also *not* block shutdown currently
2021-08-23 18:29:30 +01:00
Athanasius
d0e1391238
companion: More function reordering, and comment-marking of sections
The file has:

1a. class Session - Frontier Auth
1b. class Session - CAPI queries
1c. class Session - Utility functions (to do with CAPI query data, but
  not directly about *making* those queries.
2. Some non-class utility functions.
2021-08-23 18:29:30 +01:00
Athanasius
c01438f77e
companion: Move start_frontier_auth() above login()
The former will be used by the latter, so this makes more sense when
reading the code.

In general I'm going to ensure there are two sections to this Session
class:

1. Frontier Auth code.
2. CAPI query code.

Yes, ideally I'd split it into two classes.  But that kind of
refactoring isn't for *this* branch.  I just want things straight in my
head for the "make CAPI queries run in a thread" changes.
2021-08-23 18:29:29 +01:00
Athanasius
81b5d015fd
Frontier Auth: Rename start() method to something more obvious 2021-08-23 18:29:29 +01:00
Athanasius
7339cc59ed
companion: Fix class Session docstring
This is *not* only for the Frontier oAuth2 authn, it's also for the
actual CAPI queries.
2021-08-23 18:29:15 +01:00
e6c6f7f155
companion.py: Move check for CAPI pretend down 2021-08-16 15:30:14 +03:00
b30b25216b
companion.py: change raising exception when pretending CAPI down 2021-08-16 15:24:01 +03:00
2e90a1bbe9
Remove raise CAPI pretend down on auth requests, add endpoint for which CAPI pretend down raising 2021-08-16 14:40:46 +03:00
92b131f81a
companion.py: reorder conf_module import for isort 2021-08-13 23:07:18 +03:00
d068dc7620
Merge branch 'develop' into enhancement/1096/CAPI-pretend-down-CL-arg 2021-08-13 23:04:42 +03:00
01bd637730
Add CL arg --capi-pretend-down in order to pretend that CAPI is down 2021-08-13 21:47:47 +03:00
Athanasius
7149f7e792
companion: Change trace_if 'capi-query' to 'capi.query' 2021-08-13 15:20:42 +01:00
Athanasius
df84b8aa64
companion: Change logger.trace to logger.trace_if
This adds only 'capi-query' to --trace-on possibilities.
2021-08-13 15:14:01 +01:00
Athanasius
bb54bc25b4
companion: Clean up some flake8 and mypy gripes 2021-08-07 14:08:16 +01:00
inb
f1ef557dee re #1198 work around +size suffixes in CAPI responses
Co-authored-by: A_D <A-UNDERSCORE-D@users.noreply.github.com>
2021-08-06 20:59:04 +01:00
Athanasius
713b6b753d CAPI: Catch where we're CAPI-docked, but monitor.station is None
Docked at an EDO settlement means CAPI says we are, but we've forgotten
monitor.station because there's not enough Journal information and too
many corner cases to be *sure* of re-using old data.
2021-06-13 20:09:00 +01:00