Browse Source

mmnode-ticker --sort: handle missing entries in source data

The MMGen Project 1 month ago
parent
commit
8f9c4ba48c

+ 10 - 9
mmgen_node_tools/Ticker.py

@@ -41,14 +41,14 @@ percent_cols = {
 	'm': 'month',
 	'm': 'month',
 	'y': 'year'}
 	'y': 'year'}
 
 
-sp = namedtuple('sort_parameter', ['key', 'desc'])
+sp = namedtuple('sort_parameter', ['key', 'sort_dfl', 'desc'])
 sort_params = {
 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):
 class RowDict(dict):
 
 
@@ -915,8 +915,9 @@ class Ticker:
 			if cfg.sort:
 			if cfg.sort:
 				code, reverse = cfg.sort
 				code, reverse = cfg.sort
 				key = sort_params[code].key
 				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():
 				for group in self.rows.keys():
 					if group not in self.hidden_groups:
 					if group not in self.hidden_groups:
 						self.rows[group] = sorted(self.rows[group], key=sort_func, reverse=reverse)
 						self.rows[group] = sorted(self.rows[group], key=sort_func, reverse=reverse)

+ 1 - 1
mmgen_node_tools/data/version

@@ -1 +1 @@
-3.6.dev7
+3.6.dev8

+ 4 - 1
test/cmdtest_d/misc.py

@@ -380,10 +380,13 @@ class CmdTestScripts(CmdTestBase):
 			add_opts = ['--add-columns=eurusd=x'])
 			add_opts = ['--add-columns=eurusd=x'])
 
 
 	def ticker22(self):
 	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'],
 			['MONERO', 'ETHEREUM', 'BITCOIN', 'SILVER', 'BRENT', 'GOLD'],
 			add_opts = ['--name-labels', '--sort=rp'])
 			add_opts = ['--name-labels', '--sort=rp'])
+		self.rm_file('ticker-cfg.yaml')
+		return t
 
 
 	def ticker23(self):
 	def ticker23(self):
 		return self.ticker(
 		return self.ticker(

+ 11 - 0
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