Pentropy gets closer
Filed under: pentropy breve rssHad some time to hack on Pentropy last night and managed to get RSS 2.0 working (remarkably easy using xsd2breve), one-off pages (i.e. the "about" link) and the beginnings of an admin interface.
To give a quick example of how easy it was to create an RSS feed in Breve, here's the steps I followed:
First I needed to obtain an xsd file for RSS (this took some Googling as apparently there isn't an actual formal standard). I ended up using the one found here.
The next step is to create a test RSS feed. To this end I copied an example off some random site and edited it by hand:
rss (version="2.0") [
channel [
title [ 'Google Jobs' ],
link [ 'http://www.google.com/support/jobs/' ],
description [ 'Information about job openings at Google Inc.' ],
item [
title [ 'HR Analyst - Mountain View' ],
link [ 'http://www.google.com/support/jobs/bin/topic.py?dep_id=1077&loc_id=1116 ],
description [ '''
We have an immediate need for an experienced
analytical HR professional.
The ideal candidate has a proven record of developing
analytical frameworks to make fact-based decisions.
''' ]
]
]
]
I saved this template in templates/feeds/rss20.b. This gives us a bit of test data to verify our custom tags and template are working.
Next we need to create our custom tags and put them in a place where Breve can find them:
$ mkdir custom_tags $ cd custom_tags $ xsd2breve http://www.westinkriebel.com/Public/RSS20.xsd > rss20.py
Now we need to add our custom_tags directory to our Python path and tell Breve to actually use them:
# a Pylons controller
import sys; sys.path.append ( 'pentropy/custom_tags' )
class FeedController ( BaseController ):
def rss20 ( self ):
return render_response ( 'feeds/rss20?format=rss20' )
Now I can visit '/feeds/rss20' and see the result (a fantastic RSS feed).
The argument format=rss20 tells Breve to import tags from a module with that name.
Next is to put some actual data into the feed. Modify the controller to return the actual data:
def rss20 ( self ):
c.posts = Post.select (
order_by = [ desc ( Post.c.post_date ) ],
limit = 50
)
return render_response ( 'feeds/rss20?format=rss20' )
and in our template:
rss ( version="2.0" ) [
channel [
title [ 'Pentropy' ],
link [ 'http://pentropy.twisty-industries.com/' ],
description [ 'Random Stuff' ],
[ item [
title [ _p.title ],
link [ 'http://pentropy.twisty-industries.com/%s' % _p.slug ],
description [ cdata ( _p.html_content ) ]
] for _p in c.posts ]
]
]
Now clearly, at some point I'll want to pull some of that data from the database or a config file, but for now it actually works.





