All pastes #822579 Raw Edit

Something

public text v1 · immutable
·published 2007-12-18 20:37 UTC
rendered paste body
from turbogears import controllers, expose, flash, url, paginate
from turbogears.widgets import Widget, JSLink
import re
# from model import *
# import logging
# log = logging.getLogger("widgets.controllers")

import feedparser
from turbogears import startup
from turbogears.widgets.base import JSLink

class 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)