Move InputProxy to utils
This class is being used at least by Ceilometer in its Swift middleware, and since it's a general one anyway, it looks good to move it to common.utils. This is a follow-up to Chmouel suggestion in https://review.openstack.org/#/c/18231 Change-Id: I8d0ed8600c4152b91be9a88a3b396c3967d0add2 Signed-off-by: Julien Danjou <julien@danjou.info>
This commit is contained in:
parent
e81ca8daf3
commit
6df28545ff
@ -42,47 +42,8 @@ from urllib import quote, unquote
|
||||
|
||||
from swift.common.swob import Request
|
||||
from swift.common.utils import (get_logger, get_remote_client,
|
||||
get_valid_utf8_str, config_true_value)
|
||||
|
||||
|
||||
class InputProxy(object):
|
||||
"""
|
||||
File-like object that counts bytes read.
|
||||
To be swapped in for wsgi.input for accounting purposes.
|
||||
"""
|
||||
def __init__(self, wsgi_input):
|
||||
"""
|
||||
:param wsgi_input: file-like object to wrap the functionality of
|
||||
"""
|
||||
self.wsgi_input = wsgi_input
|
||||
self.bytes_received = 0
|
||||
self.client_disconnect = False
|
||||
|
||||
def read(self, *args, **kwargs):
|
||||
"""
|
||||
Pass read request to the underlying file-like object and
|
||||
add bytes read to total.
|
||||
"""
|
||||
try:
|
||||
chunk = self.wsgi_input.read(*args, **kwargs)
|
||||
except Exception:
|
||||
self.client_disconnect = True
|
||||
raise
|
||||
self.bytes_received += len(chunk)
|
||||
return chunk
|
||||
|
||||
def readline(self, *args, **kwargs):
|
||||
"""
|
||||
Pass readline request to the underlying file-like object and
|
||||
add bytes read to total.
|
||||
"""
|
||||
try:
|
||||
line = self.wsgi_input.readline(*args, **kwargs)
|
||||
except Exception:
|
||||
self.client_disconnect = True
|
||||
raise
|
||||
self.bytes_received += len(line)
|
||||
return line
|
||||
get_valid_utf8_str, config_true_value,
|
||||
InputProxy)
|
||||
|
||||
|
||||
class ProxyLoggingMiddleware(object):
|
||||
|
@ -1524,3 +1524,43 @@ def reiterate(iterable):
|
||||
return itertools.chain([chunk], iterable)
|
||||
except StopIteration:
|
||||
return []
|
||||
|
||||
|
||||
class InputProxy(object):
|
||||
"""
|
||||
File-like object that counts bytes read.
|
||||
To be swapped in for wsgi.input for accounting purposes.
|
||||
"""
|
||||
def __init__(self, wsgi_input):
|
||||
"""
|
||||
:param wsgi_input: file-like object to wrap the functionality of
|
||||
"""
|
||||
self.wsgi_input = wsgi_input
|
||||
self.bytes_received = 0
|
||||
self.client_disconnect = False
|
||||
|
||||
def read(self, *args, **kwargs):
|
||||
"""
|
||||
Pass read request to the underlying file-like object and
|
||||
add bytes read to total.
|
||||
"""
|
||||
try:
|
||||
chunk = self.wsgi_input.read(*args, **kwargs)
|
||||
except Exception:
|
||||
self.client_disconnect = True
|
||||
raise
|
||||
self.bytes_received += len(chunk)
|
||||
return chunk
|
||||
|
||||
def readline(self, *args, **kwargs):
|
||||
"""
|
||||
Pass readline request to the underlying file-like object and
|
||||
add bytes read to total.
|
||||
"""
|
||||
try:
|
||||
line = self.wsgi_input.readline(*args, **kwargs)
|
||||
except Exception:
|
||||
self.client_disconnect = True
|
||||
raise
|
||||
self.bytes_received += len(line)
|
||||
return line
|
||||
|
Loading…
x
Reference in New Issue
Block a user