def pale_webapp2_request_handler_generator(pale_endpoint):
    """Generate a webapp2.RequestHandler class for the pale endpoint.

    webapp2 handles requests with subclasses of the RequestHandler class,
    instead of using functions like Flask, so we need to generate a new class
    for each pale endpoint.
    """
    def pale_handler(self, *args, **kwargs):
        if self.request.method == "OPTIONS":
            origin = self.request.headers.get("Origin", None)
            self.response.headers['Access-Control-Allow-Origin'] = origin
            self.response.headers['Access-Control-Allow-Headers'] = 'Origin, X-Requested-With, Content-Type, Accept'
            self.response.headers['Access-Control-Allow-Methods'] = 'POST, GET, PUT, DELETE'
            self.response.headers['Access-Control-Allow-Credentials'] = 'true'
            return self.response

        try:
            return pale_endpoint._execute(self.request)
        finally:
            pale_endpoint._finally()

    cls = type(pale_endpoint._route_name,
            (webapp2.RequestHandler,),
            dict(pale_handler=pale_handler))
    return cls
Generate a webapp2.RequestHandler class for the pale endpoint.

    webapp2 handles requests with subclasses of the RequestHandler class,
    instead of using functions like Flask, so we need to generate a new class
    for each pale endpoint.