X-Git-Url: http://www.dolda2000.com/gitweb/?p=ashd.git;a=blobdiff_plain;f=python%2Fashd%2Futil.py;h=08945f2618fb12722a894b889d43723a8624403c;hp=0ff38785094c130fec56ab05d682451c350d8539;hb=55fa3f634594cedabf75182bd6404463c091ff63;hpb=5fc5488205264fd1e202bd45b83f701971526847 diff --git a/python/ashd/util.py b/python/ashd/util.py index 0ff3878..08945f2 100644 --- a/python/ashd/util.py +++ b/python/ashd/util.py @@ -4,8 +4,8 @@ This module implements a rather convenient interface for writing ashd handlers, wrapping the low-level ashd.proto module. """ -import os, socket -import proto +import os, socket, collections +from . import proto __all__ = ["stdfork", "pchild", "respond", "serveloop"] @@ -27,7 +27,7 @@ def stdfork(argv, chinit = None): if pid == 0: try: os.dup2(csk.fileno(), 0) - for fd in xrange(3, 1024): + for fd in range(3, 1024): try: os.close(fd) except: @@ -131,17 +131,20 @@ def respond(req, body, status = ("200 OK"), ctype = "text/html"): For example: respond(req, "Not found", status = "404 Not Found", ctype = "text/plain") """ - if type(body) == unicode: - body = body.decode("utf-8") - if ctype[:5] == "text/" and ctype.find(';') < 0: - ctype = ctype + "; charset=utf-8" + if isinstance(body, collections.ByteString): + body = bytes(body) else: body = str(body) + body = body.encode("utf-8") + if ctype[:5] == "text/" and ctype.find(';') < 0: + ctype = ctype + "; charset=utf-8" try: - req.sk.write("HTTP/1.1 %s\n" % status) - req.sk.write("Content-Type: %s\n" % ctype) - req.sk.write("Content-Length: %i\n" % len(body)) - req.sk.write("\n") + head = "" + head += "HTTP/1.1 %s\n" % status + head += "Content-Type: %s\n" % ctype + head += "Content-Length: %i\n" % len(body) + head += "\n" + req.sk.write(head.encode("ascii")) req.sk.write(body) finally: req.close()