Changes.
[kiosk.git] / utils.py
1 #!/usr/bin/env python3
2
3 import time
4 import logging
5 import os
6 from datetime import datetime
7
8 import constants
9
10
11 logger = logging.getLogger(__file__)
12
13
14 def timestamp() -> str:
15     t = datetime.fromtimestamp(time.time())
16     return t.strftime("%d/%b/%Y:%H:%M:%S%Z")
17
18
19 def describe_age_of_file(filename: str) -> str:
20     try:
21         now = time.time()
22         ts = os.stat(filename).st_ctime
23         age = now - ts
24         age = int(age)
25         return describe_duration(age)
26     except Exception as e:
27         logger.exception(e)
28         return "?????"
29
30
31 def describe_age_of_file_briefly(filename: str) -> str:
32     try:
33         now = time.time()
34         ts = os.stat(filename).st_ctime
35         age = now - ts
36         age = int(age)
37         return describe_duration_briefly(age)
38     except Exception as e:
39         logger.exception(e)
40         return "?????"
41
42
43 def describe_duration(age: int) -> str:
44     days = divmod(age, constants.seconds_per_day)
45     hours = divmod(days[1], constants.seconds_per_hour)
46     minutes = divmod(hours[1], constants.seconds_per_minute)
47
48     descr = ""
49     if days[0] > 1:
50         descr = f"{int(days[0]):d} days, "
51     elif days[0] == 1:
52         descr = "1 day, "
53     if hours[0] > 1:
54         descr = descr + f"{int(hours[0]):d} hours, "
55     elif hours[0] == 1:
56         descr = descr + "1 hour, "
57     if len(descr) > 0:
58         descr = descr + "and "
59     if minutes[0] == 1:
60         descr = descr + "1 minute"
61     else:
62         descr = descr + f"{int(minutes[0]):d} minutes"
63     return descr
64
65
66 def describe_duration_briefly(age: int) -> str:
67     days = divmod(age, constants.seconds_per_day)
68     hours = divmod(days[1], constants.seconds_per_hour)
69     minutes = divmod(hours[1], constants.seconds_per_minute)
70
71     descr = ""
72     if days[0] > 0:
73         descr = f"{int(days[0]):d}d "
74     if hours[0] > 0:
75         descr = descr + f"{int(hours[0]):d}h "
76     descr = descr + f"{int(minutes[0]):d}m"
77     return descr
78
79
80 def minute_number(hour: int, minute: int) -> int:
81     """Convert hour:minute into minute number from start of day."""
82     return hour * 60 + minute
83
84
85 def datetime_to_minute_number(dt: datetime) -> int:
86     """Convert a datetime into a minute number (of the day)"""
87     return minute_number(dt.hour, dt.minute)
88
89
90 def minute_number_to_time_string(minute_num: int) -> str:
91     """Convert minute number from start of day into hour:minute am/pm
92     string."""
93
94     hour = minute_num // 60
95     minute = minute_num % 60
96     ampm = "a"
97     if hour > 12:
98         hour -= 12
99         ampm = "p"
100     if hour == 12:
101         ampm = "p"
102     if hour == 0:
103         hour = 12
104     return f"{hour:2}:{minute:02}{ampm}"
105
106
107 # x = describe_age_of_file_briefly("pages/clock_10_none.html")
108 # print x