Add calendar event view

This commit is contained in:
pstruebi
2022-06-15 14:53:17 +02:00
parent cec54b66e5
commit 6b1bc8da94
4 changed files with 56 additions and 21 deletions

29
app.py
View File

@@ -2,7 +2,7 @@ import os
import logging
import json
from flask import Flask, current_app, render_template, g, request, url_for, flash, redirect
from flask import Flask, render_template, g, url_for, redirect
from werkzeug.exceptions import abort
import calendar_interface
@@ -28,23 +28,38 @@ if not (app.config["DEBUG"] or app.config["TESTING"]):
@app.route('/')
@auth.login_required
def index():
events = calendar_interface.get_future_calendar_events().get("value")
calendar_interface.convert_datetimes(events)
# Check current users attendance in event
for event in events:
ret = calendar_interface.check_attendee_presence(event, g.user["email"])
event["user_attends"] = ret
logging.info("User %s attending: %s", g.user["email"], ret)
if events is None:
abort(404)
else:
return render_template('index.html', events=events, user=g.user)
# @app.route('/<int:event_id>') # TODO: access detailed event view
# def post(post_id):
# post = get_post(post_id)
# return render_template('show_event.html', post=post)
@app.route('/<id>')
@auth.login_required
def show_event(id):
event = calendar_interface.get_calendar_event(id)
calendar_interface.convert_datetime(event)
attendees= ", ".join(
[a["emailAddress"]["name"] + " (" + a["emailAddress"]["name"] + ")" for a in event["attendees"]]
)
location= "<br/>".join(event["location"]["address"].values())
return render_template(
'show_event.html',
subject=event["subject"],
attendees=attendees,
content=event["body"]["content"],
location=location,
start=event["start"]["date"] + " - " + event["start"]["time"],
end=event["end"]["date"] + " - " + event["end"]["time"]
)
@app.route('/<id>/attend')
@auth.login_required

View File

@@ -126,24 +126,29 @@ def get_future_calendar_events():
return execute_user_request(token, f"calendars/{MsalConfig.CALENDAR_ID}/calendarview{filter}")
def convert_datetime(event):
start_date_time = datetime.fromisoformat(event["start"]["dateTime"][:-1]) \
.replace(tzinfo=ZoneInfo('UTC')).astimezone(ZoneInfo('localtime'))
stop_date_time = datetime.fromisoformat(event["end"]["dateTime"][:-1]) \
.replace(tzinfo=ZoneInfo('UTC')).astimezone(ZoneInfo('localtime'))
event["start"]["date"] = start_date_time.strftime("%d.%m.%Y")
event["start"]["time"] = start_date_time.strftime("%H:%M:%S")
event["end"]["date"] = stop_date_time.strftime("%d.%m.%Y")
event["end"]["time"] = stop_date_time.strftime("%H:%M:%S")
event["duration"] = str(stop_date_time - start_date_time)[:-3]
event["weekday"] = WEEKDAYS[start_date_time.weekday()]
return event
def convert_datetimes(events):
for event in events:
start_date_time = datetime.fromisoformat(event["start"]["dateTime"][:-1]) \
.replace(tzinfo=ZoneInfo('UTC')).astimezone(ZoneInfo('localtime'))
stop_date_time = datetime.fromisoformat(event["end"]["dateTime"][:-1]) \
.replace(tzinfo=ZoneInfo('UTC')).astimezone(ZoneInfo('localtime'))
event["start"]["date"] = start_date_time.strftime("%d.%m.%Y")
event["start"]["time"] = start_date_time.strftime("%H:%M:%S")
event["end"]["date"] = stop_date_time.strftime("%d.%m.%Y")
event["end"]["time"] = stop_date_time.strftime("%H:%M:%S")
event["duration"] = str(stop_date_time - start_date_time)[:-3]
event["weekday"] = WEEKDAYS[start_date_time.weekday()]
convert_datetime(event)
return events
def add_attendee(data, name, email):
d = {
"type": "required",

View File

@@ -11,7 +11,9 @@
<hr>
<h1>{{event["weekday"] + " " + event["start"]["date"] }}</h1>
{% endif %}
<h2>{{ event['subject'] }}</h2>
<a href="{{ url_for('show_event', id=event['id']) }}">
<h2>{{ event['subject'] }}</h2>
</a>
{% if not event["user_attends"] %}
<a href="{{ url_for('attend', id=event['id']) }}">

13
templates/show_event.html Normal file
View File

@@ -0,0 +1,13 @@
{% extends 'base.html' %}
{% block content %}
<h2>{{ title }}</h2>
<h2>{{ subject }}</h2>
<br/>
<p>Start: {{ start }}</p>
<p>Ende: {{ end }}</p>
<p>{{ content |safe }}</p>
<p>{{ attendees }}</p>
<p>{{ location |safe }}</p>
{% endblock %}