group calendar entries in index
This commit is contained in:
4
app.py
4
app.py
@@ -26,7 +26,9 @@ app = Flask(__name__)
|
|||||||
@app.route('/')
|
@app.route('/')
|
||||||
def index():
|
def index():
|
||||||
|
|
||||||
events = calendar_interface.get_all_calendar_events()
|
events= calendar_interface.get_future_calendar_events().get("value")
|
||||||
|
calendar_interface.convert_datetimes(events)
|
||||||
|
|
||||||
|
|
||||||
if events is None:
|
if events is None:
|
||||||
abort(404)
|
abort(404)
|
||||||
|
|||||||
@@ -1,12 +1,16 @@
|
|||||||
|
|
||||||
import json
|
import json
|
||||||
from lib2to3.pgen2.tokenize import TokenError
|
from datetime import datetime
|
||||||
import logging
|
import logging
|
||||||
import argparse
|
import argparse
|
||||||
|
|
||||||
import requests
|
import requests
|
||||||
import msal
|
import msal
|
||||||
|
|
||||||
|
try:
|
||||||
|
from zoneinfo import ZoneInfo
|
||||||
|
except ImportError:
|
||||||
|
from backports.zoneinfo import ZoneInfo
|
||||||
|
|
||||||
config = {
|
config = {
|
||||||
"authority": "https://login.microsoftonline.com/propedal.at",
|
"authority": "https://login.microsoftonline.com/propedal.at",
|
||||||
"client_id": "52f192c4-875d-44a2-b28a-575e920225e5", # client public id (from azure web interface)#"da3fc28c-5fcf-4884-9477-903a4420cc3d",
|
"client_id": "52f192c4-875d-44a2-b28a-575e920225e5", # client public id (from azure web interface)#"da3fc28c-5fcf-4884-9477-903a4420cc3d",
|
||||||
@@ -16,6 +20,7 @@ config = {
|
|||||||
USER_ID = "simone.profus@propedal.at" # user with calendar #"2af02ca1-77fc-46fd-90af-c754306081cb" #
|
USER_ID = "simone.profus@propedal.at" # user with calendar #"2af02ca1-77fc-46fd-90af-c754306081cb" #
|
||||||
CALENDAR_ID = "AAMkADY0MDg1MTVjLTg5ZjItNGQxYS04MGQ3LWY2NjJmYjM0YmZhOQBGAAAAAADXD7SdVoWYQI4RYXbBumMEBwAf_ngZxs71RonY3GuLL8TVAAAAAAEGAAAf_ngZxs71RonY3GuLL8TVAADHFxN2AAA=" # calendar id - determined by /users/id/calendars
|
CALENDAR_ID = "AAMkADY0MDg1MTVjLTg5ZjItNGQxYS04MGQ3LWY2NjJmYjM0YmZhOQBGAAAAAADXD7SdVoWYQI4RYXbBumMEBwAf_ngZxs71RonY3GuLL8TVAAAAAAEGAAAf_ngZxs71RonY3GuLL8TVAADHFxN2AAA=" # calendar id - determined by /users/id/calendars
|
||||||
|
|
||||||
|
WEEKDAYS= {0:"Mo", 1:"Di", 2:"Mi", 3:"Do", 4: "Fr", 5:"Sa", 6: "So"}
|
||||||
# Optional logging
|
# Optional logging
|
||||||
logging.basicConfig(format='%(asctime)s,%(msecs)d %(levelname)-4s [%(filename)s:%(lineno)d] %(message)s',
|
logging.basicConfig(format='%(asctime)s,%(msecs)d %(levelname)-4s [%(filename)s:%(lineno)d] %(message)s',
|
||||||
datefmt='%Y-%m-%d:%H:%M:%S',
|
datefmt='%Y-%m-%d:%H:%M:%S',
|
||||||
@@ -54,7 +59,7 @@ def get_access_token():
|
|||||||
logging.error(result.get("error"))
|
logging.error(result.get("error"))
|
||||||
logging.error(result.get("error_description"))
|
logging.error(result.get("error_description"))
|
||||||
logging.error(result.get("correlation_id")) # You may need this when reporting a bug
|
logging.error(result.get("correlation_id")) # You may need this when reporting a bug
|
||||||
raise TokenError()
|
raise AssertionError("No access token present")
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
|
||||||
@@ -78,12 +83,26 @@ def get_future_calendar_events():
|
|||||||
|
|
||||||
token = get_access_token()
|
token = get_access_token()
|
||||||
|
|
||||||
ret = execute_user_request(token, f"calendars/{CALENDAR_ID}/calendarview{filter}")
|
return execute_user_request(token, f"calendars/{CALENDAR_ID}/calendarview{filter}")
|
||||||
return ret.get("value", ret)
|
|
||||||
|
|
||||||
if val is not None:
|
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()]
|
||||||
|
|
||||||
|
return events
|
||||||
|
|
||||||
return val
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|
||||||
@@ -105,10 +124,17 @@ if __name__ == "__main__":
|
|||||||
print(json.dumps(cal_name_id, indent=2))
|
print(json.dumps(cal_name_id, indent=2))
|
||||||
|
|
||||||
if args.show_event_entries or args.show_events:
|
if args.show_event_entries or args.show_events:
|
||||||
events= get_future_calendar_events()
|
events= get_future_calendar_events().get("value")
|
||||||
|
|
||||||
if args.show_event_entries:
|
if args.show_event_entries:
|
||||||
print(json.dumps(list(events)[0].keys(), indent=2))
|
print(json.dumps(list(events)[0].keys(), indent=2))
|
||||||
|
|
||||||
if args.show_events:
|
if args.show_events:
|
||||||
print(json.dumps([(e["subject"], e["start"]) for e in events], indent=2))
|
print(json.dumps(events, indent=2))
|
||||||
|
|
||||||
|
convert_datetimes(events)
|
||||||
|
|
||||||
|
print(json.dumps([(e["subject"], e["start"], e["duration"]) for e in events], indent=2))
|
||||||
|
|
||||||
|
|
||||||
|
print("Done.")
|
||||||
@@ -2,15 +2,24 @@
|
|||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<h1>{% block title %} Welcome {% endblock %}</h1>
|
<h1>{% block title %} Welcome {% endblock %}</h1>
|
||||||
|
{% set ns = namespace(last_date='...') %}
|
||||||
|
|
||||||
{% for event in events %}
|
{% for event in events %}
|
||||||
<a>
|
|
||||||
<h2>{{ event['subject'] }}</h2>
|
|
||||||
</a>
|
|
||||||
<span class="badge badge-primary">{{ event["start"] }}</span>
|
|
||||||
|
|
||||||
<a>
|
<a>
|
||||||
<span class="badge badge-warning">Edit</span>
|
{% if ns.last_date != event["start"]["date"] %}
|
||||||
</a>
|
<hr>
|
||||||
<hr>
|
<hr>
|
||||||
|
<h2>{{event["weekday"] + " " + event["start"]["date"] }}</h2>
|
||||||
|
{% endif %}
|
||||||
|
<span class="badge badge-primary">{{ event["start"]["time"] }}</span>
|
||||||
|
<span class="badge badge-primary">{{ event["duration"] }}</span>
|
||||||
|
|
||||||
|
|
||||||
|
<h1>{{ event['subject'] }}</h1>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
{% set ns.last_date = event["start"]["date"] %}
|
||||||
|
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
Reference in New Issue
Block a user