first commit

This commit is contained in:
Martin Ness 2014-04-06 22:37:31 +02:00
parent 3eea448d45
commit 119c93eda9
4 changed files with 85 additions and 0 deletions

3
dl.sh Executable file
View file

@ -0,0 +1,3 @@
#!/bin/sh
# Donwload alle Termine mit Tag krautspace im ical Formart
wget -O krautspace.ics "http://grical.org/s/?query=%23krautspace&view=ical"

20
output.py Normal file
View file

@ -0,0 +1,20 @@
import argparse
import termin
def output_format(termin_obj):
datum = termin_obj.get_local_start_time().strftime("%Y-%m-%d %H:%M")
name = termin_obj.get("SUMMARY")
return "%s: %s" % (datum, name)
# Command Line Parser
parser = argparse.ArgumentParser(description="Process some iCalender files.")
parser.add_argument("--file", "-f", required=True, help="Some iCalender files")
args = parser.parse_args()
# Main
fobj = open(args.file,"rb")
data = fobj.read()
liste = termin.load_from_str(data)
# alle Termine ausgeben
for item in liste:
print(output_format(item))

2
run.sh Executable file
View file

@ -0,0 +1,2 @@
#!/bin/sh
python output.py -f krautspace.ics

60
termin.py Normal file
View file

@ -0,0 +1,60 @@
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("UTC")
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