Robert Brewer avatar Robert Brewer committed 397e2b6

Minor speedup to response body

Comments (0)

Files changed (3)

cherrypy/_cpcompat.py

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

cherrypy/_cprequest.py

 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
             else:
                 # [''] 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 = []

cherrypy/lib/encoding.py

 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
 
             else:
                 # [''] 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 = []
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.