self.servername = env["SERVER_NAME"]
self.https = "HTTPS" in env
self.ihead = headdict()
- self.input = None
if "CONTENT_TYPE" in env:
self.ihead["Content-Type"] = env["CONTENT_TYPE"]
- if "CONTENT_LENGTH" in env:
- clen = self.ihead["Content-Length"] = env["CONTENT_LENGTH"]
- if clen.isdigit():
- self.input = limitreader(env["wsgi.input"], int(clen))
- if self.input is None:
- self.input = io.BytesIO("")
+ if "CONTENT_LENGTH" in env:
+ clen = self.ihead["Content-Length"] = env["CONTENT_LENGTH"]
+ if clen.isdigit():
+ self.input = limitreader(env["wsgi.input"], int(clen))
+ else:
+ # XXX: What to do?
+ self.input = io.BytesIO("")
+ else:
+ # Assume input is chunked and read until ordinary EOF.
+ self.input = env["wsgi.input"]
+ else:
+ self.input = None
self.ohead = headdict()
for k, v in env.items():
if k[:5] == "HTTP_":
import xml.dom.minidom
class node(object):
- def __str__(self):
- doc = xml.dom.minidom.Document()
- return self.__todom__(doc).toxml()
+ pass
class text(node, unicode):
def __todom__(self, doc):
def __call__(self, *children, **attrs):
for child in children:
- self.children.append(self.ctx.nodefrom(child))
+ self.ctx.addchild(self, child)
for k, v in attrs.iteritems():
- self.attrs[unicode(k)] = unicode(v)
+ self.ctx.addattr(self, k, v)
return self
def __todom__(self, doc):
el.appendChild(child.__todom__(doc))
return el
+ def __str__(self):
+ doc = xml.dom.minidom.Document()
+ return self.__todom__(doc).toxml()
+
class context(object):
def __init__(self):
self.nodeconv = {}
return self.nodeconv[type(ob)](ob)
raise Exception("No node conversion known for %s objects" % str(type(ob)))
+ def addchild(self, node, child):
+ node.children.append(self.nodefrom(child))
+
+ def addattr(self, node, k, v):
+ node.attrs[unicode(k)] = unicode(v)
+
class constructor(object):
def __init__(self, ns, elcls = element, ctx=None):
self._ns = ns
doc.appendChild(self.__todom__(doc))
return doc
+class xhtmlcontext(_cons.context):
+ attrmap = {u"klass": u"class"}
+
+ def addattr(self, node, k, v):
+ k = unicode(k)
+ node.attrs[self.attrmap.get(k, k)] = unicode(v)
+
def cons(ctx=None):
+ if ctx is None: ctx = xhtmlcontext()
return _cons.constructor(ns, htmlelement, ctx)
def head(title=None, css=None):