Module structure
This commit is contained in:
parent
60fcd8bee1
commit
34d10270d6
|
@ -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__
|
|
@ -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
|
|
||||||
|
|
||||||
parser = argparse.ArgumentParser()
|
def main():
|
||||||
parser.add_argument('--hostname', action='store', default = 'localhost', dest='hostname')
|
## Argument parsing
|
||||||
parser.add_argument('--port', action='store', default = 8080, dest='port', type = int)
|
parser = argparse.ArgumentParser()
|
||||||
|
parser.add_argument('--hostname', action='store', default = 'localhost', dest='hostname')
|
||||||
if __name__ == '__main__':
|
parser.add_argument('--port', action='store', default = 8080, dest='port', type = int)
|
||||||
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()
|
||||||
|
|
1
kobo_wall_calendar/_version.py
Normal file
1
kobo_wall_calendar/_version.py
Normal file
|
@ -0,0 +1 @@
|
||||||
|
__version__ = '0.1.0'
|
|
@ -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
4
requirements.txt
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
ical
|
||||||
|
requests_cache
|
||||||
|
secret_loader @ git@gitfub.space:Jmaa/secret_loader.git
|
||||||
|
bottle
|
Loading…
Reference in New Issue
Block a user