From 501fe9acd426111fe19a0ea903900ec022eb8eef Mon Sep 17 00:00:00 2001 From: Guillermo Rodriguez Date: Wed, 1 Mar 2023 16:44:46 -0300 Subject: [PATCH] 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 --- piker/config.py | 3 ++- piker/pp.py | 28 +++++++++++++++++++--------- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/piker/config.py b/piker/config.py index 8bf1475940..3ae6a66520 100644 --- a/piker/config.py +++ b/piker/config.py @@ -237,6 +237,7 @@ def write( config: dict, # toml config as dict name: str = 'brokers', path: str = None, + fail_empty: bool = True, **toml_kwargs, ) -> None: @@ -252,7 +253,7 @@ def write( log.debug(f"Creating config dir {_config_dir}") os.makedirs(dirname) - if not config: + if not config and fail_empty: raise ValueError( "Watch out you're trying to write a blank config!") diff --git a/piker/pp.py b/piker/pp.py index 33040654fb..5d792aec00 100644 --- a/piker/pp.py +++ b/piker/pp.py @@ -22,6 +22,7 @@ ''' from __future__ import annotations from contextlib import contextmanager as cm +from pathlib import Path from decimal import Decimal, ROUND_HALF_EVEN from pprint import pformat import os @@ -198,11 +199,9 @@ def to_pretoml(self) -> tuple[str, dict]: sym_info = s.broker_info[broker] d['symbol'] = { - 'info': { - 'asset_type': sym_info['asset_type'], - 'price_tick_size': sym_info['price_tick_size'], - 'lot_tick_size': sym_info['lot_tick_size'] - } + 'asset_type': sym_info['asset_type'], + 'price_tick_size': sym_info['price_tick_size'], + 'lot_tick_size': sym_info['lot_tick_size'] } if self.expiry is None: @@ -693,11 +692,20 @@ def write_config(self) -> None: ''' # TODO: show diff output? # 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() pp_entries = self.to_toml() - log.info(f'Current positions:\n{pp_entries}') - self.conf[self.brokername][self.acctid] = pp_entries + if 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 # tables smh.. @@ -711,6 +719,7 @@ def write_config(self) -> None: self.conf, 'pps', encoder=enc, + fail_empty=False ) @@ -972,7 +981,8 @@ def open_pps( expiry = pendulum.parse(expiry) pp = pp_objs[bsuid] = Position( - Symbol.from_fqsn(fqsn, info={}), + Symbol.from_fqsn( + fqsn, entry['symbol']), size=size, ppu=ppu, split_ratio=split_ratio,