fully implemented project
This commit is contained in:
40
app/server.py
Normal file
40
app/server.py
Normal file
@@ -0,0 +1,40 @@
|
||||
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()
|
||||
Reference in New Issue
Block a user