generic.ics
This commit is contained in:
@@ -1 +1 @@
|
||||
Version 1.99.7 (2012-04-05 16:57:05) dev
|
||||
Version 1.99.7 (2012-04-05 18:03:27) dev
|
||||
|
||||
@@ -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
@@ -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)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user