Files
zeus-filter/app/server.py

40 lines
1.3 KiB
Python

import time
import filter
import handler
from http.server import HTTPServer
import logger
import grabber
class Server:
def __init__(self, host: str, port: int, cache_duration: int, ics_url: str):
self._host = host
self._port = port
self._cache_duration = cache_duration
self._ics_url = ics_url
self._cached_calendar = None
self._cached_time = -cache_duration
def _cache_calendar(self):
if not self._cached_calendar or self._cached_time + self._cache_duration < time.time():
self._cached_calendar = grabber.grab_calendar(self._ics_url)
if not self._cached_calendar:
return False
self._cached_time = time.time()
logger.info("Successfully cached calendar")
return True
def _response_callback(self, td_group: str, sh_group: str):
if not self._cache_calendar():
return None
filtered_calendar = filter.filter_calendar(self._cached_calendar, td_group, sh_group)
return filtered_calendar.serialize()
def serve(self):
handler_class = handler.generate_class(self._response_callback)
server = HTTPServer((self._host, self._port), handler_class)
logger.info("Listening on " + self._host + ":" + str(self._port))
server.serve_forever()