Browse Source

twview: improve age_fmt handling

The MMGen Project 2 years ago
parent
commit
2f7e022288
2 changed files with 16 additions and 5 deletions
  1. 1 0
      mmgen/tool/rpc.py
  2. 15 5
      mmgen/tw/common.py

+ 1 - 0
mmgen/tool/rpc.py

@@ -99,6 +99,7 @@ class tool_cmd(tool_cmd_base):
 	async def twops(self,
 			obj,pager,reverse,wide,sort,age_fmt,show_mmid,wide_show_confs,interactive):
 
+		obj.interactive = interactive
 		obj.reverse = reverse
 		obj.age_fmt = age_fmt
 		obj.show_mmid = show_mmid

+ 15 - 5
mmgen/tw/common.py

@@ -38,6 +38,7 @@ class TwCommon:
 	reverse     = False
 	group       = False
 	sort_key    = 'age'
+	interactive = False
 
 	age_fmts = ('confs','block','days','date','date_time')
 	age_fmts_date_dependent = ('days','date','date_time')
@@ -45,9 +46,13 @@ class TwCommon:
 	_age_fmt = 'confs'
 
 	date_formatter = {
-		'days':      lambda rpc,secs: (rpc.cur_date - secs) // 86400,
-		'date':      lambda rpc,secs: '{}-{:02}-{:02}'.format(*time.gmtime(secs)[:3])[2:],
-		'date_time': lambda rpc,secs: '{}-{:02}-{:02} {:02}:{:02}'.format(*time.gmtime(secs)[:5]),
+		'days': lambda rpc,secs: (rpc.cur_date - secs) // 86400 if secs else 0,
+		'date': (
+			lambda rpc,secs: '{}-{:02}-{:02}'.format(*time.gmtime(secs)[:3])[2:]
+				if secs else '--------' ),
+		'date_time': (
+			lambda rpc,secs: '{}-{:02}-{:02} {:02}:{:02}'.format(*time.gmtime(secs)[:5])
+				if secs else '---------- -----' ),
 	}
 
 	def age_disp(self,o,age_fmt):
@@ -89,8 +94,12 @@ class TwCommon:
 
 	@age_fmt.setter
 	def age_fmt(self,val):
-		if val not in self.age_fmts:
-			die( 'BadAgeFormat', f'{val!r}: invalid age format (must be one of {self.age_fmts!r})' )
+		ok_vals,op_desc = (
+			(self.age_fmts_interactive,'interactive') if self.interactive else
+			(self.age_fmts,'non-interactive') )
+		if val not in ok_vals:
+			die('BadAgeFormat',
+				f'{val!r}: invalid age format for {op_desc} operation (must be one of {ok_vals!r})' )
 		self._age_fmt = val
 
 	@property
@@ -187,6 +196,7 @@ class TwCommon:
 		self.prompt = type(self).prompt.strip() + '\b'
 		self.no_output = False
 		self.oneshot_msg = None
+		self.interactive = True
 		CUR_HOME  = '\033[H'
 		ERASE_ALL = '\033[0J'