[three]Bean
SQLARadialGraph in a Pyramid app
Mar 07, 2011 | categories: python, toscawidgets, pyramid View Commentstw2.jit.SQLARadialGraph
is a python class that encapsulates the
awesome RGraph
widget from the Javascript InfoVis Toolkit and automatically
sets it up with JSON data from a sqlalchemy-mapped database. This post is a
tutorial on how to make use of it in an application built on the Pyramid web
framework.
1. Create a fresh pyramid app from the
pyramid_alchemy
paster template (instructions).
2. Create some sqlalchemy
models with
one-to-many and/or many-to-many relationships and populate the DB along the
lines described in my SQLARadialGraph
in a Turbogears 2.1 app tutorial.
3. Include tw2.jit
and formencode
in the requires
list in your setup.py
file and re-run
python setup.py develop
with your virtualenv active.
4. Include the Toscawidgets 2 middleware in the Pyramid
WSGI stack by specifying egg:tw2.core#middleware
just before your
application's line in the pipeline
setting inside
development.ini
.
5. Create a module
with the following contents:
from tw2jitpyramiddemo import models from tw2.jit import SQLARadialGraph class UserGraph(SQLARadialGraph): id = 'whatever' base_url = '/jit_data' entities = [models.MyModel, models.MyGroup] width = '750' height = '533'
6. Expose the UserGraph
widget in one of your
views.
Specifically, modify
and change the
view_model(context, request)
view to look something like:
from widgets import UserGraph def view_model(context, request): return {'item':context, 'project':'tw2.jit-pyramid-demo', 'jitwidget':UserGraph(rootObject=context)}
7. Render the widget in the corresponding template.
If you're using Chameleon templates
(
) this looks like:
<div tal:content="structure jitwidget.display()"></div>
If you're using Mako templates
(
) this looks like:
${jitwidget.display() | n}
8. Open a route to the widget's own controller.
Add the following three lines to
just before the return config.make_wsgi_app()
line:
from widgets import UserGraph jit_view = lambda c, r : UserGraph.request(r) config.add_route('jit_data', '/jit_data', view=jit_view, xhr=True)
And we're done. Restart the app and checkout http://localhost:6543/1 and it might look something like this.
You can, of course, tweak all kinds of style and functional parameters on
SQLARadialGraph
like those outlined near the end of my post on
using SQLARadialGraph
in a Turbogears 2.1 app.
Maybe you disagree, but the Pyramid implementation above went much more smoothly than the TG 2.1 setup. I think I like it.