Skip to content
Snippets Groups Projects
Select Git revision
  • e44f1e1e4e4c8794825b1698d83a82366a070dc6
  • master default
  • renovate/fastapi-0.x
  • v2.21.0
  • v2.20.1
  • v2.20.0
  • v2.19.0
  • v2.18.1
  • v2.18.0
  • v2.17.0
  • v2.16.0
  • v2.15.0
  • v2.14.0
  • v2.13.1
  • v2.13.0
  • v2.12.0
  • v2.11.0
  • v2.10.0
  • v2.9.0
  • v2.8.0
  • v2.7.0
  • v2.6.0
  • v2.5.0
23 results

Crud.py

Blame
  • GarbageContainerScheduleTile.py 2.49 KiB
    import os
    from datetime import datetime
    from typing import Dict, List
    
    from flask import Blueprint
    from babel.dates import format_date
    
    from logic.service.ServiceManager import ServiceManager
    from logic.service.services.IcsService import CalendarEvent
    from logic.tile.Tile import Tile
    
    
    class GarbageContainerScheduleTile(Tile):
        DATE_FORMAT = 'E dd.MM'
    
        ICON_BY_GARBAGE_TYPE = {
            'Papier': 'garbage_paper',
            'Gelbe Säcke': 'garbage_plastic',
            'Bioabfall': 'garbage_bio',
            'Restabfall': 'garbage_waste'
        }
    
        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 = '--.--.'
            remainingDays = ''
            if nextEvent:
                nextEventDate = nextEvent.start
                if isinstance(nextEventDate, datetime):
                    remainingDays = nextEventDate - datetime.now()
                else:
                    remainingDays = nextEventDate - datetime.now().date()
                remainingDays = remainingDays.days
                nextEventDate = format_date(nextEventDate, self.DATE_FORMAT, 'de')
    
            iconName = self.ICON_BY_GARBAGE_TYPE[self._settings['garbageType']]
    
            return {
                'nextEventDate': nextEventDate,
                'iconFileName': f'{iconName}.png',
                'remainingDays': remainingDays
            }
    
        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__, data=data)
    
        def construct_blueprint(self, pageName: str, *args, **kwargs):
            return Blueprint(f'{pageName}_{__class__.__name__}_{self.get_uniqueName()}', __name__)