-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathmodels.py
More file actions
65 lines (54 loc) · 1.68 KB
/
Copy pathmodels.py
File metadata and controls
65 lines (54 loc) · 1.68 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
58
59
60
61
62
63
64
65
from dataclasses import dataclass
@dataclass(repr=False)
class Envelope:
type: str
tenant_id: object
correlation_id: object
channel: int
mode: int
ttl_seconds: int | None
encrypted_delivery_context: str
@dataclass(repr=False)
class DeliveryContext:
# Keep raw JSON values until is_complete validates the required strings.
nonce: object
phone_number: object
message: object
locale: object = None
extension: object = None
risk_context: object = None
@classmethod
def from_payload(cls, payload: object) -> "DeliveryContext | None":
if not isinstance(payload, dict):
return None
return cls(
nonce=payload.get("nonce"),
phone_number=payload.get("phoneNumber"),
message=payload.get("message"),
locale=payload.get("locale"),
extension=payload.get("extension"),
risk_context=payload.get("riskContext"),
)
@property
def is_complete(self) -> bool:
return all(
isinstance(value, str) and value.strip()
for value in (self.nonce, self.phone_number, self.message)
)
@dataclass(repr=False)
class DispatchRequest:
destination: str
message: str | None
channel: str
message_id: str
correlation_id: str | None
locale: str | None
@dataclass(repr=False)
class ParsedResponse:
"""Adapter-normalized result for outcome mapping, not a public HTTP response."""
success: bool
provider_http_status: int
provider_message_id: str | None = None
provider_status_name: str | None = None
provider_status_code: str | None = None
provider_status_description: str | None = None