made script robustly importable as well as callable

This commit is contained in:
eclipse 2025-03-21 14:09:30 +01:00
parent ccd9b9673a
commit ec8d4b9af8
2 changed files with 24 additions and 10 deletions

0
utils/__init__.py Normal file
View File

View File

@ -6,24 +6,38 @@ import caldav
import vobject import vobject
from datetime import datetime, date, time, timedelta from datetime import datetime, date, time, timedelta
import yaml import yaml
import os import os, os.path
# find out where events.ini lives; that's the project root dir
# check current working directory
if os.path.isfile(os.getcwd() + '/events.ini'):
project_root = os.getcwd()
# check this script's location dir
elif os.path.isfile(os.path.dirname(os.path.realpath(__file__)) + '/events.ini'):
project_root = os.path.dirname(os.path.realpath(__file__))
# check parent dir of this script's dir
elif os.path.isfile(os.path.dirname(os.path.realpath(__file__)) + '/../events.ini'):
project_root = os.path.dirname(os.path.realpath(__file__)) + '/..'
# OK no luck
else:
print("Cannot find file 'events.ini'; aborting.")
exit(1)
# read ini file # read ini file
print("project_root is %s" % project_root)
cp = configparser.ConfigParser() cp = configparser.ConfigParser()
cp.read('../events.ini') cp.read(project_root + '/events.ini')
server_url = cp["CalDAV"]["server_url"] server_url = cp["CalDAV"]["server_url"]
cal_url = cp["CalDAV"]["cal_url"] cal_url = cp["CalDAV"]["cal_url"]
cal_user = cp["CalDAV"]["cal_user"] cal_user = cp["CalDAV"]["cal_user"]
cal_pass = cp["CalDAV"]["cal_pass"] cal_pass = cp["CalDAV"]["cal_pass"]
print # Category to filter events for. Only events that belong to this category will be processed.
"""Category to filter events for. Only events that belong to this category will be processed."""
cal_category = "Veranstaltung" cal_category = "Veranstaltung"
"""Name of the file the YAML data will be written to.""" # Name of the file the YAML data will be written to.
result_file = "../content/pages/termine.md" result_file = project_root + '/content/pages/termine.md'
"""List of icalendar properties that will be passed on to Pelican. At this time, all properties are used except those regarding alarms.""" # List of icalendar properties that will be passed on to Pelican. At this time, all properties are used except those regarding alarms.
cal_properties = [ # taken from ical specification cal_properties = [ # taken from ical specification
# descriptive # descriptive
"attach", "categories", "class", "comment", "description", "geo", "location", "percent-complete", "priority", "resources", "status", "summary", "attach", "categories", "class", "comment", "description", "geo", "location", "percent-complete", "priority", "resources", "status", "summary",
@ -40,9 +54,9 @@ cal_properties = [ # taken from ical specification
# change management # change management
"created", "dtstamp", "last-modified", "sequence" "created", "dtstamp", "last-modified", "sequence"
] ]
"""List of icalendar properties that the vobject passes as either datetime.datetime or datetime.date objects. To be able to compare any two objects, the script makes each one aware and/or converts into datetime.datetime if necessary. Default timezone is the system timezone; default time is 23:59:59.""" #List of icalendar properties that the vobject passes as either datetime.datetime or datetime.date objects. To be able to compare any two objects, the script makes each one aware and/or converts into datetime.datetime if necessary. Default timezone is the system timezone; default time is 23:59:59.
cal_prop_datetimes = ["dtend", "due", "dtstart", "duration", "dtstamp", "last-modified"] cal_prop_datetimes = ["dtend", "due", "dtstart", "duration", "dtstamp", "last-modified"]
"""Current time as an aware datetime.datetime object.""" # Current time as an aware datetime.datetime object.
now = datetime.now().astimezone() now = datetime.now().astimezone()