The unified diff between revisions [5f5ee1ff..] and [45413da6..] is displayed below. It can also be downloaded as a raw diff.
#
#
# patch "icalinate.py"
# from [92e16a3397513a44ef7bb405f31c52bbbd04baa5]
# to [0561e77c659965413efd264fb8aa368c651da16c]
#
============================================================
--- icalinate.py 92e16a3397513a44ef7bb405f31c52bbbd04baa5
+++ icalinate.py 0561e77c659965413efd264fb8aa368c651da16c
@@ -7,10 +7,12 @@
# Copyright (C) 2007 Grahame Bowland
#
+import StringIO
import datetime, time
import vobject
import heapq
import json
+import sys
class EventWrapper(object):
def __init__ (self, vevent, offset):
@@ -74,8 +76,8 @@ class Upcoming(object):
class Upcoming(object):
- def __init__ (self, ical_file, offset=None):
- self.ical = vobject.readOne (open (ical_file))
+ def __init__ (self, ical_fd, offset=None):
+ self.ical = vobject.readOne (ical_fd)
self.offset = offset
self.heap = []
for vevent in self.ical.vevent_list:
@@ -141,8 +143,63 @@ class iCalinate(object):
self.__iter_cache.append (event)
yield event
+class UriWatchInstantiate:
+ def __init__ (self, uri, instantiate_fn, refresh=None):
+ self.uri = uri
+ self.instantiate_fn = instantiate_fn
+ self.refresh = refresh
+ if refresh == None:
+ self.refresh = datetime.timedelta (hours=2)
+ self.__instance = None
+ self.instance_dt = None
+
+ def get_data (self):
+ return open ('rtr.ical').read ()
+
+ def instance (self):
+ now = datetime.datetime.now ()
+ if self.instance_dt == None or (now - self.instance_dt) > self.refresh:
+ contents = self.get_data ()
+ if contents:
+ self.instance_dt = now
+ self.__instance = self.instantiate_fn (contents)
+ return self.__instance
+
+import web, urllib, cgi
+
+urls = ('/', 'FrontPage',
+ '/icalinate/(.*)', 'iCalinatePage'
+ )
+
+# m is for meta
+def make_uri_wi (uri, icalinate_kw, **kwargs):
+ def make_icalinate_cb (contents):
+ return iCalinate (StringIO.StringIO (contents), **icalinate_kw)
+ return UriWatchInstantiate (uri, make_icalinate_cb, **kwargs)
+
+sources = {
+ 'rtrfm' : make_uri_wi ('http://work.papercutmedia.com/rtr/ical', {'offset' : datetime.timedelta(hours=-8)})
+ }
+
+class FrontPage:
+ def __init__ (self):
+ pass
+
+ def GET (self):
+ print "<html><head><title>iCalinate</title></head><body><p>Available feeds follow:</p>"
+ for source in sources.keys ():
+ print '<a href="icalinate/%s">%s</a><br />' % (urllib.quote (source), cgi.escape(source))
+ print "</body></html>"
+
+class iCalinatePage:
+ def GET (self, source):
+ if not sources.has_key (source):
+ return web.notfound ()
+ print sources[source].instance ().json_summary ()
+
if __name__ == '__main__':
- nated = iCalinate ('ical', offset=datetime.timedelta(hours=-8))
- import pprint
- nated.json_summary ()
+ web.run (urls, globals ())
+# nated = iCalinate ('ical', offset=datetime.timedelta(hours=-8))
+# import pprint
+# nated.json_summary ()