rendered paste bodyfrom turbogears import controllers, expose, flash, url, paginatefrom turbogears.widgets import Widget, JSLinkimport re# from model import *# import logging# log = logging.getLogger("widgets.controllers")import feedparserfrom turbogears import startupfrom turbogears.widgets.base import JSLinkclass LocalJSLink(JSLink): """ Link to local Javascript files """ def update_params(self, d): super(JSLink, self).update_params(d) d["link"] = url(self.name) class FedoraPeopleWidget(Widget): javascript = [ LocalJSLink('widgets', '/static/js/fedorapeople.js')] template = """ <table xmlns:py="http://purl.org/kid/ns#" class="widget FedoraPeopleWidget" py:attrs="{'id': widgetId}"> <script type="text/javascript" src="${tg.url('/static/js/fedorapeople.js')}"></script> <tr py:for="entry in entries[:5]"> <td><img src="${entry['image']}" height="32" width="32"/></td> <td><a href="${entry['link']}">${entry['title']}</a></td> </tr> </table> """ params = ["entries","widgetId", "widgetUrl"] def __init__(self, widgetUrl, widgetId=None): self.widgetId = widgetId self.widgetUrl = widgetUrl self.entries = [] regex = re.compile('<img src="(.*)" alt="" />') feed = feedparser.parse('http://planet.fedoraproject.org/rss20.xml') for entry in feed['entries']: self.entries.append({ 'link' : entry['link'], 'title' : entry['title'], 'image' : regex.match(entry['summary']).group(1) }) def __json__(self): return {'id': self.widgetId, 'entries': self.entries}class FedoraPeopleData(list): def __init__(self): regex = re.compile('<img src="(.*)" alt="" />') feed = feedparser.parse('http://planet.fedoraproject.org/rss20.xml') for entry in feed['entries']: self.append({ 'link' : entry['link'], 'title' : entry['title'], 'image' : regex.match(entry['summary']).group(1) })class Root(controllers.RootController): @expose(template="widgets.templates.index") def index(self): return dict(title="Widgets Demo", thisurl='/') ''' @expose(template="widgets.templates.tgwidget") @expose('json') @expose(template="genshi-text:widgets.templates.tgwidget", as_format="plain", accept_format="text/plain", content_type="text/plain" ) ''' @expose(template="kid:widgets.templates.tgkid") def tgwidget(self): thisurl = '/tgwidget' widget = FedoraPeopleWidget(url(thisurl), 'people1') widget2 = FedoraPeopleWidget(url(thisurl), 'people2') print widget print dir(widget) print widget.javascript print widget.retrieve_javascript() for i in widget.javascript: print dir(i) print i.retrieve_javascript() print i.render() from turbogears.widgets import JSSource, js_location script = JSSource("alert('Hello World');", js_location.bodybottom) return dict(title='TurboGears Widget', thisurl='/tgwidget', widget=widget, widget2=widget2, script=script) @expose(template="widgets.templates.people") @expose('json') @expose(template="genshi-text:widgets.templates.tgwidget", as_format="plain", accept_format="text/plain", content_type="text/plain" ) def xincludewidget(self): try: entries = FedoraPeopleData() except feedparser.urllib2.URLError: return dict(tg_error="") return dict(title='Genshi Widget', thisurl='/xincludewidget', peopleData=entries)