X-Git-Url: https://wylark.com/src/munter.git/blobdiff_plain/2fb726f4caa4a4b297e975812dccbe782f2ce5e7..9a4b0c9dce181b82576d522d1a432debe63446ea:/munter.py?ds=inline diff --git a/munter.py b/munter.py index 47fbd6b..8b23b25 100755 --- a/munter.py +++ b/munter.py @@ -2,9 +2,15 @@ # -*- coding: utf-8 -*- -# Munter Time Calculation -# -# Rudimentary program written by ALV to implement the Munter time calculation +""" +Munter Time Calculation +Alexander Vasarab +Wylark Mountaineering LLC + +Version 1.0.2 + +A rudimentary program which implements the Munter time calculation. +""" import sys import argparse @@ -22,7 +28,7 @@ rates = { unit_choices = ['metric', 'imperial'] travel_mode_choices = rates.keys() -def munter(distance, elevation, rate, units): +def time_calc(distance, elevation, rate, units): retval = {} if units not in unit_choices: @@ -44,28 +50,78 @@ def munter(distance, elevation, rate, units): return retval -def main(): +def print_ugly_estimate(est): + hours = int(est['time']) + minutes = int((est['time'] - hours) * 60) + print("{human_time}".format( + human_time="{hours} hours {minutes} minutes".format( + hours=hours, + minutes=minutes))) + +def print_pretty_estimate(est): + hours = int(est['time']) + minutes = int((est['time'] - hours) * 60) + + # NOTE: Below, the line with the unicode up arrow uses an alignment + # value of 31. In the future, consider using e.g. wcwidth + # library so that this is more elegant. + print("\n\t╒═══════════════════════════════╕") + print("\t╎▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒╎╮") + print("\t╎▒{:^29}▒╎│".format('')) + print("\t╎▒{pace_readable:^31}▒╎│".format( + pace_readable="{units} {direction} @ {pace}".format( + units=round(est['unit_count']), + direction=est['direction'], + pace=est['pace']))) + print("\t╎▒{human_time:^29}▒╎│".format( + human_time="{hours} hours {minutes} minutes".format( + hours=hours, + minutes=minutes))) + print("\t╎▒{:^29}▒╎│".format('')) + print("\t╎▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒╎│") + print("\t╘═══════════════════════════════╛│") + print("\t └───────────────────────────────┘\n") + +def get_parser(): parser = argparse.ArgumentParser(description='Munter Time Calculation') - parser.add_argument('--distance', '-d', type=float, + parser.add_argument('--distance', + '-d', + type=float, required=True, help='Distance (in km, by default)') - parser.add_argument('--elevation', '-e', type=float, + parser.add_argument('--elevation', + '-e', + type=float, required=True, help='Elevation change (in m, by default)') - parser.add_argument('--travel-mode', '-t', type=str, + parser.add_argument('--travel-mode', + '-t', + type=str, default='uphill', choices=travel_mode_choices, required=False, help='Travel mode (flat, by default)') - parser.add_argument('--units', '-u', type=str, + parser.add_argument('--units', + '-u', + type=str, default='imperial', required=False, choices=unit_choices, help='Units of input values') + parser.add_argument('--pretty', + '-p', + action='store_true', + default=False, + required=False); + + return parser + +def main(): + parser = get_parser() opts = parser.parse_args() distance = opts.distance @@ -73,27 +129,12 @@ def main(): units = opts.units travel_mode = opts.travel_mode - time_calc = munter(distance, elevation, travel_mode, units=units) + time_estimate = time_calc(distance, elevation, travel_mode, units=units) - hours = int(time_calc['time']) - minutes = int((time_calc['time'] - hours) * 60) - - print "\n\t╒═══════════════════════════════╕" - print "\t╎▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒╎╮" - print "\t╎▒{:^29}▒╎│".format('') - print "\t╎▒{pace_readable:^31}▒╎│".format( - pace_readable="{units} {direction} @ {pace}".format( - units=round(time_calc['unit_count']), - direction=time_calc['direction'], - pace=time_calc['pace'])) - print "\t╎▒{human_time:^29}▒╎│".format( - human_time="{hours} hours {minutes} minutes".format( - hours=hours, - minutes=minutes)) - print "\t╎▒{:^29}▒╎│".format('') - print "\t╎▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒╎│" - print "\t╘═══════════════════════════════╛│" - print "\t └───────────────────────────────┘\n" + if opts.pretty: + print_pretty_estimate(time_estimate) + else: + print_ugly_estimate(time_estimate) if __name__ == "__main__": main()