From 8f9c4ba48ccf695b48d718c6d95a8b717ef85a4c Mon Sep 17 00:00:00 2001 From: The MMGen Project Date: Fri, 17 Oct 2025 09:08:00 +0000 Subject: [PATCH] mmnode-ticker --sort: handle missing entries in source data --- mmgen_node_tools/Ticker.py | 19 ++++++++++--------- mmgen_node_tools/data/version | 2 +- test/cmdtest_d/misc.py | 5 ++++- test/ref/ticker/ticker-cfg-bad.yaml | 11 +++++++++++ 4 files changed, 26 insertions(+), 11 deletions(-) create mode 100644 test/ref/ticker/ticker-cfg-bad.yaml diff --git a/mmgen_node_tools/Ticker.py b/mmgen_node_tools/Ticker.py index d3045d4..925a4f9 100755 --- a/mmgen_node_tools/Ticker.py +++ b/mmgen_node_tools/Ticker.py @@ -41,14 +41,14 @@ percent_cols = { 'm': 'month', 'y': 'year'} -sp = namedtuple('sort_parameter', ['key', 'desc']) +sp = namedtuple('sort_parameter', ['key', 'sort_dfl', 'desc']) sort_params = { - 'd': sp('percent_change_24h', '1-day % change'), - 'w': sp('percent_change_7d', '1-week % change'), - 'm': sp('percent_change_30d', '1-month % change'), - 'y': sp('percent_change_1y', '1-year % change'), - 'p': sp('price_usd', 'asset price'), - 'c': sp('market_cap', 'market cap')} + 'd': sp('percent_change_24h', 0.0, '1-day % change'), + 'w': sp('percent_change_7d', 0.0, '1-week % change'), + 'm': sp('percent_change_30d', 0.0, '1-month % change'), + 'y': sp('percent_change_1y', 0.0, '1-year % change'), + 'p': sp('price_usd', Decimal(0), 'asset price'), + 'c': sp('market_cap', 0, 'market cap')} class RowDict(dict): @@ -915,8 +915,9 @@ class Ticker: if cfg.sort: code, reverse = cfg.sort key = sort_params[code].key - sort_func = lambda row: data[row.id][key] - pf_sort_func = lambda row: data[row[0]][key] + sort_dfl = sort_params[code].sort_dfl + sort_func = lambda row: data.get(row.id, {key: sort_dfl})[key] + pf_sort_func = lambda row: data.get(row[0], {key: sort_dfl})[key] for group in self.rows.keys(): if group not in self.hidden_groups: self.rows[group] = sorted(self.rows[group], key=sort_func, reverse=reverse) diff --git a/mmgen_node_tools/data/version b/mmgen_node_tools/data/version index 1de14a5..6eb528d 100644 --- a/mmgen_node_tools/data/version +++ b/mmgen_node_tools/data/version @@ -1 +1 @@ -3.6.dev7 +3.6.dev8 diff --git a/test/cmdtest_d/misc.py b/test/cmdtest_d/misc.py index 9060731..a3edd34 100755 --- a/test/cmdtest_d/misc.py +++ b/test/cmdtest_d/misc.py @@ -380,10 +380,13 @@ class CmdTestScripts(CmdTestBase): add_opts = ['--add-columns=eurusd=x']) def ticker22(self): - return self.ticker( + self.copy_file('ticker-cfg-bad.yaml', 'ticker-cfg.yaml') + t = self.ticker( [], ['MONERO', 'ETHEREUM', 'BITCOIN', 'SILVER', 'BRENT', 'GOLD'], add_opts = ['--name-labels', '--sort=rp']) + self.rm_file('ticker-cfg.yaml') + return t def ticker23(self): return self.ticker( diff --git a/test/ref/ticker/ticker-cfg-bad.yaml b/test/ref/ticker/ticker-cfg-bad.yaml new file mode 100644 index 0000000..da670c6 --- /dev/null +++ b/test/ref/ticker/ticker-cfg-bad.yaml @@ -0,0 +1,11 @@ +assets: + coin1: + - btc-bitcoin + - ltc-litecoin + - eth-ethereum + - xmr-monero + - bad-badcoin + commodity: + - gc=f + - si=f + - bz=f