1
0
mirror of https://github.com/kellyjonbrazil/jc.git synced 2025-06-17 00:07:37 +02:00

add timestamp option to cli

This commit is contained in:
Kelly Brazil
2022-08-03 17:40:39 -07:00
parent 498a2a314b
commit c57d3416b7
2 changed files with 32 additions and 1 deletions

View File

@ -5,11 +5,11 @@ JC cli module
import io import io
import sys import sys
import os import os
from datetime import datetime, timezone
import textwrap import textwrap
import signal import signal
import shlex import shlex
import subprocess import subprocess
from typing import List, Dict
from .lib import (__version__, parser_info, all_parser_info, parsers, from .lib import (__version__, parser_info, all_parser_info, parsers,
_get_parser, _parser_is_streaming, standard_parser_mod_list, _get_parser, _parser_is_streaming, standard_parser_mod_list,
plugin_parser_mod_list, streaming_parser_mod_list) plugin_parser_mod_list, streaming_parser_mod_list)
@ -440,6 +440,29 @@ def combined_exit_code(program_exit=0, jc_exit=0):
return exit_code return exit_code
def add_timestamp_to(list_or_dict, runtime, magic_exit_code):
"""This function mutates a list or dict in place"""
run_iso = runtime.isoformat()
run_timestamp = runtime.timestamp()
timestamp_obj = {
'_jc_meta': {
'run_timestamp': run_timestamp,
'run_iso': run_iso
}
}
if isinstance(list_or_dict, dict):
list_or_dict.update(timestamp_obj)
elif isinstance(list_or_dict, list):
for item in list_or_dict:
item.update(timestamp_obj)
else:
utils.error_message(['Parser returned an unsupported object type.'])
sys.exit(combined_exit_code(magic_exit_code, JC_ERROR_EXIT))
def main(): def main():
# break on ctrl-c keyboard interrupt # break on ctrl-c keyboard interrupt
signal.signal(signal.SIGINT, ctrlc) signal.signal(signal.SIGINT, ctrlc)
@ -484,6 +507,7 @@ def main():
quiet = 'q' in options quiet = 'q' in options
ignore_exceptions = options.count('q') > 1 ignore_exceptions = options.count('q') > 1
raw = 'r' in options raw = 'r' in options
timestamp = 't' in options
unbuffer = 'u' in options unbuffer = 'u' in options
version_info = 'v' in options version_info = 'v' in options
yaml_out = 'y' in options yaml_out = 'y' in options
@ -521,6 +545,9 @@ def main():
utils._safe_print(zsh_completion()) utils._safe_print(zsh_completion())
sys.exit(0) sys.exit(0)
if timestamp:
run_dt_utc = datetime.now(timezone.utc)
# if magic syntax used, try to run the command and error if it's not found, etc. # if magic syntax used, try to run the command and error if it's not found, etc.
magic_stdout, magic_stderr, magic_exit_code = None, None, 0 magic_stdout, magic_stderr, magic_exit_code = None, None, 0
if run_command: if run_command:
@ -622,6 +649,9 @@ def main():
raw=raw, raw=raw,
quiet=quiet) quiet=quiet)
if timestamp:
add_timestamp_to(result, run_dt_utc, magic_exit_code)
safe_print_out(result, safe_print_out(result,
pretty=pretty, pretty=pretty,
env_colors=jc_colors, env_colors=jc_colors,

View File

@ -10,6 +10,7 @@ long_options_map: Dict[str, List[str]] = {
'--pretty': ['p', 'pretty print output'], '--pretty': ['p', 'pretty print output'],
'--quiet': ['q', 'suppress warnings (double to ignore streaming errors)'], '--quiet': ['q', 'suppress warnings (double to ignore streaming errors)'],
'--raw': ['r', 'raw output'], '--raw': ['r', 'raw output'],
'--timestamp': ['t', 'add timestamp information to output'],
'--unbuffer': ['u', 'unbuffer output'], '--unbuffer': ['u', 'unbuffer output'],
'--version': ['v', 'version info'], '--version': ['v', 'version info'],
'--yaml-out': ['y', 'YAML output'], '--yaml-out': ['y', 'YAML output'],