All pastes #822582 Raw Edit

Something

public python v1 · immutable
·published 2007-12-18 20:39 UTC
rendered paste body
from 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)