Compare commits
3 commits
03e2ca94b7
...
2841207137
Author | SHA1 | Date | |
---|---|---|---|
|
2841207137 | ||
|
a5367e238f | ||
|
48e601f916 |
1 changed files with 31 additions and 8 deletions
|
@ -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()
|
||||||
|
@ -21,33 +40,37 @@ def generate_ical_from_csv(csv_file):
|
||||||
for row in reader:
|
for row in reader:
|
||||||
try:
|
try:
|
||||||
# Parse the data from CSV
|
# Parse the data from CSV
|
||||||
host = row['Host']
|
host = row['Gastgeber']
|
||||||
description = row['Description']
|
description = row['Description']
|
||||||
date = row['Date'].strip() # Expected format: DD.MM.YYYY
|
date = row['Date'].strip() # Expected format: DD.MM.YYYY
|
||||||
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"))
|
||||||
|
# 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.name = f"{description} (Host: {host})" # Include the host in the event name
|
event.name = f"{description} (Gastgeber: {host})"
|
||||||
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}")
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue