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()