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 ()