Select Git revision
GarbageContainerScheduleTile.py
-
Robert Goldmann authoredRobert Goldmann authored
GarbageContainerScheduleTile.py 1.90 KiB
import os
from datetime import datetime
from typing import Dict, List
from flask import Blueprint
from logic.service.ServiceManager import ServiceManager
from logic.service.services.IcsService import CalendarEvent
from logic.tile.Tile import Tile
class GarbageContainerScheduleTile(Tile):
DATE_FORMAT = '%d.%m. (%a)'
EXAMPLE_SETTINGS = {
"path": "path/to/my/calendar.ics",
"garbageType": "Papier" or "Gelbe Säcke" or "Bioabfall" or "Restabfall"
}
def __init__(self, uniqueName: str, settings: Dict, intervalInSeconds: int):
super().__init__(uniqueName, settings, intervalInSeconds)
def fetch(self, pageName: str) -> Dict:
icsService = ServiceManager.get_instance().get_service_by_type_name('IcsService')
cacheKey = f'{pageName}_{self._uniqueName}'
events = icsService.get_data(cacheKey, self._intervalInSeconds, self._settings)['events']
eventsForGarbageType = [x for x in events if self._settings['garbageType'] in x.summary]
nextEvent = self.__find_next_date(eventsForGarbageType)
nextEventDate = '--.--.'
if nextEvent:
nextEventDate = datetime.strftime(nextEvent.start, self.DATE_FORMAT)
# TODO: set locale for weekday
# TODO: set icon for garbageType
return {
'nextEventDate': nextEventDate
}
def __find_next_date(self, events: List[CalendarEvent]) -> CalendarEvent or None:
now = datetime.now().date()
for event in events:
if event.start < now:
continue
return event
return None
def render(self, data: Dict) -> str:
return Tile.render_template(os.path.dirname(__file__), __class__.__name__, nextEventDate=data['nextEventDate'])
def construct_blueprint(self, pageName: str, *args, **kwargs):
return Blueprint(f'{pageName}_{__class__.__name__}_{self.get_uniqueName()}', __name__)