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
This commit is contained in:
The MMGen Project 2024-03-10 14:44:57 +00:00
commit 867026e8ed
Signed by: mmgen
GPG key ID: 3F8B1861E32B7DA2
3 changed files with 43 additions and 26 deletions

View file

@ -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'),

View file

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

View file

@ -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