From a666e14607f37c652c5e959d0f5d2f6aaf9fc4b0 Mon Sep 17 00:00:00 2001 From: Scott Gasch Date: Wed, 8 Feb 2023 13:32:31 -0800 Subject: [PATCH] Make gkeep use a stored token. --- gkeep_renderer.py | 78 +++++++++++++++++++++++++++++------------------ 1 file changed, 49 insertions(+), 29 deletions(-) diff --git a/gkeep_renderer.py b/gkeep_renderer.py index c07ebd6..974076b 100644 --- a/gkeep_renderer.py +++ b/gkeep_renderer.py @@ -34,22 +34,31 @@ class gkeep_renderer(renderer.abstaining_renderer): "teal": "#16504B", } self.keep = gkeepapi.Keep() - success = self.keep.login( + self.token_file = "./google_keep_token.json" + if os.path.exists(self.token_file): + logger.debug("Attempting to reuse persisted Google Keep login token...") + try: + with open(self.token_file, "r") as rf: + token = "".join(rf.readlines()).strip() + self.keep.resume(secrets.google_keep_username, token) + logger.debug("Successfully reused existing login token.") + except gkeepapi.exception.LoginException: + logger.warning("Invalid token, attempting to re-login.") + + if not self.keep.login( secrets.google_keep_username, secrets.google_keep_password, secrets.google_keep_mac, - ) - if success: - logger.debug("Connected with gkeep.") - else: - logger.debug("Error connecting with gkeep.") + ): + raise Exception("Error connecting with Google Keep?!") + logger.debug("Successfully logged in with Google Keep") def debug_prefix(self) -> str: return "gkeep" 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")]) @@ -67,7 +76,7 @@ class gkeep_renderer(renderer.abstaining_renderer): contents = contents.replace( "\u2610 ", '
  •  ' ) - #contents = linkify.sub(r'\1', contents) + # contents = linkify.sub(r'\1', contents) individual_lines = contents.split("\n") num_lines = len(individual_lines) @@ -92,23 +101,24 @@ class gkeep_renderer(renderer.abstaining_renderer): logger.debug(f"Unknown color '{color}'") print(f"TITLE: {color} {note.title}") with file_writer.file_writer(filename) as f: - f.write(""" + f.write( + """
    -""" % color - ) - f.write(f""" +""" + % color + ) + f.write( + f"""

    {note.title}


    """ - ) + ) if num_lines >= 10: - logger.debug( - f"{num_lines} lines: two column mode" - ) + logger.debug(f"{num_lines} lines: two column mode") f.write('') f.write( '
    \n' @@ -124,11 +134,9 @@ class gkeep_renderer(renderer.abstaining_renderer): '\n' ) f.write("
      ") - f.write("
    \n") + f.write("") else: - logger.debug( - f"{num_lines} lines: one column mode" - ) + logger.debug(f"{num_lines} lines: one column mode") f.write(f"
      {contents}
    ") f.write("") else: @@ -138,15 +146,27 @@ class gkeep_renderer(renderer.abstaining_renderer): os.remove(_) except: pass - return True + + if self.token_file: + token = self.keep.getMasterToken() + os.umask(0) + descriptor = os.open( + path=self.token_file, + flags=(os.O_WRONLY | os.O_CREAT | os.O_TRUNC), + mode=0o600, + ) + with open(descriptor, "w") as wf: + print(token, file=wf) + logger.debug("Saved Google Keep token successfully.") + return True # 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") +# 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") -- 2.45.0