Module structure

This commit is contained in:
Jon Michael Aanes 2024-07-17 15:41:01 +02:00
parent 60fcd8bee1
commit 34d10270d6
6 changed files with 34 additions and 23 deletions

View File

@ -1,19 +1,21 @@
"""# Kobo Calendar Server
# Kobo Calendar Server
Small calendar web-server pulling from ICAL files, and presenting events in Small calendar web-server pulling from ICAL files, and presenting events in
a lightweight html frontend. a lightweight HMTL frontend.
The motivation was to create a lightweight wall calendar to use with an old Kobo The motivation was to create a lightweight wall calendar to use with an old
Aura e-reader, to take advantage of the it's e-ink screen. [Kobo Aura e-reader](https://en.wikipedia.org/wiki/Kobo_Aura), to take
advantage of the its e-ink screen, but I had problems getting it to run 24/7.
## Example usage ## Example usage
1. Edit `config.py` to include links to your ICAL files. (Google Calendar hidden 1. Edit `config.py` to include links to your ICAL files. (Google Calendar hidden
ICAL links works great here.) ICAL links works great here.)
2. Launch server using something like: `python main.py --port 8082 --hostname 192.168.87.197` 2. Launch server using something like: `python main.py --port 8082 --hostname 192.168.87.197`
3. Navigate to [192.168.87.197:8082](http://192.168.87.197:8082/). 3. Navigate to <http://192.168.87.197:8082>.
4. Enjoy 4. Enjoy
"""
__all__ = ['__version__']
from _version import __version__

View File

@ -2,7 +2,7 @@ import argparse
import bottle import bottle
import datetime import datetime
import google_calendar from . import google_calendar
import config import config
@ -39,13 +39,7 @@ def render_calendar(events_map, today):
header = today.strftime('%B %Y') header = today.strftime('%B %Y')
return TEMPLATE_INDEX.render(days = days, header = header) return TEMPLATE_INDEX.render(days = days, header = header)
## Paths def get_events_map() -> tuple[dict[datetime.date, list[str]], datetime.date]:
@bottle.route('/static/<path:path>')
def static(path):
return bottle.static_file(path, root = './static')
def get_events_map():
today = datetime.date.today() today = datetime.date.today()
events_map = { } events_map = { }
for prefix, url in config.ICAL_LINKS.items(): for prefix, url in config.ICAL_LINKS.items():
@ -56,19 +50,28 @@ def get_events_map():
return events_map, today return events_map, today
## Paths
@bottle.route('/static/<path:path>')
def static(path):
return bottle.static_file(path, root = './static')
@bottle.route('/') @bottle.route('/')
def reddit_index(): def month_calendar():
events_map, today = get_events_map() events_map, today = get_events_map()
return render_calendar(events_map, today) return render_calendar(events_map, today)
## Argument parsing
def main():
## Argument parsing
parser = argparse.ArgumentParser() parser = argparse.ArgumentParser()
parser.add_argument('--hostname', action='store', default = 'localhost', dest='hostname') parser.add_argument('--hostname', action='store', default = 'localhost', dest='hostname')
parser.add_argument('--port', action='store', default = 8080, dest='port', type = int) parser.add_argument('--port', action='store', default = 8080, dest='port', type = int)
if __name__ == '__main__':
args = parser.parse_args() args = parser.parse_args()
# Initialization
bottle.run(host=args.hostname, port=args.port) bottle.run(host=args.hostname, port=args.port)
if __name__ == '__main__':
main()

View File

@ -0,0 +1 @@
__version__ = '0.1.0'

View File

@ -10,7 +10,7 @@ logger = logging.getLogger(__name__)
SESSION = requests_cache.CachedSession('calendar') SESSION = requests_cache.CachedSession('calendar')
@functools.cache @functools.cache
def get_events_for_month(ical_link, today): def get_events_for_month(ical_link: str, today: datetime.date):
logger.warning('Downloading ical from Google') logger.warning('Downloading ical from Google')
response = SESSION.get(ical_link) response = SESSION.get(ical_link)
assert response.status_code == 200 assert response.status_code == 200

4
requirements.txt Normal file
View File

@ -0,0 +1,4 @@
ical
requests_cache
secret_loader @ git@gitfub.space:Jmaa/secret_loader.git
bottle

1
setup.py Normal file
View File

@ -0,0 +1 @@
# Bogus