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):
|
def csv(value):
|
||||||
return ''
|
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):
|
def rss(feed):
|
||||||
if not 'entries' in feed and 'items' in feed:
|
if not 'entries' in feed and 'items' in feed:
|
||||||
feed['entries'] = feed['items']
|
feed['entries'] = feed['items']
|
||||||
now=datetime.datetime.now()
|
now=datetime.datetime.now()
|
||||||
rss = rss2.RSS2(title = feed['title'],
|
rss = rss2.RSS2(title = feed.get('title','(notitle)'),
|
||||||
link = str(feed['link']),
|
link = feed.get('link',None),
|
||||||
description = feed['description'],
|
description = feed.get('description',''),
|
||||||
lastBuildDate = feed.get('created_on', now),
|
lastBuildDate = feed.get('created_on', now),
|
||||||
items = [rss2.RSSItem(\
|
items = [rss2.RSSItem(
|
||||||
title=entry['title'],
|
title=entry.get('title','(notitle)'),
|
||||||
link=str(entry['link']),
|
link=entry('link',None),
|
||||||
description=entry['description'],
|
description=entry.get('description',''),
|
||||||
pubDate=entry.get('created_on', now)
|
pubDate=entry.get('created_on', now)
|
||||||
)\
|
) for entry in feed.get('entries',[])])
|
||||||
for entry in feed['entries']
|
|
||||||
]
|
|
||||||
)
|
|
||||||
return rss2.dumps(rss)
|
return rss2.dumps(rss)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user