saving uid to json file for updates.

This commit is contained in:
Falko Zurell 2024-11-17 19:55:44 +01:00
parent a5367e238f
commit 2841207137

View file

@ -1,15 +1,34 @@
import csv import csv
import os import os
import uuid
import json
from ics import Calendar, Event from ics import Calendar, Event
from datetime import datetime from datetime import datetime
import pytz import pytz
UID_STORE_FILE = "event_uids.json"
def load_uids():
"""Load the UID mappings from a JSON file."""
if os.path.exists(UID_STORE_FILE):
with open(UID_STORE_FILE, "r") as file:
return json.load(file)
return {}
def save_uids(uids):
"""Save the UID mappings to a JSON file."""
with open(UID_STORE_FILE, "w") as file:
json.dump(uids, file)
def generate_ical_from_csv(csv_file): def generate_ical_from_csv(csv_file):
# Load existing UIDs
uids = load_uids()
# Generate the output .ics file name # Generate the output .ics file name
ical_file = os.path.splitext(csv_file)[0] + '.ics' ical_file = os.path.splitext(csv_file)[0] + '.ics'
# Define CET time zone # Define CET time zone
cet = pytz.timezone('Europe/Berlin') # CET is commonly represented by Berlin cet = pytz.timezone('Europe/Berlin')
# Create a new calendar # Create a new calendar
calendar = Calendar() calendar = Calendar()
@ -27,29 +46,31 @@ def generate_ical_from_csv(csv_file):
start_time = row['start time'].strip() # Expected format: HH:MM start_time = row['start time'].strip() # Expected format: HH:MM
end_time = row['end time'].strip() # Expected format: HH:MM end_time = row['end time'].strip() # Expected format: HH:MM
location = row['Location'] location = row['Location']
# Combine date and time using the updated date format and apply CET # Combine date and time using the updated date format and apply CET
start_datetime = cet.localize(datetime.strptime(f"{date} {start_time}", "%d.%m.%Y %H:%M")) start_datetime = cet.localize(datetime.strptime(f"{date} {start_time}", "%d.%m.%Y %H:%M"))
end_datetime = cet.localize(datetime.strptime(f"{date} {end_time}", "%d.%m.%Y %H:%M")) end_datetime = cet.localize(datetime.strptime(f"{date} {end_time}", "%d.%m.%Y %H:%M"))
uid = f"{date}{start_time}@lak2024.leben-in-gross-doelln.de" # Create a unique key for the event
event_key = f"{description}_{date}_{start_time}_{location}"
# Retrieve or generate a UID
uid = uids.get(event_key, str(uuid.uuid4()))
uids[event_key] = uid
# Create a new event # Create a new event
event = Event() event = Event()
event.created = cet.localize(datetime.now()) event.name = f"{description} (Gastgeber: {host})"
event.uid = uid
event.name = f"{description} (Gastgeber: {host})" # Include the host in the event name
event.begin = start_datetime event.begin = start_datetime
event.end = end_datetime event.end = end_datetime
event.location = location event.location = location
event.uid = uid # Set the unique identifier
event.last_modified = datetime.now() # Timestamp for updates
# Add the event to the calendar # Add the event to the calendar
calendar.events.add(event) calendar.events.add(event)
except Exception as e: except Exception as e:
print(f"Error processing row: {row}. Error: {e}") print(f"Error processing row: {row}. Error: {e}")
# Write the calendar to an iCal file # Write the calendar to an iCal file
with open(ical_file, mode='w', encoding='utf-8') as file: with open(ical_file, mode='w', encoding='utf-8') as file:
file.writelines(calendar) file.writelines(calendar)
# Save UIDs for future use
save_uids(uids)
print(f"iCal file created: {ical_file}") print(f"iCal file created: {ical_file}")