Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
#environemt
.env

# Byte-compiled / optimized / DLL files
__pycache__/
*.py[codz]
Expand Down
3 changes: 3 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@ FROM ghcr.io/astral-sh/uv:python3.14-alpine
COPY src /jumpstart
WORKDIR /jumpstart

RUN addgroup -g 2000 jumpgroup
RUN adduser -S -u 1001 -G jumpgroup jumpstart

RUN uv pip install --no-cache-dir -r requirements.txt --system

CMD ["echo", ":)"]
3 changes: 3 additions & 0 deletions src/config.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
CALENDAR_URL = "https://calendar.google.com/calendar/ical/rti648k5hv7j3ae3a3rum8potk%40group.calendar.google.com/public/basic.ics"
CALENDAR_OUTLOOK_DAYS = 7 #The amount of days to go through
CALENDAT_EVENT_MAXIMUM = 10 #The amount of events needed to be displayed
140 changes: 140 additions & 0 deletions src/core/calendar.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,140 @@
# Use googleapiclient instead, more modern!
# from googleapiclient.discovery import build
from logging import getLogger, Logger
from datetime import datetime
from datetime import timedelta
import time
import requests
import recurring_ical_events
from icalendar import Calendar

from config import CALENDAR_URL
from config import CALENDAR_OUTLOOK_DAYS
from config import CALENDAT_EVENT_MAXIMUM


logger: Logger = getLogger(__name__)
operation_start_time = time.perf_counter()

def report_timing(displayTag : str):
"""
Helper function for benchmarking calendar speed
"""

operation_timestamp = time.perf_counter() - operation_start_time
print(operation_timestamp, "::", displayTag)

def format_events(events : list):
"""
Formats a parsed list of events and returns the html implementation
"""

return

def get_future_events_ical() -> list:
"""
Fetches the first ten events using the Ical library.

Returns:
list: A list of the events
"""
global operation_start_time
operation_start_time = time.perf_counter() # Set to global operation time for report_timing, this is just here for bunchmarking
logger.info("Starting Calendar Fetch...")

found_events = []

try:
response = requests.get(CALENDAR_URL)
report_timing("Fetched the calendar from google")


cal = Calendar.from_ical(response.content)
report_timing("Converted the calendar info")

current_day = 1
current_time = datetime.now()
returned_events = []

while (current_day < CALENDAR_OUTLOOK_DAYS) and (len(found_events) < CALENDAT_EVENT_MAXIMUM):
fetched_daily_events : list = recurring_ical_events.of(cal).between(current_time, current_time + timedelta(days=1))
report_timing("Sorted events on day " + str(current_day))

for event in fetched_daily_events:
if len(found_events) >= CALENDAT_EVENT_MAXIMUM:
break
else:
found_events.append(event)

current_time += timedelta(days=1)
current_day += 1
except Exception as e:
logger.warning("Failed to fetch the Calendar! Failed with error:")
logger.warning(e)

sorted_events = sorted(found_events, key=lambda x: x['DTSTART'].dt)

curEvent = 1
for event in sorted_events:
print("Event:" + str(curEvent) + "\n\tName: " + event.get("SUMMARY") + "\n\tDate/Time: " + str(event.get("DTSTART").dt))
curEvent +=1

report_timing("FINISHED")
return returned_events

get_future_events_ical()

'''def get_future_events_google():
now = datetime.now()
events_result = calendar_service.events().list(
calendarId='rti648k5hv7j3ae3a3rum8potk@group.calendar.google.com',
timeMin=now.isoformat(),
maxResults=10,
singleEvents=True,
orderBy='startTime',
).execute()
events = events_result.get('items', [])

def calendar():
# Call the Calendar API
now = datetime.now()
events_result = calendar_service.events().list(
calendarId='rti648k5hv7j3ae3a3rum8potk@group.calendar.google.com',
timeMin=now.isoformat(),
maxResults=10,
singleEvents=True,
orderBy='startTime',
).execute()
events = events_result.get('items', [])

final_events = "<br>"

if not events:
print('No upcoming events found.')
for event in events:
start = event['start'].get('dateTime', event['start'].get('date'))
fin_date = parser.parse(start)
try:
delta = fin_date - now
except:
d = datetime.utcnow()
delta = fin_date - d
d
formatted = format_timedelta(delta) if delta > timedelta(0) else "------"

final_events += (
"""<div class='calendar-event-container-lvl2'><span class='calendar-text-date'> """
+ formatted +
""" </span><br>"""
)
final_events += (
"<span class='calendar-text' id='calendar'>"+
''.join(event['summary'])+
"</span></div>"
)
final_events += "<hr style='border: 1px #B0197E solid;'>"

event_list = {'data': final_events}
return jsonify(event_list)

'''
48 changes: 0 additions & 48 deletions src/core/google.py

This file was deleted.

2 changes: 1 addition & 1 deletion src/main.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
"""
Jumpstart V2
Used for the Dashboard seen upon entering DSP Floor 3
Authors: Eli Mares,Nikolai Strong, Will Hellinger,
Authors: Eli Mares,Nikolai Strong, Will Hellinger,
V1 Authors: Beckett Jenen
"""
5 changes: 4 additions & 1 deletion src/requirements.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
fastapi==0.135.1
uvicorn==0.41.0
logging==0.4.9.6
logging==0.4.9.6
google-api-python-client==2.191.0
icalendar==7.0.3
recurring-ical-events==3.8.1