1
0
mirror of https://github.com/craigerl/aprsd.git synced 2024-09-27 07:36:40 -04:00
aprsd/aprsd/fuzzyclock.py
Hemna 53b8f21535 Update tox environment to fix formatting python errors
This patch includes lots of changes to tox environment for
automatically detecting pep8 failures, which can cause python2 vs
python3 failures after install.

The following tox commands have been added
tox -efmt-check  - This checks the python syntax and formatting
tox -efmt        - Automatically fixes python syntax formatting that
                   fmt-check complains about.
tox -etype-check - check on types
tox -elint       - flake8 run

This patch also changes where the default config file is located.
The new location is ~/.config/aprsd/aprsd.yml

You can now also specify a custom config file on the command line
with the -c or --config option as well.
2020-12-11 08:47:56 -05:00

136 lines
3.2 KiB
Python

#
# @author Sinu John
# sinuvian at gmail dot com
# www.sinujohn.wordpress.com
#
#
# Usage:
# python clock.py [degree [time]]
#
# 'degree' is the degree of fuzziness - can have values of 1 or 2
# 'time' - give time in the format hour:minute (24-hour format)
# example: 9:45, 11:30, 14:25
# Default value of 'degree' is 1, and 'time' is System time.
#
import sys
import time
def fuzzy(hour, minute, degree=1):
"""Implements the fuzzy clock.
returns the the string that spells out the time - hour:minute
Supports two degrees of fuzziness. Set with degree = 1 or degree = 2
When degree = 1, time is in quantum of 5 minutes.
When degree = 2, time is in quantum of 15 minutes."""
if degree <= 0 or degree > 2:
print("Please use a degree of 1 or 2. Using fuzziness degree=1")
degree = 1
begin = "It's "
f0 = "almost "
f1 = "exactly "
f2 = "around "
b0 = " past "
b1 = " to "
hourlist = (
"One",
"Two",
"Three",
"Four",
"Five",
"Six",
"Seven",
"Eight",
"Nine",
"Ten",
"Eleven",
"Twelve",
)
s1 = s2 = s3 = s4 = ""
base = 5
if degree == 1:
base = 5
val = ("Five", "Ten", "Quarter", "Twenty", "Twenty-Five", "Half")
elif degree == 2:
base = 15
val = ("Quarter", "Half")
# to find whether we have to use 'almost', 'exactly' or 'around'
dmin = minute % base
if minute > 30:
pos = int((60 - minute) / base) # position in the tuple 'val'
else:
pos = int(minute / base)
if dmin == 0:
s1 = f1
pos = pos - 1
elif dmin <= base / 2:
s1 = f2
if minute < 30:
pos = pos - 1
else:
s1 = f0
if minute > 30:
pos = pos - 1
s2 = val[pos]
if minute <= base / 2:
# Case like "It's around/exactly Ten"
s2 = s3 = ""
s4 = hourlist[hour - 12 - 1]
elif minute >= 60 - base / 2:
# Case like "It's almost Ten"
s2 = s3 = ""
s4 = hourlist[hour - 12]
else:
# Other cases with all words, like "It's around Quarter past One"
if minute > 30:
s3 = b1 # to
s4 = hourlist[hour - 12]
else:
s3 = b0 # past
s4 = hourlist[hour - 12 - 1]
return begin + s1 + s2 + s3 + s4
def main():
deg = 1
stm = time.localtime()
h = stm.tm_hour
m = stm.tm_min
if len(sys.argv) >= 2:
try:
deg = int(sys.argv[1])
except Exception:
print("Please use a degree of 1 or 2. Using fuzziness degree=1")
if len(sys.argv) >= 3:
tm = sys.argv[2].split(":")
try:
h = int(tm[0])
m = int(tm[1])
if h < 0 or h > 23 or m < 0 or m > 59:
raise Exception
except Exception:
print("Bad time entered. Using the system time.")
h = stm.tm_hour
m = stm.tm_min
print(fuzzy(h, m, deg))
return
if __name__ == "__main__":
main()