X-Git-Url: https://wylark.com/src/munter.git/blobdiff_plain/20f4ba32d02b0960ca434ba21b2d8a8e234678bc..e7f535bf0770c23887ff66380446b678af82eae9:/munter.py?ds=inline diff --git a/munter.py b/munter.py index fd5e485..485db19 100755 --- a/munter.py +++ b/munter.py @@ -1,108 +1,9 @@ #! /usr/bin/env python # -*- coding: utf-8 -*- - -""" -Munter Time Calculation -Alexander Vasarab -Wylark Mountaineering LLC - -Version 1.0.2 - -A rudimentary program which implements the Munter time calculation. -""" - +"""Wrapper for running directly from the source code directory""" import sys -import argparse - -class InvalidUnitsException(Exception): - pass - -rates = { - 'uphill': { 'rate': 4, 'direction': '↑' }, - 'flat': { 'rate': 6, 'direction': '→' }, # or downhill on foot - 'downhill': { 'rate': 10, 'direction': '↓' }, - 'bushwhacking': { 'rate': 2, 'direction': '↹' }, -} - -unit_choices = ['metric', 'imperial'] -travel_mode_choices = rates.keys() - -def munter(distance, elevation, rate, units): - retval = {} - - if units not in unit_choices: - raise InvalidUnitsException - - unit_count = 0 - - if 'imperial' == units: - # convert to metric - distance = (distance * 1.609) # mi to km - elevation = (elevation * .305) # ft to m - - unit_count = distance + (elevation / 100.0) - - retval['time'] = (distance + (elevation / 100.0)) / rates[rate]['rate'] - retval['unit_count'] = unit_count - retval['direction'] = rates[rate]['direction'] - retval['pace'] = rates[rate]['rate'] - - return retval - -def main(): - parser = argparse.ArgumentParser(description='Munter Time Calculation') - - parser.add_argument('--distance', '-d', type=float, - required=True, - help='Distance (in km, by default)') - - parser.add_argument('--elevation', '-e', type=float, - required=True, - help='Elevation change (in m, by default)') - - 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, - default='imperial', - required=False, - choices=unit_choices, - help='Units of input values') - - opts = parser.parse_args() - - distance = opts.distance - elevation = opts.elevation - units = opts.units - travel_mode = opts.travel_mode - - time_calc = munter(distance, elevation, travel_mode, units=units) - - hours = int(time_calc['time']) - minutes = int((time_calc['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(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") +from munter.munter import main if __name__ == "__main__": - main() + sys.exit(main())