X-Git-Url: https://wylark.com/src/munter.git/blobdiff_plain/8a033c290ee009fb26701611b582fc7779258fca..7b037807198cd502822f44a61a248f01f0d785b5:/munter/munter.py?ds=inline diff --git a/munter/munter.py b/munter/munter.py index 7179e52..d868349 100644 --- a/munter/munter.py +++ b/munter/munter.py @@ -12,6 +12,9 @@ A rudimentary program which implements the Munter time calculation. import sys import argparse +from . import __progname__ as progname +from . import __version__ as version + class InvalidUnitsException(Exception): pass @@ -22,10 +25,18 @@ rates = { 'bushwhacking': { 'rate': 2, 'direction': '↹' }, } +fitnesses = { + 'slow': 1.2, + 'average': 1, + 'fast': .7, +} + unit_choices = ['metric', 'imperial'] travel_mode_choices = rates.keys() +fitness_choices = fitnesses.keys() -def time_calc(distance, elevation, rate, units): +def time_calc(distance, elevation, fitness='average', rate='uphill', + units='imperial'): retval = {} if units not in unit_choices: @@ -41,6 +52,8 @@ def time_calc(distance, elevation, rate, units): unit_count = distance + (elevation / 100.0) retval['time'] = (distance + (elevation / 100.0)) / rates[rate]['rate'] + retval['time'] = retval['time'] * fitnesses[fitness] + retval['unit_count'] = unit_count retval['direction'] = rates[rate]['direction'] retval['pace'] = rates[rate]['rate'] @@ -80,18 +93,22 @@ def print_pretty_estimate(est): print("\t └───────────────────────────────┘\n") def get_parser(): - parser = argparse.ArgumentParser(description='Munter Time Calculation') + parser = argparse.ArgumentParser(description='Implementation of ' + 'the Munter time calculation') + # No required args anymore, since -g overrides any requirement parser.add_argument('--distance', '-d', + default=0.0, type=float, - required=True, + required=False, help='Distance (in km, by default)') parser.add_argument('--elevation', '-e', + default=0.0, type=float, - required=True, + required=False, help='Elevation change (in m, by default)') parser.add_argument('--travel-mode', @@ -99,7 +116,14 @@ def get_parser(): type=str, default='uphill', choices=travel_mode_choices, required=False, - help='Travel mode (flat, by default)') + help='Travel mode (uphill, by default)') + + parser.add_argument('--fitness', + '-f', + type=str, + default='average', + choices=fitness_choices, required=False, + help='Fitness modifier (average, by default)') parser.add_argument('--units', '-u', @@ -113,7 +137,22 @@ def get_parser(): '-p', action='store_true', default=False, - required=False); + required=False, + help="Make output pretty"); + + parser.add_argument('--gui', + '-g', + action='store_true', + default=False, + required=False, + help='Launch GUI mode (overrides --pretty)') + + parser.add_argument('--version', + '-v', + action='store_true', + default=False, + required=False, + help='Print version and exit') return parser @@ -123,15 +162,28 @@ def main(): distance = opts.distance elevation = opts.elevation + fitness = opts.fitness units = opts.units travel_mode = opts.travel_mode + pretty = opts.pretty + gui = opts.gui + get_version = opts.version + + if get_version: + print("%s - v%s" % (progname, version)) + return 0 - time_estimate = time_calc(distance, elevation, travel_mode, units=units) + time_estimate = time_calc(distance=distance, elevation=elevation, + fitness=fitness, rate=travel_mode, units=units) - if opts.pretty: - print_pretty_estimate(time_estimate) + if gui: + from . import gui + gui.startup() else: - print_ugly_estimate(time_estimate) + if pretty: + print_pretty_estimate(time_estimate) + else: + print_ugly_estimate(time_estimate) return 0