MCPcopy Index your code
hub / github.com/slackapi/python-slack-sdk / _handle

Method _handle

tests/slack_sdk/web/mock_web_api_handler.py:75–254  ·  view source on GitHub ↗
(self)

Source from the content-addressed store, hash-verified

73 }
74
75 def _handle(self):
76 try:
77 # put_nowait is common between Queue & asyncio.Queue, it does not need to be awaited
78 self.server.queue.put_nowait(self.path)
79
80 if self.path in {"/oauth.access", "/oauth.v2.access"}:
81 self.send_response(200)
82 self.set_common_headers()
83 if self.headers["authorization"] == "Basic MTExLjIyMjpzZWNyZXQ=":
84 self.wfile.write("""{"ok":true}""".encode("utf-8"))
85 return
86 elif self.headers["authorization"] == "Basic MTExLjIyMjp0b2tlbl9yb3RhdGlvbl9zZWNyZXQ=":
87 self.wfile.write(json.dumps(self.token_refresh).encode("utf-8"))
88 return
89 else:
90 self.wfile.write("""{"ok":false, "error":"invalid"}""".encode("utf-8"))
91 return
92
93 header = self.headers["Authorization"]
94 if header is not None and ("xoxb-" in header or "xoxp-" in header):
95 pattern = ""
96 xoxb = str(header).split("xoxb-", 1)
97 if len(xoxb) > 1:
98 pattern = xoxb[1]
99 else:
100 xoxp = str(header).split("xoxp-", 1)
101 pattern = xoxp[1]
102
103 if "remote_disconnected" in pattern:
104 # http.client.RemoteDisconnected
105 self.finish()
106 return
107
108 if pattern == "ratelimited" or (pattern == "ratelimited_only_once" and self.state["ratelimited_count"] == 0):
109 self.state["ratelimited_count"] += 1
110 self.send_response(429)
111 self.send_header("retry-after", 1)
112 self.send_header("content-type", "application/json;charset=utf-8")
113 self.send_header("connection", "close")
114 self.end_headers()
115 self.wfile.write("""{"ok":false,"error":"ratelimited"}""".encode("utf-8"))
116 self.wfile.close()
117 return
118
119 if pattern == "fatal_error" or (pattern == "fatal_error_only_once" and self.state["fatal_error_count"] == 0):
120 self.state["fatal_error_count"] += 1
121 self.send_response(200)
122 self.set_common_headers()
123 self.wfile.write("""{"ok":false,"error":"fatal_error"}""".encode("utf-8"))
124 self.wfile.close()
125 return
126
127 if self.is_valid_token() and self.is_valid_user_agent():
128 parsed_path = urlparse(self.path)
129
130 len_header = self.headers.get("Content-Length") or 0
131 content_len = int(len_header)
132 post_body = self.rfile.read(content_len)

Callers 2

do_GETMethod · 0.95
do_POSTMethod · 0.95

Calls 6

set_common_headersMethod · 0.95
is_valid_tokenMethod · 0.95
is_valid_user_agentMethod · 0.95
openFunction · 0.85
closeMethod · 0.45
getMethod · 0.45

Tested by

no test coverage detected