Convert to use pyutilz / scottutilz libraries.
authorScott Gasch <[email protected]>
Fri, 2 Sep 2022 03:06:42 +0000 (20:06 -0700)
committerScott Gasch <[email protected]>
Fri, 2 Sep 2022 03:06:42 +0000 (20:06 -0700)
15 files changed:
bellevue_reporter_rss_renderer.py
camera_trigger.py
chooser.py
generic_news_rss_renderer.py
gkeep_renderer.py
kiosk.py
local_photos_mirror_renderer.py
myq_renderer.py
reddit_renderer.py
renderer.py
renderer_catalog.py
stevens_renderer.py
stock_renderer.py
stranger_renderer.py
twitter_renderer.py

index 4e1ff6261f31650c609ec153f3fcf3f878573809..70002695b9b130d44e6119b2320816fc0357cfc4 100644 (file)
@@ -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
         )
index 8582889d285ab49750299facf60ab242a793effd..3ca7a3cb43f42996324e14a927f9c6e01b622d36 100644 (file)
@@ -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",
index 813eaffa95a404a5958183d8796ced85cf2314f0..ad047548fbdbd6ba7f85fb3599ab16b478c4c6a2 100644 (file)
@@ -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
index 61be6ff01c487122cf3215a63eda3f31463223c2..1ffe024a7e9d3d798e6432804badcb2c430a18f4 100644 (file)
@@ -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__)
index f910e309a4ef62771d4d67d3998b0f961bc04ba2..c07ebd6a4c060cfb3f02a64001ed79528296b8e4 100644 (file)
@@ -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):
 <HR style="border-top:3px solid white;">
 """
                             )
-                    if num_lines >= 12:
+                    if num_lines >= 10:
                         logger.debug(
                             f"{num_lines} lines: two column mode"
                         )
index 01b7949bdec216273527451b66faa44908f8fdbb..67691f2784004a0a00c05cd36bc0e0e8be149a9a 100755 (executable)
--- 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
index b6499a17bd39a13ad0e011db94cb963bfb6269d9..b9ba5c988ea86bd8e25c3d4c554cc848a81830a8 100644 (file)
@@ -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",
index 2379a70dddba3995a3b691ff90dd9fb3b0a63d76..72a6a391a4fb63f554d66bb9d212fdbd833cfa59 100644 (file)
@@ -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
index 192bc206e75b860661816837d396afc3059ac6b1..74428ef332cab00e3a5153822233d5ad2259f1d6 100644 (file)
@@ -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
 
index 0d8988423d2ea33276a1203b4a706c2036ebf143..fea5a47c87f4b49e5ff80373515850bff6a2cae0 100644 (file)
@@ -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__)
index c62b926cf9cfcc8c0a4881af473745d5609b5d05..7bf3c1f00e85f28a61b0bbc5a208e6e5c38a88b8 100644 (file)
@@ -112,7 +112,7 @@ __registry = [
             "SPY",
             "BTC-USD",
             "IEMG",
-            "OPTAX",
+            "ABHYX",
             "SPAB",
             "SPHD",
             "GC=F",
index 0916aee9fd694b1a6a1b84e0bb251c6d459b8111..bf97785256933beb350d84d9ee47b87a59ca8ec2 100644 (file)
@@ -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'''
 <TABLE>
 <TR>
-  <TD><B>temperature:</B></TD>
-  <TD>{conditions['temperature']}&deg;{conditions['temperatureUnit'][0]}</TD>
+  <TD WIDTH="150"><FONT SIZE=+2><B>Temp:</B></FONT></TD>
+  <TD><FONT SIZE=+2>{conditions['temperature']}&deg;{conditions['temperatureUnit'][0]}</FONT></TD>
 </TR>
 <TR>
-  <TD><B>weather:</B></TD>
-  <TD>{conditions['weather']}</TD>
+  <TD><FONT SIZE=+2><B>Weather:</B></FONT></TD>
+  <TD><FONT SIZE=+2>{conditions['weather']}</FONT></TD>
 </TR>
 <TR>
-  <TD><B>road:</B></TD>
-  <TD>{conditions['roadCondition']}</TD>
+  <TD><FONT SIZE=+2><B>Roadway:</B></FONT></TD>
+  <TD><FONT SIZE=+2>{conditions['roadCondition']}</FONT></TD>
 </TR>'''
-        if 'restrictionOne' in conditions or 'restrictionTwo' in conditions:
+        if 'restrictionOne' in conditions and 'restrictionTwo' in conditions:
             ret += '''
 <TR>
-  <TD><B>restrictions:</B></TD>
-  <TD>'''
-            if 'restrictionOne' in conditions:
+  <TD><FONT SIZE=+2><B>Restrictions:</B></FONT></TD>
+  <TD><FONT SIZE=+2>'''
+            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']}<BR>'''
-            if 'restrictionTwo' in conditions:
-                ret += f'''
-  {conditions['restrictionTwo']['travelDirectionName']}:
-  {conditions['restrictionTwo']['publicPage']}'''
-        ret += '</TR></TABLE>'
+    <U>{conditions['restrictionOne']['travelDirectionName']}:</U>
+    {conditions['restrictionOne']['publicPage']} <BR>
+    <U>{conditions['restrictionTwo']['travelDirectionName']}:</U>
+    {conditions['restrictionTwo']['publicPage']}'''
+            elif count == 1:
+                msg = conditions['restrictionOne'].get('publicPage', 'no restrictions')
+                if msg.lower() != 'no restrictions':
+                    ret += f'''
+    <U>{conditions['restrictionOne']['travelDirectionName']}:</U>
+    {conditions['restrictionOne']['publicPage']}<BR>'''
+                else:
+                    ret += f'''
+    <U>{conditions['restrictionTwo']['travelDirectionName']}:</U>
+    {conditions['restrictionTwo']['publicPage']}<BR>'''
+            else:
+                ret += '''None.<BR>'''
+        ret += '</FONT></TD></TR></TABLE>'
         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'''
 <TR>
-  <TD{color}><B>{f['periodText']}</B></TD>
+  <TD WIDTH="150" valign="top" {color}><B>{f['periodText']}</B></TD>
   <TD{color}>{f['forecastText']}</TD>
 </TR>'''
         ret += '</TABLE>'
@@ -71,9 +86,11 @@ class stevens_renderer(renderer.abstaining_renderer):
             if camera['cameraId'] == 8063:
                 return f'''
 <CENTER>
-  <IMG SRC={camera['cameraUrl']} WIDTH={camera['width']}>
+  <A HREF='https://wsdot.com/travel/real-time/mountainpasses/Stevens'>
+    <IMG SRC={camera['cameraUrl']} WIDTH={camera['width'] * 1.75}>
+  </A>
   <BR>
-  <B>{camera['cameraLabel']} ({camera['direction']})</B>
+  <I>{camera['cameraLabel']} ({camera['direction']})</I>
 </CENTER>'''
         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'''
-<H2>Stevens Pass Conditions ~{tss} ago:</H2>
+<H1>Stevens Pass Conditions:</H1>
 <HR>
 <TABLE WIDTH=90%>
 <TR>
@@ -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")
index a8a1571c10336c11d9e9480e9e8b058c9371baaf..40ced0fb94a85fab390ee086ca6cdae2a78bfdd9 100644 (file)
@@ -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)
index 0c566d93e3123a5e18f52a5960475140b84ac66c..e9c15142786d3f2a04edfbf707c092254340c8d2 100644 (file)
@@ -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")
index 40a3385d92fd4746461e067f595c70486ad1f7b3..edbe17e10b603a76ffb2f5d0fd196e8f3aa67b48 100644 (file)
@@ -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