Adjust checker to not require client methods, add `trades_dialogue()` endpoint

ib_checker_hackz
Tyler Goodlet 2022-06-06 16:27:11 -04:00
parent d5ffad01b7
commit d641f77a80
1 changed files with 69 additions and 38 deletions

View File

@ -21,11 +21,15 @@ import os
from functools import partial from functools import partial
from operator import attrgetter from operator import attrgetter
from operator import itemgetter from operator import itemgetter
from typing import (
Any,
)
import click import click
import trio import trio
import tractor import tractor
# from .._daemon import maybe_open_runtime
from ..cli import cli from ..cli import cli
from .. import watchlists as wl from .. import watchlists as wl
from ..log import get_console_log, colorize_json, get_logger from ..log import get_console_log, colorize_json, get_logger
@ -58,44 +62,65 @@ def brokercheck(config, broker):
def print_error(s: str, **kwargs): def print_error(s: str, **kwargs):
print(FAIL + s + ENDC, **kwargs) print(FAIL + s + ENDC, **kwargs)
async def run_method(client, meth_name: str, **kwargs): async def run_method(
client,
meth_name: str,
**kwargs,
) -> Any:
print(f'checking client for method \'{meth_name}\'...', end='', flush=True) print(f'checking client for method \'{meth_name}\'...', end='', flush=True)
method = getattr(client, meth_name, None) method = getattr(client, meth_name, None)
assert method assert method, f'.{meth_name} does not exist for {client}!'
print_ok('found!, running...', end='', flush=True) print_ok('found!, running...', end='', flush=True)
result = await method(**kwargs) result = await method(**kwargs)
print_ok(f'done! result: {type(result)}') print_ok(f'done! result: {type(result)}')
return result return result
async def run_test(broker_name: str): async def run_test(broker_name: str):
brokermod = get_brokermod(broker_name) brokermod = get_brokermod(broker_name)
total = 0 total = 0
passed = 0 passed = 0
failed = 0 failed = 0
print(f'getting client...', end='', flush=True) print('getting client...', end='', flush=True)
if not hasattr(brokermod, 'get_client'): if not hasattr(brokermod, 'get_client'):
print_error('fail! no \'get_client\' context manager found.') print_error('fail! no \'get_client\' context manager found.')
return return
async with brokermod.get_client() as client: # extra_tractor_kwargs = getattr(
print_ok(f'done! inside client context.') # brokermod,
# '_spawn_kwargs',
# {},
# )
async with (
# TODO: in theory we can actually spawn a local `brokerd`
# and then try to make some basic feed queries?
# maybe_open_runtime(**extra_tractor_kwargs),
brokermod.get_client(is_brokercheck=True) as client,
):
print_ok('done! inside client context.')
# check for methods present on brokermod # check for methods present on brokermod
method_list = [ method_list = [
'stream_messages', # not required eps i'm pretty sure?
# 'backfill_bars',
# 'stream_messages',
'open_history_client', 'open_history_client',
'backfill_bars',
'stream_quotes', 'stream_quotes',
'open_symbol_search' 'open_symbol_search',
'trades_dialogue',
] ]
for method in method_list: for method in method_list:
print( print(
f'checking brokermod for method \'{method}\'...', f"checking brokermod for method '{method}'...",
end='', flush=True) end='',
flush=True,
)
if not hasattr(brokermod, method): if not hasattr(brokermod, method):
print_error(f'fail! method \'{method}\' not found.') print_error(f"fail! method '{method}' not found.")
failed += 1 failed += 1
else: else:
print_ok('done!') print_ok('done!')
@ -103,10 +128,16 @@ def brokercheck(config, broker):
total += 1 total += 1
# check for methods present con brokermod.Client and their # check for methods present con brokermod.Client and attempt
# results # to use them and gather output results.
symbol_info = getattr(client, 'symbol_info', None)
if symbol_info:
syms = await run_method(
client,
'symbol_info',
)
syms = await run_method(client, 'symbol_info')
total += 1 total += 1
if len(syms) == 0: if len(syms) == 0: