universal-mcp-applications 0.1.33__py3-none-any.whl → 0.1.39rc16__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.
Potentially problematic release.
This version of universal-mcp-applications might be problematic. Click here for more details.
- universal_mcp/applications/BEST_PRACTICES.md +1 -1
- universal_mcp/applications/ahrefs/app.py +92 -238
- universal_mcp/applications/airtable/app.py +36 -135
- universal_mcp/applications/apollo/app.py +124 -477
- universal_mcp/applications/asana/app.py +605 -1755
- universal_mcp/applications/aws_s3/app.py +63 -119
- universal_mcp/applications/bill/app.py +644 -2055
- universal_mcp/applications/box/app.py +1246 -4159
- universal_mcp/applications/braze/app.py +410 -1476
- universal_mcp/applications/browser_use/README.md +15 -1
- universal_mcp/applications/browser_use/__init__.py +1 -0
- universal_mcp/applications/browser_use/app.py +91 -26
- universal_mcp/applications/cal_com_v2/app.py +207 -625
- universal_mcp/applications/calendly/app.py +103 -242
- universal_mcp/applications/canva/app.py +75 -140
- universal_mcp/applications/clickup/app.py +331 -798
- universal_mcp/applications/coda/app.py +240 -520
- universal_mcp/applications/confluence/app.py +497 -1285
- universal_mcp/applications/contentful/app.py +40 -155
- universal_mcp/applications/crustdata/app.py +44 -123
- universal_mcp/applications/dialpad/app.py +451 -924
- universal_mcp/applications/digitalocean/app.py +2071 -6082
- universal_mcp/applications/domain_checker/app.py +3 -54
- universal_mcp/applications/e2b/app.py +17 -68
- universal_mcp/applications/elevenlabs/README.md +27 -3
- universal_mcp/applications/elevenlabs/app.py +741 -74
- universal_mcp/applications/exa/README.md +8 -4
- universal_mcp/applications/exa/app.py +415 -186
- universal_mcp/applications/falai/README.md +5 -7
- universal_mcp/applications/falai/app.py +156 -232
- universal_mcp/applications/figma/app.py +91 -175
- universal_mcp/applications/file_system/app.py +2 -13
- universal_mcp/applications/firecrawl/app.py +198 -176
- universal_mcp/applications/fireflies/app.py +59 -281
- universal_mcp/applications/fpl/app.py +92 -529
- universal_mcp/applications/fpl/utils/fixtures.py +15 -49
- universal_mcp/applications/fpl/utils/helper.py +25 -89
- universal_mcp/applications/fpl/utils/league_utils.py +20 -64
- universal_mcp/applications/ghost_content/app.py +70 -179
- universal_mcp/applications/github/app.py +30 -67
- universal_mcp/applications/gong/app.py +142 -302
- universal_mcp/applications/google_calendar/app.py +26 -78
- universal_mcp/applications/google_docs/README.md +15 -14
- universal_mcp/applications/google_docs/app.py +103 -206
- universal_mcp/applications/google_drive/app.py +194 -793
- universal_mcp/applications/google_gemini/app.py +68 -59
- universal_mcp/applications/google_mail/README.md +1 -0
- universal_mcp/applications/google_mail/app.py +93 -214
- universal_mcp/applications/google_searchconsole/app.py +25 -58
- universal_mcp/applications/google_sheet/README.md +2 -1
- universal_mcp/applications/google_sheet/app.py +226 -624
- universal_mcp/applications/google_sheet/helper.py +26 -53
- universal_mcp/applications/hashnode/app.py +57 -269
- universal_mcp/applications/heygen/README.md +10 -32
- universal_mcp/applications/heygen/app.py +339 -811
- universal_mcp/applications/http_tools/app.py +10 -32
- universal_mcp/applications/hubspot/README.md +1 -1
- universal_mcp/applications/hubspot/app.py +7508 -99
- universal_mcp/applications/jira/app.py +2419 -8334
- universal_mcp/applications/klaviyo/app.py +739 -1621
- universal_mcp/applications/linkedin/README.md +18 -1
- universal_mcp/applications/linkedin/app.py +729 -251
- universal_mcp/applications/mailchimp/app.py +696 -1851
- universal_mcp/applications/markitdown/app.py +8 -20
- universal_mcp/applications/miro/app.py +333 -815
- universal_mcp/applications/ms_teams/app.py +420 -1407
- universal_mcp/applications/neon/app.py +144 -250
- universal_mcp/applications/notion/app.py +38 -53
- universal_mcp/applications/onedrive/app.py +26 -48
- universal_mcp/applications/openai/app.py +43 -166
- universal_mcp/applications/outlook/README.md +22 -9
- universal_mcp/applications/outlook/app.py +403 -141
- universal_mcp/applications/perplexity/README.md +2 -1
- universal_mcp/applications/perplexity/app.py +161 -20
- universal_mcp/applications/pipedrive/app.py +1021 -3331
- universal_mcp/applications/posthog/app.py +272 -541
- universal_mcp/applications/reddit/app.py +65 -164
- universal_mcp/applications/resend/app.py +72 -139
- universal_mcp/applications/retell/app.py +23 -50
- universal_mcp/applications/rocketlane/app.py +252 -965
- universal_mcp/applications/scraper/app.py +114 -142
- universal_mcp/applications/semanticscholar/app.py +36 -78
- universal_mcp/applications/semrush/app.py +44 -78
- universal_mcp/applications/sendgrid/app.py +826 -1576
- universal_mcp/applications/sentry/app.py +444 -1079
- universal_mcp/applications/serpapi/app.py +44 -146
- universal_mcp/applications/sharepoint/app.py +27 -49
- universal_mcp/applications/shopify/app.py +1748 -4486
- universal_mcp/applications/shortcut/app.py +275 -536
- universal_mcp/applications/slack/app.py +43 -125
- universal_mcp/applications/spotify/app.py +206 -405
- universal_mcp/applications/supabase/app.py +174 -283
- universal_mcp/applications/tavily/app.py +2 -2
- universal_mcp/applications/trello/app.py +853 -2816
- universal_mcp/applications/twilio/app.py +27 -62
- universal_mcp/applications/twitter/api_segments/compliance_api.py +4 -14
- universal_mcp/applications/twitter/api_segments/dm_conversations_api.py +6 -18
- universal_mcp/applications/twitter/api_segments/likes_api.py +1 -3
- universal_mcp/applications/twitter/api_segments/lists_api.py +5 -15
- universal_mcp/applications/twitter/api_segments/trends_api.py +1 -3
- universal_mcp/applications/twitter/api_segments/tweets_api.py +9 -31
- universal_mcp/applications/twitter/api_segments/usage_api.py +1 -5
- universal_mcp/applications/twitter/api_segments/users_api.py +14 -42
- universal_mcp/applications/whatsapp/app.py +35 -186
- universal_mcp/applications/whatsapp/audio.py +2 -6
- universal_mcp/applications/whatsapp/whatsapp.py +17 -51
- universal_mcp/applications/whatsapp_business/app.py +86 -299
- universal_mcp/applications/wrike/app.py +80 -153
- universal_mcp/applications/yahoo_finance/app.py +19 -65
- universal_mcp/applications/youtube/app.py +120 -306
- universal_mcp/applications/zenquotes/app.py +3 -3
- {universal_mcp_applications-0.1.33.dist-info → universal_mcp_applications-0.1.39rc16.dist-info}/METADATA +4 -2
- {universal_mcp_applications-0.1.33.dist-info → universal_mcp_applications-0.1.39rc16.dist-info}/RECORD +115 -119
- {universal_mcp_applications-0.1.33.dist-info → universal_mcp_applications-0.1.39rc16.dist-info}/WHEEL +1 -1
- universal_mcp/applications/hubspot/api_segments/__init__.py +0 -0
- universal_mcp/applications/hubspot/api_segments/api_segment_base.py +0 -54
- universal_mcp/applications/hubspot/api_segments/crm_api.py +0 -7337
- universal_mcp/applications/hubspot/api_segments/marketing_api.py +0 -1467
- {universal_mcp_applications-0.1.33.dist-info → universal_mcp_applications-0.1.39rc16.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
from typing import Any
|
|
2
|
-
|
|
3
2
|
from universal_mcp.applications.application import APIApplication
|
|
4
3
|
from universal_mcp.integrations import Integration
|
|
5
4
|
|
|
@@ -9,16 +8,12 @@ class ShortcutApp(APIApplication):
|
|
|
9
8
|
super().__init__(name="shortcut", integration=integration, **kwargs)
|
|
10
9
|
self.base_url = "https://api.app.shortcut.com"
|
|
11
10
|
|
|
12
|
-
def
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
"Content-Type": "application/json",
|
|
17
|
-
}
|
|
11
|
+
async def _aget_headers(self) -> dict[str, Any]:
|
|
12
|
+
credentials = await self.integration.get_credentials_async()
|
|
13
|
+
api_key = credentials.get("api_key")
|
|
14
|
+
return {"Shortcut-Token": f"{api_key}", "Content-Type": "application/json"}
|
|
18
15
|
|
|
19
|
-
def list_categories(
|
|
20
|
-
self,
|
|
21
|
-
) -> list[Any]:
|
|
16
|
+
async def list_categories(self) -> list[Any]:
|
|
22
17
|
"""
|
|
23
18
|
Retrieves a list of categories from the API.
|
|
24
19
|
|
|
@@ -36,13 +31,11 @@ class ShortcutApp(APIApplication):
|
|
|
36
31
|
"""
|
|
37
32
|
url = f"{self.base_url}/api/v3/categories"
|
|
38
33
|
query_params = {}
|
|
39
|
-
response = self.
|
|
34
|
+
response = await self._aget(url, params=query_params)
|
|
40
35
|
response.raise_for_status()
|
|
41
36
|
return response.json()
|
|
42
37
|
|
|
43
|
-
def create_category(
|
|
44
|
-
self, name, color=None, external_id=None, type=None
|
|
45
|
-
) -> dict[str, Any]:
|
|
38
|
+
async def create_category(self, name, color=None, external_id=None, type=None) -> dict[str, Any]:
|
|
46
39
|
"""
|
|
47
40
|
Creates a new category with the specified parameters.
|
|
48
41
|
|
|
@@ -64,20 +57,15 @@ class ShortcutApp(APIApplication):
|
|
|
64
57
|
"""
|
|
65
58
|
if name is None:
|
|
66
59
|
raise ValueError("Missing required parameter 'name'")
|
|
67
|
-
request_body = {
|
|
68
|
-
"name": name,
|
|
69
|
-
"color": color,
|
|
70
|
-
"external_id": external_id,
|
|
71
|
-
"type": type,
|
|
72
|
-
}
|
|
60
|
+
request_body = {"name": name, "color": color, "external_id": external_id, "type": type}
|
|
73
61
|
request_body = {k: v for k, v in request_body.items() if v is not None}
|
|
74
62
|
url = f"{self.base_url}/api/v3/categories"
|
|
75
63
|
query_params = {}
|
|
76
|
-
response = self.
|
|
64
|
+
response = await self._apost(url, data=request_body, params=query_params)
|
|
77
65
|
response.raise_for_status()
|
|
78
66
|
return response.json()
|
|
79
67
|
|
|
80
|
-
def get_category(self, category_public_id) -> dict[str, Any]:
|
|
68
|
+
async def get_category(self, category_public_id) -> dict[str, Any]:
|
|
81
69
|
"""
|
|
82
70
|
Fetches a category by its public ID.
|
|
83
71
|
|
|
@@ -97,13 +85,11 @@ class ShortcutApp(APIApplication):
|
|
|
97
85
|
raise ValueError("Missing required parameter 'category-public-id'")
|
|
98
86
|
url = f"{self.base_url}/api/v3/categories/{category_public_id}"
|
|
99
87
|
query_params = {}
|
|
100
|
-
response = self.
|
|
88
|
+
response = await self._aget(url, params=query_params)
|
|
101
89
|
response.raise_for_status()
|
|
102
90
|
return response.json()
|
|
103
91
|
|
|
104
|
-
def update_category(
|
|
105
|
-
self, category_public_id, name=None, color=None, archived=None
|
|
106
|
-
) -> dict[str, Any]:
|
|
92
|
+
async def update_category(self, category_public_id, name=None, color=None, archived=None) -> dict[str, Any]:
|
|
107
93
|
"""
|
|
108
94
|
Updates a category with the specified attributes.
|
|
109
95
|
|
|
@@ -125,19 +111,15 @@ class ShortcutApp(APIApplication):
|
|
|
125
111
|
"""
|
|
126
112
|
if category_public_id is None:
|
|
127
113
|
raise ValueError("Missing required parameter 'category-public-id'")
|
|
128
|
-
request_body = {
|
|
129
|
-
"name": name,
|
|
130
|
-
"color": color,
|
|
131
|
-
"archived": archived,
|
|
132
|
-
}
|
|
114
|
+
request_body = {"name": name, "color": color, "archived": archived}
|
|
133
115
|
request_body = {k: v for k, v in request_body.items() if v is not None}
|
|
134
116
|
url = f"{self.base_url}/api/v3/categories/{category_public_id}"
|
|
135
117
|
query_params = {}
|
|
136
|
-
response = self.
|
|
118
|
+
response = await self._aput(url, data=request_body, params=query_params)
|
|
137
119
|
response.raise_for_status()
|
|
138
120
|
return response.json()
|
|
139
121
|
|
|
140
|
-
def delete_category(self, category_public_id) -> Any:
|
|
122
|
+
async def delete_category(self, category_public_id) -> Any:
|
|
141
123
|
"""
|
|
142
124
|
Deletes a category by its public ID.
|
|
143
125
|
|
|
@@ -158,11 +140,11 @@ class ShortcutApp(APIApplication):
|
|
|
158
140
|
raise ValueError("Missing required parameter 'category-public-id'")
|
|
159
141
|
url = f"{self.base_url}/api/v3/categories/{category_public_id}"
|
|
160
142
|
query_params = {}
|
|
161
|
-
response = self.
|
|
143
|
+
response = await self._adelete(url, params=query_params)
|
|
162
144
|
response.raise_for_status()
|
|
163
145
|
return response.json()
|
|
164
146
|
|
|
165
|
-
def list_category_milestones(self, category_public_id) -> list[Any]:
|
|
147
|
+
async def list_category_milestones(self, category_public_id) -> list[Any]:
|
|
166
148
|
"""
|
|
167
149
|
Lists all milestones associated with a specified category.
|
|
168
150
|
|
|
@@ -183,11 +165,11 @@ class ShortcutApp(APIApplication):
|
|
|
183
165
|
raise ValueError("Missing required parameter 'category-public-id'")
|
|
184
166
|
url = f"{self.base_url}/api/v3/categories/{category_public_id}/milestones"
|
|
185
167
|
query_params = {}
|
|
186
|
-
response = self.
|
|
168
|
+
response = await self._aget(url, params=query_params)
|
|
187
169
|
response.raise_for_status()
|
|
188
170
|
return response.json()
|
|
189
171
|
|
|
190
|
-
def list_category_objectives(self, category_public_id) -> list[Any]:
|
|
172
|
+
async def list_category_objectives(self, category_public_id) -> list[Any]:
|
|
191
173
|
"""
|
|
192
174
|
Fetches and lists objectives for a given category based on its public ID.
|
|
193
175
|
|
|
@@ -207,13 +189,11 @@ class ShortcutApp(APIApplication):
|
|
|
207
189
|
raise ValueError("Missing required parameter 'category-public-id'")
|
|
208
190
|
url = f"{self.base_url}/api/v3/categories/{category_public_id}/objectives"
|
|
209
191
|
query_params = {}
|
|
210
|
-
response = self.
|
|
192
|
+
response = await self._aget(url, params=query_params)
|
|
211
193
|
response.raise_for_status()
|
|
212
194
|
return response.json()
|
|
213
195
|
|
|
214
|
-
def list_custom_fields(
|
|
215
|
-
self,
|
|
216
|
-
) -> list[Any]:
|
|
196
|
+
async def list_custom_fields(self) -> list[Any]:
|
|
217
197
|
"""
|
|
218
198
|
Retrieves a list of custom fields from the API.
|
|
219
199
|
|
|
@@ -231,11 +211,11 @@ class ShortcutApp(APIApplication):
|
|
|
231
211
|
"""
|
|
232
212
|
url = f"{self.base_url}/api/v3/custom-fields"
|
|
233
213
|
query_params = {}
|
|
234
|
-
response = self.
|
|
214
|
+
response = await self._aget(url, params=query_params)
|
|
235
215
|
response.raise_for_status()
|
|
236
216
|
return response.json()
|
|
237
217
|
|
|
238
|
-
def get_custom_field(self, custom_field_public_id) -> dict[str, Any]:
|
|
218
|
+
async def get_custom_field(self, custom_field_public_id) -> dict[str, Any]:
|
|
239
219
|
"""
|
|
240
220
|
Retrieves a custom field by its public ID.
|
|
241
221
|
|
|
@@ -256,11 +236,11 @@ class ShortcutApp(APIApplication):
|
|
|
256
236
|
raise ValueError("Missing required parameter 'custom-field-public-id'")
|
|
257
237
|
url = f"{self.base_url}/api/v3/custom-fields/{custom_field_public_id}"
|
|
258
238
|
query_params = {}
|
|
259
|
-
response = self.
|
|
239
|
+
response = await self._aget(url, params=query_params)
|
|
260
240
|
response.raise_for_status()
|
|
261
241
|
return response.json()
|
|
262
242
|
|
|
263
|
-
def update_custom_field(
|
|
243
|
+
async def update_custom_field(
|
|
264
244
|
self,
|
|
265
245
|
custom_field_public_id,
|
|
266
246
|
enabled=None,
|
|
@@ -308,11 +288,11 @@ class ShortcutApp(APIApplication):
|
|
|
308
288
|
request_body = {k: v for k, v in request_body.items() if v is not None}
|
|
309
289
|
url = f"{self.base_url}/api/v3/custom-fields/{custom_field_public_id}"
|
|
310
290
|
query_params = {}
|
|
311
|
-
response = self.
|
|
291
|
+
response = await self._aput(url, data=request_body, params=query_params)
|
|
312
292
|
response.raise_for_status()
|
|
313
293
|
return response.json()
|
|
314
294
|
|
|
315
|
-
def delete_custom_field(self, custom_field_public_id) -> Any:
|
|
295
|
+
async def delete_custom_field(self, custom_field_public_id) -> Any:
|
|
316
296
|
"""
|
|
317
297
|
Deletes a custom field specified by its public identifier.
|
|
318
298
|
|
|
@@ -333,13 +313,11 @@ class ShortcutApp(APIApplication):
|
|
|
333
313
|
raise ValueError("Missing required parameter 'custom-field-public-id'")
|
|
334
314
|
url = f"{self.base_url}/api/v3/custom-fields/{custom_field_public_id}"
|
|
335
315
|
query_params = {}
|
|
336
|
-
response = self.
|
|
316
|
+
response = await self._adelete(url, params=query_params)
|
|
337
317
|
response.raise_for_status()
|
|
338
318
|
return response.json()
|
|
339
319
|
|
|
340
|
-
def list_entity_templates(
|
|
341
|
-
self,
|
|
342
|
-
) -> list[Any]:
|
|
320
|
+
async def list_entity_templates(self) -> list[Any]:
|
|
343
321
|
"""
|
|
344
322
|
Retrieves a list of entity templates from an API endpoint.
|
|
345
323
|
|
|
@@ -357,13 +335,11 @@ class ShortcutApp(APIApplication):
|
|
|
357
335
|
"""
|
|
358
336
|
url = f"{self.base_url}/api/v3/entity-templates"
|
|
359
337
|
query_params = {}
|
|
360
|
-
response = self.
|
|
338
|
+
response = await self._aget(url, params=query_params)
|
|
361
339
|
response.raise_for_status()
|
|
362
340
|
return response.json()
|
|
363
341
|
|
|
364
|
-
def create_entity_template(
|
|
365
|
-
self, name, story_contents, author_id=None
|
|
366
|
-
) -> dict[str, Any]:
|
|
342
|
+
async def create_entity_template(self, name, story_contents, author_id=None) -> dict[str, Any]:
|
|
367
343
|
"""
|
|
368
344
|
Creates an entity template with the provided name, story contents, and optional author ID.
|
|
369
345
|
|
|
@@ -386,21 +362,15 @@ class ShortcutApp(APIApplication):
|
|
|
386
362
|
raise ValueError("Missing required parameter 'name'")
|
|
387
363
|
if story_contents is None:
|
|
388
364
|
raise ValueError("Missing required parameter 'story_contents'")
|
|
389
|
-
request_body = {
|
|
390
|
-
"name": name,
|
|
391
|
-
"author_id": author_id,
|
|
392
|
-
"story_contents": story_contents,
|
|
393
|
-
}
|
|
365
|
+
request_body = {"name": name, "author_id": author_id, "story_contents": story_contents}
|
|
394
366
|
request_body = {k: v for k, v in request_body.items() if v is not None}
|
|
395
367
|
url = f"{self.base_url}/api/v3/entity-templates"
|
|
396
368
|
query_params = {}
|
|
397
|
-
response = self.
|
|
369
|
+
response = await self._apost(url, data=request_body, params=query_params)
|
|
398
370
|
response.raise_for_status()
|
|
399
371
|
return response.json()
|
|
400
372
|
|
|
401
|
-
def disable_story_templates(
|
|
402
|
-
self,
|
|
403
|
-
) -> Any:
|
|
373
|
+
async def disable_story_templates(self) -> Any:
|
|
404
374
|
"""
|
|
405
375
|
Disables story entity templates by sending a PUT request to the API endpoint.
|
|
406
376
|
|
|
@@ -418,13 +388,11 @@ class ShortcutApp(APIApplication):
|
|
|
418
388
|
"""
|
|
419
389
|
url = f"{self.base_url}/api/v3/entity-templates/disable"
|
|
420
390
|
query_params = {}
|
|
421
|
-
response = self.
|
|
391
|
+
response = await self._aput(url, data={}, params=query_params)
|
|
422
392
|
response.raise_for_status()
|
|
423
393
|
return response.json()
|
|
424
394
|
|
|
425
|
-
def enable_story_templates(
|
|
426
|
-
self,
|
|
427
|
-
) -> Any:
|
|
395
|
+
async def enable_story_templates(self) -> Any:
|
|
428
396
|
"""
|
|
429
397
|
Enables story templates by making a PUT request to the entity-templates endpoint.
|
|
430
398
|
|
|
@@ -442,11 +410,11 @@ class ShortcutApp(APIApplication):
|
|
|
442
410
|
"""
|
|
443
411
|
url = f"{self.base_url}/api/v3/entity-templates/enable"
|
|
444
412
|
query_params = {}
|
|
445
|
-
response = self.
|
|
413
|
+
response = await self._aput(url, data={}, params=query_params)
|
|
446
414
|
response.raise_for_status()
|
|
447
415
|
return response.json()
|
|
448
416
|
|
|
449
|
-
def get_entity_template(self, entity_template_public_id) -> dict[str, Any]:
|
|
417
|
+
async def get_entity_template(self, entity_template_public_id) -> dict[str, Any]:
|
|
450
418
|
"""
|
|
451
419
|
Retrieves a specific entity template by its public ID.
|
|
452
420
|
|
|
@@ -467,13 +435,11 @@ class ShortcutApp(APIApplication):
|
|
|
467
435
|
raise ValueError("Missing required parameter 'entity-template-public-id'")
|
|
468
436
|
url = f"{self.base_url}/api/v3/entity-templates/{entity_template_public_id}"
|
|
469
437
|
query_params = {}
|
|
470
|
-
response = self.
|
|
438
|
+
response = await self._aget(url, params=query_params)
|
|
471
439
|
response.raise_for_status()
|
|
472
440
|
return response.json()
|
|
473
441
|
|
|
474
|
-
def update_entity_template(
|
|
475
|
-
self, entity_template_public_id, name=None, story_contents=None
|
|
476
|
-
) -> dict[str, Any]:
|
|
442
|
+
async def update_entity_template(self, entity_template_public_id, name=None, story_contents=None) -> dict[str, Any]:
|
|
477
443
|
"""
|
|
478
444
|
Updates an entity template using the provided public ID, optionally setting its name and story contents.
|
|
479
445
|
|
|
@@ -493,18 +459,15 @@ class ShortcutApp(APIApplication):
|
|
|
493
459
|
"""
|
|
494
460
|
if entity_template_public_id is None:
|
|
495
461
|
raise ValueError("Missing required parameter 'entity-template-public-id'")
|
|
496
|
-
request_body = {
|
|
497
|
-
"name": name,
|
|
498
|
-
"story_contents": story_contents,
|
|
499
|
-
}
|
|
462
|
+
request_body = {"name": name, "story_contents": story_contents}
|
|
500
463
|
request_body = {k: v for k, v in request_body.items() if v is not None}
|
|
501
464
|
url = f"{self.base_url}/api/v3/entity-templates/{entity_template_public_id}"
|
|
502
465
|
query_params = {}
|
|
503
|
-
response = self.
|
|
466
|
+
response = await self._aput(url, data=request_body, params=query_params)
|
|
504
467
|
response.raise_for_status()
|
|
505
468
|
return response.json()
|
|
506
469
|
|
|
507
|
-
def delete_entity_template(self, entity_template_public_id) -> Any:
|
|
470
|
+
async def delete_entity_template(self, entity_template_public_id) -> Any:
|
|
508
471
|
"""
|
|
509
472
|
Deletes an entity template by its public ID.
|
|
510
473
|
|
|
@@ -524,13 +487,11 @@ class ShortcutApp(APIApplication):
|
|
|
524
487
|
raise ValueError("Missing required parameter 'entity-template-public-id'")
|
|
525
488
|
url = f"{self.base_url}/api/v3/entity-templates/{entity_template_public_id}"
|
|
526
489
|
query_params = {}
|
|
527
|
-
response = self.
|
|
490
|
+
response = await self._adelete(url, params=query_params)
|
|
528
491
|
response.raise_for_status()
|
|
529
492
|
return response.json()
|
|
530
493
|
|
|
531
|
-
def get_epic_workflow(
|
|
532
|
-
self,
|
|
533
|
-
) -> dict[str, Any]:
|
|
494
|
+
async def get_epic_workflow(self) -> dict[str, Any]:
|
|
534
495
|
"""
|
|
535
496
|
Retrieves the epic workflow configuration from the API.
|
|
536
497
|
|
|
@@ -548,11 +509,11 @@ class ShortcutApp(APIApplication):
|
|
|
548
509
|
"""
|
|
549
510
|
url = f"{self.base_url}/api/v3/epic-workflow"
|
|
550
511
|
query_params = {}
|
|
551
|
-
response = self.
|
|
512
|
+
response = await self._aget(url, params=query_params)
|
|
552
513
|
response.raise_for_status()
|
|
553
514
|
return response.json()
|
|
554
515
|
|
|
555
|
-
def list_epics(self, includes_description=None) -> list[Any]:
|
|
516
|
+
async def list_epics(self, includes_description=None) -> list[Any]:
|
|
556
517
|
"""
|
|
557
518
|
Fetches a list of epics from the API.
|
|
558
519
|
|
|
@@ -569,16 +530,12 @@ class ShortcutApp(APIApplication):
|
|
|
569
530
|
list, epics, async-job, management, important
|
|
570
531
|
"""
|
|
571
532
|
url = f"{self.base_url}/api/v3/epics"
|
|
572
|
-
query_params = {
|
|
573
|
-
|
|
574
|
-
for k, v in [("includes_description", includes_description)]
|
|
575
|
-
if v is not None
|
|
576
|
-
}
|
|
577
|
-
response = self._get(url, params=query_params)
|
|
533
|
+
query_params = {k: v for k, v in [("includes_description", includes_description)] if v is not None}
|
|
534
|
+
response = await self._aget(url, params=query_params)
|
|
578
535
|
response.raise_for_status()
|
|
579
536
|
return response.json()
|
|
580
537
|
|
|
581
|
-
def create_epic(
|
|
538
|
+
async def create_epic(
|
|
582
539
|
self,
|
|
583
540
|
name,
|
|
584
541
|
description=None,
|
|
@@ -660,11 +617,11 @@ class ShortcutApp(APIApplication):
|
|
|
660
617
|
request_body = {k: v for k, v in request_body.items() if v is not None}
|
|
661
618
|
url = f"{self.base_url}/api/v3/epics"
|
|
662
619
|
query_params = {}
|
|
663
|
-
response = self.
|
|
620
|
+
response = await self._apost(url, data=request_body, params=query_params)
|
|
664
621
|
response.raise_for_status()
|
|
665
622
|
return response.json()
|
|
666
623
|
|
|
667
|
-
def get_epic(self, epic_public_id) -> dict[str, Any]:
|
|
624
|
+
async def get_epic(self, epic_public_id) -> dict[str, Any]:
|
|
668
625
|
"""
|
|
669
626
|
Fetches an epic by its public ID
|
|
670
627
|
|
|
@@ -684,11 +641,11 @@ class ShortcutApp(APIApplication):
|
|
|
684
641
|
raise ValueError("Missing required parameter 'epic-public-id'")
|
|
685
642
|
url = f"{self.base_url}/api/v3/epics/{epic_public_id}"
|
|
686
643
|
query_params = {}
|
|
687
|
-
response = self.
|
|
644
|
+
response = await self._aget(url, params=query_params)
|
|
688
645
|
response.raise_for_status()
|
|
689
646
|
return response.json()
|
|
690
647
|
|
|
691
|
-
def update_epic(
|
|
648
|
+
async def update_epic(
|
|
692
649
|
self,
|
|
693
650
|
epic_public_id,
|
|
694
651
|
description=None,
|
|
@@ -775,11 +732,11 @@ class ShortcutApp(APIApplication):
|
|
|
775
732
|
request_body = {k: v for k, v in request_body.items() if v is not None}
|
|
776
733
|
url = f"{self.base_url}/api/v3/epics/{epic_public_id}"
|
|
777
734
|
query_params = {}
|
|
778
|
-
response = self.
|
|
735
|
+
response = await self._aput(url, data=request_body, params=query_params)
|
|
779
736
|
response.raise_for_status()
|
|
780
737
|
return response.json()
|
|
781
738
|
|
|
782
|
-
def delete_epic(self, epic_public_id) -> Any:
|
|
739
|
+
async def delete_epic(self, epic_public_id) -> Any:
|
|
783
740
|
"""
|
|
784
741
|
Deletes an epic by its public ID.
|
|
785
742
|
|
|
@@ -800,11 +757,11 @@ class ShortcutApp(APIApplication):
|
|
|
800
757
|
raise ValueError("Missing required parameter 'epic-public-id'")
|
|
801
758
|
url = f"{self.base_url}/api/v3/epics/{epic_public_id}"
|
|
802
759
|
query_params = {}
|
|
803
|
-
response = self.
|
|
760
|
+
response = await self._adelete(url, params=query_params)
|
|
804
761
|
response.raise_for_status()
|
|
805
762
|
return response.json()
|
|
806
763
|
|
|
807
|
-
def list_epic_comments(self, epic_public_id) -> list[Any]:
|
|
764
|
+
async def list_epic_comments(self, epic_public_id) -> list[Any]:
|
|
808
765
|
"""
|
|
809
766
|
Retrieves a list of comments for a specified epic.
|
|
810
767
|
|
|
@@ -825,18 +782,12 @@ class ShortcutApp(APIApplication):
|
|
|
825
782
|
raise ValueError("Missing required parameter 'epic-public-id'")
|
|
826
783
|
url = f"{self.base_url}/api/v3/epics/{epic_public_id}/comments"
|
|
827
784
|
query_params = {}
|
|
828
|
-
response = self.
|
|
785
|
+
response = await self._aget(url, params=query_params)
|
|
829
786
|
response.raise_for_status()
|
|
830
787
|
return response.json()
|
|
831
788
|
|
|
832
|
-
def create_epic_comment(
|
|
833
|
-
self,
|
|
834
|
-
epic_public_id,
|
|
835
|
-
text,
|
|
836
|
-
author_id=None,
|
|
837
|
-
created_at=None,
|
|
838
|
-
updated_at=None,
|
|
839
|
-
external_id=None,
|
|
789
|
+
async def create_epic_comment(
|
|
790
|
+
self, epic_public_id, text, author_id=None, created_at=None, updated_at=None, external_id=None
|
|
840
791
|
) -> dict[str, Any]:
|
|
841
792
|
"""
|
|
842
793
|
Creates a comment on an epic with the specified details.
|
|
@@ -872,11 +823,11 @@ class ShortcutApp(APIApplication):
|
|
|
872
823
|
request_body = {k: v for k, v in request_body.items() if v is not None}
|
|
873
824
|
url = f"{self.base_url}/api/v3/epics/{epic_public_id}/comments"
|
|
874
825
|
query_params = {}
|
|
875
|
-
response = self.
|
|
826
|
+
response = await self._apost(url, data=request_body, params=query_params)
|
|
876
827
|
response.raise_for_status()
|
|
877
828
|
return response.json()
|
|
878
829
|
|
|
879
|
-
def get_epic_comment(self, epic_public_id, comment_public_id) -> dict[str, Any]:
|
|
830
|
+
async def get_epic_comment(self, epic_public_id, comment_public_id) -> dict[str, Any]:
|
|
880
831
|
"""
|
|
881
832
|
Retrieves a specific comment from an epic by their respective public IDs.
|
|
882
833
|
|
|
@@ -900,13 +851,11 @@ class ShortcutApp(APIApplication):
|
|
|
900
851
|
raise ValueError("Missing required parameter 'comment-public-id'")
|
|
901
852
|
url = f"{self.base_url}/api/v3/epics/{epic_public_id}/comments/{comment_public_id}"
|
|
902
853
|
query_params = {}
|
|
903
|
-
response = self.
|
|
854
|
+
response = await self._aget(url, params=query_params)
|
|
904
855
|
response.raise_for_status()
|
|
905
856
|
return response.json()
|
|
906
857
|
|
|
907
|
-
def update_epic_comment(
|
|
908
|
-
self, epic_public_id, comment_public_id, text
|
|
909
|
-
) -> dict[str, Any]:
|
|
858
|
+
async def update_epic_comment(self, epic_public_id, comment_public_id, text) -> dict[str, Any]:
|
|
910
859
|
"""
|
|
911
860
|
Updates the text of an existing comment on a specified epic.
|
|
912
861
|
|
|
@@ -931,25 +880,16 @@ class ShortcutApp(APIApplication):
|
|
|
931
880
|
raise ValueError("Missing required parameter 'comment-public-id'")
|
|
932
881
|
if text is None:
|
|
933
882
|
raise ValueError("Missing required parameter 'text'")
|
|
934
|
-
request_body = {
|
|
935
|
-
"text": text,
|
|
936
|
-
}
|
|
883
|
+
request_body = {"text": text}
|
|
937
884
|
request_body = {k: v for k, v in request_body.items() if v is not None}
|
|
938
885
|
url = f"{self.base_url}/api/v3/epics/{epic_public_id}/comments/{comment_public_id}"
|
|
939
886
|
query_params = {}
|
|
940
|
-
response = self.
|
|
887
|
+
response = await self._aput(url, data=request_body, params=query_params)
|
|
941
888
|
response.raise_for_status()
|
|
942
889
|
return response.json()
|
|
943
890
|
|
|
944
|
-
def create_epic_comment_comment(
|
|
945
|
-
self,
|
|
946
|
-
epic_public_id,
|
|
947
|
-
comment_public_id,
|
|
948
|
-
text,
|
|
949
|
-
author_id=None,
|
|
950
|
-
created_at=None,
|
|
951
|
-
updated_at=None,
|
|
952
|
-
external_id=None,
|
|
891
|
+
async def create_epic_comment_comment(
|
|
892
|
+
self, epic_public_id, comment_public_id, text, author_id=None, created_at=None, updated_at=None, external_id=None
|
|
953
893
|
) -> dict[str, Any]:
|
|
954
894
|
"""
|
|
955
895
|
Creates a reply to an existing comment on a specified epic, sending the reply to the backend API and returning the created comment data.
|
|
@@ -989,11 +929,11 @@ class ShortcutApp(APIApplication):
|
|
|
989
929
|
request_body = {k: v for k, v in request_body.items() if v is not None}
|
|
990
930
|
url = f"{self.base_url}/api/v3/epics/{epic_public_id}/comments/{comment_public_id}"
|
|
991
931
|
query_params = {}
|
|
992
|
-
response = self.
|
|
932
|
+
response = await self._apost(url, data=request_body, params=query_params)
|
|
993
933
|
response.raise_for_status()
|
|
994
934
|
return response.json()
|
|
995
935
|
|
|
996
|
-
def delete_epic_comment(self, epic_public_id, comment_public_id) -> Any:
|
|
936
|
+
async def delete_epic_comment(self, epic_public_id, comment_public_id) -> Any:
|
|
997
937
|
"""
|
|
998
938
|
Deletes a specific comment from an epic using its public identifiers.
|
|
999
939
|
|
|
@@ -1017,11 +957,11 @@ class ShortcutApp(APIApplication):
|
|
|
1017
957
|
raise ValueError("Missing required parameter 'comment-public-id'")
|
|
1018
958
|
url = f"{self.base_url}/api/v3/epics/{epic_public_id}/comments/{comment_public_id}"
|
|
1019
959
|
query_params = {}
|
|
1020
|
-
response = self.
|
|
960
|
+
response = await self._adelete(url, params=query_params)
|
|
1021
961
|
response.raise_for_status()
|
|
1022
962
|
return response.json()
|
|
1023
963
|
|
|
1024
|
-
def list_epic_stories(self, epic_public_id, includes_description=None) -> list[Any]:
|
|
964
|
+
async def list_epic_stories(self, epic_public_id, includes_description=None) -> list[Any]:
|
|
1025
965
|
"""
|
|
1026
966
|
Retrieves a list of stories associated with a specific epic.
|
|
1027
967
|
|
|
@@ -1042,16 +982,12 @@ class ShortcutApp(APIApplication):
|
|
|
1042
982
|
if epic_public_id is None:
|
|
1043
983
|
raise ValueError("Missing required parameter 'epic-public-id'")
|
|
1044
984
|
url = f"{self.base_url}/api/v3/epics/{epic_public_id}/stories"
|
|
1045
|
-
query_params = {
|
|
1046
|
-
|
|
1047
|
-
for k, v in [("includes_description", includes_description)]
|
|
1048
|
-
if v is not None
|
|
1049
|
-
}
|
|
1050
|
-
response = self._get(url, params=query_params)
|
|
985
|
+
query_params = {k: v for k, v in [("includes_description", includes_description)] if v is not None}
|
|
986
|
+
response = await self._aget(url, params=query_params)
|
|
1051
987
|
response.raise_for_status()
|
|
1052
988
|
return response.json()
|
|
1053
989
|
|
|
1054
|
-
def unlink_productboard_from_epic(self, epic_public_id) -> Any:
|
|
990
|
+
async def unlink_productboard_from_epic(self, epic_public_id) -> Any:
|
|
1055
991
|
"""
|
|
1056
992
|
Unlinks a ProductBoard integration from an epic in the system.
|
|
1057
993
|
|
|
@@ -1072,11 +1008,11 @@ class ShortcutApp(APIApplication):
|
|
|
1072
1008
|
raise ValueError("Missing required parameter 'epic-public-id'")
|
|
1073
1009
|
url = f"{self.base_url}/api/v3/epics/{epic_public_id}/unlink-productboard"
|
|
1074
1010
|
query_params = {}
|
|
1075
|
-
response = self.
|
|
1011
|
+
response = await self._apost(url, data={}, params=query_params)
|
|
1076
1012
|
response.raise_for_status()
|
|
1077
1013
|
return response.json()
|
|
1078
1014
|
|
|
1079
|
-
def get_external_link_stories(self, external_link) -> list[Any]:
|
|
1015
|
+
async def get_external_link_stories(self, external_link) -> list[Any]:
|
|
1080
1016
|
"""
|
|
1081
1017
|
Retrieves stories associated with an external link.
|
|
1082
1018
|
|
|
@@ -1096,16 +1032,12 @@ class ShortcutApp(APIApplication):
|
|
|
1096
1032
|
if external_link is None:
|
|
1097
1033
|
raise ValueError("Missing required parameter 'external_link'")
|
|
1098
1034
|
url = f"{self.base_url}/api/v3/external-link/stories"
|
|
1099
|
-
query_params = {
|
|
1100
|
-
|
|
1101
|
-
}
|
|
1102
|
-
response = self._get(url, params=query_params)
|
|
1035
|
+
query_params = {k: v for k, v in [("external_link", external_link)] if v is not None}
|
|
1036
|
+
response = await self._aget(url, params=query_params)
|
|
1103
1037
|
response.raise_for_status()
|
|
1104
1038
|
return response.json()
|
|
1105
1039
|
|
|
1106
|
-
def list_files(
|
|
1107
|
-
self,
|
|
1108
|
-
) -> list[Any]:
|
|
1040
|
+
async def list_files(self) -> list[Any]:
|
|
1109
1041
|
"""
|
|
1110
1042
|
Retrieves a list of files from the remote API endpoint.
|
|
1111
1043
|
|
|
@@ -1123,11 +1055,11 @@ class ShortcutApp(APIApplication):
|
|
|
1123
1055
|
"""
|
|
1124
1056
|
url = f"{self.base_url}/api/v3/files"
|
|
1125
1057
|
query_params = {}
|
|
1126
|
-
response = self.
|
|
1058
|
+
response = await self._aget(url, params=query_params)
|
|
1127
1059
|
response.raise_for_status()
|
|
1128
1060
|
return response.json()
|
|
1129
1061
|
|
|
1130
|
-
def get_file(self, file_public_id) -> dict[str, Any]:
|
|
1062
|
+
async def get_file(self, file_public_id) -> dict[str, Any]:
|
|
1131
1063
|
"""
|
|
1132
1064
|
Retrieves a file based on its public ID, returning a dictionary containing file information.
|
|
1133
1065
|
|
|
@@ -1147,19 +1079,12 @@ class ShortcutApp(APIApplication):
|
|
|
1147
1079
|
raise ValueError("Missing required parameter 'file-public-id'")
|
|
1148
1080
|
url = f"{self.base_url}/api/v3/files/{file_public_id}"
|
|
1149
1081
|
query_params = {}
|
|
1150
|
-
response = self.
|
|
1082
|
+
response = await self._aget(url, params=query_params)
|
|
1151
1083
|
response.raise_for_status()
|
|
1152
1084
|
return response.json()
|
|
1153
1085
|
|
|
1154
|
-
def update_file(
|
|
1155
|
-
self,
|
|
1156
|
-
file_public_id,
|
|
1157
|
-
description=None,
|
|
1158
|
-
created_at=None,
|
|
1159
|
-
updated_at=None,
|
|
1160
|
-
name=None,
|
|
1161
|
-
uploader_id=None,
|
|
1162
|
-
external_id=None,
|
|
1086
|
+
async def update_file(
|
|
1087
|
+
self, file_public_id, description=None, created_at=None, updated_at=None, name=None, uploader_id=None, external_id=None
|
|
1163
1088
|
) -> dict[str, Any]:
|
|
1164
1089
|
"""
|
|
1165
1090
|
Updates metadata for a file identified by its public ID.
|
|
@@ -1196,11 +1121,11 @@ class ShortcutApp(APIApplication):
|
|
|
1196
1121
|
request_body = {k: v for k, v in request_body.items() if v is not None}
|
|
1197
1122
|
url = f"{self.base_url}/api/v3/files/{file_public_id}"
|
|
1198
1123
|
query_params = {}
|
|
1199
|
-
response = self.
|
|
1124
|
+
response = await self._aput(url, data=request_body, params=query_params)
|
|
1200
1125
|
response.raise_for_status()
|
|
1201
1126
|
return response.json()
|
|
1202
1127
|
|
|
1203
|
-
def delete_file(self, file_public_id) -> Any:
|
|
1128
|
+
async def delete_file(self, file_public_id) -> Any:
|
|
1204
1129
|
"""
|
|
1205
1130
|
Deletes a file identified by a public ID from the server.
|
|
1206
1131
|
|
|
@@ -1221,13 +1146,11 @@ class ShortcutApp(APIApplication):
|
|
|
1221
1146
|
raise ValueError("Missing required parameter 'file-public-id'")
|
|
1222
1147
|
url = f"{self.base_url}/api/v3/files/{file_public_id}"
|
|
1223
1148
|
query_params = {}
|
|
1224
|
-
response = self.
|
|
1149
|
+
response = await self._adelete(url, params=query_params)
|
|
1225
1150
|
response.raise_for_status()
|
|
1226
1151
|
return response.json()
|
|
1227
1152
|
|
|
1228
|
-
def list_groups(
|
|
1229
|
-
self,
|
|
1230
|
-
) -> list[Any]:
|
|
1153
|
+
async def list_groups(self) -> list[Any]:
|
|
1231
1154
|
"""
|
|
1232
1155
|
Retrieves a list of all groups from the API.
|
|
1233
1156
|
|
|
@@ -1245,20 +1168,12 @@ class ShortcutApp(APIApplication):
|
|
|
1245
1168
|
"""
|
|
1246
1169
|
url = f"{self.base_url}/api/v3/groups"
|
|
1247
1170
|
query_params = {}
|
|
1248
|
-
response = self.
|
|
1171
|
+
response = await self._aget(url, params=query_params)
|
|
1249
1172
|
response.raise_for_status()
|
|
1250
1173
|
return response.json()
|
|
1251
1174
|
|
|
1252
|
-
def create_group(
|
|
1253
|
-
self,
|
|
1254
|
-
name,
|
|
1255
|
-
mention_name,
|
|
1256
|
-
description=None,
|
|
1257
|
-
member_ids=None,
|
|
1258
|
-
workflow_ids=None,
|
|
1259
|
-
color=None,
|
|
1260
|
-
color_key=None,
|
|
1261
|
-
display_icon_id=None,
|
|
1175
|
+
async def create_group(
|
|
1176
|
+
self, name, mention_name, description=None, member_ids=None, workflow_ids=None, color=None, color_key=None, display_icon_id=None
|
|
1262
1177
|
) -> dict[str, Any]:
|
|
1263
1178
|
"""
|
|
1264
1179
|
Creates a new group with the specified configuration and returns the group's details.
|
|
@@ -1300,11 +1215,11 @@ class ShortcutApp(APIApplication):
|
|
|
1300
1215
|
request_body = {k: v for k, v in request_body.items() if v is not None}
|
|
1301
1216
|
url = f"{self.base_url}/api/v3/groups"
|
|
1302
1217
|
query_params = {}
|
|
1303
|
-
response = self.
|
|
1218
|
+
response = await self._apost(url, data=request_body, params=query_params)
|
|
1304
1219
|
response.raise_for_status()
|
|
1305
1220
|
return response.json()
|
|
1306
1221
|
|
|
1307
|
-
def get_group(self, group_public_id) -> dict[str, Any]:
|
|
1222
|
+
async def get_group(self, group_public_id) -> dict[str, Any]:
|
|
1308
1223
|
"""
|
|
1309
1224
|
Retrieves information about a specific group using its public ID.
|
|
1310
1225
|
|
|
@@ -1325,11 +1240,11 @@ class ShortcutApp(APIApplication):
|
|
|
1325
1240
|
raise ValueError("Missing required parameter 'group-public-id'")
|
|
1326
1241
|
url = f"{self.base_url}/api/v3/groups/{group_public_id}"
|
|
1327
1242
|
query_params = {}
|
|
1328
|
-
response = self.
|
|
1243
|
+
response = await self._aget(url, params=query_params)
|
|
1329
1244
|
response.raise_for_status()
|
|
1330
1245
|
return response.json()
|
|
1331
1246
|
|
|
1332
|
-
def update_group(
|
|
1247
|
+
async def update_group(
|
|
1333
1248
|
self,
|
|
1334
1249
|
group_public_id,
|
|
1335
1250
|
description=None,
|
|
@@ -1383,11 +1298,11 @@ class ShortcutApp(APIApplication):
|
|
|
1383
1298
|
request_body = {k: v for k, v in request_body.items() if v is not None}
|
|
1384
1299
|
url = f"{self.base_url}/api/v3/groups/{group_public_id}"
|
|
1385
1300
|
query_params = {}
|
|
1386
|
-
response = self.
|
|
1301
|
+
response = await self._aput(url, data=request_body, params=query_params)
|
|
1387
1302
|
response.raise_for_status()
|
|
1388
1303
|
return response.json()
|
|
1389
1304
|
|
|
1390
|
-
def list_group_stories(self, group_public_id, limit=None, offset=None) -> list[Any]:
|
|
1305
|
+
async def list_group_stories(self, group_public_id, limit=None, offset=None) -> list[Any]:
|
|
1391
1306
|
"""
|
|
1392
1307
|
Retrieves a list of stories from a specific group.
|
|
1393
1308
|
|
|
@@ -1409,16 +1324,12 @@ class ShortcutApp(APIApplication):
|
|
|
1409
1324
|
if group_public_id is None:
|
|
1410
1325
|
raise ValueError("Missing required parameter 'group-public-id'")
|
|
1411
1326
|
url = f"{self.base_url}/api/v3/groups/{group_public_id}/stories"
|
|
1412
|
-
query_params = {
|
|
1413
|
-
|
|
1414
|
-
}
|
|
1415
|
-
response = self._get(url, params=query_params)
|
|
1327
|
+
query_params = {k: v for k, v in [("limit", limit), ("offset", offset)] if v is not None}
|
|
1328
|
+
response = await self._aget(url, params=query_params)
|
|
1416
1329
|
response.raise_for_status()
|
|
1417
1330
|
return response.json()
|
|
1418
1331
|
|
|
1419
|
-
def list_iterations(
|
|
1420
|
-
self,
|
|
1421
|
-
) -> list[Any]:
|
|
1332
|
+
async def list_iterations(self) -> list[Any]:
|
|
1422
1333
|
"""
|
|
1423
1334
|
Lists all available iterations from the API.
|
|
1424
1335
|
|
|
@@ -1436,19 +1347,12 @@ class ShortcutApp(APIApplication):
|
|
|
1436
1347
|
"""
|
|
1437
1348
|
url = f"{self.base_url}/api/v3/iterations"
|
|
1438
1349
|
query_params = {}
|
|
1439
|
-
response = self.
|
|
1350
|
+
response = await self._aget(url, params=query_params)
|
|
1440
1351
|
response.raise_for_status()
|
|
1441
1352
|
return response.json()
|
|
1442
1353
|
|
|
1443
|
-
def create_iteration(
|
|
1444
|
-
self,
|
|
1445
|
-
name,
|
|
1446
|
-
start_date,
|
|
1447
|
-
end_date,
|
|
1448
|
-
follower_ids=None,
|
|
1449
|
-
group_ids=None,
|
|
1450
|
-
labels=None,
|
|
1451
|
-
description=None,
|
|
1354
|
+
async def create_iteration(
|
|
1355
|
+
self, name, start_date, end_date, follower_ids=None, group_ids=None, labels=None, description=None
|
|
1452
1356
|
) -> dict[str, Any]:
|
|
1453
1357
|
"""
|
|
1454
1358
|
Creates a new iteration with the specified details and returns the server's response as a dictionary.
|
|
@@ -1490,13 +1394,11 @@ class ShortcutApp(APIApplication):
|
|
|
1490
1394
|
request_body = {k: v for k, v in request_body.items() if v is not None}
|
|
1491
1395
|
url = f"{self.base_url}/api/v3/iterations"
|
|
1492
1396
|
query_params = {}
|
|
1493
|
-
response = self.
|
|
1397
|
+
response = await self._apost(url, data=request_body, params=query_params)
|
|
1494
1398
|
response.raise_for_status()
|
|
1495
1399
|
return response.json()
|
|
1496
1400
|
|
|
1497
|
-
def disable_iterations(
|
|
1498
|
-
self,
|
|
1499
|
-
) -> Any:
|
|
1401
|
+
async def disable_iterations(self) -> Any:
|
|
1500
1402
|
"""
|
|
1501
1403
|
Disables iterations by making a PUT request to the iterations API endpoint.
|
|
1502
1404
|
|
|
@@ -1514,13 +1416,11 @@ class ShortcutApp(APIApplication):
|
|
|
1514
1416
|
"""
|
|
1515
1417
|
url = f"{self.base_url}/api/v3/iterations/disable"
|
|
1516
1418
|
query_params = {}
|
|
1517
|
-
response = self.
|
|
1419
|
+
response = await self._aput(url, data={}, params=query_params)
|
|
1518
1420
|
response.raise_for_status()
|
|
1519
1421
|
return response.json()
|
|
1520
1422
|
|
|
1521
|
-
def enable_iterations(
|
|
1522
|
-
self,
|
|
1523
|
-
) -> Any:
|
|
1423
|
+
async def enable_iterations(self) -> Any:
|
|
1524
1424
|
"""
|
|
1525
1425
|
Enable iterations for the API service.
|
|
1526
1426
|
|
|
@@ -1538,11 +1438,11 @@ class ShortcutApp(APIApplication):
|
|
|
1538
1438
|
"""
|
|
1539
1439
|
url = f"{self.base_url}/api/v3/iterations/enable"
|
|
1540
1440
|
query_params = {}
|
|
1541
|
-
response = self.
|
|
1441
|
+
response = await self._aput(url, data={}, params=query_params)
|
|
1542
1442
|
response.raise_for_status()
|
|
1543
1443
|
return response.json()
|
|
1544
1444
|
|
|
1545
|
-
def get_iteration(self, iteration_public_id) -> dict[str, Any]:
|
|
1445
|
+
async def get_iteration(self, iteration_public_id) -> dict[str, Any]:
|
|
1546
1446
|
"""
|
|
1547
1447
|
Retrieves iteration details using the specified public ID.
|
|
1548
1448
|
|
|
@@ -1563,11 +1463,11 @@ class ShortcutApp(APIApplication):
|
|
|
1563
1463
|
raise ValueError("Missing required parameter 'iteration-public-id'")
|
|
1564
1464
|
url = f"{self.base_url}/api/v3/iterations/{iteration_public_id}"
|
|
1565
1465
|
query_params = {}
|
|
1566
|
-
response = self.
|
|
1466
|
+
response = await self._aget(url, params=query_params)
|
|
1567
1467
|
response.raise_for_status()
|
|
1568
1468
|
return response.json()
|
|
1569
1469
|
|
|
1570
|
-
def update_iteration(
|
|
1470
|
+
async def update_iteration(
|
|
1571
1471
|
self,
|
|
1572
1472
|
iteration_public_id,
|
|
1573
1473
|
follower_ids=None,
|
|
@@ -1615,11 +1515,11 @@ class ShortcutApp(APIApplication):
|
|
|
1615
1515
|
request_body = {k: v for k, v in request_body.items() if v is not None}
|
|
1616
1516
|
url = f"{self.base_url}/api/v3/iterations/{iteration_public_id}"
|
|
1617
1517
|
query_params = {}
|
|
1618
|
-
response = self.
|
|
1518
|
+
response = await self._aput(url, data=request_body, params=query_params)
|
|
1619
1519
|
response.raise_for_status()
|
|
1620
1520
|
return response.json()
|
|
1621
1521
|
|
|
1622
|
-
def delete_iteration(self, iteration_public_id) -> Any:
|
|
1522
|
+
async def delete_iteration(self, iteration_public_id) -> Any:
|
|
1623
1523
|
"""
|
|
1624
1524
|
Deletes a specific iteration identified by its public ID.
|
|
1625
1525
|
|
|
@@ -1640,13 +1540,11 @@ class ShortcutApp(APIApplication):
|
|
|
1640
1540
|
raise ValueError("Missing required parameter 'iteration-public-id'")
|
|
1641
1541
|
url = f"{self.base_url}/api/v3/iterations/{iteration_public_id}"
|
|
1642
1542
|
query_params = {}
|
|
1643
|
-
response = self.
|
|
1543
|
+
response = await self._adelete(url, params=query_params)
|
|
1644
1544
|
response.raise_for_status()
|
|
1645
1545
|
return response.json()
|
|
1646
1546
|
|
|
1647
|
-
def list_iteration_stories(
|
|
1648
|
-
self, iteration_public_id, includes_description=None
|
|
1649
|
-
) -> list[Any]:
|
|
1547
|
+
async def list_iteration_stories(self, iteration_public_id, includes_description=None) -> list[Any]:
|
|
1650
1548
|
"""
|
|
1651
1549
|
Retrieves a list of stories for a specified iteration, optionally including their descriptions.
|
|
1652
1550
|
|
|
@@ -1667,16 +1565,12 @@ class ShortcutApp(APIApplication):
|
|
|
1667
1565
|
if iteration_public_id is None:
|
|
1668
1566
|
raise ValueError("Missing required parameter 'iteration-public-id'")
|
|
1669
1567
|
url = f"{self.base_url}/api/v3/iterations/{iteration_public_id}/stories"
|
|
1670
|
-
query_params = {
|
|
1671
|
-
|
|
1672
|
-
for k, v in [("includes_description", includes_description)]
|
|
1673
|
-
if v is not None
|
|
1674
|
-
}
|
|
1675
|
-
response = self._get(url, params=query_params)
|
|
1568
|
+
query_params = {k: v for k, v in [("includes_description", includes_description)] if v is not None}
|
|
1569
|
+
response = await self._aget(url, params=query_params)
|
|
1676
1570
|
response.raise_for_status()
|
|
1677
1571
|
return response.json()
|
|
1678
1572
|
|
|
1679
|
-
def get_key_result(self, key_result_public_id) -> dict[str, Any]:
|
|
1573
|
+
async def get_key_result(self, key_result_public_id) -> dict[str, Any]:
|
|
1680
1574
|
"""
|
|
1681
1575
|
Retrieves detailed information for a specific key result using its public identifier.
|
|
1682
1576
|
|
|
@@ -1697,17 +1591,12 @@ class ShortcutApp(APIApplication):
|
|
|
1697
1591
|
raise ValueError("Missing required parameter 'key-result-public-id'")
|
|
1698
1592
|
url = f"{self.base_url}/api/v3/key-results/{key_result_public_id}"
|
|
1699
1593
|
query_params = {}
|
|
1700
|
-
response = self.
|
|
1594
|
+
response = await self._aget(url, params=query_params)
|
|
1701
1595
|
response.raise_for_status()
|
|
1702
1596
|
return response.json()
|
|
1703
1597
|
|
|
1704
|
-
def update_key_result(
|
|
1705
|
-
self,
|
|
1706
|
-
key_result_public_id,
|
|
1707
|
-
name=None,
|
|
1708
|
-
initial_observed_value=None,
|
|
1709
|
-
observed_value=None,
|
|
1710
|
-
target_value=None,
|
|
1598
|
+
async def update_key_result(
|
|
1599
|
+
self, key_result_public_id, name=None, initial_observed_value=None, observed_value=None, target_value=None
|
|
1711
1600
|
) -> dict[str, Any]:
|
|
1712
1601
|
"""
|
|
1713
1602
|
Updates a key result with the provided details.
|
|
@@ -1739,11 +1628,11 @@ class ShortcutApp(APIApplication):
|
|
|
1739
1628
|
request_body = {k: v for k, v in request_body.items() if v is not None}
|
|
1740
1629
|
url = f"{self.base_url}/api/v3/key-results/{key_result_public_id}"
|
|
1741
1630
|
query_params = {}
|
|
1742
|
-
response = self.
|
|
1631
|
+
response = await self._aput(url, data=request_body, params=query_params)
|
|
1743
1632
|
response.raise_for_status()
|
|
1744
1633
|
return response.json()
|
|
1745
1634
|
|
|
1746
|
-
def list_labels(self, slim=None) -> list[Any]:
|
|
1635
|
+
async def list_labels(self, slim=None) -> list[Any]:
|
|
1747
1636
|
"""
|
|
1748
1637
|
Fetches a list of labels from the API.
|
|
1749
1638
|
|
|
@@ -1761,13 +1650,11 @@ class ShortcutApp(APIApplication):
|
|
|
1761
1650
|
"""
|
|
1762
1651
|
url = f"{self.base_url}/api/v3/labels"
|
|
1763
1652
|
query_params = {k: v for k, v in [("slim", slim)] if v is not None}
|
|
1764
|
-
response = self.
|
|
1653
|
+
response = await self._aget(url, params=query_params)
|
|
1765
1654
|
response.raise_for_status()
|
|
1766
1655
|
return response.json()
|
|
1767
1656
|
|
|
1768
|
-
def create_label(
|
|
1769
|
-
self, name, description=None, color=None, external_id=None
|
|
1770
|
-
) -> dict[str, Any]:
|
|
1657
|
+
async def create_label(self, name, description=None, color=None, external_id=None) -> dict[str, Any]:
|
|
1771
1658
|
"""
|
|
1772
1659
|
Creates a new label with the specified attributes.
|
|
1773
1660
|
|
|
@@ -1789,20 +1676,15 @@ class ShortcutApp(APIApplication):
|
|
|
1789
1676
|
"""
|
|
1790
1677
|
if name is None:
|
|
1791
1678
|
raise ValueError("Missing required parameter 'name'")
|
|
1792
|
-
request_body = {
|
|
1793
|
-
"name": name,
|
|
1794
|
-
"description": description,
|
|
1795
|
-
"color": color,
|
|
1796
|
-
"external_id": external_id,
|
|
1797
|
-
}
|
|
1679
|
+
request_body = {"name": name, "description": description, "color": color, "external_id": external_id}
|
|
1798
1680
|
request_body = {k: v for k, v in request_body.items() if v is not None}
|
|
1799
1681
|
url = f"{self.base_url}/api/v3/labels"
|
|
1800
1682
|
query_params = {}
|
|
1801
|
-
response = self.
|
|
1683
|
+
response = await self._apost(url, data=request_body, params=query_params)
|
|
1802
1684
|
response.raise_for_status()
|
|
1803
1685
|
return response.json()
|
|
1804
1686
|
|
|
1805
|
-
def get_label(self, label_public_id) -> dict[str, Any]:
|
|
1687
|
+
async def get_label(self, label_public_id) -> dict[str, Any]:
|
|
1806
1688
|
"""
|
|
1807
1689
|
Retrieves a label's details from the API using its public identifier.
|
|
1808
1690
|
|
|
@@ -1823,13 +1705,11 @@ class ShortcutApp(APIApplication):
|
|
|
1823
1705
|
raise ValueError("Missing required parameter 'label-public-id'")
|
|
1824
1706
|
url = f"{self.base_url}/api/v3/labels/{label_public_id}"
|
|
1825
1707
|
query_params = {}
|
|
1826
|
-
response = self.
|
|
1708
|
+
response = await self._aget(url, params=query_params)
|
|
1827
1709
|
response.raise_for_status()
|
|
1828
1710
|
return response.json()
|
|
1829
1711
|
|
|
1830
|
-
def update_label(
|
|
1831
|
-
self, label_public_id, name=None, description=None, color=None, archived=None
|
|
1832
|
-
) -> dict[str, Any]:
|
|
1712
|
+
async def update_label(self, label_public_id, name=None, description=None, color=None, archived=None) -> dict[str, Any]:
|
|
1833
1713
|
"""
|
|
1834
1714
|
Updates a label with the specified information.
|
|
1835
1715
|
|
|
@@ -1852,20 +1732,15 @@ class ShortcutApp(APIApplication):
|
|
|
1852
1732
|
"""
|
|
1853
1733
|
if label_public_id is None:
|
|
1854
1734
|
raise ValueError("Missing required parameter 'label-public-id'")
|
|
1855
|
-
request_body = {
|
|
1856
|
-
"name": name,
|
|
1857
|
-
"description": description,
|
|
1858
|
-
"color": color,
|
|
1859
|
-
"archived": archived,
|
|
1860
|
-
}
|
|
1735
|
+
request_body = {"name": name, "description": description, "color": color, "archived": archived}
|
|
1861
1736
|
request_body = {k: v for k, v in request_body.items() if v is not None}
|
|
1862
1737
|
url = f"{self.base_url}/api/v3/labels/{label_public_id}"
|
|
1863
1738
|
query_params = {}
|
|
1864
|
-
response = self.
|
|
1739
|
+
response = await self._aput(url, data=request_body, params=query_params)
|
|
1865
1740
|
response.raise_for_status()
|
|
1866
1741
|
return response.json()
|
|
1867
1742
|
|
|
1868
|
-
def delete_label(self, label_public_id) -> Any:
|
|
1743
|
+
async def delete_label(self, label_public_id) -> Any:
|
|
1869
1744
|
"""
|
|
1870
1745
|
Deletes a label identified by its public ID via an HTTP DELETE request.
|
|
1871
1746
|
|
|
@@ -1886,11 +1761,11 @@ class ShortcutApp(APIApplication):
|
|
|
1886
1761
|
raise ValueError("Missing required parameter 'label-public-id'")
|
|
1887
1762
|
url = f"{self.base_url}/api/v3/labels/{label_public_id}"
|
|
1888
1763
|
query_params = {}
|
|
1889
|
-
response = self.
|
|
1764
|
+
response = await self._adelete(url, params=query_params)
|
|
1890
1765
|
response.raise_for_status()
|
|
1891
1766
|
return response.json()
|
|
1892
1767
|
|
|
1893
|
-
def list_label_epics(self, label_public_id) -> list[Any]:
|
|
1768
|
+
async def list_label_epics(self, label_public_id) -> list[Any]:
|
|
1894
1769
|
"""
|
|
1895
1770
|
Retrieves a list of epics associated with a specific label.
|
|
1896
1771
|
|
|
@@ -1911,13 +1786,11 @@ class ShortcutApp(APIApplication):
|
|
|
1911
1786
|
raise ValueError("Missing required parameter 'label-public-id'")
|
|
1912
1787
|
url = f"{self.base_url}/api/v3/labels/{label_public_id}/epics"
|
|
1913
1788
|
query_params = {}
|
|
1914
|
-
response = self.
|
|
1789
|
+
response = await self._aget(url, params=query_params)
|
|
1915
1790
|
response.raise_for_status()
|
|
1916
1791
|
return response.json()
|
|
1917
1792
|
|
|
1918
|
-
def list_label_stories(
|
|
1919
|
-
self, label_public_id, includes_description=None
|
|
1920
|
-
) -> list[Any]:
|
|
1793
|
+
async def list_label_stories(self, label_public_id, includes_description=None) -> list[Any]:
|
|
1921
1794
|
"""
|
|
1922
1795
|
Retrieves a list of stories associated with a specific label.
|
|
1923
1796
|
|
|
@@ -1938,18 +1811,12 @@ class ShortcutApp(APIApplication):
|
|
|
1938
1811
|
if label_public_id is None:
|
|
1939
1812
|
raise ValueError("Missing required parameter 'label-public-id'")
|
|
1940
1813
|
url = f"{self.base_url}/api/v3/labels/{label_public_id}/stories"
|
|
1941
|
-
query_params = {
|
|
1942
|
-
|
|
1943
|
-
for k, v in [("includes_description", includes_description)]
|
|
1944
|
-
if v is not None
|
|
1945
|
-
}
|
|
1946
|
-
response = self._get(url, params=query_params)
|
|
1814
|
+
query_params = {k: v for k, v in [("includes_description", includes_description)] if v is not None}
|
|
1815
|
+
response = await self._aget(url, params=query_params)
|
|
1947
1816
|
response.raise_for_status()
|
|
1948
1817
|
return response.json()
|
|
1949
1818
|
|
|
1950
|
-
def list_linked_files(
|
|
1951
|
-
self,
|
|
1952
|
-
) -> list[Any]:
|
|
1819
|
+
async def list_linked_files(self) -> list[Any]:
|
|
1953
1820
|
"""
|
|
1954
1821
|
Retrieve a list of all linked files.
|
|
1955
1822
|
|
|
@@ -1967,21 +1834,12 @@ class ShortcutApp(APIApplication):
|
|
|
1967
1834
|
"""
|
|
1968
1835
|
url = f"{self.base_url}/api/v3/linked-files"
|
|
1969
1836
|
query_params = {}
|
|
1970
|
-
response = self.
|
|
1837
|
+
response = await self._aget(url, params=query_params)
|
|
1971
1838
|
response.raise_for_status()
|
|
1972
1839
|
return response.json()
|
|
1973
1840
|
|
|
1974
|
-
def create_linked_file(
|
|
1975
|
-
self,
|
|
1976
|
-
name,
|
|
1977
|
-
type,
|
|
1978
|
-
url,
|
|
1979
|
-
description=None,
|
|
1980
|
-
story_id=None,
|
|
1981
|
-
thumbnail_url=None,
|
|
1982
|
-
size=None,
|
|
1983
|
-
uploader_id=None,
|
|
1984
|
-
content_type=None,
|
|
1841
|
+
async def create_linked_file(
|
|
1842
|
+
self, name, type, url, description=None, story_id=None, thumbnail_url=None, size=None, uploader_id=None, content_type=None
|
|
1985
1843
|
) -> dict[str, Any]:
|
|
1986
1844
|
"""
|
|
1987
1845
|
Creates a linked file with the specified attributes.
|
|
@@ -2027,11 +1885,11 @@ class ShortcutApp(APIApplication):
|
|
|
2027
1885
|
request_body = {k: v for k, v in request_body.items() if v is not None}
|
|
2028
1886
|
url = f"{self.base_url}/api/v3/linked-files"
|
|
2029
1887
|
query_params = {}
|
|
2030
|
-
response = self.
|
|
1888
|
+
response = await self._apost(url, data=request_body, params=query_params)
|
|
2031
1889
|
response.raise_for_status()
|
|
2032
1890
|
return response.json()
|
|
2033
1891
|
|
|
2034
|
-
def get_linked_file(self, linked_file_public_id) -> dict[str, Any]:
|
|
1892
|
+
async def get_linked_file(self, linked_file_public_id) -> dict[str, Any]:
|
|
2035
1893
|
"""
|
|
2036
1894
|
Fetches details for a linked file by its public identifier.
|
|
2037
1895
|
|
|
@@ -2052,11 +1910,11 @@ class ShortcutApp(APIApplication):
|
|
|
2052
1910
|
raise ValueError("Missing required parameter 'linked-file-public-id'")
|
|
2053
1911
|
url = f"{self.base_url}/api/v3/linked-files/{linked_file_public_id}"
|
|
2054
1912
|
query_params = {}
|
|
2055
|
-
response = self.
|
|
1913
|
+
response = await self._aget(url, params=query_params)
|
|
2056
1914
|
response.raise_for_status()
|
|
2057
1915
|
return response.json()
|
|
2058
1916
|
|
|
2059
|
-
def update_linked_file(
|
|
1917
|
+
async def update_linked_file(
|
|
2060
1918
|
self,
|
|
2061
1919
|
linked_file_public_id,
|
|
2062
1920
|
description=None,
|
|
@@ -2107,11 +1965,11 @@ class ShortcutApp(APIApplication):
|
|
|
2107
1965
|
request_body = {k: v for k, v in request_body.items() if v is not None}
|
|
2108
1966
|
url = f"{self.base_url}/api/v3/linked-files/{linked_file_public_id}"
|
|
2109
1967
|
query_params = {}
|
|
2110
|
-
response = self.
|
|
1968
|
+
response = await self._aput(url, data=request_body, params=query_params)
|
|
2111
1969
|
response.raise_for_status()
|
|
2112
1970
|
return response.json()
|
|
2113
1971
|
|
|
2114
|
-
def delete_linked_file(self, linked_file_public_id) -> Any:
|
|
1972
|
+
async def delete_linked_file(self, linked_file_public_id) -> Any:
|
|
2115
1973
|
"""
|
|
2116
1974
|
Deletes a linked file by its public ID using the API.
|
|
2117
1975
|
|
|
@@ -2132,13 +1990,11 @@ class ShortcutApp(APIApplication):
|
|
|
2132
1990
|
raise ValueError("Missing required parameter 'linked-file-public-id'")
|
|
2133
1991
|
url = f"{self.base_url}/api/v3/linked-files/{linked_file_public_id}"
|
|
2134
1992
|
query_params = {}
|
|
2135
|
-
response = self.
|
|
1993
|
+
response = await self._adelete(url, params=query_params)
|
|
2136
1994
|
response.raise_for_status()
|
|
2137
1995
|
return response.json()
|
|
2138
1996
|
|
|
2139
|
-
def get_current_member_info(
|
|
2140
|
-
self,
|
|
2141
|
-
) -> dict[str, Any]:
|
|
1997
|
+
async def get_current_member_info(self) -> dict[str, Any]:
|
|
2142
1998
|
"""
|
|
2143
1999
|
Retrieves information about the current authenticated member.
|
|
2144
2000
|
|
|
@@ -2156,13 +2012,11 @@ class ShortcutApp(APIApplication):
|
|
|
2156
2012
|
"""
|
|
2157
2013
|
url = f"{self.base_url}/api/v3/member"
|
|
2158
2014
|
query_params = {}
|
|
2159
|
-
response = self.
|
|
2015
|
+
response = await self._aget(url, params=query_params)
|
|
2160
2016
|
response.raise_for_status()
|
|
2161
2017
|
return response.json()
|
|
2162
2018
|
|
|
2163
|
-
def list_milestones(
|
|
2164
|
-
self,
|
|
2165
|
-
) -> list[Any]:
|
|
2019
|
+
async def list_milestones(self) -> list[Any]:
|
|
2166
2020
|
"""
|
|
2167
2021
|
Lists milestones by fetching them from a specified API endpoint.
|
|
2168
2022
|
|
|
@@ -2180,18 +2034,12 @@ class ShortcutApp(APIApplication):
|
|
|
2180
2034
|
"""
|
|
2181
2035
|
url = f"{self.base_url}/api/v3/milestones"
|
|
2182
2036
|
query_params = {}
|
|
2183
|
-
response = self.
|
|
2037
|
+
response = await self._aget(url, params=query_params)
|
|
2184
2038
|
response.raise_for_status()
|
|
2185
2039
|
return response.json()
|
|
2186
2040
|
|
|
2187
|
-
def create_milestone(
|
|
2188
|
-
self,
|
|
2189
|
-
name,
|
|
2190
|
-
description=None,
|
|
2191
|
-
state=None,
|
|
2192
|
-
started_at_override=None,
|
|
2193
|
-
completed_at_override=None,
|
|
2194
|
-
categories=None,
|
|
2041
|
+
async def create_milestone(
|
|
2042
|
+
self, name, description=None, state=None, started_at_override=None, completed_at_override=None, categories=None
|
|
2195
2043
|
) -> dict[str, Any]:
|
|
2196
2044
|
"""
|
|
2197
2045
|
Creates a new milestone with the specified parameters.
|
|
@@ -2227,11 +2075,11 @@ class ShortcutApp(APIApplication):
|
|
|
2227
2075
|
request_body = {k: v for k, v in request_body.items() if v is not None}
|
|
2228
2076
|
url = f"{self.base_url}/api/v3/milestones"
|
|
2229
2077
|
query_params = {}
|
|
2230
|
-
response = self.
|
|
2078
|
+
response = await self._apost(url, data=request_body, params=query_params)
|
|
2231
2079
|
response.raise_for_status()
|
|
2232
2080
|
return response.json()
|
|
2233
2081
|
|
|
2234
|
-
def get_milestone(self, milestone_public_id) -> dict[str, Any]:
|
|
2082
|
+
async def get_milestone(self, milestone_public_id) -> dict[str, Any]:
|
|
2235
2083
|
"""
|
|
2236
2084
|
Retrieves a milestone resource by its public identifier.
|
|
2237
2085
|
|
|
@@ -2252,11 +2100,11 @@ class ShortcutApp(APIApplication):
|
|
|
2252
2100
|
raise ValueError("Missing required parameter 'milestone-public-id'")
|
|
2253
2101
|
url = f"{self.base_url}/api/v3/milestones/{milestone_public_id}"
|
|
2254
2102
|
query_params = {}
|
|
2255
|
-
response = self.
|
|
2103
|
+
response = await self._aget(url, params=query_params)
|
|
2256
2104
|
response.raise_for_status()
|
|
2257
2105
|
return response.json()
|
|
2258
2106
|
|
|
2259
|
-
def update_milestone(
|
|
2107
|
+
async def update_milestone(
|
|
2260
2108
|
self,
|
|
2261
2109
|
milestone_public_id,
|
|
2262
2110
|
description=None,
|
|
@@ -2310,11 +2158,11 @@ class ShortcutApp(APIApplication):
|
|
|
2310
2158
|
request_body = {k: v for k, v in request_body.items() if v is not None}
|
|
2311
2159
|
url = f"{self.base_url}/api/v3/milestones/{milestone_public_id}"
|
|
2312
2160
|
query_params = {}
|
|
2313
|
-
response = self.
|
|
2161
|
+
response = await self._aput(url, data=request_body, params=query_params)
|
|
2314
2162
|
response.raise_for_status()
|
|
2315
2163
|
return response.json()
|
|
2316
2164
|
|
|
2317
|
-
def delete_milestone(self, milestone_public_id) -> Any:
|
|
2165
|
+
async def delete_milestone(self, milestone_public_id) -> Any:
|
|
2318
2166
|
"""
|
|
2319
2167
|
Deletes a milestone by its public ID.
|
|
2320
2168
|
|
|
@@ -2335,11 +2183,11 @@ class ShortcutApp(APIApplication):
|
|
|
2335
2183
|
raise ValueError("Missing required parameter 'milestone-public-id'")
|
|
2336
2184
|
url = f"{self.base_url}/api/v3/milestones/{milestone_public_id}"
|
|
2337
2185
|
query_params = {}
|
|
2338
|
-
response = self.
|
|
2186
|
+
response = await self._adelete(url, params=query_params)
|
|
2339
2187
|
response.raise_for_status()
|
|
2340
2188
|
return response.json()
|
|
2341
2189
|
|
|
2342
|
-
def list_milestone_epics(self, milestone_public_id) -> list[Any]:
|
|
2190
|
+
async def list_milestone_epics(self, milestone_public_id) -> list[Any]:
|
|
2343
2191
|
"""
|
|
2344
2192
|
Retrieves a list of epics associated with a specified milestone.
|
|
2345
2193
|
|
|
@@ -2360,13 +2208,11 @@ class ShortcutApp(APIApplication):
|
|
|
2360
2208
|
raise ValueError("Missing required parameter 'milestone-public-id'")
|
|
2361
2209
|
url = f"{self.base_url}/api/v3/milestones/{milestone_public_id}/epics"
|
|
2362
2210
|
query_params = {}
|
|
2363
|
-
response = self.
|
|
2211
|
+
response = await self._aget(url, params=query_params)
|
|
2364
2212
|
response.raise_for_status()
|
|
2365
2213
|
return response.json()
|
|
2366
2214
|
|
|
2367
|
-
def list_objectives(
|
|
2368
|
-
self,
|
|
2369
|
-
) -> list[Any]:
|
|
2215
|
+
async def list_objectives(self) -> list[Any]:
|
|
2370
2216
|
"""
|
|
2371
2217
|
Retrieves a list of all objectives from the API endpoint.
|
|
2372
2218
|
|
|
@@ -2384,18 +2230,12 @@ class ShortcutApp(APIApplication):
|
|
|
2384
2230
|
"""
|
|
2385
2231
|
url = f"{self.base_url}/api/v3/objectives"
|
|
2386
2232
|
query_params = {}
|
|
2387
|
-
response = self.
|
|
2233
|
+
response = await self._aget(url, params=query_params)
|
|
2388
2234
|
response.raise_for_status()
|
|
2389
2235
|
return response.json()
|
|
2390
2236
|
|
|
2391
|
-
def create_objective(
|
|
2392
|
-
self,
|
|
2393
|
-
name,
|
|
2394
|
-
description=None,
|
|
2395
|
-
state=None,
|
|
2396
|
-
started_at_override=None,
|
|
2397
|
-
completed_at_override=None,
|
|
2398
|
-
categories=None,
|
|
2237
|
+
async def create_objective(
|
|
2238
|
+
self, name, description=None, state=None, started_at_override=None, completed_at_override=None, categories=None
|
|
2399
2239
|
) -> dict[str, Any]:
|
|
2400
2240
|
"""
|
|
2401
2241
|
Creates a new objective resource with the specified attributes and returns the created objective's data.
|
|
@@ -2431,11 +2271,11 @@ class ShortcutApp(APIApplication):
|
|
|
2431
2271
|
request_body = {k: v for k, v in request_body.items() if v is not None}
|
|
2432
2272
|
url = f"{self.base_url}/api/v3/objectives"
|
|
2433
2273
|
query_params = {}
|
|
2434
|
-
response = self.
|
|
2274
|
+
response = await self._apost(url, data=request_body, params=query_params)
|
|
2435
2275
|
response.raise_for_status()
|
|
2436
2276
|
return response.json()
|
|
2437
2277
|
|
|
2438
|
-
def get_objective(self, objective_public_id) -> dict[str, Any]:
|
|
2278
|
+
async def get_objective(self, objective_public_id) -> dict[str, Any]:
|
|
2439
2279
|
"""
|
|
2440
2280
|
Retrieves an objective by its public ID from the API.
|
|
2441
2281
|
|
|
@@ -2456,11 +2296,11 @@ class ShortcutApp(APIApplication):
|
|
|
2456
2296
|
raise ValueError("Missing required parameter 'objective-public-id'")
|
|
2457
2297
|
url = f"{self.base_url}/api/v3/objectives/{objective_public_id}"
|
|
2458
2298
|
query_params = {}
|
|
2459
|
-
response = self.
|
|
2299
|
+
response = await self._aget(url, params=query_params)
|
|
2460
2300
|
response.raise_for_status()
|
|
2461
2301
|
return response.json()
|
|
2462
2302
|
|
|
2463
|
-
def update_objective(
|
|
2303
|
+
async def update_objective(
|
|
2464
2304
|
self,
|
|
2465
2305
|
objective_public_id,
|
|
2466
2306
|
description=None,
|
|
@@ -2514,11 +2354,11 @@ class ShortcutApp(APIApplication):
|
|
|
2514
2354
|
request_body = {k: v for k, v in request_body.items() if v is not None}
|
|
2515
2355
|
url = f"{self.base_url}/api/v3/objectives/{objective_public_id}"
|
|
2516
2356
|
query_params = {}
|
|
2517
|
-
response = self.
|
|
2357
|
+
response = await self._aput(url, data=request_body, params=query_params)
|
|
2518
2358
|
response.raise_for_status()
|
|
2519
2359
|
return response.json()
|
|
2520
2360
|
|
|
2521
|
-
def delete_objective(self, objective_public_id) -> Any:
|
|
2361
|
+
async def delete_objective(self, objective_public_id) -> Any:
|
|
2522
2362
|
"""
|
|
2523
2363
|
Deletes an objective by its public ID using an HTTP DELETE request.
|
|
2524
2364
|
|
|
@@ -2539,11 +2379,11 @@ class ShortcutApp(APIApplication):
|
|
|
2539
2379
|
raise ValueError("Missing required parameter 'objective-public-id'")
|
|
2540
2380
|
url = f"{self.base_url}/api/v3/objectives/{objective_public_id}"
|
|
2541
2381
|
query_params = {}
|
|
2542
|
-
response = self.
|
|
2382
|
+
response = await self._adelete(url, params=query_params)
|
|
2543
2383
|
response.raise_for_status()
|
|
2544
2384
|
return response.json()
|
|
2545
2385
|
|
|
2546
|
-
def list_objective_epics(self, objective_public_id) -> list[Any]:
|
|
2386
|
+
async def list_objective_epics(self, objective_public_id) -> list[Any]:
|
|
2547
2387
|
"""
|
|
2548
2388
|
Retrieves a list of epics associated with a specific objective.
|
|
2549
2389
|
|
|
@@ -2564,13 +2404,11 @@ class ShortcutApp(APIApplication):
|
|
|
2564
2404
|
raise ValueError("Missing required parameter 'objective-public-id'")
|
|
2565
2405
|
url = f"{self.base_url}/api/v3/objectives/{objective_public_id}/epics"
|
|
2566
2406
|
query_params = {}
|
|
2567
|
-
response = self.
|
|
2407
|
+
response = await self._aget(url, params=query_params)
|
|
2568
2408
|
response.raise_for_status()
|
|
2569
2409
|
return response.json()
|
|
2570
2410
|
|
|
2571
|
-
def list_projects(
|
|
2572
|
-
self,
|
|
2573
|
-
) -> list[Any]:
|
|
2411
|
+
async def list_projects(self) -> list[Any]:
|
|
2574
2412
|
"""
|
|
2575
2413
|
Retrieves and lists all available projects from the API.
|
|
2576
2414
|
|
|
@@ -2588,11 +2426,11 @@ class ShortcutApp(APIApplication):
|
|
|
2588
2426
|
"""
|
|
2589
2427
|
url = f"{self.base_url}/api/v3/projects"
|
|
2590
2428
|
query_params = {}
|
|
2591
|
-
response = self.
|
|
2429
|
+
response = await self._aget(url, params=query_params)
|
|
2592
2430
|
response.raise_for_status()
|
|
2593
2431
|
return response.json()
|
|
2594
2432
|
|
|
2595
|
-
def create_project(
|
|
2433
|
+
async def create_project(
|
|
2596
2434
|
self,
|
|
2597
2435
|
name,
|
|
2598
2436
|
team_id,
|
|
@@ -2651,11 +2489,11 @@ class ShortcutApp(APIApplication):
|
|
|
2651
2489
|
request_body = {k: v for k, v in request_body.items() if v is not None}
|
|
2652
2490
|
url = f"{self.base_url}/api/v3/projects"
|
|
2653
2491
|
query_params = {}
|
|
2654
|
-
response = self.
|
|
2492
|
+
response = await self._apost(url, data=request_body, params=query_params)
|
|
2655
2493
|
response.raise_for_status()
|
|
2656
2494
|
return response.json()
|
|
2657
2495
|
|
|
2658
|
-
def get_project(self, project_public_id) -> dict[str, Any]:
|
|
2496
|
+
async def get_project(self, project_public_id) -> dict[str, Any]:
|
|
2659
2497
|
"""
|
|
2660
2498
|
Retrieves project information by its public ID.
|
|
2661
2499
|
|
|
@@ -2676,11 +2514,11 @@ class ShortcutApp(APIApplication):
|
|
|
2676
2514
|
raise ValueError("Missing required parameter 'project-public-id'")
|
|
2677
2515
|
url = f"{self.base_url}/api/v3/projects/{project_public_id}"
|
|
2678
2516
|
query_params = {}
|
|
2679
|
-
response = self.
|
|
2517
|
+
response = await self._aget(url, params=query_params)
|
|
2680
2518
|
response.raise_for_status()
|
|
2681
2519
|
return response.json()
|
|
2682
2520
|
|
|
2683
|
-
def update_project(
|
|
2521
|
+
async def update_project(
|
|
2684
2522
|
self,
|
|
2685
2523
|
project_public_id,
|
|
2686
2524
|
description=None,
|
|
@@ -2734,11 +2572,11 @@ class ShortcutApp(APIApplication):
|
|
|
2734
2572
|
request_body = {k: v for k, v in request_body.items() if v is not None}
|
|
2735
2573
|
url = f"{self.base_url}/api/v3/projects/{project_public_id}"
|
|
2736
2574
|
query_params = {}
|
|
2737
|
-
response = self.
|
|
2575
|
+
response = await self._aput(url, data=request_body, params=query_params)
|
|
2738
2576
|
response.raise_for_status()
|
|
2739
2577
|
return response.json()
|
|
2740
2578
|
|
|
2741
|
-
def delete_project(self, project_public_id) -> Any:
|
|
2579
|
+
async def delete_project(self, project_public_id) -> Any:
|
|
2742
2580
|
"""
|
|
2743
2581
|
Deletes a project using its public ID.
|
|
2744
2582
|
|
|
@@ -2759,11 +2597,11 @@ class ShortcutApp(APIApplication):
|
|
|
2759
2597
|
raise ValueError("Missing required parameter 'project-public-id'")
|
|
2760
2598
|
url = f"{self.base_url}/api/v3/projects/{project_public_id}"
|
|
2761
2599
|
query_params = {}
|
|
2762
|
-
response = self.
|
|
2600
|
+
response = await self._adelete(url, params=query_params)
|
|
2763
2601
|
response.raise_for_status()
|
|
2764
2602
|
return response.json()
|
|
2765
2603
|
|
|
2766
|
-
def list_stories(self, project_public_id, includes_description=None) -> list[Any]:
|
|
2604
|
+
async def list_stories(self, project_public_id, includes_description=None) -> list[Any]:
|
|
2767
2605
|
"""
|
|
2768
2606
|
Retrieves a list of stories for a specific project, with optional inclusion of story descriptions.
|
|
2769
2607
|
|
|
@@ -2784,18 +2622,12 @@ class ShortcutApp(APIApplication):
|
|
|
2784
2622
|
if project_public_id is None:
|
|
2785
2623
|
raise ValueError("Missing required parameter 'project-public-id'")
|
|
2786
2624
|
url = f"{self.base_url}/api/v3/projects/{project_public_id}/stories"
|
|
2787
|
-
query_params = {
|
|
2788
|
-
|
|
2789
|
-
for k, v in [("includes_description", includes_description)]
|
|
2790
|
-
if v is not None
|
|
2791
|
-
}
|
|
2792
|
-
response = self._get(url, params=query_params)
|
|
2625
|
+
query_params = {k: v for k, v in [("includes_description", includes_description)] if v is not None}
|
|
2626
|
+
response = await self._aget(url, params=query_params)
|
|
2793
2627
|
response.raise_for_status()
|
|
2794
2628
|
return response.json()
|
|
2795
2629
|
|
|
2796
|
-
def list_repositories(
|
|
2797
|
-
self,
|
|
2798
|
-
) -> list[Any]:
|
|
2630
|
+
async def list_repositories(self) -> list[Any]:
|
|
2799
2631
|
"""
|
|
2800
2632
|
Lists all repositories from the API.
|
|
2801
2633
|
|
|
@@ -2813,11 +2645,11 @@ class ShortcutApp(APIApplication):
|
|
|
2813
2645
|
"""
|
|
2814
2646
|
url = f"{self.base_url}/api/v3/repositories"
|
|
2815
2647
|
query_params = {}
|
|
2816
|
-
response = self.
|
|
2648
|
+
response = await self._aget(url, params=query_params)
|
|
2817
2649
|
response.raise_for_status()
|
|
2818
2650
|
return response.json()
|
|
2819
2651
|
|
|
2820
|
-
def get_repository(self, repo_public_id) -> dict[str, Any]:
|
|
2652
|
+
async def get_repository(self, repo_public_id) -> dict[str, Any]:
|
|
2821
2653
|
"""
|
|
2822
2654
|
Retrieves detailed information about a repository by its public ID.
|
|
2823
2655
|
|
|
@@ -2838,13 +2670,11 @@ class ShortcutApp(APIApplication):
|
|
|
2838
2670
|
raise ValueError("Missing required parameter 'repo-public-id'")
|
|
2839
2671
|
url = f"{self.base_url}/api/v3/repositories/{repo_public_id}"
|
|
2840
2672
|
query_params = {}
|
|
2841
|
-
response = self.
|
|
2673
|
+
response = await self._aget(url, params=query_params)
|
|
2842
2674
|
response.raise_for_status()
|
|
2843
2675
|
return response.json()
|
|
2844
2676
|
|
|
2845
|
-
def search(
|
|
2846
|
-
self, query, page_size=None, detail=None, next=None, entity_types=None
|
|
2847
|
-
) -> dict[str, Any]:
|
|
2677
|
+
async def search(self, query, page_size=None, detail=None, next=None, entity_types=None) -> dict[str, Any]:
|
|
2848
2678
|
"""
|
|
2849
2679
|
Performs a search operation based on the provided query string and optional parameters like page size and entity types.
|
|
2850
2680
|
|
|
@@ -2869,22 +2699,14 @@ class ShortcutApp(APIApplication):
|
|
|
2869
2699
|
url = f"{self.base_url}/api/v3/search"
|
|
2870
2700
|
query_params = {
|
|
2871
2701
|
k: v
|
|
2872
|
-
for k, v in [
|
|
2873
|
-
("query", query),
|
|
2874
|
-
("page_size", page_size),
|
|
2875
|
-
("detail", detail),
|
|
2876
|
-
("next", next),
|
|
2877
|
-
("entity_types", entity_types),
|
|
2878
|
-
]
|
|
2702
|
+
for k, v in [("query", query), ("page_size", page_size), ("detail", detail), ("next", next), ("entity_types", entity_types)]
|
|
2879
2703
|
if v is not None
|
|
2880
2704
|
}
|
|
2881
|
-
response = self.
|
|
2705
|
+
response = await self._aget(url, params=query_params)
|
|
2882
2706
|
response.raise_for_status()
|
|
2883
2707
|
return response.json()
|
|
2884
2708
|
|
|
2885
|
-
def search_epics(
|
|
2886
|
-
self, query, page_size=None, detail=None, next=None, entity_types=None
|
|
2887
|
-
) -> dict[str, Any]:
|
|
2709
|
+
async def search_epics(self, query, page_size=None, detail=None, next=None, entity_types=None) -> dict[str, Any]:
|
|
2888
2710
|
"""
|
|
2889
2711
|
Searches for epics based on the provided query parameters.
|
|
2890
2712
|
|
|
@@ -2910,22 +2732,14 @@ class ShortcutApp(APIApplication):
|
|
|
2910
2732
|
url = f"{self.base_url}/api/v3/search/epics"
|
|
2911
2733
|
query_params = {
|
|
2912
2734
|
k: v
|
|
2913
|
-
for k, v in [
|
|
2914
|
-
("query", query),
|
|
2915
|
-
("page_size", page_size),
|
|
2916
|
-
("detail", detail),
|
|
2917
|
-
("next", next),
|
|
2918
|
-
("entity_types", entity_types),
|
|
2919
|
-
]
|
|
2735
|
+
for k, v in [("query", query), ("page_size", page_size), ("detail", detail), ("next", next), ("entity_types", entity_types)]
|
|
2920
2736
|
if v is not None
|
|
2921
2737
|
}
|
|
2922
|
-
response = self.
|
|
2738
|
+
response = await self._aget(url, params=query_params)
|
|
2923
2739
|
response.raise_for_status()
|
|
2924
2740
|
return response.json()
|
|
2925
2741
|
|
|
2926
|
-
def search_iterations(
|
|
2927
|
-
self, query, page_size=None, detail=None, next=None, entity_types=None
|
|
2928
|
-
) -> dict[str, Any]:
|
|
2742
|
+
async def search_iterations(self, query, page_size=None, detail=None, next=None, entity_types=None) -> dict[str, Any]:
|
|
2929
2743
|
"""
|
|
2930
2744
|
Searches for iterations based on a query and additional parameters.
|
|
2931
2745
|
|
|
@@ -2951,22 +2765,14 @@ class ShortcutApp(APIApplication):
|
|
|
2951
2765
|
url = f"{self.base_url}/api/v3/search/iterations"
|
|
2952
2766
|
query_params = {
|
|
2953
2767
|
k: v
|
|
2954
|
-
for k, v in [
|
|
2955
|
-
("query", query),
|
|
2956
|
-
("page_size", page_size),
|
|
2957
|
-
("detail", detail),
|
|
2958
|
-
("next", next),
|
|
2959
|
-
("entity_types", entity_types),
|
|
2960
|
-
]
|
|
2768
|
+
for k, v in [("query", query), ("page_size", page_size), ("detail", detail), ("next", next), ("entity_types", entity_types)]
|
|
2961
2769
|
if v is not None
|
|
2962
2770
|
}
|
|
2963
|
-
response = self.
|
|
2771
|
+
response = await self._aget(url, params=query_params)
|
|
2964
2772
|
response.raise_for_status()
|
|
2965
2773
|
return response.json()
|
|
2966
2774
|
|
|
2967
|
-
def search_milestones(
|
|
2968
|
-
self, query, page_size=None, detail=None, next=None, entity_types=None
|
|
2969
|
-
) -> dict[str, Any]:
|
|
2775
|
+
async def search_milestones(self, query, page_size=None, detail=None, next=None, entity_types=None) -> dict[str, Any]:
|
|
2970
2776
|
"""
|
|
2971
2777
|
Searches for milestones matching the provided query and returns the results as a dictionary.
|
|
2972
2778
|
|
|
@@ -2992,22 +2798,14 @@ class ShortcutApp(APIApplication):
|
|
|
2992
2798
|
url = f"{self.base_url}/api/v3/search/milestones"
|
|
2993
2799
|
query_params = {
|
|
2994
2800
|
k: v
|
|
2995
|
-
for k, v in [
|
|
2996
|
-
("query", query),
|
|
2997
|
-
("page_size", page_size),
|
|
2998
|
-
("detail", detail),
|
|
2999
|
-
("next", next),
|
|
3000
|
-
("entity_types", entity_types),
|
|
3001
|
-
]
|
|
2801
|
+
for k, v in [("query", query), ("page_size", page_size), ("detail", detail), ("next", next), ("entity_types", entity_types)]
|
|
3002
2802
|
if v is not None
|
|
3003
2803
|
}
|
|
3004
|
-
response = self.
|
|
2804
|
+
response = await self._aget(url, params=query_params)
|
|
3005
2805
|
response.raise_for_status()
|
|
3006
2806
|
return response.json()
|
|
3007
2807
|
|
|
3008
|
-
def search_objectives(
|
|
3009
|
-
self, query, page_size=None, detail=None, next=None, entity_types=None
|
|
3010
|
-
) -> dict[str, Any]:
|
|
2808
|
+
async def search_objectives(self, query, page_size=None, detail=None, next=None, entity_types=None) -> dict[str, Any]:
|
|
3011
2809
|
"""
|
|
3012
2810
|
Searches for objectives based on the specified query and returns the search results.
|
|
3013
2811
|
|
|
@@ -3033,22 +2831,14 @@ class ShortcutApp(APIApplication):
|
|
|
3033
2831
|
url = f"{self.base_url}/api/v3/search/objectives"
|
|
3034
2832
|
query_params = {
|
|
3035
2833
|
k: v
|
|
3036
|
-
for k, v in [
|
|
3037
|
-
("query", query),
|
|
3038
|
-
("page_size", page_size),
|
|
3039
|
-
("detail", detail),
|
|
3040
|
-
("next", next),
|
|
3041
|
-
("entity_types", entity_types),
|
|
3042
|
-
]
|
|
2834
|
+
for k, v in [("query", query), ("page_size", page_size), ("detail", detail), ("next", next), ("entity_types", entity_types)]
|
|
3043
2835
|
if v is not None
|
|
3044
2836
|
}
|
|
3045
|
-
response = self.
|
|
2837
|
+
response = await self._aget(url, params=query_params)
|
|
3046
2838
|
response.raise_for_status()
|
|
3047
2839
|
return response.json()
|
|
3048
2840
|
|
|
3049
|
-
def search_stories(
|
|
3050
|
-
self, query, page_size=None, detail=None, next=None, entity_types=None
|
|
3051
|
-
) -> dict[str, Any]:
|
|
2841
|
+
async def search_stories(self, query, page_size=None, detail=None, next=None, entity_types=None) -> dict[str, Any]:
|
|
3052
2842
|
"""
|
|
3053
2843
|
Searches for stories matching the given query and optional filters, returning paginated results from the stories API.
|
|
3054
2844
|
|
|
@@ -3074,20 +2864,14 @@ class ShortcutApp(APIApplication):
|
|
|
3074
2864
|
url = f"{self.base_url}/api/v3/search/stories"
|
|
3075
2865
|
query_params = {
|
|
3076
2866
|
k: v
|
|
3077
|
-
for k, v in [
|
|
3078
|
-
("query", query),
|
|
3079
|
-
("page_size", page_size),
|
|
3080
|
-
("detail", detail),
|
|
3081
|
-
("next", next),
|
|
3082
|
-
("entity_types", entity_types),
|
|
3083
|
-
]
|
|
2867
|
+
for k, v in [("query", query), ("page_size", page_size), ("detail", detail), ("next", next), ("entity_types", entity_types)]
|
|
3084
2868
|
if v is not None
|
|
3085
2869
|
}
|
|
3086
|
-
response = self.
|
|
2870
|
+
response = await self._aget(url, params=query_params)
|
|
3087
2871
|
response.raise_for_status()
|
|
3088
2872
|
return response.json()
|
|
3089
2873
|
|
|
3090
|
-
def create_story(
|
|
2874
|
+
async def create_story(
|
|
3091
2875
|
self,
|
|
3092
2876
|
name,
|
|
3093
2877
|
description=None,
|
|
@@ -3205,11 +2989,11 @@ class ShortcutApp(APIApplication):
|
|
|
3205
2989
|
request_body = {k: v for k, v in request_body.items() if v is not None}
|
|
3206
2990
|
url = f"{self.base_url}/api/v3/stories"
|
|
3207
2991
|
query_params = {}
|
|
3208
|
-
response = self.
|
|
2992
|
+
response = await self._apost(url, data=request_body, params=query_params)
|
|
3209
2993
|
response.raise_for_status()
|
|
3210
2994
|
return response.json()
|
|
3211
2995
|
|
|
3212
|
-
def update_multiple_stories(
|
|
2996
|
+
async def update_multiple_stories(
|
|
3213
2997
|
self,
|
|
3214
2998
|
story_ids,
|
|
3215
2999
|
archived=None,
|
|
@@ -3303,11 +3087,11 @@ class ShortcutApp(APIApplication):
|
|
|
3303
3087
|
request_body = {k: v for k, v in request_body.items() if v is not None}
|
|
3304
3088
|
url = f"{self.base_url}/api/v3/stories/bulk"
|
|
3305
3089
|
query_params = {}
|
|
3306
|
-
response = self.
|
|
3090
|
+
response = await self._aput(url, data=request_body, params=query_params)
|
|
3307
3091
|
response.raise_for_status()
|
|
3308
3092
|
return response.json()
|
|
3309
3093
|
|
|
3310
|
-
def create_multiple_stories(self, stories) -> list[Any]:
|
|
3094
|
+
async def create_multiple_stories(self, stories) -> list[Any]:
|
|
3311
3095
|
"""
|
|
3312
3096
|
Creates multiple stories in bulk using the API.
|
|
3313
3097
|
|
|
@@ -3326,17 +3110,15 @@ class ShortcutApp(APIApplication):
|
|
|
3326
3110
|
"""
|
|
3327
3111
|
if stories is None:
|
|
3328
3112
|
raise ValueError("Missing required parameter 'stories'")
|
|
3329
|
-
request_body = {
|
|
3330
|
-
"stories": stories,
|
|
3331
|
-
}
|
|
3113
|
+
request_body = {"stories": stories}
|
|
3332
3114
|
request_body = {k: v for k, v in request_body.items() if v is not None}
|
|
3333
3115
|
url = f"{self.base_url}/api/v3/stories/bulk"
|
|
3334
3116
|
query_params = {}
|
|
3335
|
-
response = self.
|
|
3117
|
+
response = await self._apost(url, data=request_body, params=query_params)
|
|
3336
3118
|
response.raise_for_status()
|
|
3337
3119
|
return response.json()
|
|
3338
3120
|
|
|
3339
|
-
def create_story_from_template(
|
|
3121
|
+
async def create_story_from_template(
|
|
3340
3122
|
self,
|
|
3341
3123
|
story_template_id,
|
|
3342
3124
|
description=None,
|
|
@@ -3495,11 +3277,11 @@ class ShortcutApp(APIApplication):
|
|
|
3495
3277
|
request_body = {k: v for k, v in request_body.items() if v is not None}
|
|
3496
3278
|
url = f"{self.base_url}/api/v3/stories/from-template"
|
|
3497
3279
|
query_params = {}
|
|
3498
|
-
response = self.
|
|
3280
|
+
response = await self._apost(url, data=request_body, params=query_params)
|
|
3499
3281
|
response.raise_for_status()
|
|
3500
3282
|
return response.json()
|
|
3501
3283
|
|
|
3502
|
-
def search_stories_old(
|
|
3284
|
+
async def search_stories_old(
|
|
3503
3285
|
self,
|
|
3504
3286
|
archived=None,
|
|
3505
3287
|
owner_id=None,
|
|
@@ -3605,11 +3387,11 @@ class ShortcutApp(APIApplication):
|
|
|
3605
3387
|
request_body = {k: v for k, v in request_body.items() if v is not None}
|
|
3606
3388
|
url = f"{self.base_url}/api/v3/stories/search"
|
|
3607
3389
|
query_params = {}
|
|
3608
|
-
response = self.
|
|
3390
|
+
response = await self._apost(url, data=request_body, params=query_params)
|
|
3609
3391
|
response.raise_for_status()
|
|
3610
3392
|
return response.json()
|
|
3611
3393
|
|
|
3612
|
-
def get_story(self, story_public_id) -> dict[str, Any]:
|
|
3394
|
+
async def get_story(self, story_public_id) -> dict[str, Any]:
|
|
3613
3395
|
"""
|
|
3614
3396
|
Retrieves a story from the API based on its public ID
|
|
3615
3397
|
|
|
@@ -3629,11 +3411,11 @@ class ShortcutApp(APIApplication):
|
|
|
3629
3411
|
raise ValueError("Missing required parameter 'story-public-id'")
|
|
3630
3412
|
url = f"{self.base_url}/api/v3/stories/{story_public_id}"
|
|
3631
3413
|
query_params = {}
|
|
3632
|
-
response = self.
|
|
3414
|
+
response = await self._aget(url, params=query_params)
|
|
3633
3415
|
response.raise_for_status()
|
|
3634
3416
|
return response.json()
|
|
3635
3417
|
|
|
3636
|
-
def update_story(
|
|
3418
|
+
async def update_story(
|
|
3637
3419
|
self,
|
|
3638
3420
|
story_public_id,
|
|
3639
3421
|
description=None,
|
|
@@ -3741,11 +3523,11 @@ class ShortcutApp(APIApplication):
|
|
|
3741
3523
|
request_body = {k: v for k, v in request_body.items() if v is not None}
|
|
3742
3524
|
url = f"{self.base_url}/api/v3/stories/{story_public_id}"
|
|
3743
3525
|
query_params = {}
|
|
3744
|
-
response = self.
|
|
3526
|
+
response = await self._aput(url, data=request_body, params=query_params)
|
|
3745
3527
|
response.raise_for_status()
|
|
3746
3528
|
return response.json()
|
|
3747
3529
|
|
|
3748
|
-
def delete_story(self, story_public_id) -> Any:
|
|
3530
|
+
async def delete_story(self, story_public_id) -> Any:
|
|
3749
3531
|
"""
|
|
3750
3532
|
Deletes a story using its public ID.
|
|
3751
3533
|
|
|
@@ -3766,11 +3548,11 @@ class ShortcutApp(APIApplication):
|
|
|
3766
3548
|
raise ValueError("Missing required parameter 'story-public-id'")
|
|
3767
3549
|
url = f"{self.base_url}/api/v3/stories/{story_public_id}"
|
|
3768
3550
|
query_params = {}
|
|
3769
|
-
response = self.
|
|
3551
|
+
response = await self._adelete(url, params=query_params)
|
|
3770
3552
|
response.raise_for_status()
|
|
3771
3553
|
return response.json()
|
|
3772
3554
|
|
|
3773
|
-
def list_story_comment(self, story_public_id) -> list[Any]:
|
|
3555
|
+
async def list_story_comment(self, story_public_id) -> list[Any]:
|
|
3774
3556
|
"""
|
|
3775
3557
|
Retrieves a list of comments for a specific story.
|
|
3776
3558
|
|
|
@@ -3791,19 +3573,12 @@ class ShortcutApp(APIApplication):
|
|
|
3791
3573
|
raise ValueError("Missing required parameter 'story-public-id'")
|
|
3792
3574
|
url = f"{self.base_url}/api/v3/stories/{story_public_id}/comments"
|
|
3793
3575
|
query_params = {}
|
|
3794
|
-
response = self.
|
|
3576
|
+
response = await self._aget(url, params=query_params)
|
|
3795
3577
|
response.raise_for_status()
|
|
3796
3578
|
return response.json()
|
|
3797
3579
|
|
|
3798
|
-
def create_story_comment(
|
|
3799
|
-
self,
|
|
3800
|
-
story_public_id,
|
|
3801
|
-
text,
|
|
3802
|
-
author_id=None,
|
|
3803
|
-
created_at=None,
|
|
3804
|
-
updated_at=None,
|
|
3805
|
-
external_id=None,
|
|
3806
|
-
parent_id=None,
|
|
3580
|
+
async def create_story_comment(
|
|
3581
|
+
self, story_public_id, text, author_id=None, created_at=None, updated_at=None, external_id=None, parent_id=None
|
|
3807
3582
|
) -> dict[str, Any]:
|
|
3808
3583
|
"""
|
|
3809
3584
|
Creates a new comment on a story by sending a POST request with the comment details to the specified API endpoint.
|
|
@@ -3841,11 +3616,11 @@ class ShortcutApp(APIApplication):
|
|
|
3841
3616
|
request_body = {k: v for k, v in request_body.items() if v is not None}
|
|
3842
3617
|
url = f"{self.base_url}/api/v3/stories/{story_public_id}/comments"
|
|
3843
3618
|
query_params = {}
|
|
3844
|
-
response = self.
|
|
3619
|
+
response = await self._apost(url, data=request_body, params=query_params)
|
|
3845
3620
|
response.raise_for_status()
|
|
3846
3621
|
return response.json()
|
|
3847
3622
|
|
|
3848
|
-
def get_story_comment(self, story_public_id, comment_public_id) -> dict[str, Any]:
|
|
3623
|
+
async def get_story_comment(self, story_public_id, comment_public_id) -> dict[str, Any]:
|
|
3849
3624
|
"""
|
|
3850
3625
|
Retrieves a specific comment from a story using the API.
|
|
3851
3626
|
|
|
@@ -3869,13 +3644,11 @@ class ShortcutApp(APIApplication):
|
|
|
3869
3644
|
raise ValueError("Missing required parameter 'comment-public-id'")
|
|
3870
3645
|
url = f"{self.base_url}/api/v3/stories/{story_public_id}/comments/{comment_public_id}"
|
|
3871
3646
|
query_params = {}
|
|
3872
|
-
response = self.
|
|
3647
|
+
response = await self._aget(url, params=query_params)
|
|
3873
3648
|
response.raise_for_status()
|
|
3874
3649
|
return response.json()
|
|
3875
3650
|
|
|
3876
|
-
def update_story_comment(
|
|
3877
|
-
self, story_public_id, comment_public_id, text
|
|
3878
|
-
) -> dict[str, Any]:
|
|
3651
|
+
async def update_story_comment(self, story_public_id, comment_public_id, text) -> dict[str, Any]:
|
|
3879
3652
|
"""
|
|
3880
3653
|
Updates a story comment with new text based on the provided story and comment public IDs.
|
|
3881
3654
|
|
|
@@ -3899,17 +3672,15 @@ class ShortcutApp(APIApplication):
|
|
|
3899
3672
|
raise ValueError("Missing required parameter 'comment-public-id'")
|
|
3900
3673
|
if text is None:
|
|
3901
3674
|
raise ValueError("Missing required parameter 'text'")
|
|
3902
|
-
request_body = {
|
|
3903
|
-
"text": text,
|
|
3904
|
-
}
|
|
3675
|
+
request_body = {"text": text}
|
|
3905
3676
|
request_body = {k: v for k, v in request_body.items() if v is not None}
|
|
3906
3677
|
url = f"{self.base_url}/api/v3/stories/{story_public_id}/comments/{comment_public_id}"
|
|
3907
3678
|
query_params = {}
|
|
3908
|
-
response = self.
|
|
3679
|
+
response = await self._aput(url, data=request_body, params=query_params)
|
|
3909
3680
|
response.raise_for_status()
|
|
3910
3681
|
return response.json()
|
|
3911
3682
|
|
|
3912
|
-
def delete_story_comment(self, story_public_id, comment_public_id) -> Any:
|
|
3683
|
+
async def delete_story_comment(self, story_public_id, comment_public_id) -> Any:
|
|
3913
3684
|
"""
|
|
3914
3685
|
Deletes a specific comment from a story using the provided story and comment public IDs.
|
|
3915
3686
|
|
|
@@ -3933,13 +3704,11 @@ class ShortcutApp(APIApplication):
|
|
|
3933
3704
|
raise ValueError("Missing required parameter 'comment-public-id'")
|
|
3934
3705
|
url = f"{self.base_url}/api/v3/stories/{story_public_id}/comments/{comment_public_id}"
|
|
3935
3706
|
query_params = {}
|
|
3936
|
-
response = self.
|
|
3707
|
+
response = await self._adelete(url, params=query_params)
|
|
3937
3708
|
response.raise_for_status()
|
|
3938
3709
|
return response.json()
|
|
3939
3710
|
|
|
3940
|
-
def create_story_reaction(
|
|
3941
|
-
self, story_public_id, comment_public_id, emoji
|
|
3942
|
-
) -> list[Any]:
|
|
3711
|
+
async def create_story_reaction(self, story_public_id, comment_public_id, emoji) -> list[Any]:
|
|
3943
3712
|
"""
|
|
3944
3713
|
Creates a reaction with an emoji to a comment on a story.
|
|
3945
3714
|
|
|
@@ -3963,19 +3732,15 @@ class ShortcutApp(APIApplication):
|
|
|
3963
3732
|
raise ValueError("Missing required parameter 'comment-public-id'")
|
|
3964
3733
|
if emoji is None:
|
|
3965
3734
|
raise ValueError("Missing required parameter 'emoji'")
|
|
3966
|
-
request_body = {
|
|
3967
|
-
"emoji": emoji,
|
|
3968
|
-
}
|
|
3735
|
+
request_body = {"emoji": emoji}
|
|
3969
3736
|
request_body = {k: v for k, v in request_body.items() if v is not None}
|
|
3970
3737
|
url = f"{self.base_url}/api/v3/stories/{story_public_id}/comments/{comment_public_id}/reactions"
|
|
3971
3738
|
query_params = {}
|
|
3972
|
-
response = self.
|
|
3739
|
+
response = await self._apost(url, data=request_body, params=query_params)
|
|
3973
3740
|
response.raise_for_status()
|
|
3974
3741
|
return response.json()
|
|
3975
3742
|
|
|
3976
|
-
def unlink_comment_thread_from_slack(
|
|
3977
|
-
self, story_public_id, comment_public_id
|
|
3978
|
-
) -> dict[str, Any]:
|
|
3743
|
+
async def unlink_comment_thread_from_slack(self, story_public_id, comment_public_id) -> dict[str, Any]:
|
|
3979
3744
|
"""
|
|
3980
3745
|
Unlinks a comment thread from Slack for a specific story.
|
|
3981
3746
|
|
|
@@ -3999,11 +3764,11 @@ class ShortcutApp(APIApplication):
|
|
|
3999
3764
|
raise ValueError("Missing required parameter 'comment-public-id'")
|
|
4000
3765
|
url = f"{self.base_url}/api/v3/stories/{story_public_id}/comments/{comment_public_id}/unlink-from-slack"
|
|
4001
3766
|
query_params = {}
|
|
4002
|
-
response = self.
|
|
3767
|
+
response = await self._apost(url, data={}, params=query_params)
|
|
4003
3768
|
response.raise_for_status()
|
|
4004
3769
|
return response.json()
|
|
4005
3770
|
|
|
4006
|
-
def story_history(self, story_public_id) -> list[Any]:
|
|
3771
|
+
async def story_history(self, story_public_id) -> list[Any]:
|
|
4007
3772
|
"""
|
|
4008
3773
|
Retrieves the full change history for a specified story by its public ID.
|
|
4009
3774
|
|
|
@@ -4024,19 +3789,12 @@ class ShortcutApp(APIApplication):
|
|
|
4024
3789
|
raise ValueError("Missing required parameter 'story-public-id'")
|
|
4025
3790
|
url = f"{self.base_url}/api/v3/stories/{story_public_id}/history"
|
|
4026
3791
|
query_params = {}
|
|
4027
|
-
response = self.
|
|
3792
|
+
response = await self._aget(url, params=query_params)
|
|
4028
3793
|
response.raise_for_status()
|
|
4029
3794
|
return response.json()
|
|
4030
3795
|
|
|
4031
|
-
def create_task(
|
|
4032
|
-
self,
|
|
4033
|
-
story_public_id,
|
|
4034
|
-
description,
|
|
4035
|
-
complete=None,
|
|
4036
|
-
owner_ids=None,
|
|
4037
|
-
external_id=None,
|
|
4038
|
-
created_at=None,
|
|
4039
|
-
updated_at=None,
|
|
3796
|
+
async def create_task(
|
|
3797
|
+
self, story_public_id, description, complete=None, owner_ids=None, external_id=None, created_at=None, updated_at=None
|
|
4040
3798
|
) -> dict[str, Any]:
|
|
4041
3799
|
"""
|
|
4042
3800
|
Creates a task within a specified story.
|
|
@@ -4075,11 +3833,11 @@ class ShortcutApp(APIApplication):
|
|
|
4075
3833
|
request_body = {k: v for k, v in request_body.items() if v is not None}
|
|
4076
3834
|
url = f"{self.base_url}/api/v3/stories/{story_public_id}/tasks"
|
|
4077
3835
|
query_params = {}
|
|
4078
|
-
response = self.
|
|
3836
|
+
response = await self._apost(url, data=request_body, params=query_params)
|
|
4079
3837
|
response.raise_for_status()
|
|
4080
3838
|
return response.json()
|
|
4081
3839
|
|
|
4082
|
-
def get_task(self, story_public_id, task_public_id) -> dict[str, Any]:
|
|
3840
|
+
async def get_task(self, story_public_id, task_public_id) -> dict[str, Any]:
|
|
4083
3841
|
"""
|
|
4084
3842
|
Gets task details for a specific task within a story.
|
|
4085
3843
|
|
|
@@ -4103,19 +3861,12 @@ class ShortcutApp(APIApplication):
|
|
|
4103
3861
|
raise ValueError("Missing required parameter 'task-public-id'")
|
|
4104
3862
|
url = f"{self.base_url}/api/v3/stories/{story_public_id}/tasks/{task_public_id}"
|
|
4105
3863
|
query_params = {}
|
|
4106
|
-
response = self.
|
|
3864
|
+
response = await self._aget(url, params=query_params)
|
|
4107
3865
|
response.raise_for_status()
|
|
4108
3866
|
return response.json()
|
|
4109
3867
|
|
|
4110
|
-
def update_task(
|
|
4111
|
-
self,
|
|
4112
|
-
story_public_id,
|
|
4113
|
-
task_public_id,
|
|
4114
|
-
description=None,
|
|
4115
|
-
owner_ids=None,
|
|
4116
|
-
complete=None,
|
|
4117
|
-
before_id=None,
|
|
4118
|
-
after_id=None,
|
|
3868
|
+
async def update_task(
|
|
3869
|
+
self, story_public_id, task_public_id, description=None, owner_ids=None, complete=None, before_id=None, after_id=None
|
|
4119
3870
|
) -> dict[str, Any]:
|
|
4120
3871
|
"""
|
|
4121
3872
|
Updates the specified task within a story, modifying fields such as description, owners, completion status, and position.
|
|
@@ -4153,11 +3904,11 @@ class ShortcutApp(APIApplication):
|
|
|
4153
3904
|
request_body = {k: v for k, v in request_body.items() if v is not None}
|
|
4154
3905
|
url = f"{self.base_url}/api/v3/stories/{story_public_id}/tasks/{task_public_id}"
|
|
4155
3906
|
query_params = {}
|
|
4156
|
-
response = self.
|
|
3907
|
+
response = await self._aput(url, data=request_body, params=query_params)
|
|
4157
3908
|
response.raise_for_status()
|
|
4158
3909
|
return response.json()
|
|
4159
3910
|
|
|
4160
|
-
def delete_task(self, story_public_id, task_public_id) -> Any:
|
|
3911
|
+
async def delete_task(self, story_public_id, task_public_id) -> Any:
|
|
4161
3912
|
"""
|
|
4162
3913
|
Deletes a task associated with a story based on their respective public IDs.
|
|
4163
3914
|
|
|
@@ -4180,11 +3931,11 @@ class ShortcutApp(APIApplication):
|
|
|
4180
3931
|
raise ValueError("Missing required parameter 'task-public-id'")
|
|
4181
3932
|
url = f"{self.base_url}/api/v3/stories/{story_public_id}/tasks/{task_public_id}"
|
|
4182
3933
|
query_params = {}
|
|
4183
|
-
response = self.
|
|
3934
|
+
response = await self._adelete(url, params=query_params)
|
|
4184
3935
|
response.raise_for_status()
|
|
4185
3936
|
return response.json()
|
|
4186
3937
|
|
|
4187
|
-
def create_story_link(self, verb, subject_id, object_id) -> dict[str, Any]:
|
|
3938
|
+
async def create_story_link(self, verb, subject_id, object_id) -> dict[str, Any]:
|
|
4188
3939
|
"""
|
|
4189
3940
|
Creates a story link between a subject and an object with the specified verb by sending a POST request to the story-links API endpoint.
|
|
4190
3941
|
|
|
@@ -4209,19 +3960,15 @@ class ShortcutApp(APIApplication):
|
|
|
4209
3960
|
raise ValueError("Missing required parameter 'subject_id'")
|
|
4210
3961
|
if object_id is None:
|
|
4211
3962
|
raise ValueError("Missing required parameter 'object_id'")
|
|
4212
|
-
request_body = {
|
|
4213
|
-
"verb": verb,
|
|
4214
|
-
"subject_id": subject_id,
|
|
4215
|
-
"object_id": object_id,
|
|
4216
|
-
}
|
|
3963
|
+
request_body = {"verb": verb, "subject_id": subject_id, "object_id": object_id}
|
|
4217
3964
|
request_body = {k: v for k, v in request_body.items() if v is not None}
|
|
4218
3965
|
url = f"{self.base_url}/api/v3/story-links"
|
|
4219
3966
|
query_params = {}
|
|
4220
|
-
response = self.
|
|
3967
|
+
response = await self._apost(url, data=request_body, params=query_params)
|
|
4221
3968
|
response.raise_for_status()
|
|
4222
3969
|
return response.json()
|
|
4223
3970
|
|
|
4224
|
-
def get_story_link(self, story_link_public_id) -> dict[str, Any]:
|
|
3971
|
+
async def get_story_link(self, story_link_public_id) -> dict[str, Any]:
|
|
4225
3972
|
"""
|
|
4226
3973
|
Retrieves a specific story link by its public ID.
|
|
4227
3974
|
|
|
@@ -4242,13 +3989,11 @@ class ShortcutApp(APIApplication):
|
|
|
4242
3989
|
raise ValueError("Missing required parameter 'story-link-public-id'")
|
|
4243
3990
|
url = f"{self.base_url}/api/v3/story-links/{story_link_public_id}"
|
|
4244
3991
|
query_params = {}
|
|
4245
|
-
response = self.
|
|
3992
|
+
response = await self._aget(url, params=query_params)
|
|
4246
3993
|
response.raise_for_status()
|
|
4247
3994
|
return response.json()
|
|
4248
3995
|
|
|
4249
|
-
def update_story_link(
|
|
4250
|
-
self, story_link_public_id, verb=None, subject_id=None, object_id=None
|
|
4251
|
-
) -> dict[str, Any]:
|
|
3996
|
+
async def update_story_link(self, story_link_public_id, verb=None, subject_id=None, object_id=None) -> dict[str, Any]:
|
|
4252
3997
|
"""
|
|
4253
3998
|
Updates an existing story link with new attributes.
|
|
4254
3999
|
|
|
@@ -4270,19 +4015,15 @@ class ShortcutApp(APIApplication):
|
|
|
4270
4015
|
"""
|
|
4271
4016
|
if story_link_public_id is None:
|
|
4272
4017
|
raise ValueError("Missing required parameter 'story-link-public-id'")
|
|
4273
|
-
request_body = {
|
|
4274
|
-
"verb": verb,
|
|
4275
|
-
"subject_id": subject_id,
|
|
4276
|
-
"object_id": object_id,
|
|
4277
|
-
}
|
|
4018
|
+
request_body = {"verb": verb, "subject_id": subject_id, "object_id": object_id}
|
|
4278
4019
|
request_body = {k: v for k, v in request_body.items() if v is not None}
|
|
4279
4020
|
url = f"{self.base_url}/api/v3/story-links/{story_link_public_id}"
|
|
4280
4021
|
query_params = {}
|
|
4281
|
-
response = self.
|
|
4022
|
+
response = await self._aput(url, data=request_body, params=query_params)
|
|
4282
4023
|
response.raise_for_status()
|
|
4283
4024
|
return response.json()
|
|
4284
4025
|
|
|
4285
|
-
def delete_story_link(self, story_link_public_id) -> Any:
|
|
4026
|
+
async def delete_story_link(self, story_link_public_id) -> Any:
|
|
4286
4027
|
"""
|
|
4287
4028
|
Deletes a story link by its public ID.
|
|
4288
4029
|
|
|
@@ -4303,13 +4044,11 @@ class ShortcutApp(APIApplication):
|
|
|
4303
4044
|
raise ValueError("Missing required parameter 'story-link-public-id'")
|
|
4304
4045
|
url = f"{self.base_url}/api/v3/story-links/{story_link_public_id}"
|
|
4305
4046
|
query_params = {}
|
|
4306
|
-
response = self.
|
|
4047
|
+
response = await self._adelete(url, params=query_params)
|
|
4307
4048
|
response.raise_for_status()
|
|
4308
4049
|
return response.json()
|
|
4309
4050
|
|
|
4310
|
-
def list_workflows(
|
|
4311
|
-
self,
|
|
4312
|
-
) -> list[Any]:
|
|
4051
|
+
async def list_workflows(self) -> list[Any]:
|
|
4313
4052
|
"""
|
|
4314
4053
|
Retrieves a list of available workflows from the API.
|
|
4315
4054
|
|
|
@@ -4327,11 +4066,11 @@ class ShortcutApp(APIApplication):
|
|
|
4327
4066
|
"""
|
|
4328
4067
|
url = f"{self.base_url}/api/v3/workflows"
|
|
4329
4068
|
query_params = {}
|
|
4330
|
-
response = self.
|
|
4069
|
+
response = await self._aget(url, params=query_params)
|
|
4331
4070
|
response.raise_for_status()
|
|
4332
4071
|
return response.json()
|
|
4333
4072
|
|
|
4334
|
-
def get_workflow(self, workflow_public_id) -> dict[str, Any]:
|
|
4073
|
+
async def get_workflow(self, workflow_public_id) -> dict[str, Any]:
|
|
4335
4074
|
"""
|
|
4336
4075
|
Retrieves detailed information about a workflow given its public ID.
|
|
4337
4076
|
|
|
@@ -4352,7 +4091,7 @@ class ShortcutApp(APIApplication):
|
|
|
4352
4091
|
raise ValueError("Missing required parameter 'workflow-public-id'")
|
|
4353
4092
|
url = f"{self.base_url}/api/v3/workflows/{workflow_public_id}"
|
|
4354
4093
|
query_params = {}
|
|
4355
|
-
response = self.
|
|
4094
|
+
response = await self._aget(url, params=query_params)
|
|
4356
4095
|
response.raise_for_status()
|
|
4357
4096
|
return response.json()
|
|
4358
4097
|
|