From 477c84bcdefc573278ec8ed8974d5be8baac562d Mon Sep 17 00:00:00 2001 From: Scott Gasch Date: Sun, 13 Mar 2022 23:41:23 -0700 Subject: [PATCH] Remove references to utils in lieu of just using pylib. --- kiosk.py | 10 ++--- main.py | 41 +++++++++--------- myq_renderer.py | 5 ++- renderer.py | 3 +- utils.py | 108 ------------------------------------------------ 5 files changed, 30 insertions(+), 137 deletions(-) delete mode 100644 utils.py diff --git a/kiosk.py b/kiosk.py index 13fb2c9..b1bdb1c 100755 --- a/kiosk.py +++ b/kiosk.py @@ -22,6 +22,7 @@ import pytz import bootstrap import config import datetime_utils +import file_utils import constants import file_writer @@ -29,7 +30,6 @@ import renderer_catalog import chooser import listen import trigger_catalog -import utils cfg = config.add_commandline_args( @@ -331,9 +331,9 @@ def emit_wrapped(f, "Bellevue", "USA", "US/Pacific", 47.610, -122.201 ) s = sun(city.observer, date=now, tzinfo=pytz.timezone("US/Pacific")) - sunrise_mod = utils.minute_number(s["sunrise"].hour, s["sunrise"].minute) - sunset_mod = utils.minute_number(s["sunset"].hour, s["sunset"].minute) - now_mod = utils.minute_number(now.hour, now.minute) + sunrise_mod = datetime_utils.minute_number(s["sunrise"].hour, s["sunrise"].minute) + sunset_mod = datetime_utils.minute_number(s["sunset"].hour, s["sunset"].minute) + now_mod = datetime_utils.minute_number(now.hour, now.minute) if now_mod < sunrise_mod or now_mod > (sunset_mod + 45): return "E6B8B8" elif now_mod < (sunrise_mod + 45) or now_mod > (sunset_mod + 120): @@ -350,7 +350,7 @@ def emit_wrapped(f, else: return float(constants.refresh_period_sec * 1000.0) - age = utils.describe_age_of_file_briefly(f"pages/{filename}") + age = file_utils.describe_file_ctime(f"pages/{filename}") bgcolor = pick_background_color() if command is None: pageid = filename diff --git a/main.py b/main.py index ead0741..95f5e15 100755 --- a/main.py +++ b/main.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 from datetime import datetime -import difflib import gc import linecache import os @@ -12,22 +11,22 @@ import time import traceback import tracemalloc from typing import Optional, List -from queue import Queue, Empty +from queue import Queue import astral # type: ignore from astral.sun import sun # type: ignore import pytz +import datetime_utils +import file_utils + import constants -import renderer -import renderer import renderer_catalog import chooser import listen import logging import pvporcupine import trigger_catalog -import utils def thread_janitor() -> None: @@ -215,11 +214,11 @@ def thread_change_current(command_queue: Queue) -> None: break if triggered: - print("chooser[%s] - WE ARE TRIGGERED." % utils.timestamp()) + print("chooser[%s] - WE ARE TRIGGERED." % datetime_utils.timestamp()) if page != page_history[0] or (swap_page_target - now < 10.0): print( "chooser[%s] - EMERGENCY PAGE %s LOAD NEEDED" - % (utils.timestamp(), page) + % (datetime_utils.timestamp(), page) ) try: with open(os.path.join(constants.pages_dir, "current.shtml"), "w") as f: @@ -228,7 +227,7 @@ def thread_change_current(command_queue: Queue) -> None: page_history = page_history[0:10] swap_page_target = now + 40 except: - print("chooser[%s] - page does not exist?!" % (utils.timestamp())) + print("chooser[%s] - page does not exist?!" % (datetime_utils.timestamp())) continue # Also notify XMLHTTP clients that they need to refresh now. @@ -243,7 +242,7 @@ def thread_change_current(command_queue: Queue) -> None: elif now >= swap_page_target: assert page != page_history[0] - print("chooser[%s] - nominal choice of %s" % (utils.timestamp(), page)) + print("chooser[%s] - nominal choice of %s" % (datetime_utils.timestamp(), page)) try: with open(os.path.join(constants.pages_dir, "current.shtml"), "w") as f: emit_wrapped(f, page) @@ -251,7 +250,7 @@ def thread_change_current(command_queue: Queue) -> None: page_history = page_history[0:10] swap_page_target = now + constants.refresh_period_sec except: - print("chooser[%s] - page does not exist?!" % (utils.timestamp())) + print("chooser[%s] - page does not exist?!" % (datetime_utils.timestamp())) continue time.sleep(1) @@ -267,9 +266,9 @@ def emit_wrapped(f, "Bellevue", "USA", "US/Pacific", 47.610, -122.201 ) s = sun(city.observer, date=now, tzinfo=pytz.timezone("US/Pacific")) - sunrise_mod = utils.minute_number(s["sunrise"].hour, s["sunrise"].minute) - sunset_mod = utils.minute_number(s["sunset"].hour, s["sunset"].minute) - now_mod = utils.minute_number(now.hour, now.minute) + sunrise_mod = datetime_utils.minute_number(s["sunrise"].hour, s["sunrise"].minute) + sunset_mod = datetime_utils.minute_number(s["sunset"].hour, s["sunset"].minute) + now_mod = datetime_utils.minute_number(now.hour, now.minute) if now_mod < sunrise_mod or now_mod > (sunset_mod + 45): return "E6B8B8" elif now_mod < (sunrise_mod + 45) or now_mod > (sunset_mod + 120): @@ -286,7 +285,7 @@ def emit_wrapped(f, else: return float(constants.refresh_period_sec * 1000.0) - age = utils.describe_age_of_file_briefly(f"pages/{filename}") + age = file_utils.describe_file_ctime(f"pages/{filename}") bgcolor = pick_background_color() if command is None: pageid = filename @@ -493,7 +492,7 @@ def emit_wrapped(f, def thread_invoke_renderers() -> None: while True: - print(f"renderer[{utils.timestamp()}]: invoking all renderers in catalog...") + print(f"renderer[{datetime_utils.timestamp()}]: invoking all renderers in catalog...") for r in renderer_catalog.get_renderers(): now = time.time() try: @@ -501,15 +500,15 @@ def thread_invoke_renderers() -> None: except Exception as e: traceback.print_exc(file=sys.stdout) print( - f"renderer[{utils.timestamp()}] unknown exception ({e}) in {r.get_name()}, swallowing it." + f"renderer[{datetime_utils.timestamp()}] unknown exception ({e}) in {r.get_name()}, swallowing it." ) delta = time.time() - now if delta > 1.0: print( - f"renderer[{utils.timestamp()}]: Warning: {r.get_name()}'s rendering took {delta:5.2f}s." + f"renderer[{datetime_utils.timestamp()}]: Warning: {r.get_name()}'s rendering took {delta:5.2f}s." ) print( - f"renderer[{utils.timestamp()}]: thread having a little break for {constants.render_period_sec}s..." + f"renderer[{datetime_utils.timestamp()}]: thread having a little break for {constants.render_period_sec}s..." ) time.sleep(constants.render_period_sec) @@ -534,19 +533,19 @@ if __name__ == "__main__": hotword_thread.start() if changer_thread is None or not changer_thread.is_alive(): print( - f"MAIN[{utils.timestamp()}] - (Re?)initializing chooser thread... (wtf?!)" + f"MAIN[{datetime_utils.timestamp()}] - (Re?)initializing chooser thread... (wtf?!)" ) changer_thread = Thread(target=thread_change_current, args=(command_queue,)) changer_thread.start() if renderer_thread is None or not renderer_thread.is_alive(): print( - f"MAIN[{utils.timestamp()}] - (Re?)initializing render thread... (wtf?!)" + f"MAIN[{datetime_utils.timestamp()}] - (Re?)initializing render thread... (wtf?!)" ) renderer_thread = Thread(target=thread_invoke_renderers, args=()) renderer_thread.start() if janitor_thread is None or not janitor_thread.is_alive(): print( - f"MAIN[{utils.timestamp()}] - (Re?)initializing janitor thread... (wtf?!)" + f"MAIN[{datetime_utils.timestamp()}] - (Re?)initializing janitor thread... (wtf?!)" ) janitor_thread = Thread(target=thread_janitor, args=()) janitor_thread.start() diff --git a/myq_renderer.py b/myq_renderer.py index 8591af5..0377963 100644 --- a/myq_renderer.py +++ b/myq_renderer.py @@ -7,11 +7,12 @@ from dateutil.parser import parse import pymyq # type: ignore from typing import Dict, Optional +import datetime_utils + import constants import file_writer import renderer import kiosk_secrets as secrets -import utils class garage_door_renderer(renderer.abstaining_renderer): @@ -97,7 +98,7 @@ class garage_door_renderer(renderer.abstaining_renderer): delta = (now - ts).total_seconds() now = datetime.datetime.now() is_night = now.hour <= 7 or now.hour >= 21 - duration = utils.describe_duration_briefly(int(delta)) + duration = datetime_utils.describe_duration_briefly(int(delta)) width = 0 if is_night and door.state == "open": color = "border-color: #ff0000;" diff --git a/renderer.py b/renderer.py index 83ace25..0d89884 100644 --- a/renderer.py +++ b/renderer.py @@ -1,11 +1,12 @@ #!/usr/bin/env python3 from abc import ABC, abstractmethod -from decorators import invocation_logged import logging import time from typing import Dict, Optional, Set +from decorator_utils import invocation_logged + logger = logging.getLogger(__file__) diff --git a/utils.py b/utils.py deleted file mode 100644 index 98238a1..0000000 --- a/utils.py +++ /dev/null @@ -1,108 +0,0 @@ -#!/usr/bin/env python3 - -import time -import logging -import os -from datetime import datetime - -import constants - - -logger = logging.getLogger(__file__) - - -def timestamp() -> str: - t = datetime.fromtimestamp(time.time()) - return t.strftime("%d/%b/%Y:%H:%M:%S%Z") - - -def describe_age_of_file(filename: str) -> str: - try: - now = time.time() - ts = os.stat(filename).st_ctime - age = now - ts - age = int(age) - return describe_duration(age) - except Exception as e: - logger.exception(e) - return "?????" - - -def describe_age_of_file_briefly(filename: str) -> str: - try: - now = time.time() - ts = os.stat(filename).st_ctime - age = now - ts - age = int(age) - return describe_duration_briefly(age) - except Exception as e: - logger.exception(e) - return "?????" - - -def describe_duration(age: int) -> str: - days = divmod(age, constants.seconds_per_day) - hours = divmod(days[1], constants.seconds_per_hour) - minutes = divmod(hours[1], constants.seconds_per_minute) - - descr = "" - if days[0] > 1: - descr = f"{int(days[0]):d} days, " - elif days[0] == 1: - descr = "1 day, " - if hours[0] > 1: - descr = descr + f"{int(hours[0]):d} hours, " - elif hours[0] == 1: - descr = descr + "1 hour, " - if len(descr) > 0: - descr = descr + "and " - if minutes[0] == 1: - descr = descr + "1 minute" - else: - descr = descr + f"{int(minutes[0]):d} minutes" - return descr - - -def describe_duration_briefly(age: int) -> str: - days = divmod(age, constants.seconds_per_day) - hours = divmod(days[1], constants.seconds_per_hour) - minutes = divmod(hours[1], constants.seconds_per_minute) - - descr = "" - if days[0] > 0: - descr = f"{int(days[0]):d}d " - if hours[0] > 0: - descr = descr + f"{int(hours[0]):d}h " - descr = descr + f"{int(minutes[0]):d}m" - return descr - - -def minute_number(hour: int, minute: int) -> int: - """Convert hour:minute into minute number from start of day.""" - return hour * 60 + minute - - -def datetime_to_minute_number(dt: datetime) -> int: - """Convert a datetime into a minute number (of the day)""" - return minute_number(dt.hour, dt.minute) - - -def minute_number_to_time_string(minute_num: int) -> str: - """Convert minute number from start of day into hour:minute am/pm - string.""" - - hour = minute_num // 60 - minute = minute_num % 60 - ampm = "a" - if hour > 12: - hour -= 12 - ampm = "p" - if hour == 12: - ampm = "p" - if hour == 0: - hour = 12 - return f"{hour:2}:{minute:02}{ampm}" - - -# x = describe_age_of_file_briefly("pages/clock_10_none.html") -# print x -- 2.45.2