diff --git a/__init__.py b/__init__.py new file mode 100644 index 0000000..da986f8 --- /dev/null +++ b/__init__.py @@ -0,0 +1 @@ +from env import * diff --git a/app.py b/app.py new file mode 100644 index 0000000..e70ff00 --- /dev/null +++ b/app.py @@ -0,0 +1,40 @@ +#!/usr/bin/env python3 + +import handler + +def app(env, re): + path = env["PATH_INFO"] + elements = path.split("/") + + for _ in range(elements.count("")): + elements.remove("") + + if len(elements) > 0: + if elements[0] == "env": + re('200 OK', [('Content-Type', 'text/html')]) + return handler.env(env) + + else: + try: + test = 1 if elements[0] == "test" else 0 + date = str(int(elements[test])) + + try: + event = elements[test + 1] + except: + event = None + + rv = handler.cal(handler.date(date), event) + re('200 OK', [('Content-Type', 'text/plain' if test else 'text/calendar')]) + return rv + + except ValueError: + pass + + except: + pass + + else: + pass + + return "" diff --git a/handler/__init__.py b/handler/__init__.py new file mode 100644 index 0000000..cbc9159 --- /dev/null +++ b/handler/__init__.py @@ -0,0 +1,3 @@ +from handler.env import env +from handler.cal import cal +from handler.date import date diff --git a/handler/cal.py b/handler/cal.py new file mode 100644 index 0000000..4fb6bec --- /dev/null +++ b/handler/cal.py @@ -0,0 +1,40 @@ +import datetime + +def genday(dt): + now = datetime.date.today().strftime("%Y%m%dT000000Z") + then = dt.strftime("%Y%m%d") + di = "%i" + ds = "%s" + + return '''BEGIN:VEVENT +UID:%s@kumig.it +DTSTAMP:%s +DTSTART;VALUE=DATE:%s +SUMMARY:%s days since %s +END:VEVENT +''' % (ds, now, then, di, ds) + +def gencal(dt, offset = None, string = None, futuredays = 14): + offset = offset or (datetime.date.today() - dt).days + + rv = '''BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//Klaus-Uwe Mitterer//DaysSince//EN +METHOD:PUBLISH +''' + + for day in range(offset + futuredays): + rv += genday(dt + datetime.timedelta(days = day)) % ("%i%i%i%i" % (dt.year, dt.month, dt.day, day), day, "%i/%i/%i" % (dt.year, dt.month, dt.day)) + + rv += "END:VCALENDAR" + + return rv + +def cal(dt, string = None): + offset = (datetime.date.today() - dt).days + + if offset < 0: + return "" + + else: + return iter([gencal(dt, string).replace("\n", "\r\n").encode()]) diff --git a/handler/date.py b/handler/date.py new file mode 100644 index 0000000..2035119 --- /dev/null +++ b/handler/date.py @@ -0,0 +1,11 @@ +import datetime + +def date(indate): + try: + try: + return datetime.datetime.strptime(indate, "%Y%m%d").date() + except Exception: + print(e) + return datetime.datetime.strptime(indate, "%y%m%d").date() + except Exception as e: + raise ValueError(e) diff --git a/handler/env.py b/handler/env.py new file mode 100644 index 0000000..644511c --- /dev/null +++ b/handler/env.py @@ -0,0 +1,23 @@ +import cgi + +def env(data): + out = ''' + + + Environment! + + + ''' + + for key, value in data.items(): + try: + out += '''\n ''' % (cgi.escape(key), cgi.escape(repr(value))) + except Exception: + pass + + out += ''' +
%s%s
+ +''' + + return iter([out.encode()])