Thursday, December 01, 2005

When they say "Turbo", they mean it

I've been fiddling around with TurboGears recently. One web app I've worked on is a service that lets you know when the local bands you like are playing in a calendar format. So that you can say "I feel like seeing a band tonight" and see what's on. Another was a help system.

Well, I've just spent a fun few hours putting together a web front end to my Bugs Everywhere bug tracker. It was definitely a "turbo" experience. Went from zero to "does a lot and looks decent" in mere hours. It was also a "gears" experience, because half the fun was how easily everything fit together. Rock on, Turbogears.

There have been a spate of web interfaces for bzr, and I wonder whether they'd be easier using TurboGears or Django. My guess is yes-- lots easier.

These new web megaframeworks interest me a lot, partly because writing Panoramic Feedback required coming up with one. Yes, PF does templates, data persistence, url dispatch and JavaScript (not to mention having its own XML parser and PDF report generation subsystem). But if I was starting out today, there's no way I'd build our own megaframework. They're easy, they're fun, and they let you focus on what you really want to do.

TurboGears isn't the only megaframework in town, and I wouldn't turn up my nose at Django or Rails. But I'd prefer to write in Python, since that's compatible with most of my software. Ruby seems too similar to Python for it to be worthwile knowing both.

What I especially like about TurboGears is its philosophy of collaboration, and Kid templates. The fact that they're valid XHTML is neat. The fact that they pack the whole expressive power of Python (should you need it) is great. In my bug tracker front end, I'm actually passing list of Bug objects to the display template, and the template is retrieving the members it needs. Nice.

I'd like it if CherryPy had better support for RESTful URLs. SQLObject seems a little buggy to me. And CatWalk will be very nice, when it happens.

But it's already come a very long way.


Kevin Dangoor said...

There has been quite a bit of discussion of RESTful APIs in CherryPy. There are some solutions that work today, but it depends on how deep in REST you want to go. (Using the different HTTP methods in a sane way is the least well-handled case in CP right now).

There are many ways to work with your URLs to make them happy, RESTful URLs, at least.

Anonymous said...

Kevin, it's nice to hear that there's movement on the REST front. For now, I'm using a default handler and essentially bypassing that aspect of CherryPy, but I have seen some filters and things around, so I'll keep looking for options.