Fix mayor bug found by fomo, sym info getting stored incorrectly on pps.toml causing it to load pp wrong on second open, also fix header leak bug

decimalization_take_2
Guillermo Rodriguez 2023-03-01 16:44:46 -03:00
parent 20d91f5e06
commit d704b153ca
No known key found for this signature in database
GPG Key ID: EC3AB66D5D83B392
2 changed files with 21 additions and 10 deletions

View File

@ -237,6 +237,7 @@ def write(
config: dict, # toml config as dict config: dict, # toml config as dict
name: str = 'brokers', name: str = 'brokers',
path: str = None, path: str = None,
fail_empty: bool = True,
**toml_kwargs, **toml_kwargs,
) -> None: ) -> None:
@ -252,7 +253,7 @@ def write(
log.debug(f"Creating config dir {_config_dir}") log.debug(f"Creating config dir {_config_dir}")
os.makedirs(dirname) os.makedirs(dirname)
if not config: if not config and fail_empty:
raise ValueError( raise ValueError(
"Watch out you're trying to write a blank config!") "Watch out you're trying to write a blank config!")

View File

@ -22,6 +22,7 @@ that doesn't try to cuk most humans who prefer to not lose their moneys..
''' '''
from __future__ import annotations from __future__ import annotations
from contextlib import contextmanager as cm from contextlib import contextmanager as cm
from pathlib import Path
from decimal import Decimal, ROUND_HALF_EVEN from decimal import Decimal, ROUND_HALF_EVEN
from pprint import pformat from pprint import pformat
import os import os
@ -198,11 +199,9 @@ class Position(Struct):
sym_info = s.broker_info[broker] sym_info = s.broker_info[broker]
d['symbol'] = { d['symbol'] = {
'info': { 'asset_type': sym_info['asset_type'],
'asset_type': sym_info['asset_type'], 'price_tick_size': sym_info['price_tick_size'],
'price_tick_size': sym_info['price_tick_size'], 'lot_tick_size': sym_info['lot_tick_size']
'lot_tick_size': sym_info['lot_tick_size']
}
} }
if self.expiry is None: if self.expiry is None:
@ -693,11 +692,20 @@ class PpTable(Struct):
''' '''
# TODO: show diff output? # TODO: show diff output?
# https://stackoverflow.com/questions/12956957/print-diff-of-python-dictionaries # https://stackoverflow.com/questions/12956957/print-diff-of-python-dictionaries
log.info(f'Updating ``pps.toml`` for {path}:\n')
# active, closed_pp_objs = table.dump_active() # active, closed_pp_objs = table.dump_active()
pp_entries = self.to_toml() pp_entries = self.to_toml()
log.info(f'Current positions:\n{pp_entries}') if pp_entries:
self.conf[self.brokername][self.acctid] = pp_entries log.info(f'Updating ``pps.toml`` for {path}:\n')
log.info(f'Current positions:\n{pp_entries}')
self.conf[self.brokername][self.acctid] = pp_entries
elif (
self.brokername in self.conf and
self.acctid in self.conf[self.brokername]
):
del self.conf[self.brokername][self.acctid]
if len(self.conf[self.brokername]) == 0:
del self.conf[self.brokername]
# TODO: why tf haven't they already done this for inline # TODO: why tf haven't they already done this for inline
# tables smh.. # tables smh..
@ -711,6 +719,7 @@ class PpTable(Struct):
self.conf, self.conf,
'pps', 'pps',
encoder=enc, encoder=enc,
fail_empty=False
) )
@ -972,7 +981,8 @@ def open_pps(
expiry = pendulum.parse(expiry) expiry = pendulum.parse(expiry)
pp = pp_objs[bsuid] = Position( pp = pp_objs[bsuid] = Position(
Symbol.from_fqsn(fqsn, info={}), Symbol.from_fqsn(
fqsn, entry['symbol']),
size=size, size=size,
ppu=ppu, ppu=ppu,
split_ratio=split_ratio, split_ratio=split_ratio,