itty - A Sinatra-inspired micro-framework
A couple nights ago, I was talking with Matt and Christian. They were in the process of looking at Heroku and Sinatra. Matt lamented that Sinatra was perfect for low-level, web service-y things and how it'd be nice if there were a Python equivalent. Jokingly, they tossed around some fake code samples of what they were thinking.
I've been thinking about this for a long time now and had followed Sinatra since its initial release. WSGI also gets you a long way toward this goal (just as Sinatra uses Rack). I couldn't get it out of my head, so in-between working on work-related bits, I started throwing together itty.
What is itty?
itty is a little Python micro-framework, strongly influenced by Sinatra (though not a port). It's a WSGI app so deployment options are numerous. The intent is to make basic and/or high-performance web apps, especially web services.
It is not an extremely serious project (just a fun little hack for me) but it has worked well so far. It makes no assumptions about what kind of ORM/templating/etc. you want to use, you simply plug it in.
Since code talks, itty_ code looks like this:
from itty import * @get('/') def index(request): return 'Hello World!' @get('/hello/(?P
\w+)') def personal_greeting(request, name=', world'): return 'Hello %s!' % name @get('/ct') def ct(request): ct.content_type = 'text/plain' return 'Check your Content-Type headers.' @get('/test_get') def test_get(request): return "'foo' is: %s" % request.GET.get('foo', 'not specified') @post('/test_post') def test_post(request): return "'foo' is: %s" % request.POST.get('foo', 'not specified') @get('/test_redirect') def test_redirect(request): raise Redirect('/hello') run_itty()
You use various decorators (get/post/put/delete/error) to mark functions that can handle web requests. Process how ever you need to within those functions. For output, your function should return a string.