Browse Source

mmnode-ticker: add config file vars

The following command-line opts are now configurable in ‘ticker-cfg.yaml’:

    add_precision
    asset_limit
    btc
    cached_data
    elapsed
    name_labels
    pager
    percent_cols
    thousands_comma
    update_time
    verbose
The MMGen Project 1 month ago
parent
commit
867026e8ed
3 changed files with 43 additions and 26 deletions
  1. 41 24
      mmgen_node_tools/Ticker.py
  2. 1 1
      mmgen_node_tools/data/version
  3. 1 1
      setup.cfg

+ 41 - 24
mmgen_node_tools/Ticker.py

@@ -25,7 +25,7 @@ from decimal import Decimal
 from collections import namedtuple
 
 from mmgen.color import red,yellow,green,blue,orange,gray
-from mmgen.util import msg,msg_r,Msg,die,Die,suf,fmt,fmt_list,fmt_dict,list_gen
+from mmgen.util import msg,msg_r,Msg,Msg_r,die,Die,suf,fmt,fmt_list,fmt_dict,list_gen
 from mmgen.ui import do_pager
 
 homedir = os.getenv('HOME')
@@ -75,7 +75,7 @@ class DataSource:
 				['curl', '--tr-encoding', '--header', 'Accept: application/json',True],
 				['--compressed'], # adds 'Accept-Encoding: gzip'
 				['--proxy', cfg.proxy, isinstance(cfg.proxy,str)],
-				['--silent', not gcfg.verbose],
+				['--silent', not cfg.verbose],
 				[self.api_url]
 			)
 
@@ -101,7 +101,9 @@ class DataSource:
 			if not os.path.exists(self.json_fn):
 				open(self.json_fn,'w').write('{}')
 
-			if gcfg.cached_data:
+			use_cached_data = cfg.cached_data and not gcfg.download
+
+			if use_cached_data:
 				data_type = 'json'
 				data_in = open(self.json_fn).read()
 			else:
@@ -112,8 +114,8 @@ class DataSource:
 						msg('')
 					self.fetch_delay()
 					msg_r(f'Fetching {self.data_desc} from {self.api_host}...')
-					if self.has_verbose:
-						gcfg._util.vmsg('')
+					if self.has_verbose and cfg.verbose:
+						msg('')
 					data_in = self.get_data_from_network()
 					msg('done')
 					if gcfg.testing:
@@ -133,14 +135,14 @@ class DataSource:
 				json_text = json.dumps(data_in)
 
 			if not data:
-				if gcfg.cached_data:
+				if use_cached_data:
 					die(1,'No cached data!  Run command without --cached-data option to retrieve data from remote host')
 				else:
 					die(2,'Remote host returned no data!')
 			elif 'error' in data:
 				die(1,data['error'])
 
-			if gcfg.cached_data:
+			if use_cached_data:
 				msg(f'Using cached data from ~/{self.json_fn_rel}')
 			else:
 				open(self.json_fn,'w').write(json_text)
@@ -171,7 +173,7 @@ class DataSource:
 		dfl_asset_limit = 2000
 
 		def __init__(self):
-			self.asset_limit = int(gcfg.asset_limit or self.dfl_asset_limit)
+			self.asset_limit = int(cfg.asset_limit or self.dfl_asset_limit)
 
 		def rate_limit_errmsg(self,elapsed):
 			return (
@@ -528,9 +530,8 @@ def main():
 
 	data = dict(gen_data(src_data))
 
-	gcfg._util.stdout_or_pager(
-		'\n'.join(getattr(Ticker,cfg.clsname)(data).gen_output()) + '\n'
-	)
+	(do_pager if cfg.pager else Msg_r)(
+		'\n'.join(getattr(Ticker,cfg.clsname)(data).gen_output()) + '\n')
 
 def make_cfg(gcfg_arg):
 
@@ -670,7 +671,15 @@ def make_cfg(gcfg_arg):
 		'proxy',
 		'proxy2',
 		'portfolio',
-		'percent_cols' ])
+		'percent_cols',
+		'asset_limit',
+		'cached_data',
+		'elapsed',
+		'name_labels',
+		'pager',
+		'thousands_comma',
+		'update_time',
+		'verbose'])
 
 	global gcfg,cfg_in,src_cls,cfg
 
@@ -704,18 +713,26 @@ def make_cfg(gcfg_arg):
 		query       = query,
 		adjust      = ( lambda x: (100 + x) / 100 if x else 1 )( Decimal(gcfg.adjust or 0) ),
 		clsname     = 'trading' if query else 'overview',
-		btc_only    = gcfg.btc,
-		add_prec    = parse_add_precision(gcfg.add_precision),
+		btc_only    = gcfg.btc or cfg_in.cfg.get('btc'),
+		add_prec    = parse_add_precision(gcfg.add_precision or cfg_in.cfg.get('add_precision')),
 		cachedir    = gcfg.cachedir or cfg_in.cfg.get('cachedir') or dfl_cachedir,
 		proxy       = proxy,
 		proxy2      = None if proxy2 == 'none' else '' if proxy2 == '' else (proxy2 or proxy),
 		portfolio   =
 			get_portfolio()
 				if cfg_in.portfolio
-				and gcfg.portfolio
+				and (gcfg.portfolio or cfg_in.cfg.get('portfolio'))
 				and not query
 			else None,
-		percent_cols = parse_percent_cols(gcfg.percent_cols)
+		percent_cols    = parse_percent_cols(gcfg.percent_cols or cfg_in.cfg.get('percent_cols')),
+		asset_limit     = gcfg.asset_limit     or cfg_in.cfg.get('asset_limit'),
+		cached_data     = gcfg.cached_data     or cfg_in.cfg.get('cached_data'),
+		elapsed         = gcfg.elapsed         or cfg_in.cfg.get('elapsed'),
+		name_labels     = gcfg.name_labels     or cfg_in.cfg.get('name_labels'),
+		pager           = gcfg.pager           or cfg_in.cfg.get('pager'),
+		thousands_comma = gcfg.thousands_comma or cfg_in.cfg.get('thousands_comma'),
+		update_time     = gcfg.update_time     or cfg_in.cfg.get('update_time'),
+		verbose         = gcfg.verbose         or cfg_in.cfg.get('verbose'),
 	)
 
 def get_cfg_in():
@@ -753,10 +770,10 @@ class Ticker:
 
 		def __init__(self,data):
 
-			self.comma = ',' if gcfg.thousands_comma else ''
+			self.comma = ',' if cfg.thousands_comma else ''
 
 			self.col1_wid = max(len('TOTAL'),(
-				max(len(self.create_label(d['id'])) for d in data.values()) if gcfg.name_labels else
+				max(len(self.create_label(d['id'])) for d in data.values()) if cfg.name_labels else
 				max(len(d['symbol']) for d in data.values())
 			)) + 1
 
@@ -769,7 +786,7 @@ class Ticker:
 
 		def format_last_update_col(self,cross_assets=()):
 
-			if gcfg.elapsed:
+			if cfg.elapsed:
 				from mmgen.util2 import format_elapsed_hr
 				fmt_func = format_elapsed_hr
 			else:
@@ -918,7 +935,7 @@ class Ticker:
 					amt_fmt = amt_fmt.rstrip('0').rstrip('.')
 
 			return self.fs_num.format(
-				lbl = (self.create_label(d['id']) if gcfg.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')),
 				pc2 = fmt_pct(d.get('percent_change_24h')),
 				pc3 = fmt_pct(d.get('percent_change_1y')),
@@ -969,11 +986,11 @@ class Ticker:
 					( 'pct1m', 'm' in cfg.percent_cols ),
 					( 'pct1w', 'w' in cfg.percent_cols ),
 					( 'pct1d', 'd' in cfg.percent_cols ),
-					( 'update_time', gcfg.update_time ),
+					( 'update_time', cfg.update_time ),
 				) if b]
 			)
 			cols2 = list(cols)
-			if gcfg.update_time:
+			if cfg.update_time:
 				cols2.pop()
 			cols2.append('amt')
 
@@ -1058,7 +1075,7 @@ class Ticker:
 			if self.show_adj:
 				self.fs_str += ' {p_adj}'
 				self.hl_wid += self.max_wid + 1
-			if gcfg.update_time:
+			if cfg.update_time:
 				self.fs_str += '  {upd}'
 				self.hl_wid += self.upd_w + 2
 
@@ -1071,7 +1088,7 @@ class Ticker:
 				if self.show_adj else '' )
 
 			return self.fs_str.format(
-				lbl = (self.create_label(id) if gcfg.name_labels else d['symbol']),
+				lbl = self.create_label(id) if cfg.name_labels else d['symbol'],
 				p_spot = green(p_spot) if id in self.hl_ids else p_spot,
 				p_adj  = yellow(p_adj) if id in self.hl_ids else p_adj,
 				upd = d.get('last_updated_fmt'),

+ 1 - 1
mmgen_node_tools/data/version

@@ -1 +1 @@
-3.3.dev3
+3.3.dev4

+ 1 - 1
setup.cfg

@@ -28,7 +28,7 @@ python_requires = >=3.9
 include_package_data = True
 
 install_requires =
-	mmgen-wallet>=14.1.dev19
+	mmgen-wallet>=14.1.dev21
 	pyyaml
 	yahooquery