From c6d31748857aeb8f361dadf93bd00e04d60bfb70 Mon Sep 17 00:00:00 2001 From: Scott Gasch Date: Thu, 1 Sep 2022 20:06:42 -0700 Subject: [PATCH] Convert to use pyutilz / scottutilz libraries. --- bellevue_reporter_rss_renderer.py | 1 + camera_trigger.py | 36 ++++++++------- chooser.py | 2 +- generic_news_rss_renderer.py | 3 +- gkeep_renderer.py | 9 ++-- kiosk.py | 10 +++-- local_photos_mirror_renderer.py | 1 + myq_renderer.py | 2 +- reddit_renderer.py | 3 +- renderer.py | 2 +- renderer_catalog.py | 2 +- stevens_renderer.py | 73 ++++++++++++++++++------------- stock_renderer.py | 2 +- stranger_renderer.py | 8 ++-- twitter_renderer.py | 2 +- 15 files changed, 90 insertions(+), 66 deletions(-) diff --git a/bellevue_reporter_rss_renderer.py b/bellevue_reporter_rss_renderer.py index 4e1ff62..7000269 100644 --- a/bellevue_reporter_rss_renderer.py +++ b/bellevue_reporter_rss_renderer.py @@ -66,6 +66,7 @@ class bellevue_reporter_rss_renderer(gnrss.generic_news_rss_renderer): or re.search('[Cc]annabis', title) is not None or re.search('[Cc]annabis', description) is not None or 'THC' in title + or re.search('[Tt]op.[Rr]ated', title) is not None or re.search('[Ll]ose [Ww]eight', title) is not None or re.search('[Ll]ose [Ww]eight', description) is not None ) diff --git a/camera_trigger.py b/camera_trigger.py index 8582889..3ca7a3c 100644 --- a/camera_trigger.py +++ b/camera_trigger.py @@ -58,38 +58,42 @@ class any_camera_trigger(trigger.trigger): filename = f"/timestamps/last_camera_motion_{camera}" ts = os.stat(filename).st_ctime age = now - ts - if ts != self.last_trigger_timestamp[camera] and age < 10: - logger.info(f'{camera} is triggered; {filename} touched {age}s ago (@{ts}') + print(f'{camera} => {age}') + if ts != self.last_trigger_timestamp[camera]: self.last_trigger_timestamp[camera] = ts - num_cameras_with_recent_triggers += 1 + if age < 15: + logger.info(f'{camera} is triggered; {filename} touched {age}s ago (@{ts}') + num_cameras_with_recent_triggers += 1 - self.triggers_in_the_past_seven_min[camera] = 0 - filename = f"/timestamps/camera_motion_history_{camera}" - with open(filename, "r") as f: - contents = f.readlines() - for x in contents: - x = x.strip() - age = now - int(x) - if age < (60 * 7): - self.triggers_in_the_past_seven_min[camera] += 1 + self.triggers_in_the_past_seven_min[camera] = 0 + filename = f"/timestamps/camera_motion_history_{camera}" + with open(filename, "r") as f: + contents = f.readlines() + for x in contents: + x = x.strip() + age = now - int(x) + if age < (60 * 7): + self.triggers_in_the_past_seven_min[camera] += 1 + print(f'{camera} past 7m: {self.triggers_in_the_past_seven_min[camera]}') # Second pass, see whether we want to trigger due to # camera activity we found. All cameras timestamps were # just considered and should be up-to-date. Some logic to # squelch spammy cameras unless more than one is triggered # at the same time. + print(f'{num_cameras_with_recent_triggers}') for camera in camera_list: - if (now - self.last_trigger_timestamp[camera]) < 10: + if (now - self.last_trigger_timestamp[camera]) < 15: if ( self.triggers_in_the_past_seven_min[camera] <= 4 or num_cameras_with_recent_triggers > 1 ): - logger.info(f'{camera} has {self.triggers_in_the_past_seven_min[camera]} triggers in the past 7d.') - logger.info(f'{num_cameras_with_recent_triggers} cameras are triggered right now.') + print(f'{camera} has {self.triggers_in_the_past_seven_min[camera]} triggers in the past 7d.') + print(f'{num_cameras_with_recent_triggers} cameras are triggered right now.') age = now - self.last_trigger_timestamp[camera] priority = self.choose_priority(camera, int(age)) - logger.info(f'*** CAMERA TRIGGER (hidden/{camera}.html @ {priority}) ***') + print(f'*** CAMERA TRIGGER (hidden/{camera}.html @ {priority}) ***') triggers.append( ( f"hidden/unwrapped_{camera}.html", diff --git a/chooser.py b/chooser.py index 813eaff..ad04754 100644 --- a/chooser.py +++ b/chooser.py @@ -8,7 +8,7 @@ import re import time from typing import Any, Callable, List, Optional, Set, Tuple -import datetime_utils +from pyutilz.datetimez import datetime_utils import kiosk_constants import trigger diff --git a/generic_news_rss_renderer.py b/generic_news_rss_renderer.py index 61be6ff..1ffe024 100644 --- a/generic_news_rss_renderer.py +++ b/generic_news_rss_renderer.py @@ -9,11 +9,12 @@ import re from typing import Dict, List, Optional, Union import xml.etree.ElementTree as ET +from scottutilz import profanity_filter + import file_writer import grab_bag import renderer import page_builder -import profanity_filter logger = logging.getLogger(__file__) diff --git a/gkeep_renderer.py b/gkeep_renderer.py index f910e30..c07ebd6 100644 --- a/gkeep_renderer.py +++ b/gkeep_renderer.py @@ -35,7 +35,9 @@ class gkeep_renderer(renderer.abstaining_renderer): } self.keep = gkeepapi.Keep() success = self.keep.login( - secrets.google_keep_username, secrets.google_keep_password + secrets.google_keep_username, + secrets.google_keep_password, + secrets.google_keep_mac, ) if success: logger.debug("Connected with gkeep.") @@ -47,7 +49,7 @@ class gkeep_renderer(renderer.abstaining_renderer): def periodic_render(self, key: str) -> bool: strikethrough = re.compile("(\u2611[^\n]*)\n", re.UNICODE) - linkify = re.compile(r".*(https?:\/\/\S+).*") + #linkify = re.compile(r".*(https?:\/\/\S+).*") self.keep.sync() result_list = self.keep.find(labels=[self.keep.findLabel("kiosk")]) @@ -71,7 +73,6 @@ class gkeep_renderer(renderer.abstaining_renderer): num_lines = len(individual_lines) contents = "" for x in individual_lines: - length = len(x) leading_spaces = len(x) - len(x.lstrip(" ")) leading_spaces //= 2 leading_spaces = int(leading_spaces) @@ -104,7 +105,7 @@ class gkeep_renderer(renderer.abstaining_renderer):
""" ) - if num_lines >= 12: + if num_lines >= 10: logger.debug( f"{num_lines} lines: two column mode" ) diff --git a/kiosk.py b/kiosk.py index 01b7949..67691f2 100755 --- a/kiosk.py +++ b/kiosk.py @@ -19,10 +19,12 @@ import numpy as np import pvporcupine import pytz -import bootstrap -import config -import datetime_utils -import file_utils +from pyutilz import ( + bootstrap, + config, +) +from pyutilz.datetimez import datetime_utils +from pyutilz.files import file_utils import kiosk_constants import file_writer diff --git a/local_photos_mirror_renderer.py b/local_photos_mirror_renderer.py index b6499a1..b9ba5c9 100644 --- a/local_photos_mirror_renderer.py +++ b/local_photos_mirror_renderer.py @@ -47,6 +47,7 @@ class local_photos_mirror_renderer(renderer.abstaining_renderer): "Trip to California, '16", "Trip to San Francisco", "Trip to East Coast '16", + "Turkey 2022", "Tuscany 2008", "Yosemite 2010", "WA Roadtrip, 2021", diff --git a/myq_renderer.py b/myq_renderer.py index 2379a70..72a6a39 100644 --- a/myq_renderer.py +++ b/myq_renderer.py @@ -7,7 +7,7 @@ from dateutil.parser import parse import pymyq # type: ignore from typing import Dict, Optional -import datetime_utils +from pyutilz.datetimez import datetime_utils import kiosk_constants import file_writer diff --git a/reddit_renderer.py b/reddit_renderer.py index 192bc20..74428ef 100644 --- a/reddit_renderer.py +++ b/reddit_renderer.py @@ -5,10 +5,11 @@ from typing import Callable, Dict, Iterable, List, Set import praw # type: ignore +from scottutilz import profanity_filter + import file_writer import grab_bag import page_builder -import profanity_filter import renderer import kiosk_secrets as secrets diff --git a/renderer.py b/renderer.py index 0d89884..fea5a47 100644 --- a/renderer.py +++ b/renderer.py @@ -5,7 +5,7 @@ import logging import time from typing import Dict, Optional, Set -from decorator_utils import invocation_logged +from pyutilz.decorator_utils import invocation_logged logger = logging.getLogger(__file__) diff --git a/renderer_catalog.py b/renderer_catalog.py index c62b926..7bf3c1f 100644 --- a/renderer_catalog.py +++ b/renderer_catalog.py @@ -112,7 +112,7 @@ __registry = [ "SPY", "BTC-USD", "IEMG", - "OPTAX", + "ABHYX", "SPAB", "SPHD", "GC=F", diff --git a/stevens_renderer.py b/stevens_renderer.py index 0916aee..bf97785 100644 --- a/stevens_renderer.py +++ b/stevens_renderer.py @@ -1,12 +1,10 @@ #!/usr/bin/env python3 -import datetime import json import logging import requests from typing import Dict -import datetime_utils import file_writer import renderer @@ -24,31 +22,48 @@ class stevens_renderer(renderer.abstaining_renderer): ret = f''' - - + + - - + + - - + + ''' - if 'restrictionOne' in conditions or 'restrictionTwo' in conditions: + if 'restrictionOne' in conditions and 'restrictionTwo' in conditions: ret += ''' - - +
temperature:{conditions['temperature']}°{conditions['temperatureUnit'][0]}Temp:{conditions['temperature']}°{conditions['temperatureUnit'][0]}
weather:{conditions['weather']}Weather:{conditions['weather']}
road:{conditions['roadCondition']}Roadway:{conditions['roadCondition']}
restrictions:''' - if 'restrictionOne' in conditions: + Restrictions:''' + count = 0 + msg = conditions['restrictionOne'].get('publicPage', 'no restrictions') + if msg.lower() != 'no restrictions': + count += 1 + msg = conditions['restrictionTwo'].get('publicPage', 'no restrictions') + if msg.lower() != 'no restrictions': + count += 1 + if count == 2: ret += f''' - {conditions['restrictionOne']['travelDirectionName']}: - {conditions['restrictionOne']['publicPage']}
''' - if 'restrictionTwo' in conditions: - ret += f''' - {conditions['restrictionTwo']['travelDirectionName']}: - {conditions['restrictionTwo']['publicPage']}''' - ret += '
' + {conditions['restrictionOne']['travelDirectionName']}: + {conditions['restrictionOne']['publicPage']}
+ {conditions['restrictionTwo']['travelDirectionName']}: + {conditions['restrictionTwo']['publicPage']}''' + elif count == 1: + msg = conditions['restrictionOne'].get('publicPage', 'no restrictions') + if msg.lower() != 'no restrictions': + ret += f''' + {conditions['restrictionOne']['travelDirectionName']}: + {conditions['restrictionOne']['publicPage']}
''' + else: + ret += f''' + {conditions['restrictionTwo']['travelDirectionName']}: + {conditions['restrictionTwo']['publicPage']}
''' + else: + ret += '''None.
''' + ret += '' return ret def render_forecast(forecasts: Dict[str, str]) -> str: @@ -60,7 +75,7 @@ class stevens_renderer(renderer.abstaining_renderer): color = ' BGCOLOR="#dfefff"' ret += f''' - {f['periodText']} + {f['periodText']} {f['forecastText']} ''' ret += '' @@ -71,9 +86,11 @@ class stevens_renderer(renderer.abstaining_renderer): if camera['cameraId'] == 8063: return f'''
- + + +
- {camera['cameraLabel']} ({camera['direction']}) + {camera['cameraLabel']} ({camera['direction']})
''' return '' @@ -85,14 +102,9 @@ class stevens_renderer(renderer.abstaining_renderer): conditions = contents['condition'] cameras = contents['cameras'] forecasts = contents['stationForecasts'][0] - now = datetime_utils.now_pacific() - tss = conditions['displayDate'] - tss = tss.replace('Z', '+00:00') - ts = datetime.datetime.strptime(tss, '%Y-%m-%dT%H:%M:%S.%f%z') - tss = datetime_utils.describe_timedelta_briefly(now - ts) with file_writer.file_writer('stevens-conditions_5_3000.html') as f: f.write(f''' -

Stevens Pass Conditions ~{tss} ago:

+

Stevens Pass Conditions:


@@ -112,5 +124,6 @@ class stevens_renderer(renderer.abstaining_renderer): return True return False -test = stevens_renderer({"Test", 123}) -test.periodic_render("Test") +# Test: +#test = stevens_renderer({"Test", 123}) +#test.periodic_render("Test") diff --git a/stock_renderer.py b/stock_renderer.py index a8a1571..40ced0f 100644 --- a/stock_renderer.py +++ b/stock_renderer.py @@ -134,5 +134,5 @@ class stock_quote_renderer(renderer.abstaining_renderer): return True # Test -#x = stock_quote_renderer({}, ["MSFT", "GOOG", "BTC-USD", "OPTAX", "GC=F", "VNQ"], { "BTC-USD": "BTC", "GC=F": "GOLD" }) +#x = stock_quote_renderer({}, ["MSFT", "GOOG", "BTC-USD", "ABHYX", "GC=F", "VNQ"], { "BTC-USD": "BTC", "GC=F": "GOLD" }) #x.periodic_render(None) diff --git a/stranger_renderer.py b/stranger_renderer.py index 0c566d9..e9c1514 100644 --- a/stranger_renderer.py +++ b/stranger_renderer.py @@ -7,11 +7,11 @@ import re from typing import Dict from bs4 import BeautifulSoup # type: ignore +from pyutilz import profanity_filter import file_writer import grab_bag import page_builder -import profanity_filter import renderer @@ -154,6 +154,6 @@ class stranger_events_renderer(renderer.abstaining_renderer): # Test -#x = stranger_events_renderer({"Test", 123}) -#x.periodic_render("Fetch Events") -#x.periodic_render("Shuffle Events") +x = stranger_events_renderer({"Test", 123}) +x.periodic_render("Fetch Events") +x.periodic_render("Shuffle Events") diff --git a/twitter_renderer.py b/twitter_renderer.py index 40a3385..edbe17e 100644 --- a/twitter_renderer.py +++ b/twitter_renderer.py @@ -5,10 +5,10 @@ import re from typing import Dict, List import tweepy # type: ignore +from pyutilz import profanity_filter import file_writer import renderer -import profanity_filter import kiosk_secrets as secrets -- 2.45.2