devrev-Python-SDK 1.0.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- devrev/__init__.py +47 -0
- devrev/client.py +343 -0
- devrev/config.py +180 -0
- devrev/exceptions.py +205 -0
- devrev/models/__init__.py +499 -0
- devrev/models/accounts.py +187 -0
- devrev/models/articles.py +109 -0
- devrev/models/base.py +147 -0
- devrev/models/code_changes.py +103 -0
- devrev/models/conversations.py +115 -0
- devrev/models/dev_users.py +258 -0
- devrev/models/groups.py +140 -0
- devrev/models/links.py +107 -0
- devrev/models/parts.py +110 -0
- devrev/models/rev_users.py +177 -0
- devrev/models/slas.py +112 -0
- devrev/models/tags.py +90 -0
- devrev/models/timeline_entries.py +100 -0
- devrev/models/webhooks.py +109 -0
- devrev/models/works.py +280 -0
- devrev/py.typed +1 -0
- devrev/services/__init__.py +74 -0
- devrev/services/accounts.py +325 -0
- devrev/services/articles.py +80 -0
- devrev/services/base.py +234 -0
- devrev/services/code_changes.py +80 -0
- devrev/services/conversations.py +98 -0
- devrev/services/dev_users.py +401 -0
- devrev/services/groups.py +103 -0
- devrev/services/links.py +68 -0
- devrev/services/parts.py +100 -0
- devrev/services/rev_users.py +235 -0
- devrev/services/slas.py +82 -0
- devrev/services/tags.py +80 -0
- devrev/services/timeline_entries.py +80 -0
- devrev/services/webhooks.py +80 -0
- devrev/services/works.py +363 -0
- devrev/utils/__init__.py +14 -0
- devrev/utils/deprecation.py +49 -0
- devrev/utils/http.py +521 -0
- devrev/utils/logging.py +139 -0
- devrev/utils/pagination.py +155 -0
- devrev_python_sdk-1.0.0.dist-info/METADATA +774 -0
- devrev_python_sdk-1.0.0.dist-info/RECORD +45 -0
- devrev_python_sdk-1.0.0.dist-info/WHEEL +4 -0
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
"""Rev Users service for DevRev SDK.
|
|
2
|
+
|
|
3
|
+
This module provides the RevUsersService for managing DevRev customer users.
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
from __future__ import annotations
|
|
7
|
+
|
|
8
|
+
from collections.abc import Sequence
|
|
9
|
+
from typing import TYPE_CHECKING, Any
|
|
10
|
+
|
|
11
|
+
from devrev.models.rev_users import (
|
|
12
|
+
RevUser,
|
|
13
|
+
RevUsersCreateRequest,
|
|
14
|
+
RevUsersCreateResponse,
|
|
15
|
+
RevUsersDeleteRequest,
|
|
16
|
+
RevUsersDeleteResponse,
|
|
17
|
+
RevUsersGetRequest,
|
|
18
|
+
RevUsersGetResponse,
|
|
19
|
+
RevUsersListRequest,
|
|
20
|
+
RevUsersListResponse,
|
|
21
|
+
RevUsersMergeRequest,
|
|
22
|
+
RevUsersMergeResponse,
|
|
23
|
+
RevUsersUpdateRequest,
|
|
24
|
+
RevUsersUpdateResponse,
|
|
25
|
+
)
|
|
26
|
+
from devrev.services.base import AsyncBaseService, BaseService
|
|
27
|
+
|
|
28
|
+
if TYPE_CHECKING:
|
|
29
|
+
from devrev.utils.http import AsyncHTTPClient, HTTPClient
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
class RevUsersService(BaseService):
|
|
33
|
+
"""Synchronous service for managing DevRev customer users."""
|
|
34
|
+
|
|
35
|
+
def __init__(self, http_client: HTTPClient) -> None:
|
|
36
|
+
"""Initialize the RevUsersService."""
|
|
37
|
+
super().__init__(http_client)
|
|
38
|
+
|
|
39
|
+
def create(
|
|
40
|
+
self,
|
|
41
|
+
rev_org: str,
|
|
42
|
+
*,
|
|
43
|
+
display_name: str | None = None,
|
|
44
|
+
email: str | None = None,
|
|
45
|
+
phone_numbers: list[str] | None = None,
|
|
46
|
+
external_ref: str | None = None,
|
|
47
|
+
) -> RevUser:
|
|
48
|
+
"""Create a new Rev user.
|
|
49
|
+
|
|
50
|
+
Args:
|
|
51
|
+
rev_org: Rev organization ID
|
|
52
|
+
display_name: Display name
|
|
53
|
+
email: Email address
|
|
54
|
+
phone_numbers: Phone numbers
|
|
55
|
+
external_ref: External reference identifier
|
|
56
|
+
|
|
57
|
+
Returns:
|
|
58
|
+
The created RevUser
|
|
59
|
+
"""
|
|
60
|
+
request = RevUsersCreateRequest(
|
|
61
|
+
rev_org=rev_org,
|
|
62
|
+
display_name=display_name,
|
|
63
|
+
email=email,
|
|
64
|
+
phone_numbers=phone_numbers,
|
|
65
|
+
external_ref=external_ref,
|
|
66
|
+
)
|
|
67
|
+
response = self._post("/rev-users.create", request, RevUsersCreateResponse)
|
|
68
|
+
return response.rev_user
|
|
69
|
+
|
|
70
|
+
def get(self, id: str) -> RevUser:
|
|
71
|
+
"""Get a Rev user by ID.
|
|
72
|
+
|
|
73
|
+
Args:
|
|
74
|
+
id: Rev user ID
|
|
75
|
+
|
|
76
|
+
Returns:
|
|
77
|
+
The RevUser
|
|
78
|
+
"""
|
|
79
|
+
request = RevUsersGetRequest(id=id)
|
|
80
|
+
response = self._post("/rev-users.get", request, RevUsersGetResponse)
|
|
81
|
+
return response.rev_user
|
|
82
|
+
|
|
83
|
+
def list(
|
|
84
|
+
self,
|
|
85
|
+
*,
|
|
86
|
+
cursor: str | None = None,
|
|
87
|
+
email: list[str] | None = None,
|
|
88
|
+
limit: int | None = None,
|
|
89
|
+
rev_org: list[str] | None = None,
|
|
90
|
+
external_ref: list[str] | None = None,
|
|
91
|
+
) -> RevUsersListResponse:
|
|
92
|
+
"""List Rev users.
|
|
93
|
+
|
|
94
|
+
Args:
|
|
95
|
+
cursor: Pagination cursor
|
|
96
|
+
email: Filter by emails
|
|
97
|
+
limit: Maximum number of results
|
|
98
|
+
rev_org: Filter by Rev org IDs
|
|
99
|
+
external_ref: Filter by external refs
|
|
100
|
+
|
|
101
|
+
Returns:
|
|
102
|
+
Paginated list of Rev users
|
|
103
|
+
"""
|
|
104
|
+
request = RevUsersListRequest(
|
|
105
|
+
cursor=cursor,
|
|
106
|
+
email=email,
|
|
107
|
+
limit=limit,
|
|
108
|
+
rev_org=rev_org,
|
|
109
|
+
external_ref=external_ref,
|
|
110
|
+
)
|
|
111
|
+
return self._post("/rev-users.list", request, RevUsersListResponse)
|
|
112
|
+
|
|
113
|
+
def update(
|
|
114
|
+
self,
|
|
115
|
+
id: str,
|
|
116
|
+
*,
|
|
117
|
+
display_name: str | None = None,
|
|
118
|
+
email: str | None = None,
|
|
119
|
+
phone_numbers: Sequence[str] | None = None,
|
|
120
|
+
custom_fields: dict[str, Any] | None = None,
|
|
121
|
+
) -> RevUser:
|
|
122
|
+
"""Update a Rev user.
|
|
123
|
+
|
|
124
|
+
Args:
|
|
125
|
+
id: Rev user ID
|
|
126
|
+
display_name: New display name
|
|
127
|
+
email: New email address
|
|
128
|
+
phone_numbers: New phone numbers
|
|
129
|
+
custom_fields: Custom fields to update
|
|
130
|
+
|
|
131
|
+
Returns:
|
|
132
|
+
The updated RevUser
|
|
133
|
+
"""
|
|
134
|
+
request = RevUsersUpdateRequest(
|
|
135
|
+
id=id,
|
|
136
|
+
display_name=display_name,
|
|
137
|
+
email=email,
|
|
138
|
+
phone_numbers=phone_numbers,
|
|
139
|
+
custom_fields=custom_fields,
|
|
140
|
+
)
|
|
141
|
+
response = self._post("/rev-users.update", request, RevUsersUpdateResponse)
|
|
142
|
+
return response.rev_user
|
|
143
|
+
|
|
144
|
+
def delete(self, id: str) -> None:
|
|
145
|
+
"""Delete a Rev user.
|
|
146
|
+
|
|
147
|
+
Args:
|
|
148
|
+
id: Rev user ID
|
|
149
|
+
"""
|
|
150
|
+
request = RevUsersDeleteRequest(id=id)
|
|
151
|
+
self._post("/rev-users.delete", request, RevUsersDeleteResponse)
|
|
152
|
+
|
|
153
|
+
def merge(self, primary_user: str, secondary_user: str) -> None:
|
|
154
|
+
"""Merge two Rev users.
|
|
155
|
+
|
|
156
|
+
Args:
|
|
157
|
+
primary_user: Primary user ID (will be retained)
|
|
158
|
+
secondary_user: Secondary user ID (will be merged)
|
|
159
|
+
"""
|
|
160
|
+
request = RevUsersMergeRequest(
|
|
161
|
+
primary_user=primary_user,
|
|
162
|
+
secondary_user=secondary_user,
|
|
163
|
+
)
|
|
164
|
+
self._post("/rev-users.merge", request, RevUsersMergeResponse)
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
class AsyncRevUsersService(AsyncBaseService):
|
|
168
|
+
"""Asynchronous service for managing DevRev customer users."""
|
|
169
|
+
|
|
170
|
+
def __init__(self, http_client: AsyncHTTPClient) -> None:
|
|
171
|
+
"""Initialize the AsyncRevUsersService."""
|
|
172
|
+
super().__init__(http_client)
|
|
173
|
+
|
|
174
|
+
async def create(
|
|
175
|
+
self,
|
|
176
|
+
rev_org: str,
|
|
177
|
+
*,
|
|
178
|
+
display_name: str | None = None,
|
|
179
|
+
email: str | None = None,
|
|
180
|
+
phone_numbers: list[str] | None = None,
|
|
181
|
+
external_ref: str | None = None,
|
|
182
|
+
) -> RevUser:
|
|
183
|
+
"""Create a new Rev user."""
|
|
184
|
+
request = RevUsersCreateRequest(
|
|
185
|
+
rev_org=rev_org,
|
|
186
|
+
display_name=display_name,
|
|
187
|
+
email=email,
|
|
188
|
+
phone_numbers=phone_numbers,
|
|
189
|
+
external_ref=external_ref,
|
|
190
|
+
)
|
|
191
|
+
response = await self._post("/rev-users.create", request, RevUsersCreateResponse)
|
|
192
|
+
return response.rev_user
|
|
193
|
+
|
|
194
|
+
async def get(self, id: str) -> RevUser:
|
|
195
|
+
"""Get a Rev user by ID."""
|
|
196
|
+
request = RevUsersGetRequest(id=id)
|
|
197
|
+
response = await self._post("/rev-users.get", request, RevUsersGetResponse)
|
|
198
|
+
return response.rev_user
|
|
199
|
+
|
|
200
|
+
async def list(
|
|
201
|
+
self,
|
|
202
|
+
*,
|
|
203
|
+
cursor: str | None = None,
|
|
204
|
+
email: list[str] | None = None,
|
|
205
|
+
limit: int | None = None,
|
|
206
|
+
rev_org: list[str] | None = None,
|
|
207
|
+
) -> RevUsersListResponse:
|
|
208
|
+
"""List Rev users."""
|
|
209
|
+
request = RevUsersListRequest(cursor=cursor, email=email, limit=limit, rev_org=rev_org)
|
|
210
|
+
return await self._post("/rev-users.list", request, RevUsersListResponse)
|
|
211
|
+
|
|
212
|
+
async def update(
|
|
213
|
+
self,
|
|
214
|
+
id: str,
|
|
215
|
+
*,
|
|
216
|
+
display_name: str | None = None,
|
|
217
|
+
email: str | None = None,
|
|
218
|
+
phone_numbers: Sequence[str] | None = None,
|
|
219
|
+
) -> RevUser:
|
|
220
|
+
"""Update a Rev user."""
|
|
221
|
+
request = RevUsersUpdateRequest(
|
|
222
|
+
id=id, display_name=display_name, email=email, phone_numbers=phone_numbers
|
|
223
|
+
)
|
|
224
|
+
response = await self._post("/rev-users.update", request, RevUsersUpdateResponse)
|
|
225
|
+
return response.rev_user
|
|
226
|
+
|
|
227
|
+
async def delete(self, id: str) -> None:
|
|
228
|
+
"""Delete a Rev user."""
|
|
229
|
+
request = RevUsersDeleteRequest(id=id)
|
|
230
|
+
await self._post("/rev-users.delete", request, RevUsersDeleteResponse)
|
|
231
|
+
|
|
232
|
+
async def merge(self, primary_user: str, secondary_user: str) -> None:
|
|
233
|
+
"""Merge two Rev users."""
|
|
234
|
+
request = RevUsersMergeRequest(primary_user=primary_user, secondary_user=secondary_user)
|
|
235
|
+
await self._post("/rev-users.merge", request, RevUsersMergeResponse)
|
devrev/services/slas.py
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"""SLAs service for DevRev SDK."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from collections.abc import Sequence
|
|
6
|
+
|
|
7
|
+
from devrev.models.slas import (
|
|
8
|
+
Sla,
|
|
9
|
+
SlasCreateRequest,
|
|
10
|
+
SlasCreateResponse,
|
|
11
|
+
SlasGetRequest,
|
|
12
|
+
SlasGetResponse,
|
|
13
|
+
SlasListRequest,
|
|
14
|
+
SlasListResponse,
|
|
15
|
+
SlasTransitionRequest,
|
|
16
|
+
SlasTransitionResponse,
|
|
17
|
+
SlasUpdateRequest,
|
|
18
|
+
SlasUpdateResponse,
|
|
19
|
+
)
|
|
20
|
+
from devrev.services.base import AsyncBaseService, BaseService
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class SlasService(BaseService):
|
|
24
|
+
"""Service for managing DevRev SLAs."""
|
|
25
|
+
|
|
26
|
+
def create(self, request: SlasCreateRequest) -> Sla:
|
|
27
|
+
"""Create a new SLA."""
|
|
28
|
+
response = self._post("/slas.create", request, SlasCreateResponse)
|
|
29
|
+
return response.sla
|
|
30
|
+
|
|
31
|
+
def get(self, request: SlasGetRequest) -> Sla:
|
|
32
|
+
"""Get an SLA by ID."""
|
|
33
|
+
response = self._post("/slas.get", request, SlasGetResponse)
|
|
34
|
+
return response.sla
|
|
35
|
+
|
|
36
|
+
def list(self, request: SlasListRequest | None = None) -> Sequence[Sla]:
|
|
37
|
+
"""List SLAs."""
|
|
38
|
+
if request is None:
|
|
39
|
+
request = SlasListRequest()
|
|
40
|
+
response = self._post("/slas.list", request, SlasListResponse)
|
|
41
|
+
return response.slas
|
|
42
|
+
|
|
43
|
+
def update(self, request: SlasUpdateRequest) -> Sla:
|
|
44
|
+
"""Update an SLA."""
|
|
45
|
+
response = self._post("/slas.update", request, SlasUpdateResponse)
|
|
46
|
+
return response.sla
|
|
47
|
+
|
|
48
|
+
def transition(self, request: SlasTransitionRequest) -> Sla:
|
|
49
|
+
"""Transition an SLA status."""
|
|
50
|
+
response = self._post("/slas.transition", request, SlasTransitionResponse)
|
|
51
|
+
return response.sla
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
class AsyncSlasService(AsyncBaseService):
|
|
55
|
+
"""Async service for managing DevRev SLAs."""
|
|
56
|
+
|
|
57
|
+
async def create(self, request: SlasCreateRequest) -> Sla:
|
|
58
|
+
"""Create a new SLA."""
|
|
59
|
+
response = await self._post("/slas.create", request, SlasCreateResponse)
|
|
60
|
+
return response.sla
|
|
61
|
+
|
|
62
|
+
async def get(self, request: SlasGetRequest) -> Sla:
|
|
63
|
+
"""Get an SLA by ID."""
|
|
64
|
+
response = await self._post("/slas.get", request, SlasGetResponse)
|
|
65
|
+
return response.sla
|
|
66
|
+
|
|
67
|
+
async def list(self, request: SlasListRequest | None = None) -> Sequence[Sla]:
|
|
68
|
+
"""List SLAs."""
|
|
69
|
+
if request is None:
|
|
70
|
+
request = SlasListRequest()
|
|
71
|
+
response = await self._post("/slas.list", request, SlasListResponse)
|
|
72
|
+
return response.slas
|
|
73
|
+
|
|
74
|
+
async def update(self, request: SlasUpdateRequest) -> Sla:
|
|
75
|
+
"""Update an SLA."""
|
|
76
|
+
response = await self._post("/slas.update", request, SlasUpdateResponse)
|
|
77
|
+
return response.sla
|
|
78
|
+
|
|
79
|
+
async def transition(self, request: SlasTransitionRequest) -> Sla:
|
|
80
|
+
"""Transition an SLA status."""
|
|
81
|
+
response = await self._post("/slas.transition", request, SlasTransitionResponse)
|
|
82
|
+
return response.sla
|
devrev/services/tags.py
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"""Tags service for DevRev SDK."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from collections.abc import Sequence
|
|
6
|
+
|
|
7
|
+
from devrev.models.tags import (
|
|
8
|
+
Tag,
|
|
9
|
+
TagsCreateRequest,
|
|
10
|
+
TagsCreateResponse,
|
|
11
|
+
TagsDeleteRequest,
|
|
12
|
+
TagsDeleteResponse,
|
|
13
|
+
TagsGetRequest,
|
|
14
|
+
TagsGetResponse,
|
|
15
|
+
TagsListRequest,
|
|
16
|
+
TagsListResponse,
|
|
17
|
+
TagsUpdateRequest,
|
|
18
|
+
TagsUpdateResponse,
|
|
19
|
+
)
|
|
20
|
+
from devrev.services.base import AsyncBaseService, BaseService
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class TagsService(BaseService):
|
|
24
|
+
"""Service for managing DevRev Tags."""
|
|
25
|
+
|
|
26
|
+
def create(self, request: TagsCreateRequest) -> Tag:
|
|
27
|
+
"""Create a new tag."""
|
|
28
|
+
response = self._post("/tags.create", request, TagsCreateResponse)
|
|
29
|
+
return response.tag
|
|
30
|
+
|
|
31
|
+
def get(self, request: TagsGetRequest) -> Tag:
|
|
32
|
+
"""Get a tag by ID."""
|
|
33
|
+
response = self._post("/tags.get", request, TagsGetResponse)
|
|
34
|
+
return response.tag
|
|
35
|
+
|
|
36
|
+
def list(self, request: TagsListRequest | None = None) -> Sequence[Tag]:
|
|
37
|
+
"""List tags."""
|
|
38
|
+
if request is None:
|
|
39
|
+
request = TagsListRequest()
|
|
40
|
+
response = self._post("/tags.list", request, TagsListResponse)
|
|
41
|
+
return response.tags
|
|
42
|
+
|
|
43
|
+
def update(self, request: TagsUpdateRequest) -> Tag:
|
|
44
|
+
"""Update a tag."""
|
|
45
|
+
response = self._post("/tags.update", request, TagsUpdateResponse)
|
|
46
|
+
return response.tag
|
|
47
|
+
|
|
48
|
+
def delete(self, request: TagsDeleteRequest) -> None:
|
|
49
|
+
"""Delete a tag."""
|
|
50
|
+
self._post("/tags.delete", request, TagsDeleteResponse)
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
class AsyncTagsService(AsyncBaseService):
|
|
54
|
+
"""Async service for managing DevRev Tags."""
|
|
55
|
+
|
|
56
|
+
async def create(self, request: TagsCreateRequest) -> Tag:
|
|
57
|
+
"""Create a new tag."""
|
|
58
|
+
response = await self._post("/tags.create", request, TagsCreateResponse)
|
|
59
|
+
return response.tag
|
|
60
|
+
|
|
61
|
+
async def get(self, request: TagsGetRequest) -> Tag:
|
|
62
|
+
"""Get a tag by ID."""
|
|
63
|
+
response = await self._post("/tags.get", request, TagsGetResponse)
|
|
64
|
+
return response.tag
|
|
65
|
+
|
|
66
|
+
async def list(self, request: TagsListRequest | None = None) -> Sequence[Tag]:
|
|
67
|
+
"""List tags."""
|
|
68
|
+
if request is None:
|
|
69
|
+
request = TagsListRequest()
|
|
70
|
+
response = await self._post("/tags.list", request, TagsListResponse)
|
|
71
|
+
return response.tags
|
|
72
|
+
|
|
73
|
+
async def update(self, request: TagsUpdateRequest) -> Tag:
|
|
74
|
+
"""Update a tag."""
|
|
75
|
+
response = await self._post("/tags.update", request, TagsUpdateResponse)
|
|
76
|
+
return response.tag
|
|
77
|
+
|
|
78
|
+
async def delete(self, request: TagsDeleteRequest) -> None:
|
|
79
|
+
"""Delete a tag."""
|
|
80
|
+
await self._post("/tags.delete", request, TagsDeleteResponse)
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"""Timeline Entries service for DevRev SDK."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from collections.abc import Sequence
|
|
6
|
+
|
|
7
|
+
from devrev.models.timeline_entries import (
|
|
8
|
+
TimelineEntriesCreateRequest,
|
|
9
|
+
TimelineEntriesCreateResponse,
|
|
10
|
+
TimelineEntriesDeleteRequest,
|
|
11
|
+
TimelineEntriesDeleteResponse,
|
|
12
|
+
TimelineEntriesGetRequest,
|
|
13
|
+
TimelineEntriesGetResponse,
|
|
14
|
+
TimelineEntriesListRequest,
|
|
15
|
+
TimelineEntriesListResponse,
|
|
16
|
+
TimelineEntriesUpdateRequest,
|
|
17
|
+
TimelineEntriesUpdateResponse,
|
|
18
|
+
TimelineEntry,
|
|
19
|
+
)
|
|
20
|
+
from devrev.services.base import AsyncBaseService, BaseService
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class TimelineEntriesService(BaseService):
|
|
24
|
+
"""Service for managing DevRev Timeline Entries."""
|
|
25
|
+
|
|
26
|
+
def create(self, request: TimelineEntriesCreateRequest) -> TimelineEntry:
|
|
27
|
+
"""Create a new timeline entry."""
|
|
28
|
+
response = self._post("/timeline-entries.create", request, TimelineEntriesCreateResponse)
|
|
29
|
+
return response.timeline_entry
|
|
30
|
+
|
|
31
|
+
def get(self, request: TimelineEntriesGetRequest) -> TimelineEntry:
|
|
32
|
+
"""Get a timeline entry by ID."""
|
|
33
|
+
response = self._post("/timeline-entries.get", request, TimelineEntriesGetResponse)
|
|
34
|
+
return response.timeline_entry
|
|
35
|
+
|
|
36
|
+
def list(self, request: TimelineEntriesListRequest) -> Sequence[TimelineEntry]:
|
|
37
|
+
"""List timeline entries for an object."""
|
|
38
|
+
response = self._post("/timeline-entries.list", request, TimelineEntriesListResponse)
|
|
39
|
+
return response.timeline_entries
|
|
40
|
+
|
|
41
|
+
def update(self, request: TimelineEntriesUpdateRequest) -> TimelineEntry:
|
|
42
|
+
"""Update a timeline entry."""
|
|
43
|
+
response = self._post("/timeline-entries.update", request, TimelineEntriesUpdateResponse)
|
|
44
|
+
return response.timeline_entry
|
|
45
|
+
|
|
46
|
+
def delete(self, request: TimelineEntriesDeleteRequest) -> None:
|
|
47
|
+
"""Delete a timeline entry."""
|
|
48
|
+
self._post("/timeline-entries.delete", request, TimelineEntriesDeleteResponse)
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
class AsyncTimelineEntriesService(AsyncBaseService):
|
|
52
|
+
"""Async service for managing DevRev Timeline Entries."""
|
|
53
|
+
|
|
54
|
+
async def create(self, request: TimelineEntriesCreateRequest) -> TimelineEntry:
|
|
55
|
+
"""Create a new timeline entry."""
|
|
56
|
+
response = await self._post(
|
|
57
|
+
"/timeline-entries.create", request, TimelineEntriesCreateResponse
|
|
58
|
+
)
|
|
59
|
+
return response.timeline_entry
|
|
60
|
+
|
|
61
|
+
async def get(self, request: TimelineEntriesGetRequest) -> TimelineEntry:
|
|
62
|
+
"""Get a timeline entry by ID."""
|
|
63
|
+
response = await self._post("/timeline-entries.get", request, TimelineEntriesGetResponse)
|
|
64
|
+
return response.timeline_entry
|
|
65
|
+
|
|
66
|
+
async def list(self, request: TimelineEntriesListRequest) -> Sequence[TimelineEntry]:
|
|
67
|
+
"""List timeline entries for an object."""
|
|
68
|
+
response = await self._post("/timeline-entries.list", request, TimelineEntriesListResponse)
|
|
69
|
+
return response.timeline_entries
|
|
70
|
+
|
|
71
|
+
async def update(self, request: TimelineEntriesUpdateRequest) -> TimelineEntry:
|
|
72
|
+
"""Update a timeline entry."""
|
|
73
|
+
response = await self._post(
|
|
74
|
+
"/timeline-entries.update", request, TimelineEntriesUpdateResponse
|
|
75
|
+
)
|
|
76
|
+
return response.timeline_entry
|
|
77
|
+
|
|
78
|
+
async def delete(self, request: TimelineEntriesDeleteRequest) -> None:
|
|
79
|
+
"""Delete a timeline entry."""
|
|
80
|
+
await self._post("/timeline-entries.delete", request, TimelineEntriesDeleteResponse)
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"""Webhooks service for DevRev SDK."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from collections.abc import Sequence
|
|
6
|
+
|
|
7
|
+
from devrev.models.webhooks import (
|
|
8
|
+
Webhook,
|
|
9
|
+
WebhooksCreateRequest,
|
|
10
|
+
WebhooksCreateResponse,
|
|
11
|
+
WebhooksDeleteRequest,
|
|
12
|
+
WebhooksDeleteResponse,
|
|
13
|
+
WebhooksGetRequest,
|
|
14
|
+
WebhooksGetResponse,
|
|
15
|
+
WebhooksListRequest,
|
|
16
|
+
WebhooksListResponse,
|
|
17
|
+
WebhooksUpdateRequest,
|
|
18
|
+
WebhooksUpdateResponse,
|
|
19
|
+
)
|
|
20
|
+
from devrev.services.base import AsyncBaseService, BaseService
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class WebhooksService(BaseService):
|
|
24
|
+
"""Service for managing DevRev Webhooks."""
|
|
25
|
+
|
|
26
|
+
def create(self, request: WebhooksCreateRequest) -> Webhook:
|
|
27
|
+
"""Create a new webhook."""
|
|
28
|
+
response = self._post("/webhooks.create", request, WebhooksCreateResponse)
|
|
29
|
+
return response.webhook
|
|
30
|
+
|
|
31
|
+
def get(self, request: WebhooksGetRequest) -> Webhook:
|
|
32
|
+
"""Get a webhook by ID."""
|
|
33
|
+
response = self._post("/webhooks.get", request, WebhooksGetResponse)
|
|
34
|
+
return response.webhook
|
|
35
|
+
|
|
36
|
+
def list(self, request: WebhooksListRequest | None = None) -> Sequence[Webhook]:
|
|
37
|
+
"""List webhooks."""
|
|
38
|
+
if request is None:
|
|
39
|
+
request = WebhooksListRequest()
|
|
40
|
+
response = self._post("/webhooks.list", request, WebhooksListResponse)
|
|
41
|
+
return response.webhooks
|
|
42
|
+
|
|
43
|
+
def update(self, request: WebhooksUpdateRequest) -> Webhook:
|
|
44
|
+
"""Update a webhook."""
|
|
45
|
+
response = self._post("/webhooks.update", request, WebhooksUpdateResponse)
|
|
46
|
+
return response.webhook
|
|
47
|
+
|
|
48
|
+
def delete(self, request: WebhooksDeleteRequest) -> None:
|
|
49
|
+
"""Delete a webhook."""
|
|
50
|
+
self._post("/webhooks.delete", request, WebhooksDeleteResponse)
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
class AsyncWebhooksService(AsyncBaseService):
|
|
54
|
+
"""Async service for managing DevRev Webhooks."""
|
|
55
|
+
|
|
56
|
+
async def create(self, request: WebhooksCreateRequest) -> Webhook:
|
|
57
|
+
"""Create a new webhook."""
|
|
58
|
+
response = await self._post("/webhooks.create", request, WebhooksCreateResponse)
|
|
59
|
+
return response.webhook
|
|
60
|
+
|
|
61
|
+
async def get(self, request: WebhooksGetRequest) -> Webhook:
|
|
62
|
+
"""Get a webhook by ID."""
|
|
63
|
+
response = await self._post("/webhooks.get", request, WebhooksGetResponse)
|
|
64
|
+
return response.webhook
|
|
65
|
+
|
|
66
|
+
async def list(self, request: WebhooksListRequest | None = None) -> Sequence[Webhook]:
|
|
67
|
+
"""List webhooks."""
|
|
68
|
+
if request is None:
|
|
69
|
+
request = WebhooksListRequest()
|
|
70
|
+
response = await self._post("/webhooks.list", request, WebhooksListResponse)
|
|
71
|
+
return response.webhooks
|
|
72
|
+
|
|
73
|
+
async def update(self, request: WebhooksUpdateRequest) -> Webhook:
|
|
74
|
+
"""Update a webhook."""
|
|
75
|
+
response = await self._post("/webhooks.update", request, WebhooksUpdateResponse)
|
|
76
|
+
return response.webhook
|
|
77
|
+
|
|
78
|
+
async def delete(self, request: WebhooksDeleteRequest) -> None:
|
|
79
|
+
"""Delete a webhook."""
|
|
80
|
+
await self._post("/webhooks.delete", request, WebhooksDeleteResponse)
|