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.

Files changed (119) hide show
  1. universal_mcp/applications/BEST_PRACTICES.md +1 -1
  2. universal_mcp/applications/ahrefs/app.py +92 -238
  3. universal_mcp/applications/airtable/app.py +36 -135
  4. universal_mcp/applications/apollo/app.py +124 -477
  5. universal_mcp/applications/asana/app.py +605 -1755
  6. universal_mcp/applications/aws_s3/app.py +63 -119
  7. universal_mcp/applications/bill/app.py +644 -2055
  8. universal_mcp/applications/box/app.py +1246 -4159
  9. universal_mcp/applications/braze/app.py +410 -1476
  10. universal_mcp/applications/browser_use/README.md +15 -1
  11. universal_mcp/applications/browser_use/__init__.py +1 -0
  12. universal_mcp/applications/browser_use/app.py +91 -26
  13. universal_mcp/applications/cal_com_v2/app.py +207 -625
  14. universal_mcp/applications/calendly/app.py +103 -242
  15. universal_mcp/applications/canva/app.py +75 -140
  16. universal_mcp/applications/clickup/app.py +331 -798
  17. universal_mcp/applications/coda/app.py +240 -520
  18. universal_mcp/applications/confluence/app.py +497 -1285
  19. universal_mcp/applications/contentful/app.py +40 -155
  20. universal_mcp/applications/crustdata/app.py +44 -123
  21. universal_mcp/applications/dialpad/app.py +451 -924
  22. universal_mcp/applications/digitalocean/app.py +2071 -6082
  23. universal_mcp/applications/domain_checker/app.py +3 -54
  24. universal_mcp/applications/e2b/app.py +17 -68
  25. universal_mcp/applications/elevenlabs/README.md +27 -3
  26. universal_mcp/applications/elevenlabs/app.py +741 -74
  27. universal_mcp/applications/exa/README.md +8 -4
  28. universal_mcp/applications/exa/app.py +415 -186
  29. universal_mcp/applications/falai/README.md +5 -7
  30. universal_mcp/applications/falai/app.py +156 -232
  31. universal_mcp/applications/figma/app.py +91 -175
  32. universal_mcp/applications/file_system/app.py +2 -13
  33. universal_mcp/applications/firecrawl/app.py +198 -176
  34. universal_mcp/applications/fireflies/app.py +59 -281
  35. universal_mcp/applications/fpl/app.py +92 -529
  36. universal_mcp/applications/fpl/utils/fixtures.py +15 -49
  37. universal_mcp/applications/fpl/utils/helper.py +25 -89
  38. universal_mcp/applications/fpl/utils/league_utils.py +20 -64
  39. universal_mcp/applications/ghost_content/app.py +70 -179
  40. universal_mcp/applications/github/app.py +30 -67
  41. universal_mcp/applications/gong/app.py +142 -302
  42. universal_mcp/applications/google_calendar/app.py +26 -78
  43. universal_mcp/applications/google_docs/README.md +15 -14
  44. universal_mcp/applications/google_docs/app.py +103 -206
  45. universal_mcp/applications/google_drive/app.py +194 -793
  46. universal_mcp/applications/google_gemini/app.py +68 -59
  47. universal_mcp/applications/google_mail/README.md +1 -0
  48. universal_mcp/applications/google_mail/app.py +93 -214
  49. universal_mcp/applications/google_searchconsole/app.py +25 -58
  50. universal_mcp/applications/google_sheet/README.md +2 -1
  51. universal_mcp/applications/google_sheet/app.py +226 -624
  52. universal_mcp/applications/google_sheet/helper.py +26 -53
  53. universal_mcp/applications/hashnode/app.py +57 -269
  54. universal_mcp/applications/heygen/README.md +10 -32
  55. universal_mcp/applications/heygen/app.py +339 -811
  56. universal_mcp/applications/http_tools/app.py +10 -32
  57. universal_mcp/applications/hubspot/README.md +1 -1
  58. universal_mcp/applications/hubspot/app.py +7508 -99
  59. universal_mcp/applications/jira/app.py +2419 -8334
  60. universal_mcp/applications/klaviyo/app.py +739 -1621
  61. universal_mcp/applications/linkedin/README.md +18 -1
  62. universal_mcp/applications/linkedin/app.py +729 -251
  63. universal_mcp/applications/mailchimp/app.py +696 -1851
  64. universal_mcp/applications/markitdown/app.py +8 -20
  65. universal_mcp/applications/miro/app.py +333 -815
  66. universal_mcp/applications/ms_teams/app.py +420 -1407
  67. universal_mcp/applications/neon/app.py +144 -250
  68. universal_mcp/applications/notion/app.py +38 -53
  69. universal_mcp/applications/onedrive/app.py +26 -48
  70. universal_mcp/applications/openai/app.py +43 -166
  71. universal_mcp/applications/outlook/README.md +22 -9
  72. universal_mcp/applications/outlook/app.py +403 -141
  73. universal_mcp/applications/perplexity/README.md +2 -1
  74. universal_mcp/applications/perplexity/app.py +161 -20
  75. universal_mcp/applications/pipedrive/app.py +1021 -3331
  76. universal_mcp/applications/posthog/app.py +272 -541
  77. universal_mcp/applications/reddit/app.py +65 -164
  78. universal_mcp/applications/resend/app.py +72 -139
  79. universal_mcp/applications/retell/app.py +23 -50
  80. universal_mcp/applications/rocketlane/app.py +252 -965
  81. universal_mcp/applications/scraper/app.py +114 -142
  82. universal_mcp/applications/semanticscholar/app.py +36 -78
  83. universal_mcp/applications/semrush/app.py +44 -78
  84. universal_mcp/applications/sendgrid/app.py +826 -1576
  85. universal_mcp/applications/sentry/app.py +444 -1079
  86. universal_mcp/applications/serpapi/app.py +44 -146
  87. universal_mcp/applications/sharepoint/app.py +27 -49
  88. universal_mcp/applications/shopify/app.py +1748 -4486
  89. universal_mcp/applications/shortcut/app.py +275 -536
  90. universal_mcp/applications/slack/app.py +43 -125
  91. universal_mcp/applications/spotify/app.py +206 -405
  92. universal_mcp/applications/supabase/app.py +174 -283
  93. universal_mcp/applications/tavily/app.py +2 -2
  94. universal_mcp/applications/trello/app.py +853 -2816
  95. universal_mcp/applications/twilio/app.py +27 -62
  96. universal_mcp/applications/twitter/api_segments/compliance_api.py +4 -14
  97. universal_mcp/applications/twitter/api_segments/dm_conversations_api.py +6 -18
  98. universal_mcp/applications/twitter/api_segments/likes_api.py +1 -3
  99. universal_mcp/applications/twitter/api_segments/lists_api.py +5 -15
  100. universal_mcp/applications/twitter/api_segments/trends_api.py +1 -3
  101. universal_mcp/applications/twitter/api_segments/tweets_api.py +9 -31
  102. universal_mcp/applications/twitter/api_segments/usage_api.py +1 -5
  103. universal_mcp/applications/twitter/api_segments/users_api.py +14 -42
  104. universal_mcp/applications/whatsapp/app.py +35 -186
  105. universal_mcp/applications/whatsapp/audio.py +2 -6
  106. universal_mcp/applications/whatsapp/whatsapp.py +17 -51
  107. universal_mcp/applications/whatsapp_business/app.py +86 -299
  108. universal_mcp/applications/wrike/app.py +80 -153
  109. universal_mcp/applications/yahoo_finance/app.py +19 -65
  110. universal_mcp/applications/youtube/app.py +120 -306
  111. universal_mcp/applications/zenquotes/app.py +3 -3
  112. {universal_mcp_applications-0.1.33.dist-info → universal_mcp_applications-0.1.39rc16.dist-info}/METADATA +4 -2
  113. {universal_mcp_applications-0.1.33.dist-info → universal_mcp_applications-0.1.39rc16.dist-info}/RECORD +115 -119
  114. {universal_mcp_applications-0.1.33.dist-info → universal_mcp_applications-0.1.39rc16.dist-info}/WHEEL +1 -1
  115. universal_mcp/applications/hubspot/api_segments/__init__.py +0 -0
  116. universal_mcp/applications/hubspot/api_segments/api_segment_base.py +0 -54
  117. universal_mcp/applications/hubspot/api_segments/crm_api.py +0 -7337
  118. universal_mcp/applications/hubspot/api_segments/marketing_api.py +0 -1467
  119. {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 _get_headers(self) -> dict[str, Any]:
13
- api_key = self.integration.get_credentials().get("api_key")
14
- return {
15
- "Shortcut-Token": f"{api_key}",
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._get(url, params=query_params)
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._post(url, data=request_body, params=query_params)
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._get(url, params=query_params)
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._put(url, data=request_body, params=query_params)
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._delete(url, params=query_params)
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._get(url, params=query_params)
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._get(url, params=query_params)
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._get(url, params=query_params)
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._get(url, params=query_params)
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._put(url, data=request_body, params=query_params)
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._delete(url, params=query_params)
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._get(url, params=query_params)
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._post(url, data=request_body, params=query_params)
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._put(url, data={}, params=query_params)
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._put(url, data={}, params=query_params)
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._get(url, params=query_params)
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._put(url, data=request_body, params=query_params)
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._delete(url, params=query_params)
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._get(url, params=query_params)
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
- k: v
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._post(url, data=request_body, params=query_params)
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._get(url, params=query_params)
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._put(url, data=request_body, params=query_params)
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._delete(url, params=query_params)
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._get(url, params=query_params)
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._post(url, data=request_body, params=query_params)
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._get(url, params=query_params)
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._put(url, data=request_body, params=query_params)
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._post(url, data=request_body, params=query_params)
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._delete(url, params=query_params)
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
- k: v
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._post(url, data={}, params=query_params)
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
- k: v for k, v in [("external_link", external_link)] if v is not None
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._get(url, params=query_params)
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._get(url, params=query_params)
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._put(url, data=request_body, params=query_params)
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._delete(url, params=query_params)
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._get(url, params=query_params)
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._post(url, data=request_body, params=query_params)
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._get(url, params=query_params)
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._put(url, data=request_body, params=query_params)
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
- k: v for k, v in [("limit", limit), ("offset", offset)] if v is not None
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._get(url, params=query_params)
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._post(url, data=request_body, params=query_params)
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._put(url, data={}, params=query_params)
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._put(url, data={}, params=query_params)
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._get(url, params=query_params)
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._put(url, data=request_body, params=query_params)
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._delete(url, params=query_params)
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
- k: v
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._get(url, params=query_params)
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._put(url, data=request_body, params=query_params)
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._get(url, params=query_params)
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._post(url, data=request_body, params=query_params)
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._get(url, params=query_params)
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._put(url, data=request_body, params=query_params)
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._delete(url, params=query_params)
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._get(url, params=query_params)
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
- k: v
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._get(url, params=query_params)
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._post(url, data=request_body, params=query_params)
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._get(url, params=query_params)
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._put(url, data=request_body, params=query_params)
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._delete(url, params=query_params)
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._get(url, params=query_params)
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._get(url, params=query_params)
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._post(url, data=request_body, params=query_params)
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._get(url, params=query_params)
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._put(url, data=request_body, params=query_params)
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._delete(url, params=query_params)
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._get(url, params=query_params)
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._get(url, params=query_params)
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._post(url, data=request_body, params=query_params)
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._get(url, params=query_params)
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._put(url, data=request_body, params=query_params)
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._delete(url, params=query_params)
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._get(url, params=query_params)
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._get(url, params=query_params)
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._post(url, data=request_body, params=query_params)
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._get(url, params=query_params)
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._put(url, data=request_body, params=query_params)
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._delete(url, params=query_params)
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
- k: v
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._get(url, params=query_params)
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._get(url, params=query_params)
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._get(url, params=query_params)
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._get(url, params=query_params)
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._get(url, params=query_params)
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._get(url, params=query_params)
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._get(url, params=query_params)
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._get(url, params=query_params)
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._post(url, data=request_body, params=query_params)
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._put(url, data=request_body, params=query_params)
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._post(url, data=request_body, params=query_params)
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._post(url, data=request_body, params=query_params)
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._post(url, data=request_body, params=query_params)
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._get(url, params=query_params)
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._put(url, data=request_body, params=query_params)
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._delete(url, params=query_params)
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._get(url, params=query_params)
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._post(url, data=request_body, params=query_params)
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._get(url, params=query_params)
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._put(url, data=request_body, params=query_params)
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._delete(url, params=query_params)
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._post(url, data=request_body, params=query_params)
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._post(url, data={}, params=query_params)
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._get(url, params=query_params)
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._post(url, data=request_body, params=query_params)
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._get(url, params=query_params)
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._put(url, data=request_body, params=query_params)
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._delete(url, params=query_params)
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._post(url, data=request_body, params=query_params)
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._get(url, params=query_params)
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._put(url, data=request_body, params=query_params)
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._delete(url, params=query_params)
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._get(url, params=query_params)
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._get(url, params=query_params)
4094
+ response = await self._aget(url, params=query_params)
4356
4095
  response.raise_for_status()
4357
4096
  return response.json()
4358
4097