This is a pre-production deployment of Warehouse, however changes made here WILL affect the production instance of PyPI.
Latest Version Dependencies status unknown Test status unknown Test coverage unknown
Project Description

XML/HTML Generation DSL


Wither is a library designed to make XML generation under python as simple and as nicely formatted as python code.

Wither is implemented as a thin statless wrapper around etree.Element objects and works by making use of the ‘with’ keyword in python to build a nested tree of etree objects that can be processed with standard tools/techniques

by using python as a DSL you can automatically ensure that all tags are properly closed and also execute arbitrary python code to build things such as lists or to embed widgets


>>> import lxml.usedoctest
>>> from wither import Node
>>> n = Node('html')
>>> with n.head as head:
...     head.title == 'Wither README Example'
...'', rel='homepage')
>>> with n.body as body:
...     body.h1 == 'Welcome to the Wither README'
...     with body.div as div:
...         div.p == 'This is the example from the README file'
...         div.p(style='color: red;') == 'Big Red Warning'
>>> print(n)
<html><head><title>Wither README Example</title><link
rel="homepage"/></head><body><h1>Welcome to the Wither README</h1><div><p>This
is the example from the README file</p><p style="color: red;">Big Red


  • Uses python as a DSL for XML Generation
  • Uses/Abuses python syntax to make node generation shorter and more visually appealing
  • Uses lxml for document generation
  • Possibility to fall back to built in etree implementations (XXX TODO: Write me)
  • Easy widget creation
  • Implicit verification of document correctness (python’s indentation means you cant forget to close a tag)


  • lxml - may be possible ot replace this with python’s inbuilt etree support


$ virtualenv env $ . env/bin/activate # pip install wither


Wither supports Python 2.7 and Python 3.2 and up as its supported python versions but may also work on earlier versions of python 3 and python 2.6. while these platforms are automatically tested to check for breakages these earlier versions are not officially supported and failing tests are for informational purposes only.


Wither is very much a project that was written ‘because i can’. I have multiple python modules that abuse python syntax in interesting ways to do things like pattern matching of automatic retry of transactions for Databases that are all concise and visually appealing.

after seeing the ‘with’ statement and its use in python 2.6 with nesting for using multiple context generators (instead of python 2.7’s flattened version) i decided to see if i could use this to upgrade an existing XML generation program that used a similar concept with object.

the aim of this project is not to create a fast generator but create something that looks ‘right’ when included inline with python code and support dynamic features like a string template library would.

Futher Ideas

By using ‘yeild’ in strategic spots it may be possible to paritally render a template allowing one to send a prerendered ‘frame’ (or the head part of it at least) and then generate the body followed by the tail (of the frame) to the client thereby speeding up transmission of the first byte to the client and avoiding a dogpile of transmission at the end of the request. this should allow clients to render thier pages quicker as well as they have partial data with which they can start planning out the layout of the page

Release History

Release History


This version

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

Download Files

Download Files

TODO: Brief introduction on what you do with files - including link to relevant help section.

File Name & Checksum SHA256 Checksum Help Version File Type Upload Date
wither-1.1.tar.bz2 (6.5 kB) Copy SHA256 Checksum SHA256 Source Mar 11, 2014 (11.0 kB) Copy SHA256 Checksum SHA256 Source Mar 11, 2014

Supported By

WebFaction WebFaction Technical Writing Elastic Elastic Search Pingdom Pingdom Monitoring Dyn Dyn DNS Sentry Sentry Error Logging CloudAMQP CloudAMQP RabbitMQ Heroku Heroku PaaS Kabu Creative Kabu Creative UX & Design Fastly Fastly CDN DigiCert DigiCert EV Certificate Rackspace Rackspace Cloud Servers DreamHost DreamHost Log Hosting