-# -*- coding: utf-8 -*-
+#!/usr/bin/env python3
-import constants
-import file_writer
-import gkeepapi
+import logging
import os
import re
+from typing import Dict
+
+import gkeepapi # type: ignore
+
+import kiosk_constants
+import file_writer
import renderer
-import secrets
+import kiosk_secrets as secrets
-class gkeep_renderer(renderer.debuggable_abstaining_renderer):
- def __init__(self, name_to_timeout_dict):
- super(gkeep_renderer, self).__init__(name_to_timeout_dict, True)
- self.keep = gkeepapi.Keep()
- success = self.keep.login(
- secrets.google_keep_username, secrets.google_keep_password
- )
- if success:
- self.debug_print("Connected with gkeep.")
- else:
- self.debug_print("Error connecting with gkeep.")
+logger = logging.getLogger(__file__)
+
+
+class gkeep_renderer(renderer.abstaining_renderer):
+ def __init__(self, name_to_timeout_dict: Dict[str, int]) -> None:
+ super().__init__(name_to_timeout_dict)
self.colors_by_name = {
"white": "#002222",
"green": "#345920",
"gray": "#3c3f4c",
"teal": "#16504B",
}
+ self.keep = gkeepapi.Keep()
+ success = self.keep.login(
+ secrets.google_keep_username, secrets.google_keep_password
+ )
+ if success:
+ logger.debug("Connected with gkeep.")
+ else:
+ logger.debug("Error connecting with gkeep.")
- def debug_prefix(self):
+ def debug_prefix(self) -> str:
return "gkeep"
- def periodic_render(self, key):
+ def periodic_render(self, key: str) -> bool:
strikethrough = re.compile("(\u2611[^\n]*)\n", re.UNICODE)
linkify = re.compile(r".*(https?:\/\/\S+).*")
title = title.replace(" ", "-")
title = title.replace("/", "")
- filename = "%s_2_3600.html" % title
+ filename = f"{title}_2_3600.html"
contents = note.text + "\n"
- self.debug_print("Note title '%s'" % title)
+ logger.debug(f"Note title '{title}'")
if contents != "" and not contents.isspace():
contents = strikethrough.sub("", contents)
- self.debug_print("Note contents:\n%s" % contents)
+ logger.debug(f"Note contents:\n{contents}")
contents = contents.replace(
- u"\u2610 ", u'<LI><INPUT TYPE="checkbox"> '
+ "\u2610 ", '<LI><INPUT TYPE="checkbox"> '
)
- contents = linkify.sub(r'<a href="\1">\1</a>', contents)
+ #contents = linkify.sub(r'<a href="\1">\1</a>', contents)
individual_lines = contents.split("\n")
num_lines = len(individual_lines)
- max_length = 0
contents = ""
for x in individual_lines:
length = len(x)
- if length > max_length:
- max_length = length
leading_spaces = len(x) - len(x.lstrip(" "))
- leading_spaces /= 2
+ leading_spaces //= 2
leading_spaces = int(leading_spaces)
x = x.lstrip(" ")
- # self.debug_print(" * (%d) '%s'" % (leading_spaces, x))
+ # logger.debug(" * (%d) '%s'" % (leading_spaces, x))
for y in range(0, leading_spaces):
x = "<UL>" + x
for y in range(0, leading_spaces):
if color in list(self.colors_by_name.keys()):
color = self.colors_by_name[color]
else:
- self.debug_print("Unknown color '%s'" % color)
- f = file_writer.file_writer(filename)
- f.write(
- """
+ logger.debug(f"Unknown color '{color}'")
+ print(f"TITLE: {color} {note.title}")
+ with file_writer.file_writer(filename) as f:
+ f.write("""
<STYLE type="text/css">
a:link { color:#88bfbf; }
ul { list-style-type:none; }
</STYLE>
-<DIV STYLE="border-radius: 25px; border-style: solid; padding: 20px; background-color: %s; color: #eeeeee; font-size: x-large;">
-<p style="color: #ffffff; font-size:larger"><B>%s</B></p>
-<HR style="border-top: 3px solid white;">"""
- % (color, note.title)
- )
- if num_lines >= 12 and max_length < 120:
- self.debug_print(
- "%d lines (max=%d chars): two columns" % (num_lines, max_length)
- )
- f.write('<TABLE BORDER=0 WIDTH=100%%><TR valign="top">')
- f.write('<TD WIDTH=50%% style="color:#eeeeee; font-size:large">\n')
- f.write("<FONT><UL STYLE='list-style-type:none'>")
- count = 0
- for x in individual_lines:
- f.write(x + "\n")
- count += 1
- if count == num_lines / 2:
- f.write("</UL></FONT></TD>\n")
- f.write(
- '<TD WIDTH=50%% style="color:#eeeeee; font-size:large">\n'
+<DIV STYLE="border-radius:25px; border-style:solid; padding:20px; background-color:%s; color:#eeeeee; font-size:x-large;">
+""" % color
)
- f.write("<FONT><UL STYLE='list-style-type:none'>")
- f.write("</UL></FONT></TD></TR></TABLE></DIV>\n")
- else:
- self.debug_print(
- "%d lines (max=%d chars): one column" % (num_lines, max_length)
- )
- f.write("<FONT><UL>%s</UL></FONT>" % contents)
- f.write("</DIV>")
- f.close()
+ f.write(f"""
+<p style="color:#ffffff; font-size:larger"><B>{note.title}</B></p>
+<HR style="border-top:3px solid white;">
+"""
+ )
+ if num_lines >= 12:
+ logger.debug(
+ f"{num_lines} lines: two column mode"
+ )
+ f.write('<TABLE BORDER=0 WIDTH=100%><TR valign="top">')
+ f.write(
+ '<TD WIDTH=50% style="color:#eeeeee; font-size:large">\n'
+ )
+ f.write("<FONT><UL STYLE='list-style-type:none'>")
+ count = 0
+ for x in individual_lines:
+ f.write(x + "\n")
+ count += 1
+ if count == num_lines / 2:
+ f.write("</UL></FONT></TD>\n")
+ f.write(
+ '<TD WIDTH=50% style="color:#eeeeee; font-size:large">\n'
+ )
+ f.write("<FONT><UL STYLE='list-style-type:none'>")
+ f.write("</UL></FONT></TD></TR></TABLE></DIV>\n")
+ else:
+ logger.debug(
+ f"{num_lines} lines: one column mode"
+ )
+ f.write(f"<FONT><UL>{contents}</UL></FONT>")
+ f.write("</DIV>")
else:
- self.debug_print("Note is empty, deleting %s." % filename)
- _ = os.path.join(constants.pages_dir, filename)
+ logger.debug(f"Note is empty, deleting {filename}.")
+ _ = os.path.join(kiosk_constants.pages_dir, filename)
try:
os.remove(_)
except:
# Test
-# x = gkeep_renderer({"Test", 1234})
-# x.periodic_render("Test")
+#logger.setLevel(logging.DEBUG)
+#ch = logging.StreamHandler()
+#ch.setLevel(logging.DEBUG)
+#formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
+#ch.setFormatter(formatter)
+#logger.addHandler(ch)
+#x = gkeep_renderer({"Test", 1234})
+#x.periodic_render("Test")