Merge branch 'master' into python2
[wrw.git] / wrw / proto.py
index 628bfc9..7cb6d31 100644 (file)
@@ -98,20 +98,19 @@ def simpleerror(env, startreq, code, title, msg):
 </body>
 </html>
 """ % (title, title, htmlq(msg))
-    buf = buf.encode("us-ascii")
     startreq("%i %s" % (code, title), [("Content-Type", "text/html"), ("Content-Length", str(len(buf)))])
     return [buf]
 
 def urlq(url):
-    if isinstance(url, str):
+    if isinstance(url, unicode):
         url = url.encode("utf-8")
     ret = ""
-    invalid = b"%;&=#?/\"'"
+    invalid = "%;&=#?/\"'"
     for c in url:
-        if c in invalid or (c <= 32) or (c >= 128):
-            ret += "%%%02X" % c
+        if c in invalid or (ord(c) <= 32) or (ord(c) >= 128):
+            ret += "%%%02X" % ord(c)
         else:
-            ret += chr(c)
+            ret += c
     return ret
 
 class urlerror(ValueError):
@@ -198,34 +197,19 @@ def parurl(url, pars={}, **augment):
 
 # Wrap these, since binascii is a bit funky. :P
 def enhex(bs):
-    return base64.b16encode(bs).decode("us-ascii")
+    return base64.b16encode(bs)
 def unhex(es):
-    if not isinstance(es, collections.ByteString):
-        try:
-            es = es.encode("us-ascii")
-        except UnicodeError:
-            raise binascii.Error("non-ascii character in hex-string")
     return base64.b16decode(es)
 def enb32(bs):
-    return base64.b32encode(bs).decode("us-ascii")
+    return base64.b32encode(bs)
 def unb32(es):
-    if not isinstance(es, collections.ByteString):
-        try:
-            es = es.encode("us-ascii")
-        except UnicodeError:
-            raise binascii.Error("non-ascii character in base32-string")
     if (len(es) % 8) != 0:
         es += b"=" * (8 - (len(es) % 8))
     es = es.upper()             # The whole point of Base32 is that it's case-insensitive :P
     return base64.b32decode(es)
 def enb64(bs):
-    return base64.b64encode(bs).decode("us-ascii")
+    return base64.b64encode(bs)
 def unb64(es):
-    if not isinstance(es, collections.ByteString):
-        try:
-            es = es.encode("us-ascii")
-        except UnicodeError:
-            raise binascii.Error("non-ascii character in base64-string")
     if (len(es) % 4) != 0:
         es += b"=" * (4 - (len(es) % 4))
     return base64.b64decode(es)