Source

CherryPy / cherrypy / lib / filter / encodingfilter.py

from basefilter import BaseFilter

class EncodingFilter(BaseFilter):
    """Filter that automatically encodes the response."""
    
    def beforeFinalize(self):
        # We have to dynamically import cherrypy because Python can't handle
        #   circular module imports :-(
        global cherrypy
        import cherrypy
        
        conf = cherrypy.config.get
        if not conf('encodingFilter.on', False):
            return
        
        contentType = cherrypy.response.headerMap.get("Content-Type")
        if contentType:
            ctlist = contentType.split(';')[0]
            if (ctlist in conf('encodingFilter.mimeTypeList', ['text/html'])):
                enc = conf('encodingFilter.encoding', 'utf-8')
                
                # Add "charset=..." to response Content-Type header
                if contentType and 'charset' not in contentType:
                    cherrypy.response.headerMap["Content-Type"] += ";charset=%s" % enc
                
                # Return a generator that encodes the sequence
                def encode_body(body):
                    for line in body:
                        yield line.encode(enc)
                cherrypy.response.body = encode_body(cherrypy.response.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.