This repository has been archived on 2024-01-26. You can view files and clone it, but cannot push or open issues or pull requests.
gricalToMail/termin.py
2014-04-14 16:34:34 +02:00

61 lines
2 KiB
Python

from icalendar import Calendar
import pytz
class Termin(object):
#keys = ('DTSTAMP', 'DESCRIPTION', 'URL', 'SUMMARY', 'LOCATION', 'DTSTART', 'GEO', 'CLASS', 'CATEGORIES', 'UID')
keys = ('DTSTAMP', 'DESCRIPTION', 'URL', 'SUMMARY', 'LOCATION', 'DTSTART', 'CLASS', 'CATEGORIES', 'UID')
@staticmethod
def from_entry(entry):
"""
baut aus einem iCalender eintrag ein Termin Objekt
"""
termin = Termin()
for key in Termin.keys:
if key in entry:
termin.value[key] = entry.decoded(key)
return termin
def __init__(self):
self.value = {}
def get(self, name):
return self.value[name]
def get_local_start_time(self):
"""
x.get_local_start_time() -> datum
Gibt start Zeitpunkt des begines von Termin x in lokaler Zeit zurueck
datum ist ein Objekt.
"""
datum = self.value["DTSTART"]
# wenn keine Zeitzone angeben ist, nehme UTC an
if not datum.tzinfo:
src_zone = pytz.timezone("Europe/Berlin")
datum = src_zone.localize(datum)
# und jetzt umwandeln
dst_zone = pytz.timezone("Europe/Berlin")
return datum.astimezone(dst_zone)
def __str__(self):
datum = self.get_local_start_time().strftime("%Y-%m-%d %H:%M")
if "DESCRIPTION" in self.value:
return "%s: %s - %s" % (datum, self.value["SUMMARY"], self.value["DESCRIPTION"])
return "%s: %s" % (datum, self.value["SUMMARY"])
def load_from_str(data):
"""
load_from_str(data) -> list
Konvertiert eine gelesene iCalender Datei in eine nach Datum sortierte Liste von Termin Objekten.
data is String
list is a list from Termin objects
"""
cal = Calendar.from_ical(data)
# aus dem ical eine Liste von Termin Objekten bauen
liste = [Termin.from_entry(entry) for entry in cal.subcomponents]
# liste nach Datum sortieren
liste.sort(key=lambda datum: datum.get("DTSTART").timetuple())
return liste