Skip to content
all web frameworks suck. this one just sucks less
Python HTML
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
blogwig
docs
pigwig
.gitignore
.travis.yml
LICENSE
README.md
pylintrc
setup.py

README.md

pigwig

a pig wearing a wig is humor
a wig wearing a pig is heresy
pigwig is a python 3 WSGI framework
(blogwig is a sample app. don't put wigs on blogs)

#!/usr/bin/env python3

from pigwig import PigWig, Response

def root(request):
	return Response('hello, world!')

routes = [
	('GET', '/', root),
]

app = PigWig(routes)

if __name__ == '__main__':
	app.main()

FACs (frequent, annoying comments)

  1. tornado-style class-based views are better
    we think you're wrong (inheritance is a hammer and this problem is no nail), but it's easy enough to achieve:
    def routes():
    	views = [
    		('/', RootHandler),
    	]
    	handlers = []
    	for route, view in views:
    		for verb in ['get', 'post']:
    			if hasattr(view, verb):
    				handlers.append((verb.upper(), route, cbv_handler(view, verb)))
    	return handlers
    
    def cbv_handler(cbv, verb):
    	def handler(request):
    		return getattr(cbv(request), verb)()
    	return handler
    
    class RootHandler:
    	def __init__(self, request):
    		self.request = request
    
    	def get(self):
    		return Response('hello')
  2. flask-style decorator-based routing is better
    we think you're wrong (explicit is better than implicit), but it's easy enough to achieve:
    routes = []
    def route(path, method='GET'):
    	def wrapper(handler):
    		routes.append((method, path, handler))
    		return handler
    	return wrapper
    
    @route('/')
    def root(request):
    	return Response('hello')
  3. django-style integration with an ORM is better
    you're wrong

coverage status

You can’t perform that action at this time.