universal-mcp 0.1.9rc1__py3-none-any.whl → 0.1.10__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.
- universal_mcp/applications/application.py +19 -30
- universal_mcp/applications/cal_com_v2/app.py +1676 -1021
- universal_mcp/applications/clickup/app.py +1496 -846
- universal_mcp/applications/falai/README.md +42 -0
- universal_mcp/applications/falai/__init__.py +0 -0
- universal_mcp/applications/falai/app.py +332 -0
- universal_mcp/applications/gong/README.md +88 -0
- universal_mcp/applications/gong/__init__.py +0 -0
- universal_mcp/applications/gong/app.py +2297 -0
- universal_mcp/applications/hashnode/app.py +12 -8
- universal_mcp/applications/hashnode/prompt.md +2 -0
- universal_mcp/applications/heygen/README.md +69 -0
- universal_mcp/applications/heygen/__init__.py +0 -0
- universal_mcp/applications/heygen/app.py +956 -0
- universal_mcp/applications/mailchimp/app.py +3848 -1794
- universal_mcp/applications/replicate/README.md +47 -35
- universal_mcp/applications/replicate/__init__.py +0 -0
- universal_mcp/applications/replicate/app.py +215 -204
- universal_mcp/applications/retell_ai/app.py +84 -67
- universal_mcp/applications/rocketlane/app.py +49 -35
- universal_mcp/applications/spotify/app.py +723 -428
- universal_mcp/applications/supabase/app.py +909 -583
- universal_mcp/servers/server.py +50 -0
- universal_mcp/stores/store.py +2 -3
- universal_mcp/utils/docstring_parser.py +67 -36
- {universal_mcp-0.1.9rc1.dist-info → universal_mcp-0.1.10.dist-info}/METADATA +5 -1
- {universal_mcp-0.1.9rc1.dist-info → universal_mcp-0.1.10.dist-info}/RECORD +29 -19
- {universal_mcp-0.1.9rc1.dist-info → universal_mcp-0.1.10.dist-info}/WHEEL +0 -0
- {universal_mcp-0.1.9rc1.dist-info → universal_mcp-0.1.10.dist-info}/entry_points.txt +0 -0
@@ -6,23 +6,23 @@ from universal_mcp.integrations import Integration
|
|
6
6
|
|
7
7
|
class RetellAiApp(APIApplication):
|
8
8
|
def __init__(self, integration: Integration = None, **kwargs) -> None:
|
9
|
-
super().__init__(name=
|
9
|
+
super().__init__(name="retell-ai", integration=integration, **kwargs)
|
10
10
|
self.base_url = "https://api.retellai.com"
|
11
11
|
|
12
12
|
def get_v2_get_call_by_call_id(self, call_id) -> dict[str, Any]:
|
13
13
|
"""
|
14
14
|
Retrieve detailed information about a specific call using its call ID.
|
15
|
-
|
15
|
+
|
16
16
|
Args:
|
17
17
|
call_id: The unique identifier of the call to retrieve. Must not be None.
|
18
|
-
|
18
|
+
|
19
19
|
Returns:
|
20
20
|
A dictionary containing the details of the requested call as returned by the API.
|
21
|
-
|
21
|
+
|
22
22
|
Raises:
|
23
23
|
ValueError: If the 'call_id' parameter is None.
|
24
24
|
HTTPError: If the HTTP request to the API fails or returns an unsuccessful status code.
|
25
|
-
|
25
|
+
|
26
26
|
Tags:
|
27
27
|
get, call, api, important
|
28
28
|
"""
|
@@ -34,23 +34,30 @@ class RetellAiApp(APIApplication):
|
|
34
34
|
response.raise_for_status()
|
35
35
|
return response.json()
|
36
36
|
|
37
|
-
def post_v2_create_phone_call(
|
37
|
+
def post_v2_create_phone_call(
|
38
|
+
self,
|
39
|
+
from_number,
|
40
|
+
to_number,
|
41
|
+
override_agent_id=None,
|
42
|
+
metadata=None,
|
43
|
+
retell_llm_dynamic_variables=None,
|
44
|
+
) -> dict[str, Any]:
|
38
45
|
"""
|
39
46
|
Initiates a phone call using a JSON payload with specified parameters.
|
40
|
-
|
47
|
+
|
41
48
|
Args:
|
42
49
|
from_number: The source number for the call.
|
43
50
|
to_number: The destination number for the call.
|
44
51
|
override_agent_id: Optional ID for overriding the default agent.
|
45
52
|
metadata: Optional metadata to be included with the call request.
|
46
53
|
retell_llm_dynamic_variables: Optional dynamic variables for LLM (Large Language Model) processing.
|
47
|
-
|
54
|
+
|
48
55
|
Returns:
|
49
56
|
A dictionary containing the response data for the created phone call.
|
50
|
-
|
57
|
+
|
51
58
|
Raises:
|
52
59
|
ValueError: Raised if either 'from_number' or 'to_number' is missing.
|
53
|
-
|
60
|
+
|
54
61
|
Tags:
|
55
62
|
initiate, create-call, async_job, management, important
|
56
63
|
"""
|
@@ -59,11 +66,11 @@ class RetellAiApp(APIApplication):
|
|
59
66
|
if to_number is None:
|
60
67
|
raise ValueError("Missing required parameter 'to_number'")
|
61
68
|
request_body = {
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
69
|
+
"from_number": from_number,
|
70
|
+
"to_number": to_number,
|
71
|
+
"override_agent_id": override_agent_id,
|
72
|
+
"metadata": metadata,
|
73
|
+
"retell_llm_dynamic_variables": retell_llm_dynamic_variables,
|
67
74
|
}
|
68
75
|
request_body = {k: v for k, v in request_body.items() if v is not None}
|
69
76
|
url = f"{self.base_url}/v2/create-phone-call"
|
@@ -72,30 +79,32 @@ class RetellAiApp(APIApplication):
|
|
72
79
|
response.raise_for_status()
|
73
80
|
return response.json()
|
74
81
|
|
75
|
-
def post_v2_create_web_call(
|
82
|
+
def post_v2_create_web_call(
|
83
|
+
self, agent_id, metadata=None, retell_llm_dynamic_variables=None
|
84
|
+
) -> dict[str, Any]:
|
76
85
|
"""
|
77
86
|
Creates a web call via a POST request to the v2 endpoint with specified agent ID and optional metadata or dynamic variables.
|
78
|
-
|
87
|
+
|
79
88
|
Args:
|
80
89
|
agent_id: Required identifier of the agent initiating the web call.
|
81
90
|
metadata: Optional metadata to include in the web call request.
|
82
91
|
retell_llm_dynamic_variables: Optional dynamic variables for LLN model customization.
|
83
|
-
|
92
|
+
|
84
93
|
Returns:
|
85
94
|
A dictionary containing the response details from the web call creation request.
|
86
|
-
|
95
|
+
|
87
96
|
Raises:
|
88
97
|
ValueError: Raised when the required 'agent_id' parameter is missing.
|
89
|
-
|
98
|
+
|
90
99
|
Tags:
|
91
100
|
create, web-calls, api-call, important
|
92
101
|
"""
|
93
102
|
if agent_id is None:
|
94
103
|
raise ValueError("Missing required parameter 'agent_id'")
|
95
104
|
request_body = {
|
96
|
-
|
97
|
-
|
98
|
-
|
105
|
+
"agent_id": agent_id,
|
106
|
+
"metadata": metadata,
|
107
|
+
"retell_llm_dynamic_variables": retell_llm_dynamic_variables,
|
99
108
|
}
|
100
109
|
request_body = {k: v for k, v in request_body.items() if v is not None}
|
101
110
|
url = f"{self.base_url}/v2/create-web-call"
|
@@ -107,16 +116,16 @@ class RetellAiApp(APIApplication):
|
|
107
116
|
def get_get_voice_by_voice_id(self, voice_id) -> dict[str, Any]:
|
108
117
|
"""
|
109
118
|
Fetches voice details based on the provided voice ID.
|
110
|
-
|
119
|
+
|
111
120
|
Args:
|
112
121
|
voice_id: The unique identifier of the voice to retrieve.
|
113
|
-
|
122
|
+
|
114
123
|
Returns:
|
115
124
|
A dictionary containing voice details.
|
116
|
-
|
125
|
+
|
117
126
|
Raises:
|
118
127
|
ValueError: Raised when the 'voice_id' parameter is missing or None.
|
119
|
-
|
128
|
+
|
120
129
|
Tags:
|
121
130
|
retrieve, voice, important, data-fetched
|
122
131
|
"""
|
@@ -128,30 +137,32 @@ class RetellAiApp(APIApplication):
|
|
128
137
|
response.raise_for_status()
|
129
138
|
return response.json()
|
130
139
|
|
131
|
-
def post_v2_list_calls(
|
140
|
+
def post_v2_list_calls(
|
141
|
+
self, filter_criteria=None, sort_order=None, limit=None, pagination_key=None
|
142
|
+
) -> list[Any]:
|
132
143
|
"""
|
133
144
|
Sends a POST request to list call records with optional filtering, sorting, pagination, and limits.
|
134
|
-
|
145
|
+
|
135
146
|
Args:
|
136
147
|
filter_criteria: Optional dictionary specifying filter conditions for returned call records.
|
137
148
|
sort_order: Optional sorting instructions (e.g., by date or status) for the call records.
|
138
149
|
limit: Optional integer specifying the maximum number of call records to return.
|
139
150
|
pagination_key: Optional key indicating where to continue fetching records for paginated results.
|
140
|
-
|
151
|
+
|
141
152
|
Returns:
|
142
153
|
A list of call record objects returned from the API.
|
143
|
-
|
154
|
+
|
144
155
|
Raises:
|
145
156
|
HTTPError: If the HTTP request to the remote service fails or returns an error status code.
|
146
|
-
|
157
|
+
|
147
158
|
Tags:
|
148
159
|
list, calls, api, batch, management, important
|
149
160
|
"""
|
150
161
|
request_body = {
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
162
|
+
"filter_criteria": filter_criteria,
|
163
|
+
"sort_order": sort_order,
|
164
|
+
"limit": limit,
|
165
|
+
"pagination_key": pagination_key,
|
155
166
|
}
|
156
167
|
request_body = {k: v for k, v in request_body.items() if v is not None}
|
157
168
|
url = f"{self.base_url}/v2/list-calls"
|
@@ -160,33 +171,35 @@ class RetellAiApp(APIApplication):
|
|
160
171
|
response.raise_for_status()
|
161
172
|
return response.json()
|
162
173
|
|
163
|
-
def post_create_phone_number(
|
174
|
+
def post_create_phone_number(
|
175
|
+
self, area_code, inbound_agent_id=None, outbound_agent_id=None, nickname=None
|
176
|
+
) -> dict[str, Any]:
|
164
177
|
"""
|
165
178
|
Creates a phone number with the specified area code and optional parameters.
|
166
|
-
|
179
|
+
|
167
180
|
Args:
|
168
181
|
area_code: The area code for the phone number (required).
|
169
182
|
inbound_agent_id: The ID of the agent to handle inbound calls (optional).
|
170
183
|
outbound_agent_id: The ID of the agent to handle outbound calls (optional).
|
171
184
|
nickname: A user-friendly name for the phone number (optional).
|
172
|
-
|
185
|
+
|
173
186
|
Returns:
|
174
187
|
A dictionary containing the created phone number details and any associated metadata.
|
175
|
-
|
188
|
+
|
176
189
|
Raises:
|
177
190
|
ValueError: When the required parameter 'area_code' is None or not provided.
|
178
191
|
HTTPError: When the API request fails with an error status code.
|
179
|
-
|
192
|
+
|
180
193
|
Tags:
|
181
194
|
create, phone, post, communication, important
|
182
195
|
"""
|
183
196
|
if area_code is None:
|
184
197
|
raise ValueError("Missing required parameter 'area_code'")
|
185
198
|
request_body = {
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
199
|
+
"inbound_agent_id": inbound_agent_id,
|
200
|
+
"outbound_agent_id": outbound_agent_id,
|
201
|
+
"area_code": area_code,
|
202
|
+
"nickname": nickname,
|
190
203
|
}
|
191
204
|
request_body = {k: v for k, v in request_body.items() if v is not None}
|
192
205
|
url = f"{self.base_url}/create-phone-number"
|
@@ -198,17 +211,17 @@ class RetellAiApp(APIApplication):
|
|
198
211
|
def get_get_phone_number_by_phone_number(self, phone_number) -> dict[str, Any]:
|
199
212
|
"""
|
200
213
|
Retrieves phone number details by making a GET request to the API endpoint using the provided phone number.
|
201
|
-
|
214
|
+
|
202
215
|
Args:
|
203
216
|
phone_number: str. The phone number to look up. Must not be None.
|
204
|
-
|
217
|
+
|
205
218
|
Returns:
|
206
219
|
dict[str, Any]: A dictionary containing the details associated with the given phone number as returned by the API.
|
207
|
-
|
220
|
+
|
208
221
|
Raises:
|
209
222
|
ValueError: If the 'phone_number' parameter is None.
|
210
223
|
requests.HTTPError: If the HTTP request fails or an error response is returned from the API.
|
211
|
-
|
224
|
+
|
212
225
|
Tags:
|
213
226
|
get, phone-number, api, lookup, important
|
214
227
|
"""
|
@@ -220,19 +233,21 @@ class RetellAiApp(APIApplication):
|
|
220
233
|
response.raise_for_status()
|
221
234
|
return response.json()
|
222
235
|
|
223
|
-
def get_list_phone_numbers(
|
236
|
+
def get_list_phone_numbers(
|
237
|
+
self,
|
238
|
+
) -> list[Any]:
|
224
239
|
"""
|
225
240
|
Retrieves a list of phone numbers from the remote API.
|
226
|
-
|
241
|
+
|
227
242
|
Args:
|
228
243
|
None: This function takes no arguments
|
229
|
-
|
244
|
+
|
230
245
|
Returns:
|
231
246
|
A list containing the phone numbers returned by the API.
|
232
|
-
|
247
|
+
|
233
248
|
Raises:
|
234
249
|
requests.HTTPError: If the HTTP request to the API fails or returns an unsuccessful status code.
|
235
|
-
|
250
|
+
|
236
251
|
Tags:
|
237
252
|
get, list, phone-numbers, api, synchronous, important
|
238
253
|
"""
|
@@ -242,32 +257,34 @@ class RetellAiApp(APIApplication):
|
|
242
257
|
response.raise_for_status()
|
243
258
|
return response.json()
|
244
259
|
|
245
|
-
def patch_update_phone_number_by_phone_number(
|
260
|
+
def patch_update_phone_number_by_phone_number(
|
261
|
+
self, phone_number, inbound_agent_id=None, outbound_agent_id=None, nickname=None
|
262
|
+
) -> dict[str, Any]:
|
246
263
|
"""
|
247
264
|
Updates the information of a phone number by its number, allowing optional modification of inbound and outbound agent IDs and nickname.
|
248
|
-
|
265
|
+
|
249
266
|
Args:
|
250
267
|
phone_number: str. The phone number to update. This parameter is required.
|
251
268
|
inbound_agent_id: Optional[str]. The ID of the inbound agent to associate with the phone number. If None, this field will not be updated.
|
252
269
|
outbound_agent_id: Optional[str]. The ID of the outbound agent to associate with the phone number. If None, this field will not be updated.
|
253
270
|
nickname: Optional[str]. The nickname to assign to the phone number. If None, this field will not be updated.
|
254
|
-
|
271
|
+
|
255
272
|
Returns:
|
256
273
|
dict[str, Any]: A dictionary containing the updated phone number information as returned by the API.
|
257
|
-
|
274
|
+
|
258
275
|
Raises:
|
259
276
|
ValueError: If the required parameter 'phone_number' is not provided.
|
260
277
|
requests.HTTPError: If the HTTP PATCH request fails or the response has an error status.
|
261
|
-
|
278
|
+
|
262
279
|
Tags:
|
263
280
|
update, phone-number, api, patch, management
|
264
281
|
"""
|
265
282
|
if phone_number is None:
|
266
283
|
raise ValueError("Missing required parameter 'phone_number'")
|
267
284
|
request_body = {
|
268
|
-
|
269
|
-
|
270
|
-
|
285
|
+
"inbound_agent_id": inbound_agent_id,
|
286
|
+
"outbound_agent_id": outbound_agent_id,
|
287
|
+
"nickname": nickname,
|
271
288
|
}
|
272
289
|
request_body = {k: v for k, v in request_body.items() if v is not None}
|
273
290
|
url = f"{self.base_url}/update-phone-number/{phone_number}"
|
@@ -279,17 +296,17 @@ class RetellAiApp(APIApplication):
|
|
279
296
|
def delete_delete_phone_number_by_phone_number(self, phone_number) -> Any:
|
280
297
|
"""
|
281
298
|
Deletes a phone number resource by its phone number identifier via an HTTP DELETE request.
|
282
|
-
|
299
|
+
|
283
300
|
Args:
|
284
301
|
phone_number: The phone number (str or compatible type) identifying the resource to be deleted.
|
285
|
-
|
302
|
+
|
286
303
|
Returns:
|
287
304
|
The server's JSON response as a Python object upon successful deletion.
|
288
|
-
|
305
|
+
|
289
306
|
Raises:
|
290
307
|
ValueError: If 'phone_number' is None.
|
291
308
|
requests.HTTPError: If the HTTP DELETE request results in an error status code.
|
292
|
-
|
309
|
+
|
293
310
|
Tags:
|
294
311
|
delete, phone-number, api, management, important
|
295
312
|
"""
|
@@ -312,5 +329,5 @@ class RetellAiApp(APIApplication):
|
|
312
329
|
self.get_get_phone_number_by_phone_number,
|
313
330
|
self.get_list_phone_numbers,
|
314
331
|
self.patch_update_phone_number_by_phone_number,
|
315
|
-
self.delete_delete_phone_number_by_phone_number
|
332
|
+
self.delete_delete_phone_number_by_phone_number,
|
316
333
|
]
|
@@ -6,8 +6,8 @@ from universal_mcp.integrations import Integration
|
|
6
6
|
|
7
7
|
class RocketlaneApp(APIApplication):
|
8
8
|
def __init__(self, integration: Integration = None, **kwargs) -> None:
|
9
|
-
super().__init__(name=
|
10
|
-
subdomain= self.integration.get_credentials().get("subdomain")
|
9
|
+
super().__init__(name="rocketlane", integration=integration, **kwargs)
|
10
|
+
subdomain = self.integration.get_credentials().get("subdomain")
|
11
11
|
self.base_url = f"https://{subdomain}.api.rocketlane.com/api/v1"
|
12
12
|
|
13
13
|
def _get_headers(self) -> dict[str, Any]:
|
@@ -18,19 +18,21 @@ class RocketlaneApp(APIApplication):
|
|
18
18
|
"Accept": "application/json",
|
19
19
|
}
|
20
20
|
|
21
|
-
def get_subscription(
|
21
|
+
def get_subscription(
|
22
|
+
self,
|
23
|
+
) -> Any:
|
22
24
|
"""
|
23
25
|
Retrieves subscription details from the server.
|
24
|
-
|
26
|
+
|
25
27
|
Args:
|
26
28
|
None: This function does not take any parameters.
|
27
|
-
|
29
|
+
|
28
30
|
Returns:
|
29
31
|
A JSON response containing subscription details.
|
30
|
-
|
32
|
+
|
31
33
|
Raises:
|
32
34
|
requests.HTTPError: Raised if an HTTP error occurs during the request
|
33
|
-
|
35
|
+
|
34
36
|
Tags:
|
35
37
|
fetch, subscription, management, important
|
36
38
|
"""
|
@@ -40,16 +42,18 @@ class RocketlaneApp(APIApplication):
|
|
40
42
|
response.raise_for_status()
|
41
43
|
return response.json()
|
42
44
|
|
43
|
-
def get_home(
|
45
|
+
def get_home(
|
46
|
+
self,
|
47
|
+
) -> Any:
|
44
48
|
"""
|
45
49
|
Retrieves the JSON response from the '/home' endpoint of the configured API.
|
46
|
-
|
50
|
+
|
47
51
|
Returns:
|
48
52
|
Any: Parsed JSON data returned by the '/home' endpoint.
|
49
|
-
|
53
|
+
|
50
54
|
Raises:
|
51
55
|
requests.HTTPError: If the HTTP request to the '/home' endpoint returns an unsuccessful status code.
|
52
|
-
|
56
|
+
|
53
57
|
Tags:
|
54
58
|
get, home, api, request, important
|
55
59
|
"""
|
@@ -59,19 +63,21 @@ class RocketlaneApp(APIApplication):
|
|
59
63
|
response.raise_for_status()
|
60
64
|
return response.json()
|
61
65
|
|
62
|
-
def get_all_projects(
|
66
|
+
def get_all_projects(
|
67
|
+
self,
|
68
|
+
) -> dict[str, Any]:
|
63
69
|
"""
|
64
70
|
Retrieves a list of all projects from the remote service.
|
65
|
-
|
71
|
+
|
66
72
|
Args:
|
67
73
|
None: This function takes no arguments
|
68
|
-
|
74
|
+
|
69
75
|
Returns:
|
70
76
|
A dictionary containing the JSON response data representing all available projects.
|
71
|
-
|
77
|
+
|
72
78
|
Raises:
|
73
79
|
HTTPError: If the HTTP request to retrieve the projects fails or returns an unsuccessful status code.
|
74
|
-
|
80
|
+
|
75
81
|
Tags:
|
76
82
|
list, projects, api, important
|
77
83
|
"""
|
@@ -84,17 +90,17 @@ class RocketlaneApp(APIApplication):
|
|
84
90
|
def get_projects_by_projectid(self, projectId) -> Any:
|
85
91
|
"""
|
86
92
|
Retrieves project details for a given project ID from the server.
|
87
|
-
|
93
|
+
|
88
94
|
Args:
|
89
95
|
projectId: The unique identifier of the project to retrieve.
|
90
|
-
|
96
|
+
|
91
97
|
Returns:
|
92
98
|
A JSON-deserialized object containing the project's details as returned by the server.
|
93
|
-
|
99
|
+
|
94
100
|
Raises:
|
95
101
|
ValueError: Raised if 'projectId' is None.
|
96
102
|
requests.HTTPError: Raised if the HTTP request to retrieve the project fails (e.g., 4xx or 5xx response).
|
97
|
-
|
103
|
+
|
98
104
|
Tags:
|
99
105
|
get, project, fetch, management, important
|
100
106
|
"""
|
@@ -109,17 +115,17 @@ class RocketlaneApp(APIApplication):
|
|
109
115
|
def get_projects_by_projectid_tasks(self, projectId) -> Any:
|
110
116
|
"""
|
111
117
|
Retrieves a list of tasks associated with a given project ID.
|
112
|
-
|
118
|
+
|
113
119
|
Args:
|
114
120
|
projectId: str. The unique identifier of the project whose tasks are to be retrieved.
|
115
|
-
|
121
|
+
|
116
122
|
Returns:
|
117
123
|
dict. A JSON object containing the list of tasks for the specified project.
|
118
|
-
|
124
|
+
|
119
125
|
Raises:
|
120
126
|
ValueError: If the projectId parameter is None.
|
121
127
|
requests.HTTPError: If the HTTP request to retrieve tasks fails (i.e., non-2xx response).
|
122
|
-
|
128
|
+
|
123
129
|
Tags:
|
124
130
|
get, list, project-tasks, management, important
|
125
131
|
"""
|
@@ -131,10 +137,18 @@ class RocketlaneApp(APIApplication):
|
|
131
137
|
response.raise_for_status()
|
132
138
|
return response.json()
|
133
139
|
|
134
|
-
def create_task(
|
140
|
+
def create_task(
|
141
|
+
self,
|
142
|
+
projectId,
|
143
|
+
taskDescription=None,
|
144
|
+
taskName=None,
|
145
|
+
assignee=None,
|
146
|
+
startDate=None,
|
147
|
+
dueDate=None,
|
148
|
+
) -> dict[str, Any]:
|
135
149
|
"""
|
136
150
|
Creates a new task within the specified project, assigning optional details such as description, name, assignee, start date, and due date.
|
137
|
-
|
151
|
+
|
138
152
|
Args:
|
139
153
|
projectId: str. The unique identifier of the project in which to create the task. Required.
|
140
154
|
taskDescription: Optional[str]. A description of the task to be created.
|
@@ -142,25 +156,25 @@ class RocketlaneApp(APIApplication):
|
|
142
156
|
assignee: Optional[str]. The user to whom the task is assigned.
|
143
157
|
startDate: Optional[str]. The starting date for the task, formatted as an ISO 8601 string.
|
144
158
|
dueDate: Optional[str]. The due date for task completion, formatted as an ISO 8601 string.
|
145
|
-
|
159
|
+
|
146
160
|
Returns:
|
147
161
|
dict[str, Any]: A dictionary containing the details of the created task as returned by the API.
|
148
|
-
|
162
|
+
|
149
163
|
Raises:
|
150
164
|
ValueError: If 'projectId' is not provided.
|
151
165
|
requests.HTTPError: If the API request fails and returns a non-success HTTP status code.
|
152
|
-
|
166
|
+
|
153
167
|
Tags:
|
154
168
|
create, task, management, project, api, important
|
155
169
|
"""
|
156
170
|
if projectId is None:
|
157
171
|
raise ValueError("Missing required parameter 'projectId'")
|
158
172
|
request_body = {
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
173
|
+
"taskDescription": taskDescription,
|
174
|
+
"taskName": taskName,
|
175
|
+
"assignee": assignee,
|
176
|
+
"startDate": startDate,
|
177
|
+
"dueDate": dueDate,
|
164
178
|
}
|
165
179
|
request_body = {k: v for k, v in request_body.items() if v is not None}
|
166
180
|
url = f"{self.base_url}/projects/{projectId}/tasks"
|
@@ -176,5 +190,5 @@ class RocketlaneApp(APIApplication):
|
|
176
190
|
self.get_all_projects,
|
177
191
|
self.get_projects_by_projectid,
|
178
192
|
self.get_projects_by_projectid_tasks,
|
179
|
-
self.create_task
|
193
|
+
self.create_task,
|
180
194
|
]
|