Add calendar event view
This commit is contained in:
29
app.py
29
app.py
@@ -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
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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
13
templates/show_event.html
Normal 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 %}
|
||||
Reference in New Issue
Block a user