Merge branch 'master' into python3
authorFredrik Tolf <fredrik@dolda2000.com>
Sun, 15 Sep 2013 22:41:53 +0000 (00:41 +0200)
committerFredrik Tolf <fredrik@dolda2000.com>
Sun, 15 Sep 2013 22:41:53 +0000 (00:41 +0200)
Conflicts:
wrw/sp/cons.py
wrw/sp/xhtml.py

1  2 
wrw/sp/cons.py
wrw/sp/xhtml.py

diff --combined wrw/sp/cons.py
@@@ -3,18 -3,18 +3,18 @@@ import xml.dom.minido
  class node(object):
      pass
  
 -class text(node, unicode):
 +class text(node, str):
      def __todom__(self, doc):
          return doc.createTextNode(self)
  
 -class raw(node, unicode):
 +class raw(node, str):
      def __todom__(self, doc):
          raise Exception("Cannot convert raw code to DOM objects")
  
  class element(node):
      def __init__(self, ns, name, ctx):
          self.ns = ns
 -        self.name = unicode(name)
 +        self.name = str(name)
          self.ctx = ctx
          self.attrs = {}
          self.children = []
      def __call__(self, *children, **attrs):
          for child in children:
              self.ctx.addchild(self, child)
 -        for k, v in attrs.iteritems():
 +        for k, v in attrs.items():
              self.ctx.addattr(self, k, v)
          return self
  
      def __todom__(self, doc):
          el = doc.createElementNS(self.ns, self.name)
 -        for k, v in self.attrs.iteritems():
 +        for k, v in self.attrs.items():
              el.setAttribute(k, v)
          for child in self.children:
              el.appendChild(child.__todom__(doc))
  class context(object):
      def __init__(self):
          self.nodeconv = {}
 -        self.nodeconv[str] = lambda ob: text(ob, "utf-8")
 -        self.nodeconv[unicode] = text
 +        self.nodeconv[bytes] = lambda ob: text(ob, "utf-8")
 +        self.nodeconv[str] = text
          self.nodeconv[int] = text
 -        self.nodeconv[long] = text
          self.nodeconv[float] = text
  
      def nodefrom(self, ob):
@@@ -59,7 -60,8 +59,8 @@@
          node.children.append(self.nodefrom(child))
  
      def addattr(self, node, k, v):
-         node.attrs[str(k)] = str(v)
+         if v is not None:
 -            node.attrs[unicode(k)] = unicode(v)
++            node.attrs[str(k)] = str(v)
  
  class constructor(object):
      def __init__(self, ns, elcls=element, ctx=None):
diff --combined wrw/sp/xhtml.py
@@@ -1,11 -1,11 +1,11 @@@
 -import xml.dom.minidom, StringIO
 -import cons as _cons
 -import util
 +import xml.dom.minidom, io
 +from . import cons as _cons
 +from . import util
  dom = xml.dom.minidom.getDOMImplementation()
  
 -ns = u"http://www.w3.org/1999/xhtml"
 -doctype = u"-//W3C//DTD XHTML 1.1//EN"
 -dtd = u"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"
 +ns = "http://www.w3.org/1999/xhtml"
 +doctype = "-//W3C//DTD XHTML 1.1//EN"
 +dtd = "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"
  
  class htmlelement(_cons.element):
      def __todoc__(self):
          return doc
  
  class xhtmlcontext(_cons.context):
 -    attrmap = {u"klass": u"class"}
 +    attrmap = {"klass": "class"}
  
      def addattr(self, node, k, v):
 -        k = unicode(k)
 -        super(xhtmlcontext, self).addattr(node, self.attrmap.get(k, k), v)
 +        k = str(k)
-         node.attrs[self.attrmap.get(k, k)] = str(v)
++        super().addattr(node, self.attrmap.get(k, k), v)
  
  def cons(ctx=None):
      if ctx is None: ctx = xhtmlcontext()
@@@ -30,7 -30,7 +30,7 @@@ def head(title=None, css=None)
      head = h.head
      if title:
          head(h.title(title))
 -    if isinstance(css, str) or isinstance(css, unicode):
 +    if isinstance(css, str) or isinstance(css, bytes):
          head(h.link(rel="stylesheet", type="text/css", href=css))
      elif css:
          for ss in css:
@@@ -38,7 -38,7 +38,7 @@@
      return head
  
  class htmlformatter(util.formatter):
 -    allowshort = set([u"br", u"hr", u"img", u"input", u"meta", u"link"])
 +    allowshort = set(["br", "hr", "img", "input", "meta", "link"])
      def element(self, el, **extra):
          if el.name in self.allowshort:
              super(htmlformatter, self).element(el, **extra)
@@@ -51,7 -51,7 +51,7 @@@ class htmlindenter(util.indenter, htmlf
  def forreq(req, tree):
      # XXX: Use proper Content-Type for clients accepting it.
      req.ohead["Content-Type"] = "text/html; charset=utf-8"
 -    buf = StringIO.StringIO()
 +    buf = io.BytesIO()
      htmlindenter.output(buf, tree, doctype=(doctype, dtd), charset="utf-8")
      ret = buf.getvalue()
      req.ohead["Content-Length"] = len(ret)