This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author Manjusaka
Recipients Manjusaka
Date 2020-05-20.15:54:00
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1589990041.35.0.995968442309.issue40700@roundup.psfhosted.org>
In-reply-to
Content
Hello everyone

I think we can make WSGIRequestHandler in wsgiref easier to be customized by the user

Here's the detail

the WSGIRequestHandler in wsgiref.simple_server has some code like this

class WSGIRequestHandler(BaseHTTPRequestHandler):
    def handle(self):
        """Handle a single HTTP request"""

        self.raw_requestline = self.rfile.readline(65537)
        if len(self.raw_requestline) > 65536:
            self.requestline = ''
            self.request_version = ''
            self.command = ''
            self.send_error(414)
            return

        if not self.parse_request(): # An error code has been sent, just exit
            return

        handler = ServerHandler(
            self.rfile, self.wfile, self.get_stderr(), self.get_environ(),
            multithread=False,
        )
        handler.request_handler = self      # backpointer for logging
        handler.run(self.server.get_app())

If people want just to replace the ServerHandler, they need to override all the handle method, I don't think this is a good way to use.

I prefer do something like this

class WSGIRequestHandler(BaseHTTPRequestHandler):

    server_version = "WSGIServer/" + __version__
    server_handler = ServerHandler

    def handle(self):
        """Handle a single HTTP request"""

        self.raw_requestline = self.rfile.readline(65537)
        if len(self.raw_requestline) > 65536:
            self.requestline = ''
            self.request_version = ''
            self.command = ''
            self.send_error(414)
            return

        if not self.parse_request(): # An error code has been sent, just exit
            return

        handler = self.server_handler(
            self.rfile, self.wfile, self.get_stderr(), self.get_environ(),
            multithread=False,
        )
        handler.request_handler = self      # backpointer for logging
        handler.run(self.server.get_app())

Now if people just need simple code to replace the ServerHandler, like this

class CustomWSGIRequestHandler(WSGIRequestHandler):
    server_handler = CustomeServerHandler

what do you think, I'm glad to make a PR for this
History
Date User Action Args
2020-05-20 15:54:01Manjusakasetrecipients: + Manjusaka
2020-05-20 15:54:01Manjusakasetmessageid: <1589990041.35.0.995968442309.issue40700@roundup.psfhosted.org>
2020-05-20 15:54:01Manjusakalinkissue40700 messages
2020-05-20 15:54:00Manjusakacreate