-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathschema.py
More file actions
150 lines (135 loc) · 3.62 KB
/
schema.py
File metadata and controls
150 lines (135 loc) · 3.62 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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
from datetime import datetime
from typing import Annotated, Literal
from pydantic import (
BaseModel,
ConfigDict,
Field,
)
class BaseSchema(BaseModel):
model_config = ConfigDict(
from_attributes=True,
extra="forbid",
populate_by_name=True,
)
class AuthContext(BaseSchema):
account_id: str
account_type: str
installation_id: str
user_id: str | None = None
token_id: str | None = None
class Object(BaseSchema):
id: Annotated[
str,
Field(
description="Unique object ID, maps to the platform object ID property.",
)
]
name: Annotated[
str,
Field(
description="Object name, maps to the platform object name property.",
)
]
object_type: Annotated[
str,
Field(
alias="objectType",
description=(
"The object's type, maps to the “routing.entity” "
"property of the EventMessage."
),
)
]
class Task(BaseSchema):
id: Annotated[
str,
Field(
description=(
"Unique platform task ID, maps to the ID of "
"the task created by the Task Orchestrator."
),
)
]
class Details(BaseSchema):
event_type: Annotated[
str,
Field(
alias="eventType",
description=(
"The type of the event. Maps to the “routing.event” property of the EventMessage."
),
)
]
enqueue_time: Annotated[
datetime,
Field(
alias="enqueueTime",
description=(
"The date/time the platform became aware of this event. "
"Maps to the “timestamp” property of EventMessage."
),
)
]
delivery_time: Annotated[
datetime,
Field(
alias="deliveryTime",
description=(
"The date/time the platform is delivering this event to the extension. "
"Defaults to current date/time on the server."
)
)
]
class Event(BaseSchema):
id: Annotated[
str,
Field(
description="Unique message ID, can be used to correlate with platform logs.",
)
]
object: Annotated[
Object,
Field(
description=(
"Information about the event's related object. Maps to the first object "
"of category “CurrentEntity” in the “objects” property of the EventMessage."
),
)
]
details: Annotated[
Details,
Field(
description=(
"Information about this event. Maps to the “routing” property of the EventMessage."
),
)
]
task: Annotated[
Task | None,
Field(
description=(
"Information about the event's related task. "
"Maps to the task created by Task Orchestrator."
),
)
] = None
class EventResponse(BaseSchema):
response: Literal["OK", "Delay", "Cancel"]
delay: Annotated[
int | None,
Field(
description=(
"The minimum delay the Extensions Service "
"must wait before sending the event again."
)
)
] = None
@classmethod
def ok(cls):
return cls(response="OK")
@classmethod
def cancel(cls):
return cls(response="Cancel")
@classmethod
def reschedule(cls, seconds: int | None = None):
return cls(response="Delay", delay=seconds)