X-Git-Url: https://wannabe.guru.org/gitweb/?a=blobdiff_plain;f=conversion_utils.py;h=10908c54637c143ab6d58da1db95c4ec451c5e6e;hb=3bc4daf1edc121cd633429187392227f2fa61885;hp=bab27e1215dc0a67389e2353ba77b9b53c4ff7a1;hpb=497fb9e21f45ec08e1486abaee6dfa7b20b8a691;p=python_utils.git diff --git a/conversion_utils.py b/conversion_utils.py index bab27e1..10908c5 100644 --- a/conversion_utils.py +++ b/conversion_utils.py @@ -3,6 +3,8 @@ from numbers import Number from typing import Callable +import constants + class Converter(object): def __init__(self, @@ -28,6 +30,31 @@ class Converter(object): conversion_catalog = { + "Second": Converter("Second", + "time", + lambda s: s, + lambda s: s, + "s"), + "Minute": Converter("Minute", + "time", + lambda m: (m * constants.SECONDS_PER_MINUTE), + lambda s: (s / constants.SECONDS_PER_MINUTE), + "m"), + "Hour": Converter("Hour", + "time", + lambda h: (h * constants.SECONDS_PER_HOUR), + lambda s: (s / constants.SECONDS_PER_HOUR), + "h"), + "Day": Converter("Day", + "time", + lambda d: (d * constants.SECONDS_PER_DAY), + lambda s: (s / constants.SECONDS_PER_DAY), + "d"), + "Week": Converter("Week", + "time", + lambda w: (w * constants.SECONDS_PER_WEEK), + lambda s: (s / constants.SECONDS_PER_WEEK), + "w"), "Fahrenheit": Converter("Fahrenheit", "temperature", lambda f: (f - 32.0) * 0.55555555, @@ -53,6 +80,8 @@ def convert(magnitude: Number, dst = conversion_catalog.get(to_thing, None) if src is None or dst is None: raise ValueError("No known conversion") + if src.category != dst.category: + raise ValueError("Incompatible conversion") return _convert(magnitude, src, dst) @@ -64,6 +93,86 @@ def _convert(magnitude: Number, return converted +def sec_to_min(s: float) -> float: + return convert(s, "Second", "Minute") + + +def sec_to_hour(s: float) -> float: + return convert(s, "Second", "Hour") + + +def sec_to_day(s: float) -> float: + return convert(s, "Second", "Day") + + +def sec_to_week(s: float) -> float: + return convert(s, "Second", "Week") + + +def min_to_sec(m: float) -> float: + return convert(m, "Minute", "Second") + + +def min_to_hour(m: float) -> float: + return convert(m, "Minute", "Hour") + + +def min_to_day(m: float) -> float: + return convert(m, "Minute", "Day") + + +def min_to_week(m: float) -> float: + return convert(m, "Minute", "Week") + + +def hour_to_sec(h: float) -> float: + return convert(h, "Hour", "Second") + + +def hour_to_min(h: float) -> float: + return convert(h, "Hour", "Minute") + + +def hour_to_day(h: float) -> float: + return convert(h, "Hour", "Day") + + +def hour_to_week(h: float) -> float: + return convert(h, "Hour", "Week") + + +def day_to_sec(d: float) -> float: + return convert(d, "Day", "Second") + + +def day_to_min(d: float) -> float: + return convert(d, "Day", "Minute") + + +def day_to_hour(d: float) -> float: + return convert(d, "Day", "Hour") + + +def day_to_week(d: float) -> float: + return convert(d, "Day", "Week") + + +def week_to_sec(w: float) -> float: + return convert(w, "Week", "Second") + + +def week_to_min(w: float) -> float: + return convert(w, "Week", "Minute") + + +def week_to_hour(w: float) -> float: + return convert(w, "Week", "Hour") + + +def week_to_day(w: float) -> float: + return convert(w, "Week", "Day") + + def f_to_c(temp_f: float) -> float: """Fahrenheit to Celsius.""" return convert(temp_f, "Fahrenheit", "Celsius")