From 8ac56a3f31c7c25b62427d039c6f3de2d8a2eb43 Mon Sep 17 00:00:00 2001 From: Jerome Charaoui Date: Fri, 29 Sep 2017 15:48:30 -0400 Subject: [PATCH 1/7] Add machine-readable output option --- eboxbw/cli.py | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 53 insertions(+), 1 deletion(-) diff --git a/eboxbw/cli.py b/eboxbw/cli.py index fae48ee..10ccdda 100644 --- a/eboxbw/cli.py +++ b/eboxbw/cli.py @@ -35,6 +35,8 @@ def _parse_args(): ap.add_argument('-d', '--details', action='store_true', help='display more bandwidth usage details') + ap.add_argument('-m', '--machine', action='store_true', + help='display data in machine-readable format') ap.add_argument('-u', '--unit', action='store', type=str, default='g', metavar='UNIT', help='set display unit to UNIT (\"g\" for GiB or \"m\" for MiB)') @@ -79,6 +81,11 @@ def _yes_no(v): False: colored('no', 'red', attrs=['bold']), }[v] +def _yes_no_machine(v): + return { + True: 1, + False: 0, + }[v] def _effective(t): return colored(t, 'yellow') @@ -157,6 +164,48 @@ def print_table_header(): print_table_border() +def _print_machine(usage_info, conv_func, punit, details): + + def print_row(date, dl, ul, cb, date_cb): + date_txt = date_cb(date) + fmt_row1 = '{}::{}::{}::{}' + + print(fmt_row1.format(date_txt, dl.real_gb, ul.real_gb, cb.real_gb)) + + if dl.effective_gb is not None: + dl_txt = dl.effective_gb + ul_txt = ul.effective_gb + cb_txt = cb.effective_gb + + print(fmt_row1.format('effective', dl_txt, ul_txt, cb_txt)) + + if details: + print('{}::{}'.format('plan', usage_info.plan)) + print('{}::{}'.format('super_off_peak', + _yes_no_machine(usage_info.has_super_off_peak))) + print('{}::{}'.format('extra_blocks', + usage_info.extra_blocks)) + print('{}::{}'.format('capacity', + usage_info.plan_cap.real_gb)) + print('{}::{}'.format('available_usage', + usage_info.available_usage.real_gb)) + + cur_month_usage = usage_info.cur_month_usage + date = cur_month_usage.date + + if date is None: + _print_warning('no usage data available yet for current month') + return + + tdl = cur_month_usage.dl_usage + tul = cur_month_usage.ul_usage + tcb = cur_month_usage.combined_usage + print_row(date, tdl, tul, tcb, lambda d: d.strftime('%Y-%m')) + + if details: + for du in cur_month_usage.days_usage: + print_row(du.date, du.dl_usage, du.ul_usage, du.combined_usage, + lambda d: d.strftime('%Y-%m-%d')) def _main(args): try: @@ -185,7 +234,10 @@ def _main(args): conv_func = lambda x: x * 1024 punit = 'MiB' - _print_human(usage_info, conv_func, punit, args.details) + if args.machine: + _print_machine(usage_info, conv_func, punit, args.details) + else: + _print_human(usage_info, conv_func, punit, args.details) def run(): From 90ffb8617a4efe4595773b16651741dc85c865d8 Mon Sep 17 00:00:00 2001 From: Jerome Charaoui Date: Sat, 30 Sep 2017 09:19:38 -0400 Subject: [PATCH 2/7] Whitespace fixes --- eboxbw/cli.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/eboxbw/cli.py b/eboxbw/cli.py index 10ccdda..467cdad 100644 --- a/eboxbw/cli.py +++ b/eboxbw/cli.py @@ -81,12 +81,14 @@ def _yes_no(v): False: colored('no', 'red', attrs=['bold']), }[v] + def _yes_no_machine(v): return { True: 1, False: 0, }[v] + def _effective(t): return colored(t, 'yellow') @@ -165,30 +167,27 @@ def print_table_header(): print_table_border() def _print_machine(usage_info, conv_func, punit, details): - def print_row(date, dl, ul, cb, date_cb): date_txt = date_cb(date) fmt_row1 = '{}::{}::{}::{}' - print(fmt_row1.format(date_txt, dl.real_gb, ul.real_gb, cb.real_gb)) if dl.effective_gb is not None: dl_txt = dl.effective_gb ul_txt = ul.effective_gb cb_txt = cb.effective_gb - print(fmt_row1.format('effective', dl_txt, ul_txt, cb_txt)) if details: print('{}::{}'.format('plan', usage_info.plan)) print('{}::{}'.format('super_off_peak', - _yes_no_machine(usage_info.has_super_off_peak))) + _yes_no_machine(usage_info.has_super_off_peak))) print('{}::{}'.format('extra_blocks', - usage_info.extra_blocks)) + usage_info.extra_blocks)) print('{}::{}'.format('capacity', - usage_info.plan_cap.real_gb)) + usage_info.plan_cap.real_gb)) print('{}::{}'.format('available_usage', - usage_info.available_usage.real_gb)) + usage_info.available_usage.real_gb)) cur_month_usage = usage_info.cur_month_usage date = cur_month_usage.date @@ -207,6 +206,7 @@ def print_row(date, dl, ul, cb, date_cb): print_row(du.date, du.dl_usage, du.ul_usage, du.combined_usage, lambda d: d.strftime('%Y-%m-%d')) + def _main(args): try: usage_info = eboxbw.get_usage_info(args.id) From bcfb0a7c5820e85b0934e6ab74570fa5f3876837 Mon Sep 17 00:00:00 2001 From: Jerome Charaoui Date: Sat, 30 Sep 2017 09:20:26 -0400 Subject: [PATCH 3/7] Display yes,no string instead of 1,0 --- eboxbw/cli.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/eboxbw/cli.py b/eboxbw/cli.py index 467cdad..b35e9b3 100644 --- a/eboxbw/cli.py +++ b/eboxbw/cli.py @@ -84,8 +84,8 @@ def _yes_no(v): def _yes_no_machine(v): return { - True: 1, - False: 0, + True: 'yes', + False: 'no', }[v] From 775ac20ad0ec07d4536e45a26560c5056f55d05b Mon Sep 17 00:00:00 2001 From: Jerome Charaoui Date: Sat, 30 Sep 2017 09:22:20 -0400 Subject: [PATCH 4/7] Use single comma as separator instead of colons --- eboxbw/cli.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/eboxbw/cli.py b/eboxbw/cli.py index b35e9b3..74924f7 100644 --- a/eboxbw/cli.py +++ b/eboxbw/cli.py @@ -169,7 +169,7 @@ def print_table_header(): def _print_machine(usage_info, conv_func, punit, details): def print_row(date, dl, ul, cb, date_cb): date_txt = date_cb(date) - fmt_row1 = '{}::{}::{}::{}' + fmt_row1 = '{},{},{},{}' print(fmt_row1.format(date_txt, dl.real_gb, ul.real_gb, cb.real_gb)) if dl.effective_gb is not None: @@ -179,14 +179,14 @@ def print_row(date, dl, ul, cb, date_cb): print(fmt_row1.format('effective', dl_txt, ul_txt, cb_txt)) if details: - print('{}::{}'.format('plan', usage_info.plan)) - print('{}::{}'.format('super_off_peak', + print('{},{}'.format('plan', usage_info.plan)) + print('{},{}'.format('super_off_peak', _yes_no_machine(usage_info.has_super_off_peak))) - print('{}::{}'.format('extra_blocks', + print('{},{}'.format('extra_blocks', usage_info.extra_blocks)) - print('{}::{}'.format('capacity', + print('{},{}'.format('capacity', usage_info.plan_cap.real_gb)) - print('{}::{}'.format('available_usage', + print('{},{}'.format('available_usage', usage_info.available_usage.real_gb)) cur_month_usage = usage_info.cur_month_usage From 48c7d7aec9560c4e9403608b564a981f8c6bac5d Mon Sep 17 00:00:00 2001 From: Jerome Charaoui Date: Sat, 30 Sep 2017 09:30:09 -0400 Subject: [PATCH 5/7] Don't ignore unit parameter, use conv_func --- eboxbw/cli.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/eboxbw/cli.py b/eboxbw/cli.py index 74924f7..e8ae9b7 100644 --- a/eboxbw/cli.py +++ b/eboxbw/cli.py @@ -170,13 +170,15 @@ def _print_machine(usage_info, conv_func, punit, details): def print_row(date, dl, ul, cb, date_cb): date_txt = date_cb(date) fmt_row1 = '{},{},{},{}' - print(fmt_row1.format(date_txt, dl.real_gb, ul.real_gb, cb.real_gb)) + print(fmt_row1.format(date_txt, conv_func(dl.real_gb), + conv_func(ul.real_gb), conv_func(cb.real_gb))) if dl.effective_gb is not None: dl_txt = dl.effective_gb ul_txt = ul.effective_gb cb_txt = cb.effective_gb - print(fmt_row1.format('effective', dl_txt, ul_txt, cb_txt)) + print(fmt_row1.format('effective', conv_func(dl_txt), + conv_func(ul_txt), conv_func(cb_txt))) if details: print('{},{}'.format('plan', usage_info.plan)) @@ -185,9 +187,9 @@ def print_row(date, dl, ul, cb, date_cb): print('{},{}'.format('extra_blocks', usage_info.extra_blocks)) print('{},{}'.format('capacity', - usage_info.plan_cap.real_gb)) + conv_func(usage_info.plan_cap.real_gb))) print('{},{}'.format('available_usage', - usage_info.available_usage.real_gb)) + conv_func(usage_info.available_usage.real_gb))) cur_month_usage = usage_info.cur_month_usage date = cur_month_usage.date From e0f3e7bcebec1199217d5a564b8a3c6eb79ed28d Mon Sep 17 00:00:00 2001 From: Jerome Charaoui Date: Sat, 30 Sep 2017 09:31:25 -0400 Subject: [PATCH 6/7] Use hyphens instead of underscores --- eboxbw/cli.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/eboxbw/cli.py b/eboxbw/cli.py index e8ae9b7..f3ca455 100644 --- a/eboxbw/cli.py +++ b/eboxbw/cli.py @@ -182,13 +182,13 @@ def print_row(date, dl, ul, cb, date_cb): if details: print('{},{}'.format('plan', usage_info.plan)) - print('{},{}'.format('super_off_peak', + print('{},{}'.format('super-off-peak', _yes_no_machine(usage_info.has_super_off_peak))) - print('{},{}'.format('extra_blocks', + print('{},{}'.format('extra-blocks', usage_info.extra_blocks)) print('{},{}'.format('capacity', conv_func(usage_info.plan_cap.real_gb))) - print('{},{}'.format('available_usage', + print('{},{}'.format('available-usage', conv_func(usage_info.available_usage.real_gb))) cur_month_usage = usage_info.cur_month_usage From 7de0695e9a09c9dccf00a6bdf0a1f44c2a44cb1e Mon Sep 17 00:00:00 2001 From: Jerome Charaoui Date: Sat, 30 Sep 2017 09:37:12 -0400 Subject: [PATCH 7/7] Create function for usage warning message --- eboxbw/cli.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/eboxbw/cli.py b/eboxbw/cli.py index f3ca455..7673985 100644 --- a/eboxbw/cli.py +++ b/eboxbw/cli.py @@ -67,6 +67,10 @@ def _print_warning(msg): cprint('warning: {}'.format(msg), 'yellow', attrs=['bold'], file=sys.stderr) +def _print_usage_data_warning(): + _print_warning('no usage data available yet for current month') + + def _bold(t): return colored(t, attrs=['bold']) @@ -141,7 +145,7 @@ def print_table_header(): date = cur_month_usage.date if date is None: - _print_warning('no usage data available yet for current month') + _print_usage_data_warning() return if usage_info.has_super_off_peak: @@ -195,7 +199,7 @@ def print_row(date, dl, ul, cb, date_cb): date = cur_month_usage.date if date is None: - _print_warning('no usage data available yet for current month') + _print_usage_data_warning() return tdl = cur_month_usage.dl_usage