Add initial version of the application. No, it isn't pretty, but it generates valid ical.
This commit is contained in:
parent
442c4ca442
commit
d2680cdcae
1
__init__.py
Normal file
1
__init__.py
Normal file
|
@ -0,0 +1 @@
|
||||||
|
from env import *
|
40
app.py
Normal file
40
app.py
Normal file
|
@ -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 ""
|
3
handler/__init__.py
Normal file
3
handler/__init__.py
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
from handler.env import env
|
||||||
|
from handler.cal import cal
|
||||||
|
from handler.date import date
|
40
handler/cal.py
Normal file
40
handler/cal.py
Normal file
|
@ -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()])
|
11
handler/date.py
Normal file
11
handler/date.py
Normal file
|
@ -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)
|
23
handler/env.py
Normal file
23
handler/env.py
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
import cgi
|
||||||
|
|
||||||
|
def env(data):
|
||||||
|
out = '''<!DOCTYPE HTML>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Environment!</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<table>'''
|
||||||
|
|
||||||
|
for key, value in data.items():
|
||||||
|
try:
|
||||||
|
out += '''\n <tr><th>%s</th><td>%s</td></tr>''' % (cgi.escape(key), cgi.escape(repr(value)))
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
|
||||||
|
out += '''
|
||||||
|
</table>
|
||||||
|
</body>
|
||||||
|
</html>'''
|
||||||
|
|
||||||
|
return iter([out.encode()])
|
Loading…
Reference in a new issue