summaryrefslogtreecommitdiff
path: root/cherrypy/lib/encoding.py
diff options
context:
space:
mode:
Diffstat (limited to 'cherrypy/lib/encoding.py')
-rw-r--r--cherrypy/lib/encoding.py15
1 files changed, 10 insertions, 5 deletions
diff --git a/cherrypy/lib/encoding.py b/cherrypy/lib/encoding.py
index 6d54ac8c..fa8387b6 100644
--- a/cherrypy/lib/encoding.py
+++ b/cherrypy/lib/encoding.py
@@ -4,6 +4,7 @@ import time
import cherrypy
from cherrypy._cpcompat import basestring, BytesIO, ntob, set, unicodestr
from cherrypy.lib import file_generator
+from cherrypy.lib import is_closable_iterator
from cherrypy.lib import set_vary_header
@@ -32,23 +33,27 @@ def decode(encoding=None, default_encoding='utf-8'):
if not isinstance(default_encoding, list):
default_encoding = [default_encoding]
body.attempt_charsets = body.attempt_charsets + default_encoding
-
+
class UTF8StreamEncoder:
def __init__(self, iterator):
self._iterator = iterator
-
+
def __iter__(self):
return self
-
+
def next(self):
return self.__next__()
-
+
def __next__(self):
res = next(self._iterator)
if isinstance(res, unicodestr):
res = res.encode('utf-8')
return res
-
+
+ def close(self):
+ if is_closable_iterator(self._iterator)
+ self._iterator.close()
+
def __getattr__(self, attr):
if attr.startswith('__'):
raise AttributeError(self, attr)