-
Notifications
You must be signed in to change notification settings - Fork 855
Expand file tree
/
Copy pathrequest.py
More file actions
57 lines (49 loc) · 1.94 KB
/
request.py
File metadata and controls
57 lines (49 loc) · 1.94 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
from typing import Union, Optional
from slack_sdk.models import JsonObject
class SocketModeRequest:
type: str
envelope_id: str
payload: dict
accepts_response_payload: bool
retry_attempt: Optional[int] # events_api
retry_reason: Optional[str] # events_api
def __init__(
self,
type: str,
envelope_id: str,
payload: Union[dict, JsonObject, str],
accepts_response_payload: Optional[bool] = None,
retry_attempt: Optional[int] = None,
retry_reason: Optional[str] = None,
):
self.type = type
self.envelope_id = envelope_id
if isinstance(payload, JsonObject):
self.payload = payload.to_dict()
elif isinstance(payload, dict):
self.payload = payload
elif isinstance(payload, str):
self.payload = {"text": payload}
else:
unexpected_payload_type = type(payload)
raise ValueError(f"Unsupported payload data type ({unexpected_payload_type})")
self.accepts_response_payload = accepts_response_payload or False
self.retry_attempt = retry_attempt
self.retry_reason = retry_reason
@classmethod
def from_dict(cls, message: dict) -> Optional["SocketModeRequest"]:
if all(k in message for k in ("type", "envelope_id", "payload")):
return SocketModeRequest(
type=message["type"],
envelope_id=message["envelope_id"],
payload=message["payload"],
accepts_response_payload=message.get("accepts_response_payload") or False,
retry_attempt=message.get("retry_attempt"),
retry_reason=message.get("retry_reason"),
)
return None
def to_dict(self) -> dict:
d = {"type": self.type, "envelope_id": self.envelope_id}
if self.payload is not None:
d["payload"] = self.payload # type: ignore[assignment]
return d