generic.ics

This commit is contained in:
Massimo Di Pierro
2012-04-05 18:03:55 -05:00
parent aa45b64d8f
commit 3798c8f796
3 changed files with 53 additions and 13 deletions
+1 -1
View File
@@ -1 +1 @@
Version 1.99.7 (2012-04-05 16:57:05) dev
Version 1.99.7 (2012-04-05 18:03:27) dev
+17
View File
@@ -0,0 +1,17 @@
{{
###
# response._vars contains the dictionary returned by the controller action
# Assuming something like:
#
# db.define_table('event',
# Field('title'),
# Field('start_datetime','datetime'),
# Field('stop_datetime','datetime'))
# events = db(db.event).select()
#
# Aor this to work the action must return something like
#
# dict(events=events, title='title',link=URL('action'),timeshift=0)
#
###
from gluon.serializers import ics}}{{=XML(ics(**response._vars))}}
+35 -12
View File
@@ -64,24 +64,47 @@ def json(value,default=custom_json):
def csv(value):
return ''
def ics(events, title=None, link=None, timeshift=0):
import datetime
title = title or '(unkown)'
if link and not callable(link):
link = lambda item: link +'/%s' % link['id']
s = 'BEGIN:VCALENDAR'
s += '\nVERSION:2.0'
s += '\nX-WR-CALNAME:%s' % title
s += '\nSUMMARY:%s' % title
s += '\nPRODID:Generated by web2py'
s += '\nCALSCALE:GREGORIAN'
s += '\nMETHOD:PUBLISH'
for item in events:
s += '\nBEGIN:VEVENT'
s += '\nUID:%s' % item['id']
if link:
s += '\nURL:%s' % link(item)
shift = datetime.timedelta(seconds=3600*timeshift)
start = item['start_datetime']+shift
stop = item['stop_datetime']+shift
s += '\nDTSTART:%s' % start.strftime('%Y%m%dT%H%M%S')
s += '\nDTEND:%s' % stop.strftime('%Y%m%dT%H%M%S')
s += '\nSUMMARY:%s' % item['title']
s += '\nEND:VEVENT'
s += '\nEND:VCALENDAR'
return s
def rss(feed):
if not 'entries' in feed and 'items' in feed:
feed['entries'] = feed['items']
now=datetime.datetime.now()
rss = rss2.RSS2(title = feed['title'],
link = str(feed['link']),
description = feed['description'],
rss = rss2.RSS2(title = feed.get('title','(notitle)'),
link = feed.get('link',None),
description = feed.get('description',''),
lastBuildDate = feed.get('created_on', now),
items = [rss2.RSSItem(\
title=entry['title'],
link=str(entry['link']),
description=entry['description'],
pubDate=entry.get('created_on', now)
)\
for entry in feed['entries']
]
)
items = [rss2.RSSItem(
title=entry.get('title','(notitle)'),
link=entry('link',None),
description=entry.get('description',''),
pubDate=entry.get('created_on', now)
) for entry in feed.get('entries',[])])
return rss2.dumps(rss)