diff --git a/app.py b/app.py index dda1bdd..79cd4ca 100644 --- a/app.py +++ b/app.py @@ -26,7 +26,9 @@ app = Flask(__name__) @app.route('/') 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: abort(404) diff --git a/calendar_interface.py b/calendar_interface.py index e29a262..381c77c 100644 --- a/calendar_interface.py +++ b/calendar_interface.py @@ -1,12 +1,16 @@ - import json -from lib2to3.pgen2.tokenize import TokenError +from datetime import datetime import logging import argparse import requests import msal +try: + from zoneinfo import ZoneInfo +except ImportError: + from backports.zoneinfo import ZoneInfo + config = { "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", @@ -16,6 +20,7 @@ config = { 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 +WEEKDAYS= {0:"Mo", 1:"Di", 2:"Mi", 3:"Do", 4: "Fr", 5:"Sa", 6: "So"} # Optional logging logging.basicConfig(format='%(asctime)s,%(msecs)d %(levelname)-4s [%(filename)s:%(lineno)d] %(message)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_description")) logging.error(result.get("correlation_id")) # You may need this when reporting a bug - raise TokenError() + raise AssertionError("No access token present") return result @@ -78,12 +83,26 @@ def get_future_calendar_events(): token = get_access_token() - ret = execute_user_request(token, f"calendars/{CALENDAR_ID}/calendarview{filter}") - return ret.get("value", ret) + return execute_user_request(token, f"calendars/{CALENDAR_ID}/calendarview{filter}") - 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__": @@ -105,10 +124,17 @@ if __name__ == "__main__": print(json.dumps(cal_name_id, indent=2)) 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: print(json.dumps(list(events)[0].keys(), indent=2)) 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.") \ No newline at end of file diff --git a/templates/index.html b/templates/index.html index efcff4a..c236818 100644 --- a/templates/index.html +++ b/templates/index.html @@ -2,15 +2,24 @@ {% block content %}

{% block title %} Welcome {% endblock %}

+ {% set ns = namespace(last_date='...') %} + {% for event in events %} - -

{{ event['subject'] }}

-
- {{ event["start"] }} - - Edit - -
+ + {% if ns.last_date != event["start"]["date"] %} +
+
+

{{event["weekday"] + " " + event["start"]["date"] }}

+ {% endif %} + {{ event["start"]["time"] }} + {{ event["duration"] }} + + +

{{ event['subject'] }}

+
+ + {% set ns.last_date = event["start"]["date"] %} + {% endfor %} {% endblock %} \ No newline at end of file