From: Fredrik Tolf Date: Wed, 22 Mar 2017 04:40:43 +0000 (+0100) Subject: Merge branch 'master' into python2 X-Git-Url: http://dolda2000.com/gitweb/?p=wrw.git;a=commitdiff_plain;h=bdc80241ffb5b50b1c9fb6500778e97b3f7170e6;hp=-c Merge branch 'master' into python2 --- bdc80241ffb5b50b1c9fb6500778e97b3f7170e6 diff --combined wrw/proto.py index 36a9db9,628bfc9..7cb6d31 --- a/wrw/proto.py +++ b/wrw/proto.py @@@ -98,19 -98,20 +98,19 @@@ def simpleerror(env, startreq, code, ti """ % (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): @@@ -191,25 -192,40 +191,25 @@@ def parstring(pars={}, **augment) def parurl(url, pars={}, **augment): qs = parstring(pars, **augment) if qs != "": - return url + "?" + qs + return url + ("&" if "?" in url else "?") + qs else: return url # 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) diff --combined wrw/req.py index 41fd330,b08afae..ebc3fd8 --- a/wrw/req.py +++ b/wrw/req.py @@@ -19,7 -19,7 +19,7 @@@ class headdict(object) del self.dict[key.lower()] def __iter__(self): - return iter((list[0] for list in self.dict.values())) + return iter((list[0] for list in self.dict.itervalues())) def get(self, key, default=""): if key.lower() in self.dict: @@@ -67,29 -67,29 +67,29 @@@ class limitreader(object) ra = min(ra, size) while len(self.buf) < ra: ret = self.bk.read(ra - len(self.buf)) - if ret == b"": + if ret == "": raise IOError("Unexpected EOF") self.buf.extend(ret) self.rb += len(ret) - ret = bytes(self.buf[:ra]) + ret = str(self.buf[:ra]) self.buf = self.buf[ra:] return ret def readline(self, size=-1): off = 0 while True: - p = self.buf.find(b'\n', off) + p = self.buf.find('\n', off) if p >= 0: - ret = bytes(self.buf[:p + 1]) + ret = str(self.buf[:p + 1]) self.buf = self.buf[p + 1:] return ret off = len(self.buf) if size >= 0 and len(self.buf) >= size: - ret = bytes(self.buf[:size]) + ret = str(self.buf[:size]) self.buf = self.buf[size:] return ret if self.rb == self.limit: - ret = bytes(self.buf) + ret = str(self.buf) self.buf = bytearray() return ret ra = self.limit - self.rb @@@ -97,7 -97,7 +97,7 @@@ ra = min(ra, size) ra = min(ra, 1024) ret = self.bk.read(ra) - if ret == b"": + if ret == "": raise IOError("Unpexpected EOF") self.buf.extend(ret) self.rb += len(ret) @@@ -109,9 -109,9 +109,9 @@@ class lineiter(object): def __iter__(self): return self - def __next__(self): + def next(self): ret = rd.readline() - if ret == b"": + if ret == "": raise StopIteration() return ret return lineiter() @@@ -148,7 -148,7 +148,7 @@@ class origrequest(request) self.input = limitreader(env["wsgi.input"], int(clen)) else: # XXX: What to do? - self.input = io.BytesIO(b"") + self.input = io.BytesIO("") else: # Assume input is chunked and read until ordinary EOF. self.input = env["wsgi.input"] @@@ -230,6 -230,7 +230,7 @@@ class copyrequest(request) self.https = p.https self.ihead = p.ihead self.ohead = p.ohead + self.input = p.input def status(self, code, msg): return self.parent.status(code, msg)