mirror of
https://github.com/craigerl/aprsd.git
synced 2024-09-27 07:36:40 -04:00
Hemna
53b8f21535
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.
136 lines
3.2 KiB
Python
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()
|