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.
Files changed (45) hide show
  1. devrev/__init__.py +47 -0
  2. devrev/client.py +343 -0
  3. devrev/config.py +180 -0
  4. devrev/exceptions.py +205 -0
  5. devrev/models/__init__.py +499 -0
  6. devrev/models/accounts.py +187 -0
  7. devrev/models/articles.py +109 -0
  8. devrev/models/base.py +147 -0
  9. devrev/models/code_changes.py +103 -0
  10. devrev/models/conversations.py +115 -0
  11. devrev/models/dev_users.py +258 -0
  12. devrev/models/groups.py +140 -0
  13. devrev/models/links.py +107 -0
  14. devrev/models/parts.py +110 -0
  15. devrev/models/rev_users.py +177 -0
  16. devrev/models/slas.py +112 -0
  17. devrev/models/tags.py +90 -0
  18. devrev/models/timeline_entries.py +100 -0
  19. devrev/models/webhooks.py +109 -0
  20. devrev/models/works.py +280 -0
  21. devrev/py.typed +1 -0
  22. devrev/services/__init__.py +74 -0
  23. devrev/services/accounts.py +325 -0
  24. devrev/services/articles.py +80 -0
  25. devrev/services/base.py +234 -0
  26. devrev/services/code_changes.py +80 -0
  27. devrev/services/conversations.py +98 -0
  28. devrev/services/dev_users.py +401 -0
  29. devrev/services/groups.py +103 -0
  30. devrev/services/links.py +68 -0
  31. devrev/services/parts.py +100 -0
  32. devrev/services/rev_users.py +235 -0
  33. devrev/services/slas.py +82 -0
  34. devrev/services/tags.py +80 -0
  35. devrev/services/timeline_entries.py +80 -0
  36. devrev/services/webhooks.py +80 -0
  37. devrev/services/works.py +363 -0
  38. devrev/utils/__init__.py +14 -0
  39. devrev/utils/deprecation.py +49 -0
  40. devrev/utils/http.py +521 -0
  41. devrev/utils/logging.py +139 -0
  42. devrev/utils/pagination.py +155 -0
  43. devrev_python_sdk-1.0.0.dist-info/METADATA +774 -0
  44. devrev_python_sdk-1.0.0.dist-info/RECORD +45 -0
  45. devrev_python_sdk-1.0.0.dist-info/WHEEL +4 -0
devrev/exceptions.py ADDED
@@ -0,0 +1,205 @@
1
+ """DevRev SDK Exception Hierarchy.
2
+
3
+ All exceptions inherit from DevRevError, allowing users to catch
4
+ all SDK errors with a single except clause, or be more specific.
5
+
6
+ Exception Hierarchy:
7
+ DevRevError (base)
8
+ ├── AuthenticationError (401)
9
+ ├── ForbiddenError (403)
10
+ ├── NotFoundError (404)
11
+ ├── ValidationError (400)
12
+ ├── ConflictError (409)
13
+ ├── RateLimitError (429)
14
+ ├── ServerError (500)
15
+ ├── ServiceUnavailableError (503)
16
+ ├── ConfigurationError
17
+ ├── TimeoutError
18
+ └── NetworkError
19
+ """
20
+
21
+ from typing import Any
22
+
23
+
24
+ class DevRevError(Exception):
25
+ """Base exception for all DevRev SDK errors.
26
+
27
+ All DevRev-specific exceptions inherit from this class,
28
+ allowing users to catch all SDK errors with a single except clause.
29
+
30
+ Attributes:
31
+ message: Human-readable error description
32
+ status_code: HTTP status code (if applicable)
33
+ request_id: DevRev request ID for debugging
34
+ response_body: Raw API response body
35
+ """
36
+
37
+ def __init__(
38
+ self,
39
+ message: str,
40
+ *,
41
+ status_code: int | None = None,
42
+ request_id: str | None = None,
43
+ response_body: dict[str, Any] | None = None,
44
+ ) -> None:
45
+ """Initialize the error.
46
+
47
+ Args:
48
+ message: Human-readable error description
49
+ status_code: HTTP status code (if applicable)
50
+ request_id: DevRev request ID for support tickets
51
+ response_body: Raw API response body for debugging
52
+ """
53
+ super().__init__(message)
54
+ self.message = message
55
+ self.status_code = status_code
56
+ self.request_id = request_id
57
+ self.response_body = response_body
58
+
59
+ def __str__(self) -> str:
60
+ """Format error message with context."""
61
+ parts = [self.message]
62
+ if self.status_code:
63
+ parts.append(f"Status: {self.status_code}")
64
+ if self.request_id:
65
+ parts.append(f"Request ID: {self.request_id}")
66
+ return " | ".join(parts)
67
+
68
+
69
+ # HTTP Error Exceptions (mapped to status codes)
70
+
71
+
72
+ class AuthenticationError(DevRevError):
73
+ """401 Unauthorized - Invalid or missing authentication.
74
+
75
+ Raised when the API token is invalid, expired, or missing.
76
+ """
77
+
78
+
79
+ class ForbiddenError(DevRevError):
80
+ """403 Forbidden - Authenticated but not authorized.
81
+
82
+ Raised when the user is authenticated but lacks permission
83
+ to perform the requested action.
84
+ """
85
+
86
+
87
+ class NotFoundError(DevRevError):
88
+ """404 Not Found - Resource does not exist.
89
+
90
+ Raised when the requested resource (account, work item, etc.)
91
+ cannot be found.
92
+ """
93
+
94
+
95
+ class ValidationError(DevRevError):
96
+ """400 Bad Request - Invalid request parameters.
97
+
98
+ Raised when the request contains invalid data or missing required fields.
99
+
100
+ Attributes:
101
+ field_errors: Mapping of field names to their validation errors
102
+ """
103
+
104
+ def __init__(
105
+ self,
106
+ message: str,
107
+ *,
108
+ field_errors: dict[str, list[str]] | None = None,
109
+ **kwargs: Any,
110
+ ) -> None:
111
+ """Initialize validation error.
112
+
113
+ Args:
114
+ message: Human-readable error description
115
+ field_errors: Mapping of field names to their validation errors
116
+ **kwargs: Additional arguments passed to DevRevError
117
+ """
118
+ super().__init__(message, **kwargs)
119
+ self.field_errors = field_errors or {}
120
+
121
+
122
+ class ConflictError(DevRevError):
123
+ """409 Conflict - Resource state conflict.
124
+
125
+ Raised when the request conflicts with the current state
126
+ of the resource (e.g., duplicate creation).
127
+ """
128
+
129
+
130
+ class RateLimitError(DevRevError):
131
+ """429 Too Many Requests - Rate limit exceeded.
132
+
133
+ Raised when API rate limits are exceeded.
134
+
135
+ Attributes:
136
+ retry_after: Seconds to wait before retrying
137
+ """
138
+
139
+ def __init__(
140
+ self,
141
+ message: str,
142
+ *,
143
+ retry_after: int | None = None,
144
+ **kwargs: Any,
145
+ ) -> None:
146
+ """Initialize rate limit error.
147
+
148
+ Args:
149
+ message: Human-readable error description
150
+ retry_after: Seconds to wait before retrying
151
+ **kwargs: Additional arguments passed to DevRevError
152
+ """
153
+ super().__init__(message, **kwargs)
154
+ self.retry_after = retry_after
155
+
156
+
157
+ class ServerError(DevRevError):
158
+ """500 Internal Server Error - DevRev server error.
159
+
160
+ Raised when DevRev's servers encounter an unexpected error.
161
+ """
162
+
163
+
164
+ class ServiceUnavailableError(DevRevError):
165
+ """503 Service Unavailable - Temporary service outage.
166
+
167
+ Raised when the DevRev service is temporarily unavailable.
168
+ """
169
+
170
+
171
+ # SDK-specific errors
172
+
173
+
174
+ class ConfigurationError(DevRevError):
175
+ """SDK configuration error.
176
+
177
+ Raised when the SDK is misconfigured (e.g., missing API key).
178
+ """
179
+
180
+
181
+ class TimeoutError(DevRevError):
182
+ """Request timed out.
183
+
184
+ Raised when a request exceeds the configured timeout.
185
+ """
186
+
187
+
188
+ class NetworkError(DevRevError):
189
+ """Network connectivity error.
190
+
191
+ Raised when there's a network-level failure (DNS, connection, etc.).
192
+ """
193
+
194
+
195
+ # Status code to exception mapping for use in HTTP layer
196
+ STATUS_CODE_TO_EXCEPTION: dict[int, type[DevRevError]] = {
197
+ 400: ValidationError,
198
+ 401: AuthenticationError,
199
+ 403: ForbiddenError,
200
+ 404: NotFoundError,
201
+ 409: ConflictError,
202
+ 429: RateLimitError,
203
+ 500: ServerError,
204
+ 503: ServiceUnavailableError,
205
+ }
@@ -0,0 +1,499 @@
1
+ """DevRev SDK Pydantic Models.
2
+
3
+ This module contains all Pydantic models for the DevRev API.
4
+ """
5
+
6
+ from devrev.models.accounts import (
7
+ Account,
8
+ AccountsCreateRequest,
9
+ AccountsCreateResponse,
10
+ AccountsDeleteRequest,
11
+ AccountsDeleteResponse,
12
+ AccountsExportRequest,
13
+ AccountsExportResponse,
14
+ AccountsGetRequest,
15
+ AccountsGetResponse,
16
+ AccountsListRequest,
17
+ AccountsListResponse,
18
+ AccountsMergeRequest,
19
+ AccountsMergeResponse,
20
+ AccountSummary,
21
+ AccountsUpdateRequest,
22
+ AccountsUpdateResponse,
23
+ AccountTier,
24
+ )
25
+ from devrev.models.articles import (
26
+ Article,
27
+ ArticlesCreateRequest,
28
+ ArticlesCreateResponse,
29
+ ArticlesDeleteRequest,
30
+ ArticlesDeleteResponse,
31
+ ArticlesGetRequest,
32
+ ArticlesGetResponse,
33
+ ArticlesListRequest,
34
+ ArticlesListResponse,
35
+ ArticleStatus,
36
+ ArticleSummary,
37
+ ArticlesUpdateRequest,
38
+ ArticlesUpdateResponse,
39
+ )
40
+ from devrev.models.base import (
41
+ CustomSchemaSpec,
42
+ DateFilter,
43
+ DateTimeFilter,
44
+ DevRevBaseModel,
45
+ DevRevResponseModel,
46
+ ObjectSummary,
47
+ OrgSummary,
48
+ PaginatedResponse,
49
+ SetTagWithValue,
50
+ StageInfo,
51
+ StageUpdate,
52
+ TagWithValue,
53
+ UserSummary,
54
+ )
55
+ from devrev.models.code_changes import (
56
+ CodeChange,
57
+ CodeChangesCreateRequest,
58
+ CodeChangesCreateResponse,
59
+ CodeChangesDeleteRequest,
60
+ CodeChangesDeleteResponse,
61
+ CodeChangesGetRequest,
62
+ CodeChangesGetResponse,
63
+ CodeChangesListRequest,
64
+ CodeChangesListResponse,
65
+ CodeChangeSummary,
66
+ CodeChangesUpdateRequest,
67
+ CodeChangesUpdateResponse,
68
+ )
69
+ from devrev.models.conversations import (
70
+ Conversation,
71
+ ConversationsCreateRequest,
72
+ ConversationsCreateResponse,
73
+ ConversationsDeleteRequest,
74
+ ConversationsDeleteResponse,
75
+ ConversationsExportRequest,
76
+ ConversationsExportResponse,
77
+ ConversationsGetRequest,
78
+ ConversationsGetResponse,
79
+ ConversationsListRequest,
80
+ ConversationsListResponse,
81
+ ConversationSummary,
82
+ ConversationsUpdateRequest,
83
+ ConversationsUpdateResponse,
84
+ )
85
+ from devrev.models.dev_users import (
86
+ DevUser,
87
+ DevUserExternalIdentity,
88
+ DevUsersActivateRequest,
89
+ DevUsersActivateResponse,
90
+ DevUsersCreateRequest,
91
+ DevUsersCreateResponse,
92
+ DevUsersDeactivateRequest,
93
+ DevUsersDeactivateResponse,
94
+ DevUsersGetRequest,
95
+ DevUsersGetResponse,
96
+ DevUsersIdentitiesLinkRequest,
97
+ DevUsersIdentitiesLinkResponse,
98
+ DevUsersIdentitiesUnlinkRequest,
99
+ DevUsersIdentitiesUnlinkResponse,
100
+ DevUsersListRequest,
101
+ DevUsersListResponse,
102
+ DevUsersMergeRequest,
103
+ DevUsersMergeResponse,
104
+ DevUsersSelfRequest,
105
+ DevUsersSelfResponse,
106
+ DevUsersSelfUpdateRequest,
107
+ DevUsersSelfUpdateResponse,
108
+ DevUserState,
109
+ DevUserSummary,
110
+ DevUsersUpdateRequest,
111
+ DevUsersUpdateResponse,
112
+ )
113
+ from devrev.models.groups import (
114
+ Group,
115
+ GroupMember,
116
+ GroupMembersAddRequest,
117
+ GroupMembersAddResponse,
118
+ GroupMembersListRequest,
119
+ GroupMembersListResponse,
120
+ GroupMembersRemoveRequest,
121
+ GroupMembersRemoveResponse,
122
+ GroupsCreateRequest,
123
+ GroupsCreateResponse,
124
+ GroupsGetRequest,
125
+ GroupsGetResponse,
126
+ GroupsListRequest,
127
+ GroupsListResponse,
128
+ GroupSummary,
129
+ GroupsUpdateRequest,
130
+ GroupsUpdateResponse,
131
+ GroupType,
132
+ )
133
+ from devrev.models.links import (
134
+ Link,
135
+ LinksCreateRequest,
136
+ LinksCreateResponse,
137
+ LinksDeleteRequest,
138
+ LinksDeleteResponse,
139
+ LinksGetRequest,
140
+ LinksGetResponse,
141
+ LinksListRequest,
142
+ LinksListResponse,
143
+ LinkSummary,
144
+ LinkType,
145
+ )
146
+ from devrev.models.parts import (
147
+ Part,
148
+ PartsCreateRequest,
149
+ PartsCreateResponse,
150
+ PartsDeleteRequest,
151
+ PartsDeleteResponse,
152
+ PartsGetRequest,
153
+ PartsGetResponse,
154
+ PartsListRequest,
155
+ PartsListResponse,
156
+ PartSummary,
157
+ PartsUpdateRequest,
158
+ PartsUpdateResponse,
159
+ PartType,
160
+ )
161
+ from devrev.models.rev_users import (
162
+ RevUser,
163
+ RevUsersCreateRequest,
164
+ RevUsersCreateResponse,
165
+ RevUsersDeleteRequest,
166
+ RevUsersDeleteResponse,
167
+ RevUsersGetRequest,
168
+ RevUsersGetResponse,
169
+ RevUsersListRequest,
170
+ RevUsersListResponse,
171
+ RevUsersMergeRequest,
172
+ RevUsersMergeResponse,
173
+ RevUserState,
174
+ RevUserSummary,
175
+ RevUsersUpdateRequest,
176
+ RevUsersUpdateResponse,
177
+ )
178
+ from devrev.models.slas import (
179
+ Sla,
180
+ SlasCreateRequest,
181
+ SlasCreateResponse,
182
+ SlasGetRequest,
183
+ SlasGetResponse,
184
+ SlasListRequest,
185
+ SlasListResponse,
186
+ SlaStatus,
187
+ SlasTransitionRequest,
188
+ SlasTransitionResponse,
189
+ SlaSummary,
190
+ SlasUpdateRequest,
191
+ SlasUpdateResponse,
192
+ SlaTrackerStatus,
193
+ )
194
+ from devrev.models.tags import (
195
+ Tag,
196
+ TagsCreateRequest,
197
+ TagsCreateResponse,
198
+ TagsDeleteRequest,
199
+ TagsDeleteResponse,
200
+ TagsGetRequest,
201
+ TagsGetResponse,
202
+ TagsListRequest,
203
+ TagsListResponse,
204
+ TagSummary,
205
+ TagsUpdateRequest,
206
+ TagsUpdateResponse,
207
+ )
208
+ from devrev.models.timeline_entries import (
209
+ TimelineEntriesCreateRequest,
210
+ TimelineEntriesCreateResponse,
211
+ TimelineEntriesDeleteRequest,
212
+ TimelineEntriesDeleteResponse,
213
+ TimelineEntriesGetRequest,
214
+ TimelineEntriesGetResponse,
215
+ TimelineEntriesListRequest,
216
+ TimelineEntriesListResponse,
217
+ TimelineEntriesUpdateRequest,
218
+ TimelineEntriesUpdateResponse,
219
+ TimelineEntry,
220
+ TimelineEntryType,
221
+ )
222
+ from devrev.models.webhooks import (
223
+ Webhook,
224
+ WebhooksCreateRequest,
225
+ WebhooksCreateResponse,
226
+ WebhooksDeleteRequest,
227
+ WebhooksDeleteResponse,
228
+ WebhooksGetRequest,
229
+ WebhooksGetResponse,
230
+ WebhooksListRequest,
231
+ WebhooksListResponse,
232
+ WebhookStatus,
233
+ WebhookSummary,
234
+ WebhooksUpdateRequest,
235
+ WebhooksUpdateResponse,
236
+ )
237
+ from devrev.models.works import (
238
+ IssuePriority,
239
+ TicketChannels,
240
+ TicketSeverity,
241
+ Work,
242
+ WorksCountRequest,
243
+ WorksCountResponse,
244
+ WorksCreateRequest,
245
+ WorksCreateResponse,
246
+ WorksDeleteRequest,
247
+ WorksDeleteResponse,
248
+ WorksExportRequest,
249
+ WorksExportResponse,
250
+ WorksGetRequest,
251
+ WorksGetResponse,
252
+ WorksListRequest,
253
+ WorksListResponse,
254
+ WorkSummary,
255
+ WorksUpdateRequest,
256
+ WorksUpdateResponse,
257
+ WorkType,
258
+ )
259
+
260
+ __all__ = [
261
+ # Base models
262
+ "DevRevBaseModel",
263
+ "DevRevResponseModel",
264
+ "PaginatedResponse",
265
+ "DateFilter",
266
+ "DateTimeFilter",
267
+ "CustomSchemaSpec",
268
+ "UserSummary",
269
+ "ObjectSummary",
270
+ "OrgSummary",
271
+ "TagWithValue",
272
+ "SetTagWithValue",
273
+ "StageInfo",
274
+ "StageUpdate",
275
+ # Accounts
276
+ "Account",
277
+ "AccountSummary",
278
+ "AccountTier",
279
+ "AccountsCreateRequest",
280
+ "AccountsCreateResponse",
281
+ "AccountsGetRequest",
282
+ "AccountsGetResponse",
283
+ "AccountsListRequest",
284
+ "AccountsListResponse",
285
+ "AccountsUpdateRequest",
286
+ "AccountsUpdateResponse",
287
+ "AccountsDeleteRequest",
288
+ "AccountsDeleteResponse",
289
+ "AccountsMergeRequest",
290
+ "AccountsMergeResponse",
291
+ "AccountsExportRequest",
292
+ "AccountsExportResponse",
293
+ # Articles
294
+ "Article",
295
+ "ArticleSummary",
296
+ "ArticleStatus",
297
+ "ArticlesCreateRequest",
298
+ "ArticlesCreateResponse",
299
+ "ArticlesGetRequest",
300
+ "ArticlesGetResponse",
301
+ "ArticlesListRequest",
302
+ "ArticlesListResponse",
303
+ "ArticlesUpdateRequest",
304
+ "ArticlesUpdateResponse",
305
+ "ArticlesDeleteRequest",
306
+ "ArticlesDeleteResponse",
307
+ # Code Changes
308
+ "CodeChange",
309
+ "CodeChangeSummary",
310
+ "CodeChangesCreateRequest",
311
+ "CodeChangesCreateResponse",
312
+ "CodeChangesGetRequest",
313
+ "CodeChangesGetResponse",
314
+ "CodeChangesListRequest",
315
+ "CodeChangesListResponse",
316
+ "CodeChangesUpdateRequest",
317
+ "CodeChangesUpdateResponse",
318
+ "CodeChangesDeleteRequest",
319
+ "CodeChangesDeleteResponse",
320
+ # Conversations
321
+ "Conversation",
322
+ "ConversationSummary",
323
+ "ConversationsCreateRequest",
324
+ "ConversationsCreateResponse",
325
+ "ConversationsGetRequest",
326
+ "ConversationsGetResponse",
327
+ "ConversationsListRequest",
328
+ "ConversationsListResponse",
329
+ "ConversationsUpdateRequest",
330
+ "ConversationsUpdateResponse",
331
+ "ConversationsDeleteRequest",
332
+ "ConversationsDeleteResponse",
333
+ "ConversationsExportRequest",
334
+ "ConversationsExportResponse",
335
+ # Dev Users
336
+ "DevUser",
337
+ "DevUserSummary",
338
+ "DevUserState",
339
+ "DevUserExternalIdentity",
340
+ "DevUsersCreateRequest",
341
+ "DevUsersCreateResponse",
342
+ "DevUsersGetRequest",
343
+ "DevUsersGetResponse",
344
+ "DevUsersListRequest",
345
+ "DevUsersListResponse",
346
+ "DevUsersUpdateRequest",
347
+ "DevUsersUpdateResponse",
348
+ "DevUsersActivateRequest",
349
+ "DevUsersActivateResponse",
350
+ "DevUsersDeactivateRequest",
351
+ "DevUsersDeactivateResponse",
352
+ "DevUsersIdentitiesLinkRequest",
353
+ "DevUsersIdentitiesLinkResponse",
354
+ "DevUsersIdentitiesUnlinkRequest",
355
+ "DevUsersIdentitiesUnlinkResponse",
356
+ "DevUsersMergeRequest",
357
+ "DevUsersMergeResponse",
358
+ "DevUsersSelfRequest",
359
+ "DevUsersSelfResponse",
360
+ "DevUsersSelfUpdateRequest",
361
+ "DevUsersSelfUpdateResponse",
362
+ # Groups
363
+ "Group",
364
+ "GroupSummary",
365
+ "GroupType",
366
+ "GroupMember",
367
+ "GroupsCreateRequest",
368
+ "GroupsCreateResponse",
369
+ "GroupsGetRequest",
370
+ "GroupsGetResponse",
371
+ "GroupsListRequest",
372
+ "GroupsListResponse",
373
+ "GroupsUpdateRequest",
374
+ "GroupsUpdateResponse",
375
+ "GroupMembersAddRequest",
376
+ "GroupMembersAddResponse",
377
+ "GroupMembersRemoveRequest",
378
+ "GroupMembersRemoveResponse",
379
+ "GroupMembersListRequest",
380
+ "GroupMembersListResponse",
381
+ # Links
382
+ "Link",
383
+ "LinkSummary",
384
+ "LinkType",
385
+ "LinksCreateRequest",
386
+ "LinksCreateResponse",
387
+ "LinksGetRequest",
388
+ "LinksGetResponse",
389
+ "LinksListRequest",
390
+ "LinksListResponse",
391
+ "LinksDeleteRequest",
392
+ "LinksDeleteResponse",
393
+ # Parts
394
+ "Part",
395
+ "PartSummary",
396
+ "PartType",
397
+ "PartsCreateRequest",
398
+ "PartsCreateResponse",
399
+ "PartsGetRequest",
400
+ "PartsGetResponse",
401
+ "PartsListRequest",
402
+ "PartsListResponse",
403
+ "PartsUpdateRequest",
404
+ "PartsUpdateResponse",
405
+ "PartsDeleteRequest",
406
+ "PartsDeleteResponse",
407
+ # Rev Users
408
+ "RevUser",
409
+ "RevUserSummary",
410
+ "RevUserState",
411
+ "RevUsersCreateRequest",
412
+ "RevUsersCreateResponse",
413
+ "RevUsersGetRequest",
414
+ "RevUsersGetResponse",
415
+ "RevUsersListRequest",
416
+ "RevUsersListResponse",
417
+ "RevUsersUpdateRequest",
418
+ "RevUsersUpdateResponse",
419
+ "RevUsersDeleteRequest",
420
+ "RevUsersDeleteResponse",
421
+ "RevUsersMergeRequest",
422
+ "RevUsersMergeResponse",
423
+ # SLAs
424
+ "Sla",
425
+ "SlaSummary",
426
+ "SlaStatus",
427
+ "SlaTrackerStatus",
428
+ "SlasCreateRequest",
429
+ "SlasCreateResponse",
430
+ "SlasGetRequest",
431
+ "SlasGetResponse",
432
+ "SlasListRequest",
433
+ "SlasListResponse",
434
+ "SlasUpdateRequest",
435
+ "SlasUpdateResponse",
436
+ "SlasTransitionRequest",
437
+ "SlasTransitionResponse",
438
+ # Tags
439
+ "Tag",
440
+ "TagSummary",
441
+ "TagsCreateRequest",
442
+ "TagsCreateResponse",
443
+ "TagsGetRequest",
444
+ "TagsGetResponse",
445
+ "TagsListRequest",
446
+ "TagsListResponse",
447
+ "TagsUpdateRequest",
448
+ "TagsUpdateResponse",
449
+ "TagsDeleteRequest",
450
+ "TagsDeleteResponse",
451
+ # Timeline Entries
452
+ "TimelineEntry",
453
+ "TimelineEntryType",
454
+ "TimelineEntriesCreateRequest",
455
+ "TimelineEntriesCreateResponse",
456
+ "TimelineEntriesGetRequest",
457
+ "TimelineEntriesGetResponse",
458
+ "TimelineEntriesListRequest",
459
+ "TimelineEntriesListResponse",
460
+ "TimelineEntriesUpdateRequest",
461
+ "TimelineEntriesUpdateResponse",
462
+ "TimelineEntriesDeleteRequest",
463
+ "TimelineEntriesDeleteResponse",
464
+ # Webhooks
465
+ "Webhook",
466
+ "WebhookSummary",
467
+ "WebhookStatus",
468
+ "WebhooksCreateRequest",
469
+ "WebhooksCreateResponse",
470
+ "WebhooksGetRequest",
471
+ "WebhooksGetResponse",
472
+ "WebhooksListRequest",
473
+ "WebhooksListResponse",
474
+ "WebhooksUpdateRequest",
475
+ "WebhooksUpdateResponse",
476
+ "WebhooksDeleteRequest",
477
+ "WebhooksDeleteResponse",
478
+ # Works
479
+ "Work",
480
+ "WorkSummary",
481
+ "WorkType",
482
+ "IssuePriority",
483
+ "TicketSeverity",
484
+ "TicketChannels",
485
+ "WorksCreateRequest",
486
+ "WorksCreateResponse",
487
+ "WorksGetRequest",
488
+ "WorksGetResponse",
489
+ "WorksListRequest",
490
+ "WorksListResponse",
491
+ "WorksUpdateRequest",
492
+ "WorksUpdateResponse",
493
+ "WorksDeleteRequest",
494
+ "WorksDeleteResponse",
495
+ "WorksExportRequest",
496
+ "WorksExportResponse",
497
+ "WorksCountRequest",
498
+ "WorksCountResponse",
499
+ ]