Merge pull request #198 from pikers/msgspec_fixes

Msgspec fixes
window_cuckery
goodboy 2021-06-14 08:53:51 -04:00 committed by GitHub
commit 8cde68fedb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 15 additions and 5 deletions

View File

@ -282,7 +282,6 @@ class Client:
pattern: str, pattern: str,
# how many contracts to search "up to" # how many contracts to search "up to"
upto: int = 3, upto: int = 3,
asdicts: bool = True,
) -> Dict[str, ContractDetails]: ) -> Dict[str, ContractDetails]:
"""Search for stocks matching provided ``str`` pattern. """Search for stocks matching provided ``str`` pattern.
@ -304,11 +303,17 @@ class Client:
# XXX: if there is more then one entry in the details list # XXX: if there is more then one entry in the details list
details = {} details = {}
for details_set in results: for details_set in results:
# then the contract is so called "ambiguous". # then the contract is so called "ambiguous".
for d in details_set: for d in details_set:
con = d.contract con = d.contract
unique_sym = f'{con.symbol}.{con.primaryExchange}' unique_sym = f'{con.symbol}.{con.primaryExchange}'
details[unique_sym] = asdict(d) if asdicts else d
as_dict = asdict(d)
# nested dataclass we probably don't need and that won't IPC serialize
as_dict.pop('secIdList')
details[unique_sym] = as_dict
if len(details) == upto: if len(details) == upto:
return details return details
@ -1086,6 +1091,9 @@ async def stream_quotes(
syminfo = asdict(details) syminfo = asdict(details)
syminfo.update(syminfo['contract']) syminfo.update(syminfo['contract'])
# nested dataclass we probably don't need and that won't IPC serialize
syminfo.pop('secIdList')
# TODO: more consistent field translation # TODO: more consistent field translation
atype = syminfo['asset_type'] = asset_type_map[syminfo['secType']] atype = syminfo['asset_type'] = asset_type_map[syminfo['secType']]

View File

@ -97,8 +97,7 @@ class _Token:
def __post_init__(self): def __post_init__(self):
# np.array requires a list for dtype # np.array requires a list for dtype
self.dtype_descr = np.dtype( self.dtype_descr = np.dtype(list(map(tuple, self.dtype_descr))).descr
list(self.dtype_descr)).descr
def as_msg(self): def as_msg(self):
return asdict(self) return asdict(self)

View File

@ -514,7 +514,10 @@ async def open_feed(
# cast shm dtype to list... can't member why we need this # cast shm dtype to list... can't member why we need this
shm_token = data['shm_token'] shm_token = data['shm_token']
shm_token['dtype_descr'] = list(shm_token['dtype_descr'])
# XXX: msgspec won't relay through the tuples XD
shm_token['dtype_descr'] = list(map(tuple, shm_token['dtype_descr']))
assert shm_token == shm.token # sanity assert shm_token == shm.token # sanity
feed._max_sample_rate = max(ohlc_sample_rates) feed._max_sample_rate = max(ohlc_sample_rates)