Yes. Just make a model that contains
from gluon.storage import Storage
settings=Storage()
settings.rss_procedures=[]
settings.exposed_procedures=[]
settings.xmlrpc_procedures=[]
settings.json_procedures=[]
def rss(f):
settings.rss_procedures.append(f.__name__)
return f
def expose(f):
settings.exposed_procedures.append(f.__name__)
return f
def json(f):
settings.json_procedures.append(f.__name__)
return f
def xmlrpc(f):
settings.xmlrpc_procedures.append(f.__name__)
and a controller with the following actions:
def rss():
if request.args and request.args[0] in settings.rss_procedures:
feed=eval('%s(*request.args[1:],**dict
(request.vars))'%request.args[0])
else:
t2._error()
import gluon.contrib.rss2 as rss2
rss = rss2.RSS2(
title=feed['title'],
link = feed['link'],
description = feed['description'],
lastBuildDate = feed['created_on'],
items = [
rss2.RSSItem(
title = entry['title'],
link = entry['link'],
description = entry['description'],
pubDate = entry['created_on']) for entry in feed
['entries']]
)
response.headers['Content-Type']='application/rss+xml'
return rss2.dumps(rss)
def run():
if request.args and request.args[0] in
settings.exposed_procedures:
return eval('%s(*request.args[1:],**dict
(request.vars))'%request.args[0])
return 'Not Authorized'
def xmlrpc():
methods=[eval(x) for x in settings.xmlrpc_procedures]
return response.xmlrpc(request,methods)
def json():
if request.args and request.args[0] in settings.json_procedures:
import gluon.contrib.simplejson as sj
return sj.dumps(eval('%s(*request.args[1:],**dict
(request.vars))'%request.args[0]))
return 'Not Authorized'
Massimo