Browse Source

mmnode-ticker: display coin ranking in first column

The MMGen Project 1 month ago
parent
commit
e6d62fd18b
2 changed files with 31 additions and 23 deletions
  1. 24 16
      mmgen_node_tools/Ticker.py
  2. 7 7
      test/cmdtest_d/misc.py

+ 24 - 16
mmgen_node_tools/Ticker.py

@@ -865,6 +865,7 @@ class Ticker:
 
 
 		offer = None
 		offer = None
 		to_asset = None
 		to_asset = None
+		hidden_groups = ('extra',)
 
 
 		def __init__(self, data):
 		def __init__(self, data):
 
 
@@ -876,6 +877,14 @@ class Ticker:
 
 
 			self.rows = RowDict(
 			self.rows = RowDict(
 				{k: tuple(row._replace(id=self.get_id(row)) for row in v) for k, v in cfg.rows.items()})
 				{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.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 = {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')
 			self.prices['usd-us-dollar'] = self.get_row_prices('usd-us-dollar')
@@ -931,6 +940,15 @@ class Ticker:
 			return self.data[id]['name'].upper()
 			return self.data[id]['name'].upper()
 
 
 		def gen_output(self):
 		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'))
 			yield 'Current time: {}'.format(cyan(time.strftime('%F %X', time.gmtime(now)) + ' UTC'))
 
 
 			for asset in self.usr_col_assets:
 			for asset in self.usr_col_assets:
@@ -961,21 +979,11 @@ class Ticker:
 				yield self.table_hdr
 				yield self.table_hdr
 
 
 			if cfg.asset_range:
 			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:
 			else:
 				for rows in self.rows.values():
 				for rows in self.rows.values():
 					if rows:
 					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
 			yield '-' * self.hl_wid
 
 
@@ -1028,7 +1036,7 @@ class Ticker:
 						d['price_usd'] / self.col_usd_prices[k]
 						d['price_usd'] / self.col_usd_prices[k]
 					) * self.adjust for k in self.col_ids}
 					) * 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):
 			def fmt_pct(n):
 				return gray('     --') if n is None else (red, green)[n>=0](f'{n:+7.2f}')
 				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('.')
 					amt_fmt = amt_fmt.rstrip('0').rstrip('.')
 
 
 			return self.fs_num.format(
 			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,
 				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'],
 				lbl = self.create_label(d['id']) if cfg.name_labels else d['symbol'],
 				pc1 = fmt_pct(d.get('percent_change_7d')),
 				pc1 = fmt_pct(d.get('percent_change_7d')),
@@ -1091,7 +1099,7 @@ class Ticker:
 						if b])
 						if b])
 
 
 			if cfg.asset_range:
 			if cfg.asset_range:
-				num_w = len(str(len(cfg.rows['asset_list'])))
+				num_w = len(str(self.max_rank))
 				col_fs_data.update({
 				col_fs_data.update({
 					'idx': fd(' ' * (num_w + 2), f'{{idx:{num_w}}}) ', num_w + 2),
 					'idx': fd(' ' * (num_w + 2), f'{{idx:{num_w}}}) ', num_w + 2),
 					'mcap': fd('{mcap:>12}', '{mcap:12.5f}', 12)})
 					'mcap': fd('{mcap:>12}', '{mcap:12.5f}', 12)})
@@ -1186,7 +1194,7 @@ class Ticker:
 				self.fs_str += '  {upd}'
 				self.fs_str += '  {upd}'
 				self.hl_wid += self.upd_w + 2
 				self.hl_wid += self.upd_w + 2
 
 
-		def fmt_row(self, d, idx=None):
+		def fmt_row(self, d):
 			id = d['id']
 			id = d['id']
 			p = self.prices[id][self.asset.id] * self.asset.amount
 			p = self.prices[id][self.asset.id] * self.asset.amount
 			p_spot = '{:{}{}.{}f}'.format(p, self.max_wid, self.comma, 8+cfg.add_prec)
 			p_spot = '{:{}{}.{}f}'.format(p, self.max_wid, self.comma, 8+cfg.add_prec)

+ 7 - 7
test/cmdtest_d/misc.py

@@ -329,7 +329,7 @@ class CmdTestScripts(CmdTestBase):
 			['10'],
 			['10'],
 			[
 			[
 				r'1\) BITCOIN 444.33652 23,250.77 21,848.7527 1.00000000 \+18.96 \+15.61 \+11.15 \+0.89',
 				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'])
 			add_opts = ['--widest', '--add-columns=eurusd=x'])
 
 
@@ -338,10 +338,10 @@ class CmdTestScripts(CmdTestBase):
 			['1-5'],
 			['1-5'],
 			[
 			[
 				r'MarketCap\(B\) USD EURUSD=X BTC '
 				r'MarketCap\(B\) USD EURUSD=X BTC '
-				'--------------------------------------------------------- '
+				'---------------------------------------------------------- '
 				r'1\) BTC 444.33652 23250.77 21848.7527 1.00000000',
 				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'])
 			add_opts = ['--add-columns=eurusd=x'])
 
 
@@ -350,9 +350,9 @@ class CmdTestScripts(CmdTestBase):
 			['2-5'],
 			['2-5'],
 			[
 			[
 				r'MarketCap\(B\) USD EURUSD=X BTC '
 				r'MarketCap\(B\) USD EURUSD=X BTC '
-				'--------------------------------------------------------- '
+				'---------------------------------------------------------- '
 				r'2\) ETH 202.15129 1659.66 1559.5846 0.07138094',
 				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'])
 			add_opts = ['--add-columns=eurusd=x'])
 
 
@@ -362,6 +362,6 @@ class CmdTestScripts(CmdTestBase):
 			[
 			[
 				r'MarketCap\(B\) USD EURUSD=X BTC '
 				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'])
 			add_opts = ['--add-columns=eurusd=x'])