Change base-classes for NoMoreData, ChunkMissingTerminator and InvalidChunkSize.

If remote client send invalid data in request with "Transfer-Encoding:chunked" gunicorn can raised some exceptions (see http.body.ChunkedReader) as NoMoreData, ChunkMissingTerminator, InvalidChunkSize.

User application shouldn't know about specific gunicorn exceptions and must catch standard IOError if want.

Example:

    def app(env, start_response):

        body = env["wsgi.input"]

        chunk_size = 1024

        while True:
            try:
                chunk = body.read(chunk_size)
            except IOError:
                .. correct action for error

            if not chunk:
                break

            .. do somethink with chunk
This commit is contained in:
Konstantin Kapustin 2012-09-07 17:06:06 +04:00 committed by benoitc
parent 4be3282440
commit 75933bae81

View File

@ -6,7 +6,7 @@
class ParseException(Exception):
pass
class NoMoreData(ParseException):
class NoMoreData(IOError):
def __init__(self, buf=None):
self.buf = buf
def __str__(self):
@ -49,14 +49,14 @@ class InvalidHeaderName(ParseException):
def __str__(self):
return "Invalid HTTP header name: %s" % self.hdr
class InvalidChunkSize(ParseException):
class InvalidChunkSize(IOError):
def __init__(self, data):
self.data = data
def __str__(self):
return "Invalid chunk size: %r" % self.data
class ChunkMissingTerminator(ParseException):
class ChunkMissingTerminator(IOError):
def __init__(self, term):
self.term = term