Module slack_bolt.adapter.tornado.handler

Functions

def set_response(self, bolt_resp) ‑> None
Expand source code
def set_response(self, bolt_resp) -> None:
    self.set_status(bolt_resp.status)
    self.write(bolt_resp.body)
    for name, value in bolt_resp.first_headers_without_set_cookie().items():
        self.set_header(name, value)
    for cookie in bolt_resp.cookies():
        for name, c in cookie.items():
            expire_value = c.get("expires")
            expire = datetime.strptime(expire_value, "%a, %d %b %Y %H:%M:%S %Z") if expire_value else None
            self.set_cookie(
                name=name,
                value=c.value,
                max_age=c.get("max-age"),
                expires=expire,
                path=c.get("path"),
                domain=c.get("domain"),
                secure=True,
                httponly=True,
            )
def to_bolt_request(req: tornado.httputil.HTTPServerRequest) ‑> BoltRequest
Expand source code
def to_bolt_request(req: HTTPServerRequest) -> BoltRequest:
    return BoltRequest(
        body=req.body.decode("utf-8") if req.body else "",
        query=req.query,
        headers=req.headers,  # type: ignore[arg-type]
    )

Classes

class SlackEventsHandler (application: Application,
request: tornado.httputil.HTTPServerRequest,
**kwargs: Any)
Expand source code
class SlackEventsHandler(RequestHandler):
    def initialize(self, app: App):
        self.app = app

    def post(self):
        bolt_resp: BoltResponse = self.app.dispatch(to_bolt_request(self.request))
        set_response(self, bolt_resp)
        return

Base class for HTTP request handlers.

Subclasses must define at least one of the methods defined in the "Entry points" section below.

Applications should not construct RequestHandler objects directly and subclasses should not override __init__ (override ~RequestHandler.initialize instead).

Ancestors

  • tornado.web.RequestHandler

Methods

def initialize(self,
app: App)
Expand source code
def initialize(self, app: App):
    self.app = app
def post(self)
Expand source code
def post(self):
    bolt_resp: BoltResponse = self.app.dispatch(to_bolt_request(self.request))
    set_response(self, bolt_resp)
    return
class SlackOAuthHandler (application: Application,
request: tornado.httputil.HTTPServerRequest,
**kwargs: Any)
Expand source code
class SlackOAuthHandler(RequestHandler):
    def initialize(self, app: App):
        self.app = app

    def get(self):
        if self.app.oauth_flow is not None:
            oauth_flow: OAuthFlow = self.app.oauth_flow
            if self.request.path == oauth_flow.install_path:
                bolt_resp = oauth_flow.handle_installation(to_bolt_request(self.request))
                set_response(self, bolt_resp)
                return
            elif self.request.path == oauth_flow.redirect_uri_path:
                bolt_resp = oauth_flow.handle_callback(to_bolt_request(self.request))
                set_response(self, bolt_resp)
                return
        self.set_status(404)

Base class for HTTP request handlers.

Subclasses must define at least one of the methods defined in the "Entry points" section below.

Applications should not construct RequestHandler objects directly and subclasses should not override __init__ (override ~RequestHandler.initialize instead).

Ancestors

  • tornado.web.RequestHandler

Methods

def get(self)
Expand source code
def get(self):
    if self.app.oauth_flow is not None:
        oauth_flow: OAuthFlow = self.app.oauth_flow
        if self.request.path == oauth_flow.install_path:
            bolt_resp = oauth_flow.handle_installation(to_bolt_request(self.request))
            set_response(self, bolt_resp)
            return
        elif self.request.path == oauth_flow.redirect_uri_path:
            bolt_resp = oauth_flow.handle_callback(to_bolt_request(self.request))
            set_response(self, bolt_resp)
            return
    self.set_status(404)
def initialize(self,
app: App)
Expand source code
def initialize(self, app: App):
    self.app = app