- resp = []
- respsent = []
-
- def recode(thing):
- if isinstance(thing, collections.ByteString):
- return thing
- else:
- return str(thing).encode("latin-1")
-
- def flushreq():
- if not respsent:
- if not resp:
- raise Exception("Trying to write data before starting response.")
- status, headers = resp
- respsent[:] = [True]
- buf = bytearray()
- buf += b"HTTP/1.1 " + recode(status) + b"\n"
- for nm, val in headers:
- buf += recode(nm) + b": " + recode(val) + b"\n"
- buf += b"\n"
- try:
- req.sk.write(buf)
- except IOError:
- raise closed()
-
- def write(data):
- if not data:
- return
- flushreq()
+def recode(thing):
+ if isinstance(thing, collections.abc.ByteString):
+ return thing
+ else:
+ return str(thing).encode("utf-8")
+
+class request(ashd.serve.wsgirequest):
+ def __init__(self, *, bkreq, **kw):
+ super().__init__(**kw)
+ self.bkreq = bkreq.dup()
+ self.sendrights = None
+
+ def mkenv(self):
+ return mkenv(self.bkreq)
+
+ def handlewsgi(self, env, startreq):
+ return handler(env, startreq)
+
+ def fileno(self):
+ return self.bkreq.bsk.fileno()
+
+ def writehead(self, status, headers):
+ headers = list(headers)
+ for header in headers:
+ nm, val = header
+ if nm.lower() == "x-ash-send-rights":
+ self.sendrights = val
+ headers.remove(header)
+ break
+ w = self.buffer.extend
+ w(b"HTTP/1.1 " + recode(status) + b"\n")
+ for nm, val in headers:
+ w(recode(nm) + b": " + recode(val) + b"\n")
+ w(b"\n")
+
+ def flush(self):