+#!/usr/bin/env python3
+
import os
-import file_writer
-import renderer
import random
import re
+from typing import Dict, Set
+
+import file_writer
+import renderer
-class local_photos_mirror_renderer(renderer.debuggable_abstaining_renderer):
+class local_photos_mirror_renderer(renderer.abstaining_renderer):
"""A renderer that uses a local mirror of Google photos"""
- album_root_directory = "/usr/local/export/www/gphotos/albums"
+ album_root_directory = "/var/www/html/kiosk/images/gphotos/albums"
album_whitelist = frozenset(
[
- "8-Mile Lake Hike",
+ "Autumn at Kubota",
"Bangkok and Phuket, 2003",
"Barn",
"Blue Angels... Seafair",
"Newer Alex Photos",
"Ohme Gardens",
"Olympic Sculpture Park",
+ "Portland, ME 2021",
"Prague and Munich 2019",
"Random",
- "Scott and Lynn",
"SFO 2014",
+ "Scott and Lynn",
+ "Sculpture Place",
"Skiing with Alex",
"Sonoma",
"Trip to California, '16",
"Trip to San Francisco",
"Trip to East Coast '16",
+ "Turkey 2022",
"Tuscany 2008",
+ "WA Roadtrip, 2021",
+ "WA Wines",
"Yosemite 2010",
"Zoo",
]
]
)
- def __init__(self, name_to_timeout_dict):
- super(local_photos_mirror_renderer, self).__init__(name_to_timeout_dict, False)
- self.candidate_photos = set()
+ def __init__(self, name_to_timeout_dict: Dict[str, int]) -> None:
+ super().__init__(name_to_timeout_dict)
+ self.candidate_photos: Set[str] = set()
- def debug_prefix(self):
+ def debug_prefix(self) -> str:
return "local_photos_mirror"
- def periodic_render(self, key):
+ def periodic_render(self, key: str) -> bool:
if key == "Index Photos":
return self.index_photos()
elif key == "Choose Photo":
return self.choose_photo()
else:
- raise error("Unexpected operation")
+ raise Exception("Unexpected operation")
- def album_is_in_whitelist(self, name):
+ def album_is_in_whitelist(self, name: str) -> bool:
for wlalbum in self.album_whitelist:
- if re.search("\d+ %s" % wlalbum, name) != None:
+ if re.search("\d+ %s" % wlalbum, name) is not None:
return True
return False
- # Walk the filesystem looking for photos in whitelisted albums and
- # keep their paths in memory.
- def index_photos(self):
+ def index_photos(self) -> bool:
+ """Walk the filesystem looking for photos in whitelisted albums and
+ keep their paths in memory.
+ """
for root, subdirs, files in os.walk(self.album_root_directory):
last_dir = root.rsplit("/", 1)[1]
if self.album_is_in_whitelist(last_dir):
- for x in files:
- extension = x.rsplit(".", 1)[1]
+ for filename in files:
+ extension = filename.rsplit(".", 1)[1]
if extension in self.extension_whitelist:
- photo_path = os.path.join(root, x)
+ photo_path = os.path.join(root, filename)
photo_url = photo_path.replace(
- "/usr/local/export/www/", "http://10.0.0.18/", 1
+ "/var/www/html", "http://kiosk.house/", 1
)
self.candidate_photos.add(photo_url)
return True
- # Pick one of the cached URLs and build a page.
def choose_photo(self):
+ """Pick one of the cached URLs and build a page."""
if len(self.candidate_photos) == 0:
print("No photos!")
return False
path = random.sample(self.candidate_photos, 1)[0]
- f = file_writer.file_writer("photo_23_3600.html")
- f.write(
- """
+ with file_writer.file_writer("photo_23_3600.html") as f:
+ f.write(
+ """
<style>
body{background-color:#303030;}
div#time{color:#dddddd;}
div#date{color:#dddddd;}
</style>
<center>"""
- )
- f.write(
- '<img src="%s" style="display:block;max-width=800;max-height:600;width:auto;height:auto">'
- % path
- )
- f.write("</center>")
- f.close()
+ )
+ f.write(
+ f'<img src="{path}" style="display:block;max-width=800;max-height:600;width:auto;height:auto">'
+ )
+ f.write("</center>")
return True