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:
@@ -42,47 +42,8 @@ from urllib import quote, unquote
|
|||||||
|
|
||||||
from swift.common.swob import Request
|
from swift.common.swob import Request
|
||||||
from swift.common.utils import (get_logger, get_remote_client,
|
from swift.common.utils import (get_logger, get_remote_client,
|
||||||
get_valid_utf8_str, config_true_value)
|
get_valid_utf8_str, config_true_value,
|
||||||
|
InputProxy)
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
|
|
||||||
class ProxyLoggingMiddleware(object):
|
class ProxyLoggingMiddleware(object):
|
||||||
|
|||||||
@@ -1524,3 +1524,43 @@ def reiterate(iterable):
|
|||||||
return itertools.chain([chunk], iterable)
|
return itertools.chain([chunk], iterable)
|
||||||
except StopIteration:
|
except StopIteration:
|
||||||
return []
|
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
|
||||||
|
|||||||
Reference in New Issue
Block a user