Robert Brewer committed 397e2b6

Minor speedup to response body

  • Participants
  • Parent commits a7be6b0

Comments (0)

Files changed (3)

File cherrypy/

     BytesIO = StringIO
-    # Python 3.0+
-    from io import IOBase as FileType
-except ImportError:
-    from types import FileType
     set = set
 except NameError:
     from sets import Set as set
     # In Python 3, pickle is the sped-up C version.
     import pickle
-import binascii
+    import binascii
     def random20():
         return binascii.hexlify(os.urandom(20)).decode('ascii')
 except (AttributeError, NotImplementedError):

File cherrypy/

 import warnings
 import cherrypy
-from cherrypy._cpcompat import basestring, copykeys, FileType, ntob, unicodestr
+from cherrypy._cpcompat import basestring, copykeys, ntob, unicodestr
 from cherrypy._cpcompat import SimpleCookie, CookieError
 from cherrypy import _cpreqbody, _cpconfig
 from cherrypy._cperror import format_exc, bare_error
                 # [''] doesn't evaluate to False, so replace it with [].
                 value = []
-        elif isinstance(value, FileType):
+        # Don't use isinstance here; io.IOBase which has an ABC takes
+        # 1000 times as long as, say, isinstance(value, str)
+        elif hasattr(value, 'read'):
             value = file_generator(value)
         elif value is None:
             value = []

File cherrypy/lib/

 import time
 import cherrypy
-from cherrypy._cpcompat import basestring, BytesIO, FileType, ntob, set, unicodestr
+from cherrypy._cpcompat import basestring, BytesIO, ntob, set, unicodestr
 from cherrypy.lib import file_generator
 from cherrypy.lib import set_vary_header
                 # [''] doesn't evaluate to False, so replace it with [].
                 self.body = []
-        elif isinstance(self.body, FileType):
+        elif hasattr(self.body, 'read'):
             self.body = file_generator(self.body)
         elif self.body is None:
             self.body = []