From e6d62fd18b2d9e5885ce4452c843850871550f60 Mon Sep 17 00:00:00 2001 From: The MMGen Project Date: Thu, 16 Oct 2025 17:09:15 +0000 Subject: [PATCH] mmnode-ticker: display coin ranking in first column --- mmgen_node_tools/Ticker.py | 40 +++++++++++++++++++++++--------------- test/cmdtest_d/misc.py | 14 ++++++------- 2 files changed, 31 insertions(+), 23 deletions(-) diff --git a/mmgen_node_tools/Ticker.py b/mmgen_node_tools/Ticker.py index 6aef36f..a8b6595 100755 --- a/mmgen_node_tools/Ticker.py +++ b/mmgen_node_tools/Ticker.py @@ -865,6 +865,7 @@ class Ticker: offer = None to_asset = None + hidden_groups = ('extra',) def __init__(self, data): @@ -876,6 +877,14 @@ class Ticker: self.rows = RowDict( {k: tuple(row._replace(id=self.get_id(row)) for row in v) for k, v in cfg.rows.items()}) + + if cfg.asset_range: + self.max_rank = 0 + for group, rows in self.rows.items(): + if group not in self.hidden_groups: + for row in rows: + self.max_rank = max(self.max_rank, int(data[row.id]['rank'])) + self.col_usd_prices = {k: self.data[k]['price_usd'] for k in self.col_ids} self.prices = {row.id: self.get_row_prices(row.id) for row in self.rows if row.id in data} self.prices['usd-us-dollar'] = self.get_row_prices('usd-us-dollar') @@ -931,6 +940,15 @@ class Ticker: return self.data[id]['name'].upper() def gen_output(self): + + def process_rows(rows): + yield '-' * self.hl_wid + for row in rows: + try: + yield self.fmt_row(self.data[row.id]) + except KeyError: + yield gray(f'(no data for {row.id})') + yield 'Current time: {}'.format(cyan(time.strftime('%F %X', time.gmtime(now)) + ' UTC')) for asset in self.usr_col_assets: @@ -961,21 +979,11 @@ class Ticker: yield self.table_hdr if cfg.asset_range: - yield '-' * self.hl_wid - for n, row in enumerate(self.rows['asset_list'], cfg.asset_range[0]): - try: - yield self.fmt_row(self.data[row.id], idx=n) - except KeyError: - yield gray(f'(no data for {row.id})') + yield from process_rows(self.rows['asset_list']) else: for rows in self.rows.values(): if rows: - yield '-' * self.hl_wid - for row in rows: - try: - yield self.fmt_row(self.data[row.id]) - except KeyError: - yield gray(f'(no data for {row.id})') + yield from process_rows(rows) yield '-' * self.hl_wid @@ -1028,7 +1036,7 @@ class Ticker: d['price_usd'] / self.col_usd_prices[k] ) * self.adjust for k in self.col_ids} - def fmt_row(self, d, amt=None, amt_fmt=None, idx=None): + def fmt_row(self, d, amt=None, amt_fmt=None): def fmt_pct(n): return gray(' --') if n is None else (red, green)[n>=0](f'{n:+7.2f}') @@ -1041,7 +1049,7 @@ class Ticker: amt_fmt = amt_fmt.rstrip('0').rstrip('.') return self.fs_num.format( - idx = idx, + idx = int(d['rank']) if cfg.asset_range else None, mcap = d.get('market_cap') / 1_000_000_000 if cfg.asset_range else None, lbl = self.create_label(d['id']) if cfg.name_labels else d['symbol'], pc1 = fmt_pct(d.get('percent_change_7d')), @@ -1091,7 +1099,7 @@ class Ticker: if b]) if cfg.asset_range: - num_w = len(str(len(cfg.rows['asset_list']))) + num_w = len(str(self.max_rank)) col_fs_data.update({ 'idx': fd(' ' * (num_w + 2), f'{{idx:{num_w}}}) ', num_w + 2), 'mcap': fd('{mcap:>12}', '{mcap:12.5f}', 12)}) @@ -1186,7 +1194,7 @@ class Ticker: self.fs_str += ' {upd}' self.hl_wid += self.upd_w + 2 - def fmt_row(self, d, idx=None): + def fmt_row(self, d): id = d['id'] p = self.prices[id][self.asset.id] * self.asset.amount p_spot = '{:{}{}.{}f}'.format(p, self.max_wid, self.comma, 8+cfg.add_prec) diff --git a/test/cmdtest_d/misc.py b/test/cmdtest_d/misc.py index a8d259e..3e909f4 100755 --- a/test/cmdtest_d/misc.py +++ b/test/cmdtest_d/misc.py @@ -329,7 +329,7 @@ class CmdTestScripts(CmdTestBase): ['10'], [ r'1\) BITCOIN 444.33652 23,250.77 21,848.7527 1.00000000 \+18.96 \+15.61 \+11.15 \+0.89', - r'6\) ALGORAND 2.30691 0.33 0.3120 0.00001428 \+16.47 \+13.57 \+9.69 \-0.82' + r'33\) ALGORAND 2.30691 0.33 0.3120 0.00001428 \+16.47 \+13.57 \+9.69 \-0.82' ], add_opts = ['--widest', '--add-columns=eurusd=x']) @@ -338,10 +338,10 @@ class CmdTestScripts(CmdTestBase): ['1-5'], [ r'MarketCap\(B\) USD EURUSD=X BTC ' - '--------------------------------------------------------- ' + '---------------------------------------------------------- ' r'1\) BTC 444.33652 23250.77 21848.7527 1.00000000', - r'5\) ADA 17.11161 0.51 0.4764 0.00002180' - ' ---------------------------------------------------------' + r'8\) ADA 17.11161 0.51 0.4764 0.00002180' + ' ----------------------------------------------------------' ], add_opts = ['--add-columns=eurusd=x']) @@ -350,9 +350,9 @@ class CmdTestScripts(CmdTestBase): ['2-5'], [ r'MarketCap\(B\) USD EURUSD=X BTC ' - '--------------------------------------------------------- ' + '---------------------------------------------------------- ' r'2\) ETH 202.15129 1659.66 1559.5846 0.07138094', - r'5\) ADA 17.11161 0.51 0.4764 0.00002180', + r'8\) ADA 17.11161 0.51 0.4764 0.00002180', ], add_opts = ['--add-columns=eurusd=x']) @@ -362,6 +362,6 @@ class CmdTestScripts(CmdTestBase): [ r'MarketCap\(B\) USD EURUSD=X BTC ' '--------------------------------------------------------- ' - r'5\) ADA 17.11161 0.51 0.4764 0.00002180', + r'8\) ADA 17.11161 0.51 0.4764 0.00002180', ], add_opts = ['--add-columns=eurusd=x'])