X-Git-Url: https://wannabe.guru.org/gitweb/?a=blobdiff_plain;f=gcal_renderer.py;h=1e026cd2e11797ae496dabcba5ec3c3e07f7a874;hb=86f7e14f34b43ed8eb8cf5eaf113a4ecca976327;hp=c43a1448b2f8c5f256dc03951d586d7e2d758334;hpb=5c39d86ebc075ccb7be98b1dfab8040b72ff9134;p=kiosk.git diff --git a/gcal_renderer.py b/gcal_renderer.py index c43a144..1e026cd 100644 --- a/gcal_renderer.py +++ b/gcal_renderer.py @@ -5,24 +5,24 @@ contents of several Google calendars.""" import datetime import functools -import os +import logging import time from typing import Any, Dict, List, Optional, Tuple from dateutil.parser import parse -import gdata # type: ignore import gdata_oauth -from oauth2client.client import AccessTokenRefreshError # type: ignore import pytz -import constants +import kiosk_constants import file_writer import globals import renderer -import kiosk_secrets as secrets -class gcal_renderer(renderer.debuggable_abstaining_renderer): +logger = logging.getLogger(__file__) + + +class gcal_renderer(renderer.abstaining_renderer): """A renderer to fetch upcoming events from www.google.com/calendar""" calendar_whitelist = frozenset( @@ -123,7 +123,7 @@ class gcal_renderer(renderer.debuggable_abstaining_renderer): def __init__( self, name_to_timeout_dict: Dict[str, int], oauth: gdata_oauth.OAuth ) -> None: - super(gcal_renderer, self).__init__(name_to_timeout_dict, True) + super().__init__(name_to_timeout_dict) self.oauth = oauth self.client = self.oauth.calendar_service() self.sortable_events: List[gcal_renderer.comparable_event] = [] @@ -133,7 +133,7 @@ class gcal_renderer(renderer.debuggable_abstaining_renderer): return "gcal" def periodic_render(self, key: str) -> bool: - self.debug_print('called for "%s"' % key) + logger.debug('called for "%s"' % key) if key == "Render Upcoming Events": return self.render_upcoming_events() elif key == "Look For Triggered Events": @@ -147,8 +147,8 @@ class gcal_renderer(renderer.debuggable_abstaining_renderer): _time_max = now + datetime.timedelta(days=95) time_min = datetime.datetime.strftime(_time_min, "%Y-%m-%dT%H:%M:%SZ") time_max = datetime.datetime.strftime(_time_max, "%Y-%m-%dT%H:%M:%SZ") - self.debug_print(f"time_min is {time_min}") - self.debug_print(f"time_max is {time_max}") + logger.debug(f"time_min is {time_min}") + logger.debug(f"time_max is {time_max}") return (time_min, time_max) @staticmethod @@ -182,7 +182,7 @@ class gcal_renderer(renderer.debuggable_abstaining_renderer): ) for calendar in calendar_list["items"]: if calendar["summary"] in gcal_renderer.calendar_whitelist: - self.debug_print( + logger.debug( f"{calendar['summary']} is an interesting calendar..." ) events = ( @@ -200,11 +200,11 @@ class gcal_renderer(renderer.debuggable_abstaining_renderer): summary = event["summary"] start = gcal_renderer.parse_date(event["start"]) end = gcal_renderer.parse_date(event["end"]) - self.debug_print( + logger.debug( f" ... event '{summary}' ({event['start']} ({start}) to {event['end']} ({end})" ) if start is not None and end is not None: - self.debug_print(f' ... adding {summary} to sortable_events') + logger.debug(f' ... adding {summary} to sortable_events') sortable_events.append( gcal_renderer.comparable_event( start, end, summary, calendar["summary"] @@ -215,7 +215,7 @@ class gcal_renderer(renderer.debuggable_abstaining_renderer): or "Holidays" in calendar["summary"] or "Countdown" in summary ): - self.debug_print(f" ... adding {summary} to countdown_events") + logger.debug(f" ... adding {summary} to countdown_events") countdown_events.append( gcal_renderer.comparable_event( start, end, summary, calendar["summary"] @@ -246,7 +246,7 @@ f""" ) upcoming_sortable_events = self.sortable_events[:12] for n, event in enumerate(upcoming_sortable_events): - self.debug_print(f'{n}/12: {event.friendly_name()} / {event.calendar}') + logger.debug(f'{n}/12: {event.friendly_name()} / {event.calendar}') if n % 2 == 0: color = "#c6b0b0" else: @@ -282,9 +282,9 @@ f""" x = int(delta.total_seconds()) if x > 0: identifier = "id%d" % count - days = divmod(x, constants.seconds_per_day) - hours = divmod(days[1], constants.seconds_per_hour) - minutes = divmod(hours[1], constants.seconds_per_minute) + days = divmod(x, kiosk_constants.seconds_per_day) + hours = divmod(days[1], kiosk_constants.seconds_per_hour) + minutes = divmod(hours[1], kiosk_constants.seconds_per_minute) g.write( f'
  • %d days, %02d:%02d until %s
  • \n' % ( @@ -297,7 +297,7 @@ f""" ) timestamps[identifier] = time.mktime(eventstamp.timetuple()) count += 1 - self.debug_print( + logger.debug( "countdown to %s is %dd %dh %dm" % (name, days[0], hours[0], minutes[0]) ) @@ -341,16 +341,15 @@ var fn = setInterval(function() { """ ) return True - except (gdata.service.RequestError, AccessTokenRefreshError): + except Exception as e: + logger.exception(e) print("********* TRYING TO REFRESH GCAL CLIENT *********") # self.oauth.refresh_token() # self.client = self.oauth.calendar_service() return False - except: - raise def look_for_triggered_events(self) -> bool: - with file_writer.file_writer(constants.gcal_imminent_pagename) as f: + with file_writer.file_writer(kiosk_constants.gcal_imminent_pagename) as f: f.write("

    Imminent Upcoming Calendar Events:

    \n
    \n") f.write("
    \n") now = datetime.datetime.now(pytz.timezone("US/Pacific")) @@ -358,13 +357,13 @@ var fn = setInterval(function() { for event in self.sortable_events: eventstamp = event.start_time if eventstamp is None: - return False + continue delta = eventstamp - now x = int(delta.total_seconds()) - if x > 0 and x <= constants.seconds_per_minute * 3: - days = divmod(x, constants.seconds_per_day) - hours = divmod(days[1], constants.seconds_per_hour) - minutes = divmod(hours[1], constants.seconds_per_minute) + if x > -120 and x < 4 * kiosk_constants.seconds_per_minute: + days = divmod(x, kiosk_constants.seconds_per_day) + hours = divmod(days[1], kiosk_constants.seconds_per_hour) + minutes = divmod(hours[1], kiosk_constants.seconds_per_minute) eventstamp = event.start_time name = event.friendly_name() calendar = event.calendar