universal-mcp 0.1.8rc2__py3-none-any.whl → 0.1.8rc4__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. universal_mcp/__init__.py +0 -2
  2. universal_mcp/analytics.py +75 -0
  3. universal_mcp/applications/ahrefs/README.md +76 -0
  4. universal_mcp/applications/ahrefs/__init__.py +0 -0
  5. universal_mcp/applications/ahrefs/app.py +2291 -0
  6. universal_mcp/applications/application.py +94 -5
  7. universal_mcp/applications/calendly/app.py +412 -171
  8. universal_mcp/applications/coda/README.md +133 -0
  9. universal_mcp/applications/coda/__init__.py +0 -0
  10. universal_mcp/applications/coda/app.py +3671 -0
  11. universal_mcp/applications/e2b/app.py +8 -35
  12. universal_mcp/applications/figma/README.md +74 -0
  13. universal_mcp/applications/figma/__init__.py +0 -0
  14. universal_mcp/applications/figma/app.py +1261 -0
  15. universal_mcp/applications/firecrawl/app.py +3 -33
  16. universal_mcp/applications/github/app.py +41 -42
  17. universal_mcp/applications/google_calendar/app.py +20 -31
  18. universal_mcp/applications/google_docs/app.py +21 -46
  19. universal_mcp/applications/google_drive/app.py +53 -76
  20. universal_mcp/applications/google_mail/app.py +40 -56
  21. universal_mcp/applications/google_sheet/app.py +43 -68
  22. universal_mcp/applications/markitdown/app.py +4 -4
  23. universal_mcp/applications/notion/app.py +93 -83
  24. universal_mcp/applications/perplexity/app.py +4 -38
  25. universal_mcp/applications/reddit/app.py +32 -32
  26. universal_mcp/applications/resend/app.py +4 -22
  27. universal_mcp/applications/serpapi/app.py +6 -32
  28. universal_mcp/applications/tavily/app.py +4 -24
  29. universal_mcp/applications/wrike/app.py +565 -237
  30. universal_mcp/applications/youtube/app.py +625 -183
  31. universal_mcp/applications/zenquotes/app.py +3 -3
  32. universal_mcp/exceptions.py +1 -0
  33. universal_mcp/integrations/__init__.py +11 -2
  34. universal_mcp/integrations/agentr.py +27 -4
  35. universal_mcp/integrations/integration.py +14 -6
  36. universal_mcp/logger.py +3 -56
  37. universal_mcp/servers/__init__.py +2 -1
  38. universal_mcp/servers/server.py +73 -77
  39. universal_mcp/stores/store.py +5 -3
  40. universal_mcp/tools/__init__.py +1 -1
  41. universal_mcp/tools/adapters.py +4 -1
  42. universal_mcp/tools/func_metadata.py +5 -6
  43. universal_mcp/tools/tools.py +108 -51
  44. universal_mcp/utils/docgen.py +121 -69
  45. universal_mcp/utils/docstring_parser.py +44 -21
  46. universal_mcp/utils/dump_app_tools.py +33 -23
  47. universal_mcp/utils/installation.py +199 -8
  48. universal_mcp/utils/openapi.py +121 -47
  49. {universal_mcp-0.1.8rc2.dist-info → universal_mcp-0.1.8rc4.dist-info}/METADATA +2 -2
  50. universal_mcp-0.1.8rc4.dist-info/RECORD +81 -0
  51. universal_mcp-0.1.8rc2.dist-info/RECORD +0 -71
  52. {universal_mcp-0.1.8rc2.dist-info → universal_mcp-0.1.8rc4.dist-info}/WHEEL +0 -0
  53. {universal_mcp-0.1.8rc2.dist-info → universal_mcp-0.1.8rc4.dist-info}/entry_points.txt +0 -0
@@ -8,33 +8,23 @@ class CalendlyApp(APIApplication):
8
8
  def __init__(self, integration: Integration = None, **kwargs) -> None:
9
9
  """
10
10
  Initializes a new instance of the Calendly API application with the specified integration and additional configuration options.
11
-
11
+
12
12
  Args:
13
13
  integration: An optional Integration object to associate with the Calendly API application. Defaults to None.
14
14
  **kwargs: Arbitrary keyword arguments that are passed to the superclass initializer for additional configuration.
15
-
15
+
16
16
  Returns:
17
17
  None
18
18
  """
19
- super().__init__(name='calendly', integration=integration, **kwargs)
19
+ super().__init__(name="calendly", integration=integration, **kwargs)
20
20
  self.base_url = "https://api.calendly.com"
21
21
 
22
- def _get_headers(self):
23
- if not self.integration:
24
- raise ValueError("Integration not configured for CalendlyApp")
25
- credentials = self.integration.get_credentials()
26
-
27
- if "headers" in credentials:
28
- return credentials["headers"]
29
- return {
30
- "Authorization": f"Bearer {credentials['access_token']}",
31
- "Content-Type": "application/json",
32
- }
33
-
34
- def list_event_invitees(self, uuid, status=None, sort=None, email=None, page_token=None, count=None) -> dict[str, Any]:
22
+ def list_event_invitees(
23
+ self, uuid, status=None, sort=None, email=None, page_token=None, count=None
24
+ ) -> dict[str, Any]:
35
25
  """
36
26
  Retrieves a list of invitees for a specific scheduled event, optionally filtered and paginated by status, email, sorting order, and paging parameters.
37
-
27
+
38
28
  Args:
39
29
  uuid: str. The unique identifier of the scheduled event for which to list invitees.
40
30
  status: Optional[str]. Filter invitees by their invitation status (e.g., accepted, declined, pending).
@@ -42,14 +32,24 @@ class CalendlyApp(APIApplication):
42
32
  email: Optional[str]. Filter invitees by their email address.
43
33
  page_token: Optional[str]. A token indicating the page of results to retrieve for pagination.
44
34
  count: Optional[int]. The maximum number of invitees to return per page.
45
-
35
+
46
36
  Returns:
47
37
  dict[str, Any]: A dictionary containing the list of event invitees and pagination details, as returned by the API.
48
38
  """
49
39
  if uuid is None:
50
40
  raise ValueError("Missing required parameter 'uuid'")
51
41
  url = f"{self.base_url}/scheduled_events/{uuid}/invitees"
52
- query_params = {k: v for k, v in [('status', status), ('sort', sort), ('email', email), ('page_token', page_token), ('count', count)] if v is not None}
42
+ query_params = {
43
+ k: v
44
+ for k, v in [
45
+ ("status", status),
46
+ ("sort", sort),
47
+ ("email", email),
48
+ ("page_token", page_token),
49
+ ("count", count),
50
+ ]
51
+ if v is not None
52
+ }
53
53
  response = self._get(url, params=query_params)
54
54
  response.raise_for_status()
55
55
  return response.json()
@@ -57,10 +57,10 @@ class CalendlyApp(APIApplication):
57
57
  def get_event(self, uuid) -> dict[str, Any]:
58
58
  """
59
59
  Retrieves the details of a scheduled event given its UUID.
60
-
60
+
61
61
  Args:
62
62
  uuid: str. The unique identifier of the scheduled event to retrieve.
63
-
63
+
64
64
  Returns:
65
65
  dict[str, Any]: A dictionary containing the scheduled event details as returned by the API.
66
66
  """
@@ -75,11 +75,11 @@ class CalendlyApp(APIApplication):
75
75
  def get_event_invitee(self, event_uuid, invitee_uuid) -> dict[str, Any]:
76
76
  """
77
77
  Retrieves details about a specific invitee for a given scheduled event.
78
-
78
+
79
79
  Args:
80
80
  event_uuid: The unique identifier of the scheduled event.
81
81
  invitee_uuid: The unique identifier of the invitee to retrieve.
82
-
82
+
83
83
  Returns:
84
84
  A dictionary containing invitee details as returned by the API.
85
85
  """
@@ -93,10 +93,22 @@ class CalendlyApp(APIApplication):
93
93
  response.raise_for_status()
94
94
  return response.json()
95
95
 
96
- def list_events(self, user=None, organization=None, invitee_email=None, status=None, sort=None, min_start_time=None, max_start_time=None, page_token=None, count=None, group=None) -> dict[str, Any]:
96
+ def list_events(
97
+ self,
98
+ user=None,
99
+ organization=None,
100
+ invitee_email=None,
101
+ status=None,
102
+ sort=None,
103
+ min_start_time=None,
104
+ max_start_time=None,
105
+ page_token=None,
106
+ count=None,
107
+ group=None,
108
+ ) -> dict[str, Any]:
97
109
  """
98
110
  Retrieves a list of scheduled events filtered by optional user, organization, invitee email, status, date range, sorting, and pagination criteria.
99
-
111
+
100
112
  Args:
101
113
  user: Optional[str]: The user identifier to filter events by a specific user.
102
114
  organization: Optional[str]: The organization identifier to filter events by a specific organization.
@@ -108,12 +120,27 @@ class CalendlyApp(APIApplication):
108
120
  page_token: Optional[str]: Token for fetching the next page of results.
109
121
  count: Optional[int]: The maximum number of events to return.
110
122
  group: Optional[str]: Group identifier to filter events by group.
111
-
123
+
112
124
  Returns:
113
125
  dict[str, Any]: A dictionary containing the list of scheduled events and associated metadata.
114
126
  """
115
127
  url = f"{self.base_url}/scheduled_events"
116
- query_params = {k: v for k, v in [('user', user), ('organization', organization), ('invitee_email', invitee_email), ('status', status), ('sort', sort), ('min_start_time', min_start_time), ('max_start_time', max_start_time), ('page_token', page_token), ('count', count), ('group', group)] if v is not None}
128
+ query_params = {
129
+ k: v
130
+ for k, v in [
131
+ ("user", user),
132
+ ("organization", organization),
133
+ ("invitee_email", invitee_email),
134
+ ("status", status),
135
+ ("sort", sort),
136
+ ("min_start_time", min_start_time),
137
+ ("max_start_time", max_start_time),
138
+ ("page_token", page_token),
139
+ ("count", count),
140
+ ("group", group),
141
+ ]
142
+ if v is not None
143
+ }
117
144
  response = self._get(url, params=query_params)
118
145
  response.raise_for_status()
119
146
  return response.json()
@@ -121,10 +148,10 @@ class CalendlyApp(APIApplication):
121
148
  def get_event_type(self, uuid) -> dict[str, Any]:
122
149
  """
123
150
  Retrieves the event type details for the specified UUID from the API.
124
-
151
+
125
152
  Args:
126
153
  uuid: str. The unique identifier of the event type to retrieve.
127
-
154
+
128
155
  Returns:
129
156
  dict. A dictionary containing the event type details as returned by the API.
130
157
  """
@@ -136,10 +163,20 @@ class CalendlyApp(APIApplication):
136
163
  response.raise_for_status()
137
164
  return response.json()
138
165
 
139
- def list_user_sevent_types(self, active=None, organization=None, user=None, user_availability_schedule=None, sort=None, admin_managed=None, page_token=None, count=None) -> dict[str, Any]:
166
+ def list_user_sevent_types(
167
+ self,
168
+ active=None,
169
+ organization=None,
170
+ user=None,
171
+ user_availability_schedule=None,
172
+ sort=None,
173
+ admin_managed=None,
174
+ page_token=None,
175
+ count=None,
176
+ ) -> dict[str, Any]:
140
177
  """
141
178
  Retrieves a list of user event types with optional filtering, sorting, and pagination parameters.
142
-
179
+
143
180
  Args:
144
181
  active: Optional; filter event types by active status (bool or compatible).
145
182
  organization: Optional; filter event types by organization identifier.
@@ -149,12 +186,25 @@ class CalendlyApp(APIApplication):
149
186
  admin_managed: Optional; filter event types managed by an admin (bool or compatible).
150
187
  page_token: Optional; token for paginating through result pages.
151
188
  count: Optional; maximum number of event types to return.
152
-
189
+
153
190
  Returns:
154
191
  A dictionary containing the list of user event types and associated pagination or metadata information.
155
192
  """
156
193
  url = f"{self.base_url}/event_types"
157
- query_params = {k: v for k, v in [('active', active), ('organization', organization), ('user', user), ('user_availability_schedule', user_availability_schedule), ('sort', sort), ('admin_managed', admin_managed), ('page_token', page_token), ('count', count)] if v is not None}
194
+ query_params = {
195
+ k: v
196
+ for k, v in [
197
+ ("active", active),
198
+ ("organization", organization),
199
+ ("user", user),
200
+ ("user_availability_schedule", user_availability_schedule),
201
+ ("sort", sort),
202
+ ("admin_managed", admin_managed),
203
+ ("page_token", page_token),
204
+ ("count", count),
205
+ ]
206
+ if v is not None
207
+ }
158
208
  response = self._get(url, params=query_params)
159
209
  response.raise_for_status()
160
210
  return response.json()
@@ -162,10 +212,10 @@ class CalendlyApp(APIApplication):
162
212
  def get_user(self, uuid) -> dict[str, Any]:
163
213
  """
164
214
  Retrieves detailed user information for a given UUID from the remote API.
165
-
215
+
166
216
  Args:
167
217
  uuid: The unique identifier (UUID) of the user to retrieve.
168
-
218
+
169
219
  Returns:
170
220
  A dictionary containing the user's details as returned by the API.
171
221
  """
@@ -177,13 +227,15 @@ class CalendlyApp(APIApplication):
177
227
  response.raise_for_status()
178
228
  return response.json()
179
229
 
180
- def get_current_user(self, ) -> dict[str, Any]:
230
+ def get_current_user(
231
+ self,
232
+ ) -> dict[str, Any]:
181
233
  """
182
234
  Retrieves information about the currently authenticated user from the API.
183
-
235
+
184
236
  Args:
185
237
  self: Instance of the class containing API connection details and HTTP methods.
186
-
238
+
187
239
  Returns:
188
240
  A dictionary containing the current user's information as returned by the API.
189
241
  """
@@ -193,10 +245,12 @@ class CalendlyApp(APIApplication):
193
245
  response.raise_for_status()
194
246
  return response.json()
195
247
 
196
- def list_organization_invitations(self, uuid, count=None, page_token=None, sort=None, email=None, status=None) -> dict[str, Any]:
248
+ def list_organization_invitations(
249
+ self, uuid, count=None, page_token=None, sort=None, email=None, status=None
250
+ ) -> dict[str, Any]:
197
251
  """
198
252
  Retrieves a paginated list of invitations for a specified organization, with optional filtering and sorting.
199
-
253
+
200
254
  Args:
201
255
  uuid: str. Unique identifier of the organization whose invitations are to be listed.
202
256
  count: Optional[int]. Maximum number of invitations to return per page.
@@ -204,14 +258,24 @@ class CalendlyApp(APIApplication):
204
258
  sort: Optional[str]. Sorting criteria for the invitations (e.g., by date or status).
205
259
  email: Optional[str]. Filter invitations sent to a specific email address.
206
260
  status: Optional[str]. Filter invitations by their status (e.g., pending, accepted, expired).
207
-
261
+
208
262
  Returns:
209
263
  dict[str, Any]: A dictionary containing the list of organization invitations and pagination information.
210
264
  """
211
265
  if uuid is None:
212
266
  raise ValueError("Missing required parameter 'uuid'")
213
267
  url = f"{self.base_url}/organizations/{uuid}/invitations"
214
- query_params = {k: v for k, v in [('count', count), ('page_token', page_token), ('sort', sort), ('email', email), ('status', status)] if v is not None}
268
+ query_params = {
269
+ k: v
270
+ for k, v in [
271
+ ("count", count),
272
+ ("page_token", page_token),
273
+ ("sort", sort),
274
+ ("email", email),
275
+ ("status", status),
276
+ ]
277
+ if v is not None
278
+ }
215
279
  response = self._get(url, params=query_params)
216
280
  response.raise_for_status()
217
281
  return response.json()
@@ -219,18 +283,18 @@ class CalendlyApp(APIApplication):
219
283
  def invite_user_to_organization(self, uuid, email=None) -> dict[str, Any]:
220
284
  """
221
285
  Sends an invitation to a specified email address to join an organization identified by its UUID.
222
-
286
+
223
287
  Args:
224
288
  uuid: str. The unique identifier of the organization to which the user is being invited.
225
289
  email: Optional[str]. The email address of the user to invite. If None, the invite is created without an email.
226
-
290
+
227
291
  Returns:
228
292
  dict[str, Any]. A dictionary containing the JSON response from the API after sending the invitation.
229
293
  """
230
294
  if uuid is None:
231
295
  raise ValueError("Missing required parameter 'uuid'")
232
296
  request_body = {
233
- 'email': email,
297
+ "email": email,
234
298
  }
235
299
  request_body = {k: v for k, v in request_body.items() if v is not None}
236
300
  url = f"{self.base_url}/organizations/{uuid}/invitations"
@@ -242,11 +306,11 @@ class CalendlyApp(APIApplication):
242
306
  def get_organization_invitation(self, org_uuid, uuid) -> dict[str, Any]:
243
307
  """
244
308
  Retrieves a specific invitation for an organization using its unique identifiers.
245
-
309
+
246
310
  Args:
247
311
  org_uuid: str. The unique identifier of the organization whose invitation is to be retrieved.
248
312
  uuid: str. The unique identifier of the invitation to fetch.
249
-
313
+
250
314
  Returns:
251
315
  dict. A dictionary containing the invitation details as returned by the API.
252
316
  """
@@ -263,11 +327,11 @@ class CalendlyApp(APIApplication):
263
327
  def revoke_user_sorganization_invitation(self, org_uuid, uuid) -> Any:
264
328
  """
265
329
  Revokes a user's invitation to an organization by deleting the specified invitation resource.
266
-
330
+
267
331
  Args:
268
332
  org_uuid: The unique identifier of the organization from which the user's invitation will be revoked.
269
333
  uuid: The unique identifier of the invitation to be revoked.
270
-
334
+
271
335
  Returns:
272
336
  The JSON response from the API after successfully revoking the invitation.
273
337
  """
@@ -284,10 +348,10 @@ class CalendlyApp(APIApplication):
284
348
  def get_organization_membership(self, uuid) -> dict[str, Any]:
285
349
  """
286
350
  Retrieves the membership information for a specified organization membership UUID.
287
-
351
+
288
352
  Args:
289
353
  uuid: str. The unique identifier of the organization membership to retrieve.
290
-
354
+
291
355
  Returns:
292
356
  dict. A dictionary containing the organization membership details as returned by the API.
293
357
  """
@@ -302,10 +366,10 @@ class CalendlyApp(APIApplication):
302
366
  def remove_user_from_organization(self, uuid) -> Any:
303
367
  """
304
368
  Removes a user from the organization by deleting their membership using the specified UUID.
305
-
369
+
306
370
  Args:
307
371
  uuid: str. The unique identifier of the organization membership to remove.
308
-
372
+
309
373
  Returns:
310
374
  dict. The response data from the organization membership removal request.
311
375
  """
@@ -317,22 +381,34 @@ class CalendlyApp(APIApplication):
317
381
  response.raise_for_status()
318
382
  return response.json()
319
383
 
320
- def list_organization_memberships(self, page_token=None, count=None, email=None, organization=None, user=None) -> dict[str, Any]:
384
+ def list_organization_memberships(
385
+ self, page_token=None, count=None, email=None, organization=None, user=None
386
+ ) -> dict[str, Any]:
321
387
  """
322
388
  Retrieves a list of organization memberships, optionally filtered by pagination, email, organization, or user parameters.
323
-
389
+
324
390
  Args:
325
391
  page_token: Optional; A string token to specify the page of results to retrieve for pagination.
326
392
  count: Optional; An integer specifying the maximum number of memberships to return.
327
393
  email: Optional; A string to filter memberships by user email address.
328
394
  organization: Optional; A string to filter memberships by organization identifier.
329
395
  user: Optional; A string to filter memberships by user identifier.
330
-
396
+
331
397
  Returns:
332
398
  A dictionary containing the organization membership data returned by the API.
333
399
  """
334
400
  url = f"{self.base_url}/organization_memberships"
335
- query_params = {k: v for k, v in [('page_token', page_token), ('count', count), ('email', email), ('organization', organization), ('user', user)] if v is not None}
401
+ query_params = {
402
+ k: v
403
+ for k, v in [
404
+ ("page_token", page_token),
405
+ ("count", count),
406
+ ("email", email),
407
+ ("organization", organization),
408
+ ("user", user),
409
+ ]
410
+ if v is not None
411
+ }
336
412
  response = self._get(url, params=query_params)
337
413
  response.raise_for_status()
338
414
  return response.json()
@@ -340,10 +416,10 @@ class CalendlyApp(APIApplication):
340
416
  def get_webhook_subscription(self, webhook_uuid) -> dict[str, Any]:
341
417
  """
342
418
  Retrieves the details of a webhook subscription identified by its UUID.
343
-
419
+
344
420
  Args:
345
421
  webhook_uuid: The unique identifier (UUID) of the webhook subscription to retrieve.
346
-
422
+
347
423
  Returns:
348
424
  A dictionary containing the webhook subscription details as returned by the API.
349
425
  """
@@ -358,10 +434,10 @@ class CalendlyApp(APIApplication):
358
434
  def delete_webhook_subscription(self, webhook_uuid) -> Any:
359
435
  """
360
436
  Deletes a webhook subscription identified by its UUID.
361
-
437
+
362
438
  Args:
363
439
  webhook_uuid: The unique identifier (UUID) of the webhook subscription to delete.
364
-
440
+
365
441
  Returns:
366
442
  The JSON-decoded response from the server after deleting the webhook subscription.
367
443
  """
@@ -373,10 +449,18 @@ class CalendlyApp(APIApplication):
373
449
  response.raise_for_status()
374
450
  return response.json()
375
451
 
376
- def list_webhook_subscriptions(self, organization=None, user=None, page_token=None, count=None, sort=None, scope=None) -> dict[str, Any]:
452
+ def list_webhook_subscriptions(
453
+ self,
454
+ organization=None,
455
+ user=None,
456
+ page_token=None,
457
+ count=None,
458
+ sort=None,
459
+ scope=None,
460
+ ) -> dict[str, Any]:
377
461
  """
378
462
  Retrieves a list of webhook subscriptions, optionally filtered and paginated based on input criteria.
379
-
463
+
380
464
  Args:
381
465
  organization: Optional; str or None. Identifier of the organization to filter subscriptions by organization.
382
466
  user: Optional; str or None. Identifier of the user to filter subscriptions created by a specific user.
@@ -384,20 +468,40 @@ class CalendlyApp(APIApplication):
384
468
  count: Optional; int or None. Maximum number of subscriptions to return in the response.
385
469
  sort: Optional; str or None. Sorting order for the returned subscriptions.
386
470
  scope: Optional; str or None. Scope to filter webhook subscriptions.
387
-
471
+
388
472
  Returns:
389
473
  dict: A dictionary containing the list of webhook subscriptions matching the query parameters and any associated metadata (e.g., paging info).
390
474
  """
391
475
  url = f"{self.base_url}/webhook_subscriptions"
392
- query_params = {k: v for k, v in [('organization', organization), ('user', user), ('page_token', page_token), ('count', count), ('sort', sort), ('scope', scope)] if v is not None}
476
+ query_params = {
477
+ k: v
478
+ for k, v in [
479
+ ("organization", organization),
480
+ ("user", user),
481
+ ("page_token", page_token),
482
+ ("count", count),
483
+ ("sort", sort),
484
+ ("scope", scope),
485
+ ]
486
+ if v is not None
487
+ }
393
488
  response = self._get(url, params=query_params)
394
489
  response.raise_for_status()
395
490
  return response.json()
396
491
 
397
- def create_webhook_subscription(self, events=None, group=None, organization=None, scope=None, signing_key=None, url=None, user=None) -> dict[str, Any]:
492
+ def create_webhook_subscription(
493
+ self,
494
+ events=None,
495
+ group=None,
496
+ organization=None,
497
+ scope=None,
498
+ signing_key=None,
499
+ url=None,
500
+ user=None,
501
+ ) -> dict[str, Any]:
398
502
  """
399
503
  Creates a new webhook subscription with the specified parameters and returns the subscription details as a dictionary.
400
-
504
+
401
505
  Args:
402
506
  events: Optional[list[str]]; A list of event names that will trigger the webhook.
403
507
  group: Optional[str]; The group identifier to which the webhook is scoped.
@@ -406,18 +510,18 @@ class CalendlyApp(APIApplication):
406
510
  signing_key: Optional[str]; The key used to sign webhook payloads for verification.
407
511
  url: Optional[str]; The URL endpoint to which the webhook events will be delivered.
408
512
  user: Optional[str]; The user identifier associated with this webhook subscription.
409
-
513
+
410
514
  Returns:
411
515
  dict[str, Any]: A dictionary containing the details of the created webhook subscription as returned by the API.
412
516
  """
413
517
  request_body = {
414
- 'events': events,
415
- 'group': group,
416
- 'organization': organization,
417
- 'scope': scope,
418
- 'signing_key': signing_key,
419
- 'url': url,
420
- 'user': user,
518
+ "events": events,
519
+ "group": group,
520
+ "organization": organization,
521
+ "scope": scope,
522
+ "signing_key": signing_key,
523
+ "url": url,
524
+ "user": user,
421
525
  }
422
526
  request_body = {k: v for k, v in request_body.items() if v is not None}
423
527
  url = f"{self.base_url}/webhook_subscriptions"
@@ -426,22 +530,24 @@ class CalendlyApp(APIApplication):
426
530
  response.raise_for_status()
427
531
  return response.json()
428
532
 
429
- def create_single_use_scheduling_link(self, max_event_count=None, owner=None, owner_type=None) -> dict[str, Any]:
533
+ def create_single_use_scheduling_link(
534
+ self, max_event_count=None, owner=None, owner_type=None
535
+ ) -> dict[str, Any]:
430
536
  """
431
537
  Creates a single-use scheduling link by sending a POST request with optional restrictions.
432
-
538
+
433
539
  Args:
434
540
  max_event_count: Optional; int or None. The maximum number of events that can be scheduled using the link.
435
541
  owner: Optional; str or None. The identifier for the owner of the scheduling link.
436
542
  owner_type: Optional; str or None. The type of the owner (e.g., 'user', 'team').
437
-
543
+
438
544
  Returns:
439
545
  dict[str, Any]: The response data from the scheduling link creation API as a dictionary.
440
546
  """
441
547
  request_body = {
442
- 'max_event_count': max_event_count,
443
- 'owner': owner,
444
- 'owner_type': owner_type,
548
+ "max_event_count": max_event_count,
549
+ "owner": owner,
550
+ "owner_type": owner_type,
445
551
  }
446
552
  request_body = {k: v for k, v in request_body.items() if v is not None}
447
553
  url = f"{self.base_url}/scheduling_links"
@@ -453,15 +559,15 @@ class CalendlyApp(APIApplication):
453
559
  def delete_invitee_data(self, emails=None) -> dict[str, Any]:
454
560
  """
455
561
  Deletes invitee data for the specified email addresses by sending a POST request to the data compliance API.
456
-
562
+
457
563
  Args:
458
564
  emails: Optional list of email addresses (list[str] or None) to identify the invitees whose data should be deleted. If None, no emails are included in the request.
459
-
565
+
460
566
  Returns:
461
567
  A dictionary containing the JSON response from the API indicating the result of the deletion request.
462
568
  """
463
569
  request_body = {
464
- 'emails': emails,
570
+ "emails": emails,
465
571
  }
466
572
  request_body = {k: v for k, v in request_body.items() if v is not None}
467
573
  url = f"{self.base_url}/data_compliance/deletion/invitees"
@@ -470,20 +576,22 @@ class CalendlyApp(APIApplication):
470
576
  response.raise_for_status()
471
577
  return response.json()
472
578
 
473
- def delete_scheduled_event_data(self, end_time=None, start_time=None) -> dict[str, Any]:
579
+ def delete_scheduled_event_data(
580
+ self, end_time=None, start_time=None
581
+ ) -> dict[str, Any]:
474
582
  """
475
583
  Deletes scheduled event data within the specified time range by sending a deletion request to the data compliance service.
476
-
584
+
477
585
  Args:
478
586
  end_time: Optional; The end of the time interval for which scheduled event data should be deleted. If None, no upper bound is set.
479
587
  start_time: Optional; The start of the time interval for which scheduled event data should be deleted. If None, no lower bound is set.
480
-
588
+
481
589
  Returns:
482
590
  A dictionary containing the response from the data compliance deletion endpoint.
483
591
  """
484
592
  request_body = {
485
- 'end_time': end_time,
486
- 'start_time': start_time,
593
+ "end_time": end_time,
594
+ "start_time": start_time,
487
595
  }
488
596
  request_body = {k: v for k, v in request_body.items() if v is not None}
489
597
  url = f"{self.base_url}/data_compliance/deletion/events"
@@ -495,10 +603,10 @@ class CalendlyApp(APIApplication):
495
603
  def get_invitee_no_show(self, uuid) -> dict[str, Any]:
496
604
  """
497
605
  Retrieves details about an invitee who did not show up for a scheduled event, identified by a unique UUID.
498
-
606
+
499
607
  Args:
500
608
  uuid: The unique identifier (UUID) of the invitee no-show to retrieve.
501
-
609
+
502
610
  Returns:
503
611
  A dictionary containing details of the invitee no-show record.
504
612
  """
@@ -513,10 +621,10 @@ class CalendlyApp(APIApplication):
513
621
  def delete_invitee_no_show(self, uuid) -> Any:
514
622
  """
515
623
  Deletes an invitee no-show record identified by the given UUID.
516
-
624
+
517
625
  Args:
518
626
  uuid: The unique identifier (UUID) of the invitee no-show to delete. Must not be None.
519
-
627
+
520
628
  Returns:
521
629
  The response data as a JSON object after successfully deleting the invitee no-show record.
522
630
  """
@@ -531,15 +639,15 @@ class CalendlyApp(APIApplication):
531
639
  def create_invitee_no_show(self, invitee=None) -> dict[str, Any]:
532
640
  """
533
641
  Creates an invitee no-show record by sending a POST request to the invitee_no_shows endpoint.
534
-
642
+
535
643
  Args:
536
644
  invitee: Optional; information about the invitee to be included in the request body. If None, the invitee field is omitted.
537
-
645
+
538
646
  Returns:
539
647
  A dictionary containing the server's JSON response to the creation request.
540
648
  """
541
649
  request_body = {
542
- 'invitee': invitee,
650
+ "invitee": invitee,
543
651
  }
544
652
  request_body = {k: v for k, v in request_body.items() if v is not None}
545
653
  url = f"{self.base_url}/invitee_no_shows"
@@ -551,10 +659,10 @@ class CalendlyApp(APIApplication):
551
659
  def get_group(self, uuid) -> dict[str, Any]:
552
660
  """
553
661
  Retrieves information for a group identified by its UUID from the server.
554
-
662
+
555
663
  Args:
556
664
  uuid: The unique identifier (UUID) of the group to retrieve.
557
-
665
+
558
666
  Returns:
559
667
  A dictionary containing the group's details as returned by the server.
560
668
  """
@@ -566,20 +674,30 @@ class CalendlyApp(APIApplication):
566
674
  response.raise_for_status()
567
675
  return response.json()
568
676
 
569
- def list_groups(self, organization=None, page_token=None, count=None) -> dict[str, Any]:
677
+ def list_groups(
678
+ self, organization=None, page_token=None, count=None
679
+ ) -> dict[str, Any]:
570
680
  """
571
681
  Retrieves a list of groups from the API, optionally filtered by organization and paginated using a page token and count.
572
-
682
+
573
683
  Args:
574
684
  organization: Optional; a string specifying the organization to filter the groups by.
575
685
  page_token: Optional; a string token indicating the page of results to retrieve for pagination.
576
686
  count: Optional; an integer specifying the maximum number of groups to return.
577
-
687
+
578
688
  Returns:
579
689
  A dictionary containing the JSON response from the API with the list of groups and any relevant pagination details.
580
690
  """
581
691
  url = f"{self.base_url}/groups"
582
- query_params = {k: v for k, v in [('organization', organization), ('page_token', page_token), ('count', count)] if v is not None}
692
+ query_params = {
693
+ k: v
694
+ for k, v in [
695
+ ("organization", organization),
696
+ ("page_token", page_token),
697
+ ("count", count),
698
+ ]
699
+ if v is not None
700
+ }
583
701
  response = self._get(url, params=query_params)
584
702
  response.raise_for_status()
585
703
  return response.json()
@@ -587,10 +705,10 @@ class CalendlyApp(APIApplication):
587
705
  def get_group_relationship(self, uuid) -> dict[str, Any]:
588
706
  """
589
707
  Retrieves the relationship information for a group specified by UUID from the API.
590
-
708
+
591
709
  Args:
592
710
  uuid: The unique identifier (UUID) of the group whose relationship data is to be retrieved.
593
-
711
+
594
712
  Returns:
595
713
  A dictionary containing the group relationship information as returned by the API.
596
714
  """
@@ -602,22 +720,34 @@ class CalendlyApp(APIApplication):
602
720
  response.raise_for_status()
603
721
  return response.json()
604
722
 
605
- def list_group_relationships(self, count=None, page_token=None, organization=None, owner=None, group=None) -> dict[str, Any]:
723
+ def list_group_relationships(
724
+ self, count=None, page_token=None, organization=None, owner=None, group=None
725
+ ) -> dict[str, Any]:
606
726
  """
607
727
  Retrieves a list of group relationships from the server, optionally filtered by pagination and various group ownership parameters.
608
-
728
+
609
729
  Args:
610
730
  count: Optional; Maximum number of records to retrieve. Used for pagination.
611
731
  page_token: Optional; Token indicating the page of results to retrieve. Used for pagination.
612
732
  organization: Optional; Filter relationships to a specific organization.
613
733
  owner: Optional; Filter relationships by the owner's identifier.
614
734
  group: Optional; Filter relationships by the group's identifier.
615
-
735
+
616
736
  Returns:
617
737
  A dictionary containing the JSON response from the server, typically including metadata and a list of group relationships.
618
738
  """
619
739
  url = f"{self.base_url}/group_relationships"
620
- query_params = {k: v for k, v in [('count', count), ('page_token', page_token), ('organization', organization), ('owner', owner), ('group', group)] if v is not None}
740
+ query_params = {
741
+ k: v
742
+ for k, v in [
743
+ ("count", count),
744
+ ("page_token", page_token),
745
+ ("organization", organization),
746
+ ("owner", owner),
747
+ ("group", group),
748
+ ]
749
+ if v is not None
750
+ }
621
751
  response = self._get(url, params=query_params)
622
752
  response.raise_for_status()
623
753
  return response.json()
@@ -625,10 +755,10 @@ class CalendlyApp(APIApplication):
625
755
  def get_routing_form(self, uuid) -> dict[str, Any]:
626
756
  """
627
757
  Retrieves a routing form by its unique identifier from the server.
628
-
758
+
629
759
  Args:
630
760
  uuid: The unique identifier of the routing form to retrieve.
631
-
761
+
632
762
  Returns:
633
763
  A dictionary representing the routing form data retrieved from the server.
634
764
  """
@@ -640,21 +770,32 @@ class CalendlyApp(APIApplication):
640
770
  response.raise_for_status()
641
771
  return response.json()
642
772
 
643
- def list_routing_forms(self, organization=None, count=None, page_token=None, sort=None) -> dict[str, Any]:
773
+ def list_routing_forms(
774
+ self, organization=None, count=None, page_token=None, sort=None
775
+ ) -> dict[str, Any]:
644
776
  """
645
777
  Retrieves a paginated list of routing forms from the API, optionally filtered and sorted by organization, count, page token, or sort order.
646
-
778
+
647
779
  Args:
648
780
  organization: Optional[str]. The organization identifier to filter the routing forms by. If None, no filtering by organization is applied.
649
781
  count: Optional[int]. The maximum number of routing forms to return. If None, the default API pagination size is used.
650
782
  page_token: Optional[str]. A token indicating the page of results to retrieve for pagination. If None, retrieves the first page.
651
783
  sort: Optional[str]. The sorting order to apply to the results. If None, uses the API's default sorting.
652
-
784
+
653
785
  Returns:
654
786
  dict[str, Any]: A dictionary containing the list of routing forms and associated metadata as provided by the API response.
655
787
  """
656
788
  url = f"{self.base_url}/routing_forms"
657
- query_params = {k: v for k, v in [('organization', organization), ('count', count), ('page_token', page_token), ('sort', sort)] if v is not None}
789
+ query_params = {
790
+ k: v
791
+ for k, v in [
792
+ ("organization", organization),
793
+ ("count", count),
794
+ ("page_token", page_token),
795
+ ("sort", sort),
796
+ ]
797
+ if v is not None
798
+ }
658
799
  response = self._get(url, params=query_params)
659
800
  response.raise_for_status()
660
801
  return response.json()
@@ -662,10 +803,10 @@ class CalendlyApp(APIApplication):
662
803
  def get_routing_form_submission(self, uuid) -> dict[str, Any]:
663
804
  """
664
805
  Retrieves a routing form submission by its unique identifier (UUID) from the configured API endpoint.
665
-
806
+
666
807
  Args:
667
808
  uuid: The unique identifier of the routing form submission to retrieve. Must not be None.
668
-
809
+
669
810
  Returns:
670
811
  A dictionary containing the routing form submission data retrieved from the API.
671
812
  """
@@ -677,47 +818,80 @@ class CalendlyApp(APIApplication):
677
818
  response.raise_for_status()
678
819
  return response.json()
679
820
 
680
- def list_routing_form_submissions(self, form=None, count=None, page_token=None, sort=None) -> dict[str, Any]:
821
+ def list_routing_form_submissions(
822
+ self, form=None, count=None, page_token=None, sort=None
823
+ ) -> dict[str, Any]:
681
824
  """
682
825
  Retrieves a list of routing form submissions, optionally filtered and paginated based on provided parameters.
683
-
826
+
684
827
  Args:
685
828
  form: Optional; the identifier of the form to filter submissions by (default is None).
686
829
  count: Optional; the maximum number of submissions to return (default is None).
687
830
  page_token: Optional; token for pagination to retrieve the next set of results (default is None).
688
831
  sort: Optional; sorting preference for the submissions (default is None).
689
-
832
+
690
833
  Returns:
691
834
  A dictionary containing the retrieved routing form submissions and related metadata.
692
835
  """
693
836
  url = f"{self.base_url}/routing_form_submissions"
694
- query_params = {k: v for k, v in [('form', form), ('count', count), ('page_token', page_token), ('sort', sort)] if v is not None}
837
+ query_params = {
838
+ k: v
839
+ for k, v in [
840
+ ("form", form),
841
+ ("count", count),
842
+ ("page_token", page_token),
843
+ ("sort", sort),
844
+ ]
845
+ if v is not None
846
+ }
695
847
  response = self._get(url, params=query_params)
696
848
  response.raise_for_status()
697
849
  return response.json()
698
850
 
699
- def list_event_type_available_times(self, event_type=None, start_time=None, end_time=None) -> dict[str, Any]:
851
+ def list_event_type_available_times(
852
+ self, event_type=None, start_time=None, end_time=None
853
+ ) -> dict[str, Any]:
700
854
  """
701
855
  Retrieves available times for a specified event type within an optional date and time range.
702
-
856
+
703
857
  Args:
704
858
  event_type: Optional; the type of event to filter available times for. If None, retrieves times for all event types.
705
859
  start_time: Optional; the earliest datetime to include in the results, in an accepted string or datetime format. If None, no lower bound is applied.
706
860
  end_time: Optional; the latest datetime to include in the results, in an accepted string or datetime format. If None, no upper bound is applied.
707
-
861
+
708
862
  Returns:
709
863
  A dictionary containing the available times for the specified event type within the given range, as returned by the API.
710
864
  """
711
865
  url = f"{self.base_url}/event_type_available_times"
712
- query_params = {k: v for k, v in [('event_type', event_type), ('start_time', start_time), ('end_time', end_time)] if v is not None}
866
+ query_params = {
867
+ k: v
868
+ for k, v in [
869
+ ("event_type", event_type),
870
+ ("start_time", start_time),
871
+ ("end_time", end_time),
872
+ ]
873
+ if v is not None
874
+ }
713
875
  response = self._get(url, params=query_params)
714
876
  response.raise_for_status()
715
877
  return response.json()
716
878
 
717
- def list_activity_log_entries(self, organization=None, search_term=None, actor=None, sort=None, min_occurred_at=None, max_occurred_at=None, page_token=None, count=None, namespace=None, action=None) -> dict[str, Any]:
879
+ def list_activity_log_entries(
880
+ self,
881
+ organization=None,
882
+ search_term=None,
883
+ actor=None,
884
+ sort=None,
885
+ min_occurred_at=None,
886
+ max_occurred_at=None,
887
+ page_token=None,
888
+ count=None,
889
+ namespace=None,
890
+ action=None,
891
+ ) -> dict[str, Any]:
718
892
  """
719
893
  Retrieves a list of activity log entries with optional filtering, sorting, and pagination.
720
-
894
+
721
895
  Args:
722
896
  organization: Optional; organization identifier to filter log entries by a specific organization.
723
897
  search_term: Optional; term to search for in the activity log entries.
@@ -729,20 +903,47 @@ class CalendlyApp(APIApplication):
729
903
  count: Optional; maximum number of entries to return.
730
904
  namespace: Optional; filter results by a specific namespace.
731
905
  action: Optional; filter results by a specific action performed.
732
-
906
+
733
907
  Returns:
734
908
  A dictionary containing a list of activity log entries and any associated pagination metadata.
735
909
  """
736
910
  url = f"{self.base_url}/activity_log_entries"
737
- query_params = {k: v for k, v in [('organization', organization), ('search_term', search_term), ('actor', actor), ('sort', sort), ('min_occurred_at', min_occurred_at), ('max_occurred_at', max_occurred_at), ('page_token', page_token), ('count', count), ('namespace', namespace), ('action', action)] if v is not None}
911
+ query_params = {
912
+ k: v
913
+ for k, v in [
914
+ ("organization", organization),
915
+ ("search_term", search_term),
916
+ ("actor", actor),
917
+ ("sort", sort),
918
+ ("min_occurred_at", min_occurred_at),
919
+ ("max_occurred_at", max_occurred_at),
920
+ ("page_token", page_token),
921
+ ("count", count),
922
+ ("namespace", namespace),
923
+ ("action", action),
924
+ ]
925
+ if v is not None
926
+ }
738
927
  response = self._get(url, params=query_params)
739
928
  response.raise_for_status()
740
929
  return response.json()
741
930
 
742
- def create_share(self, availability_rule=None, duration=None, end_date=None, event_type=None, hide_location=None, location_configurations=None, max_booking_time=None, name=None, period_type=None, start_date=None) -> dict[str, Any]:
931
+ def create_share(
932
+ self,
933
+ availability_rule=None,
934
+ duration=None,
935
+ end_date=None,
936
+ event_type=None,
937
+ hide_location=None,
938
+ location_configurations=None,
939
+ max_booking_time=None,
940
+ name=None,
941
+ period_type=None,
942
+ start_date=None,
943
+ ) -> dict[str, Any]:
743
944
  """
744
945
  Creates a new share with the specified configuration parameters by making a POST request to the shares API endpoint.
745
-
946
+
746
947
  Args:
747
948
  availability_rule: Optional; rule defining the availability for the share.
748
949
  duration: Optional; duration of the event or booking in minutes.
@@ -754,21 +955,21 @@ class CalendlyApp(APIApplication):
754
955
  name: Optional; name of the share.
755
956
  period_type: Optional; type of period (e.g., recurring, single).
756
957
  start_date: Optional; start date for the share's availability.
757
-
958
+
758
959
  Returns:
759
960
  A dictionary containing the JSON response from the API with details of the created share.
760
961
  """
761
962
  request_body = {
762
- 'availability_rule': availability_rule,
763
- 'duration': duration,
764
- 'end_date': end_date,
765
- 'event_type': event_type,
766
- 'hide_location': hide_location,
767
- 'location_configurations': location_configurations,
768
- 'max_booking_time': max_booking_time,
769
- 'name': name,
770
- 'period_type': period_type,
771
- 'start_date': start_date,
963
+ "availability_rule": availability_rule,
964
+ "duration": duration,
965
+ "end_date": end_date,
966
+ "event_type": event_type,
967
+ "hide_location": hide_location,
968
+ "location_configurations": location_configurations,
969
+ "max_booking_time": max_booking_time,
970
+ "name": name,
971
+ "period_type": period_type,
972
+ "start_date": start_date,
772
973
  }
773
974
  request_body = {k: v for k, v in request_body.items() if v is not None}
774
975
  url = f"{self.base_url}/shares"
@@ -777,20 +978,30 @@ class CalendlyApp(APIApplication):
777
978
  response.raise_for_status()
778
979
  return response.json()
779
980
 
780
- def list_user_busy_times(self, user=None, start_time=None, end_time=None) -> dict[str, Any]:
981
+ def list_user_busy_times(
982
+ self, user=None, start_time=None, end_time=None
983
+ ) -> dict[str, Any]:
781
984
  """
782
985
  Retrieves a list of busy time intervals for a specified user within an optional date range.
783
-
986
+
784
987
  Args:
785
988
  user: Optional; The identifier of the user whose busy times are to be listed. If None, retrieves busy times for all users.
786
989
  start_time: Optional; The start of the time range (ISO 8601 format). Only busy times starting at or after this time are included. If None, no lower bound is applied.
787
990
  end_time: Optional; The end of the time range (ISO 8601 format). Only busy times ending before or at this time are included. If None, no upper bound is applied.
788
-
991
+
789
992
  Returns:
790
993
  A dictionary containing the user's busy time intervals and related metadata as returned by the API.
791
994
  """
792
995
  url = f"{self.base_url}/user_busy_times"
793
- query_params = {k: v for k, v in [('user', user), ('start_time', start_time), ('end_time', end_time)] if v is not None}
996
+ query_params = {
997
+ k: v
998
+ for k, v in [
999
+ ("user", user),
1000
+ ("start_time", start_time),
1001
+ ("end_time", end_time),
1002
+ ]
1003
+ if v is not None
1004
+ }
794
1005
  response = self._get(url, params=query_params)
795
1006
  response.raise_for_status()
796
1007
  return response.json()
@@ -798,10 +1009,10 @@ class CalendlyApp(APIApplication):
798
1009
  def get_user_availability_schedule(self, uuid) -> dict[str, Any]:
799
1010
  """
800
1011
  Retrieves the availability schedule for a user identified by the given UUID.
801
-
1012
+
802
1013
  Args:
803
1014
  uuid: str. The UUID of the user whose availability schedule is to be retrieved.
804
-
1015
+
805
1016
  Returns:
806
1017
  dict[str, Any]: A dictionary containing the user's availability schedule as returned by the API.
807
1018
  """
@@ -816,41 +1027,60 @@ class CalendlyApp(APIApplication):
816
1027
  def list_user_availability_schedules(self, user=None) -> dict[str, Any]:
817
1028
  """
818
1029
  Retrieves a list of user availability schedules from the API, optionally filtering by a specific user.
819
-
1030
+
820
1031
  Args:
821
1032
  user: Optional; a string representing the user identifier to filter the availability schedules. If None, schedules for all users are retrieved.
822
-
1033
+
823
1034
  Returns:
824
1035
  A dictionary containing the availability schedules returned by the API.
825
1036
  """
826
1037
  url = f"{self.base_url}/user_availability_schedules"
827
- query_params = {k: v for k, v in [('user', user)] if v is not None}
1038
+ query_params = {k: v for k, v in [("user", user)] if v is not None}
828
1039
  response = self._get(url, params=query_params)
829
1040
  response.raise_for_status()
830
1041
  return response.json()
831
1042
 
832
- def list_event_type_hosts(self, event_type=None, count=None, page_token=None) -> dict[str, Any]:
1043
+ def list_event_type_hosts(
1044
+ self, event_type=None, count=None, page_token=None
1045
+ ) -> dict[str, Any]:
833
1046
  """
834
1047
  Retrieves a list of event type hosts based on provided filter, count, and pagination parameters.
835
-
1048
+
836
1049
  Args:
837
1050
  event_type: Optional; a string specifying the event type to filter hosts by.
838
1051
  count: Optional; an integer indicating the maximum number of hosts to return.
839
1052
  page_token: Optional; a string token to retrieve the next page of results for pagination.
840
-
1053
+
841
1054
  Returns:
842
1055
  A dictionary containing the JSON response with event type hosts data, which may include host details and pagination information.
843
1056
  """
844
1057
  url = f"{self.base_url}/event_type_memberships"
845
- query_params = {k: v for k, v in [('event_type', event_type), ('count', count), ('page_token', page_token)] if v is not None}
1058
+ query_params = {
1059
+ k: v
1060
+ for k, v in [
1061
+ ("event_type", event_type),
1062
+ ("count", count),
1063
+ ("page_token", page_token),
1064
+ ]
1065
+ if v is not None
1066
+ }
846
1067
  response = self._get(url, params=query_params)
847
1068
  response.raise_for_status()
848
1069
  return response.json()
849
1070
 
850
- def create_one_off_event_type(self, co_hosts=None, date_setting=None, duration=None, host=None, location=None, name=None, timezone=None) -> dict[str, Any]:
1071
+ def create_one_off_event_type(
1072
+ self,
1073
+ co_hosts=None,
1074
+ date_setting=None,
1075
+ duration=None,
1076
+ host=None,
1077
+ location=None,
1078
+ name=None,
1079
+ timezone=None,
1080
+ ) -> dict[str, Any]:
851
1081
  """
852
1082
  Creates a one-off event type with specified parameters and returns the created event type details.
853
-
1083
+
854
1084
  Args:
855
1085
  co_hosts: Optional; a list or identifier(s) representing additional hosts for the event.
856
1086
  date_setting: Optional; the date configuration for the event (e.g., specific date, date range, or recurrence settings).
@@ -859,18 +1089,18 @@ class CalendlyApp(APIApplication):
859
1089
  location: Optional; the location information for the event (e.g., physical address or online meeting link).
860
1090
  name: Optional; the name or title of the event.
861
1091
  timezone: Optional; the timezone in which the event will take place.
862
-
1092
+
863
1093
  Returns:
864
1094
  A dictionary containing the details of the created one-off event type as returned by the API.
865
1095
  """
866
1096
  request_body = {
867
- 'co_hosts': co_hosts,
868
- 'date_setting': date_setting,
869
- 'duration': duration,
870
- 'host': host,
871
- 'location': location,
872
- 'name': name,
873
- 'timezone': timezone,
1097
+ "co_hosts": co_hosts,
1098
+ "date_setting": date_setting,
1099
+ "duration": duration,
1100
+ "host": host,
1101
+ "location": location,
1102
+ "name": name,
1103
+ "timezone": timezone,
874
1104
  }
875
1105
  request_body = {k: v for k, v in request_body.items() if v is not None}
876
1106
  url = f"{self.base_url}/one_off_event_types"
@@ -879,21 +1109,32 @@ class CalendlyApp(APIApplication):
879
1109
  response.raise_for_status()
880
1110
  return response.json()
881
1111
 
882
- def get_sample_webhook_data(self, event=None, organization=None, user=None, scope=None) -> dict[str, Any]:
1112
+ def get_sample_webhook_data(
1113
+ self, event=None, organization=None, user=None, scope=None
1114
+ ) -> dict[str, Any]:
883
1115
  """
884
1116
  Retrieves sample webhook data from the API using optional filtering parameters.
885
-
1117
+
886
1118
  Args:
887
1119
  event: Optional; a string specifying the event type to filter the webhook data.
888
1120
  organization: Optional; a string representing the organization identifier to filter the data.
889
1121
  user: Optional; a string identifying the user to filter the webhook data.
890
1122
  scope: Optional; a string indicating the scope to filter the webhook data.
891
-
1123
+
892
1124
  Returns:
893
1125
  A dictionary containing the JSON response with sample webhook data from the API.
894
1126
  """
895
1127
  url = f"{self.base_url}/sample_webhook_data"
896
- query_params = {k: v for k, v in [('event', event), ('organization', organization), ('user', user), ('scope', scope)] if v is not None}
1128
+ query_params = {
1129
+ k: v
1130
+ for k, v in [
1131
+ ("event", event),
1132
+ ("organization", organization),
1133
+ ("user", user),
1134
+ ("scope", scope),
1135
+ ]
1136
+ if v is not None
1137
+ }
897
1138
  response = self._get(url, params=query_params)
898
1139
  response.raise_for_status()
899
1140
  return response.json()
@@ -901,10 +1142,10 @@ class CalendlyApp(APIApplication):
901
1142
  def list_tools(self):
902
1143
  """
903
1144
  Returns a list of method references for various event, user, group, organization, and webhook operations supported by this instance.
904
-
1145
+
905
1146
  Args:
906
1147
  None: This method does not accept any parameters.
907
-
1148
+
908
1149
  Returns:
909
1150
  List of callable method references available on this instance for performing event, user, group, organization, and webhook operations.
910
1151
  """
@@ -950,5 +1191,5 @@ class CalendlyApp(APIApplication):
950
1191
  self.list_user_availability_schedules,
951
1192
  self.list_event_type_hosts,
952
1193
  self.create_one_off_event_type,
953
- self.get_sample_webhook_data
1194
+ self.get_sample_webhook_data,
954
1195
  ]