fathom-python 0.0.37__tar.gz → 0.0.39__tar.gz

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 (73) hide show
  1. {fathom_python-0.0.37 → fathom_python-0.0.39}/PKG-INFO +12 -10
  2. {fathom_python-0.0.37 → fathom_python-0.0.39}/README.md +9 -8
  3. {fathom_python-0.0.37 → fathom_python-0.0.39}/pyproject.toml +1 -1
  4. {fathom_python-0.0.37 → fathom_python-0.0.39}/src/fathom_python/_version.py +2 -2
  5. {fathom_python-0.0.37 → fathom_python-0.0.39}/src/fathom_python/models/__init__.py +33 -2
  6. fathom_python-0.0.39/src/fathom_python/models/highlight.py +67 -0
  7. {fathom_python-0.0.37 → fathom_python-0.0.39}/src/fathom_python/models/listmeetingsop.py +20 -15
  8. fathom_python-0.0.39/src/fathom_python/models/listmeetingtypesop.py +34 -0
  9. {fathom_python-0.0.37 → fathom_python-0.0.39}/src/fathom_python/models/meeting.py +12 -0
  10. fathom_python-0.0.39/src/fathom_python/models/meetingtype.py +34 -0
  11. fathom_python-0.0.39/src/fathom_python/models/meetingtypelistresponse.py +52 -0
  12. {fathom_python-0.0.37 → fathom_python-0.0.39}/src/fathom_python/sdk.py +228 -4
  13. fathom_python-0.0.39/src/fathom_python/types/base64fileinput.py +39 -0
  14. fathom_python-0.0.39/src/fathom_python/utils/dynamic_imports.py +54 -0
  15. {fathom_python-0.0.37 → fathom_python-0.0.39}/py.typed +0 -0
  16. {fathom_python-0.0.37 → fathom_python-0.0.39}/src/fathom_python/__init__.py +0 -0
  17. {fathom_python-0.0.37 → fathom_python-0.0.39}/src/fathom_python/_hooks/__init__.py +0 -0
  18. {fathom_python-0.0.37 → fathom_python-0.0.39}/src/fathom_python/_hooks/registration.py +0 -0
  19. {fathom_python-0.0.37 → fathom_python-0.0.39}/src/fathom_python/_hooks/sdkhooks.py +0 -0
  20. {fathom_python-0.0.37 → fathom_python-0.0.39}/src/fathom_python/_hooks/types.py +0 -0
  21. {fathom_python-0.0.37 → fathom_python-0.0.39}/src/fathom_python/basesdk.py +0 -0
  22. {fathom_python-0.0.37 → fathom_python-0.0.39}/src/fathom_python/errors/__init__.py +0 -0
  23. {fathom_python-0.0.37 → fathom_python-0.0.39}/src/fathom_python/errors/apierror.py +0 -0
  24. {fathom_python-0.0.37 → fathom_python-0.0.39}/src/fathom_python/errors/fathomerror.py +0 -0
  25. {fathom_python-0.0.37 → fathom_python-0.0.39}/src/fathom_python/errors/no_response_error.py +0 -0
  26. {fathom_python-0.0.37 → fathom_python-0.0.39}/src/fathom_python/errors/responsevalidationerror.py +0 -0
  27. {fathom_python-0.0.37 → fathom_python-0.0.39}/src/fathom_python/httpclient.py +0 -0
  28. {fathom_python-0.0.37 → fathom_python-0.0.39}/src/fathom_python/models/actionitem.py +0 -0
  29. {fathom_python-0.0.37 → fathom_python-0.0.39}/src/fathom_python/models/assignee.py +0 -0
  30. {fathom_python-0.0.37 → fathom_python-0.0.39}/src/fathom_python/models/callbackresponse.py +0 -0
  31. {fathom_python-0.0.37 → fathom_python-0.0.39}/src/fathom_python/models/createwebhookop.py +0 -0
  32. {fathom_python-0.0.37 → fathom_python-0.0.39}/src/fathom_python/models/crmcompanymatch.py +0 -0
  33. {fathom_python-0.0.37 → fathom_python-0.0.39}/src/fathom_python/models/crmcontactmatch.py +0 -0
  34. {fathom_python-0.0.37 → fathom_python-0.0.39}/src/fathom_python/models/crmdealmatch.py +0 -0
  35. {fathom_python-0.0.37 → fathom_python-0.0.39}/src/fathom_python/models/crmmatches.py +0 -0
  36. {fathom_python-0.0.37 → fathom_python-0.0.39}/src/fathom_python/models/deletewebhookop.py +0 -0
  37. {fathom_python-0.0.37 → fathom_python-0.0.39}/src/fathom_python/models/fathomuser.py +0 -0
  38. {fathom_python-0.0.37 → fathom_python-0.0.39}/src/fathom_python/models/getrecordingsummaryop.py +0 -0
  39. {fathom_python-0.0.37 → fathom_python-0.0.39}/src/fathom_python/models/getrecordingtranscriptop.py +0 -0
  40. {fathom_python-0.0.37 → fathom_python-0.0.39}/src/fathom_python/models/invitee.py +0 -0
  41. {fathom_python-0.0.37 → fathom_python-0.0.39}/src/fathom_python/models/listteammembersop.py +0 -0
  42. {fathom_python-0.0.37 → fathom_python-0.0.39}/src/fathom_python/models/listteamsop.py +0 -0
  43. {fathom_python-0.0.37 → fathom_python-0.0.39}/src/fathom_python/models/meetinglistresponse.py +0 -0
  44. {fathom_python-0.0.37 → fathom_python-0.0.39}/src/fathom_python/models/meetingsummary.py +0 -0
  45. {fathom_python-0.0.37 → fathom_python-0.0.39}/src/fathom_python/models/security.py +0 -0
  46. {fathom_python-0.0.37 → fathom_python-0.0.39}/src/fathom_python/models/team.py +0 -0
  47. {fathom_python-0.0.37 → fathom_python-0.0.39}/src/fathom_python/models/teamlistresponse.py +0 -0
  48. {fathom_python-0.0.37 → fathom_python-0.0.39}/src/fathom_python/models/teammember.py +0 -0
  49. {fathom_python-0.0.37 → fathom_python-0.0.39}/src/fathom_python/models/teammemberlistresponse.py +0 -0
  50. {fathom_python-0.0.37 → fathom_python-0.0.39}/src/fathom_python/models/transcriptitem.py +0 -0
  51. {fathom_python-0.0.37 → fathom_python-0.0.39}/src/fathom_python/models/transcriptitemspeaker.py +0 -0
  52. {fathom_python-0.0.37 → fathom_python-0.0.39}/src/fathom_python/models/webhook.py +0 -0
  53. {fathom_python-0.0.37 → fathom_python-0.0.39}/src/fathom_python/py.typed +0 -0
  54. {fathom_python-0.0.37 → fathom_python-0.0.39}/src/fathom_python/sdkconfiguration.py +0 -0
  55. {fathom_python-0.0.37 → fathom_python-0.0.39}/src/fathom_python/types/__init__.py +0 -0
  56. {fathom_python-0.0.37 → fathom_python-0.0.39}/src/fathom_python/types/basemodel.py +0 -0
  57. {fathom_python-0.0.37 → fathom_python-0.0.39}/src/fathom_python/utils/__init__.py +0 -0
  58. {fathom_python-0.0.37 → fathom_python-0.0.39}/src/fathom_python/utils/annotations.py +0 -0
  59. {fathom_python-0.0.37 → fathom_python-0.0.39}/src/fathom_python/utils/datetimes.py +0 -0
  60. {fathom_python-0.0.37 → fathom_python-0.0.39}/src/fathom_python/utils/enums.py +0 -0
  61. {fathom_python-0.0.37 → fathom_python-0.0.39}/src/fathom_python/utils/eventstreaming.py +0 -0
  62. {fathom_python-0.0.37 → fathom_python-0.0.39}/src/fathom_python/utils/forms.py +0 -0
  63. {fathom_python-0.0.37 → fathom_python-0.0.39}/src/fathom_python/utils/headers.py +0 -0
  64. {fathom_python-0.0.37 → fathom_python-0.0.39}/src/fathom_python/utils/logger.py +0 -0
  65. {fathom_python-0.0.37 → fathom_python-0.0.39}/src/fathom_python/utils/metadata.py +0 -0
  66. {fathom_python-0.0.37 → fathom_python-0.0.39}/src/fathom_python/utils/queryparams.py +0 -0
  67. {fathom_python-0.0.37 → fathom_python-0.0.39}/src/fathom_python/utils/requestbodies.py +0 -0
  68. {fathom_python-0.0.37 → fathom_python-0.0.39}/src/fathom_python/utils/retries.py +0 -0
  69. {fathom_python-0.0.37 → fathom_python-0.0.39}/src/fathom_python/utils/security.py +0 -0
  70. {fathom_python-0.0.37 → fathom_python-0.0.39}/src/fathom_python/utils/serializers.py +0 -0
  71. {fathom_python-0.0.37 → fathom_python-0.0.39}/src/fathom_python/utils/unmarshal_json_response.py +0 -0
  72. {fathom_python-0.0.37 → fathom_python-0.0.39}/src/fathom_python/utils/url.py +0 -0
  73. {fathom_python-0.0.37 → fathom_python-0.0.39}/src/fathom_python/utils/values.py +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.3
1
+ Metadata-Version: 2.4
2
2
  Name: fathom-python
3
- Version: 0.0.37
3
+ Version: 0.0.39
4
4
  Summary: Fathom's official Python SDK.
5
5
  Author: Speakeasy
6
6
  Requires-Python: >=3.9.2
@@ -9,6 +9,7 @@ Classifier: Programming Language :: Python :: 3.10
9
9
  Classifier: Programming Language :: Python :: 3.11
10
10
  Classifier: Programming Language :: Python :: 3.12
11
11
  Classifier: Programming Language :: Python :: 3.13
12
+ Classifier: Programming Language :: Python :: 3.14
12
13
  Requires-Dist: httpcore (>=1.0.9)
13
14
  Requires-Dist: httpx (>=0.28.1)
14
15
  Requires-Dist: jsonpath-python (>=1.0.6)
@@ -123,7 +124,7 @@ with Fathom(
123
124
  res = fathom.list_meetings(calendar_invitees_domains=[
124
125
  "acme.com",
125
126
  "client.com",
126
- ], calendar_invitees_domains_type=models.ListMeetingsCalendarInviteesDomainsType.ALL, include_action_items=False, include_crm_matches=False, include_summary=False, include_transcript=False, meeting_type=models.MeetingType.ALL, recorded_by=[
127
+ ], calendar_invitees_domains_type=models.ListMeetingsCalendarInviteesDomainsType.ALL, include_action_items=False, include_crm_matches=False, include_highlights=False, include_summary=False, include_transcript=False, meeting_type="Quarterly Business Review", recorded_by=[
127
128
  "ceo@acme.com",
128
129
  "pm@acme.com",
129
130
  ], teams=[
@@ -158,7 +159,7 @@ async def main():
158
159
  res = await fathom.list_meetings_async(calendar_invitees_domains=[
159
160
  "acme.com",
160
161
  "client.com",
161
- ], calendar_invitees_domains_type=models.ListMeetingsCalendarInviteesDomainsType.ALL, include_action_items=False, include_crm_matches=False, include_summary=False, include_transcript=False, meeting_type=models.MeetingType.ALL, recorded_by=[
162
+ ], calendar_invitees_domains_type=models.ListMeetingsCalendarInviteesDomainsType.ALL, include_action_items=False, include_crm_matches=False, include_highlights=False, include_summary=False, include_transcript=False, meeting_type="Quarterly Business Review", recorded_by=[
162
163
  "ceo@acme.com",
163
164
  "pm@acme.com",
164
165
  ], teams=[
@@ -202,7 +203,7 @@ with Fathom(
202
203
  res = fathom.list_meetings(calendar_invitees_domains=[
203
204
  "acme.com",
204
205
  "client.com",
205
- ], calendar_invitees_domains_type=models.ListMeetingsCalendarInviteesDomainsType.ALL, include_action_items=False, include_crm_matches=False, include_summary=False, include_transcript=False, meeting_type=models.MeetingType.ALL, recorded_by=[
206
+ ], calendar_invitees_domains_type=models.ListMeetingsCalendarInviteesDomainsType.ALL, include_action_items=False, include_crm_matches=False, include_highlights=False, include_summary=False, include_transcript=False, meeting_type="Quarterly Business Review", recorded_by=[
206
207
  "ceo@acme.com",
207
208
  "pm@acme.com",
208
209
  ], teams=[
@@ -231,6 +232,7 @@ with Fathom(
231
232
  * [get_recording_transcript](docs/sdks/fathom/README.md#get_recording_transcript) - Get transcript
232
233
  * [list_teams](docs/sdks/fathom/README.md#list_teams) - List teams
233
234
  * [list_team_members](docs/sdks/fathom/README.md#list_team_members) - List team members
235
+ * [list_meeting_types](docs/sdks/fathom/README.md#list_meeting_types) - List meeting types
234
236
  * [create_webhook](docs/sdks/fathom/README.md#create_webhook) - Create a webhook
235
237
  * [delete_webhook](docs/sdks/fathom/README.md#delete_webhook) - Delete a webhook
236
238
 
@@ -259,7 +261,7 @@ with Fathom(
259
261
  res = fathom.list_meetings(calendar_invitees_domains=[
260
262
  "acme.com",
261
263
  "client.com",
262
- ], calendar_invitees_domains_type=models.ListMeetingsCalendarInviteesDomainsType.ALL, include_action_items=False, include_crm_matches=False, include_summary=False, include_transcript=False, meeting_type=models.MeetingType.ALL, recorded_by=[
264
+ ], calendar_invitees_domains_type=models.ListMeetingsCalendarInviteesDomainsType.ALL, include_action_items=False, include_crm_matches=False, include_highlights=False, include_summary=False, include_transcript=False, meeting_type="Quarterly Business Review", recorded_by=[
263
265
  "ceo@acme.com",
264
266
  "pm@acme.com",
265
267
  ], teams=[
@@ -296,7 +298,7 @@ with Fathom(
296
298
  res = fathom.list_meetings(calendar_invitees_domains=[
297
299
  "acme.com",
298
300
  "client.com",
299
- ], calendar_invitees_domains_type=models.ListMeetingsCalendarInviteesDomainsType.ALL, include_action_items=False, include_crm_matches=False, include_summary=False, include_transcript=False, meeting_type=models.MeetingType.ALL, recorded_by=[
301
+ ], calendar_invitees_domains_type=models.ListMeetingsCalendarInviteesDomainsType.ALL, include_action_items=False, include_crm_matches=False, include_highlights=False, include_summary=False, include_transcript=False, meeting_type="Quarterly Business Review", recorded_by=[
300
302
  "ceo@acme.com",
301
303
  "pm@acme.com",
302
304
  ], teams=[
@@ -329,7 +331,7 @@ with Fathom(
329
331
  res = fathom.list_meetings(calendar_invitees_domains=[
330
332
  "acme.com",
331
333
  "client.com",
332
- ], calendar_invitees_domains_type=models.ListMeetingsCalendarInviteesDomainsType.ALL, include_action_items=False, include_crm_matches=False, include_summary=False, include_transcript=False, meeting_type=models.MeetingType.ALL, recorded_by=[
334
+ ], calendar_invitees_domains_type=models.ListMeetingsCalendarInviteesDomainsType.ALL, include_action_items=False, include_crm_matches=False, include_highlights=False, include_summary=False, include_transcript=False, meeting_type="Quarterly Business Review", recorded_by=[
333
335
  "ceo@acme.com",
334
336
  "pm@acme.com",
335
337
  ], teams=[
@@ -375,7 +377,7 @@ with Fathom(
375
377
  res = fathom.list_meetings(calendar_invitees_domains=[
376
378
  "acme.com",
377
379
  "client.com",
378
- ], calendar_invitees_domains_type=models.ListMeetingsCalendarInviteesDomainsType.ALL, include_action_items=False, include_crm_matches=False, include_summary=False, include_transcript=False, meeting_type=models.MeetingType.ALL, recorded_by=[
380
+ ], calendar_invitees_domains_type=models.ListMeetingsCalendarInviteesDomainsType.ALL, include_action_items=False, include_crm_matches=False, include_highlights=False, include_summary=False, include_transcript=False, meeting_type="Quarterly Business Review", recorded_by=[
379
381
  "ceo@acme.com",
380
382
  "pm@acme.com",
381
383
  ], teams=[
@@ -440,7 +442,7 @@ with Fathom(
440
442
  res = fathom.list_meetings(calendar_invitees_domains=[
441
443
  "acme.com",
442
444
  "client.com",
443
- ], calendar_invitees_domains_type=models.ListMeetingsCalendarInviteesDomainsType.ALL, include_action_items=False, include_crm_matches=False, include_summary=False, include_transcript=False, meeting_type=models.MeetingType.ALL, recorded_by=[
445
+ ], calendar_invitees_domains_type=models.ListMeetingsCalendarInviteesDomainsType.ALL, include_action_items=False, include_crm_matches=False, include_highlights=False, include_summary=False, include_transcript=False, meeting_type="Quarterly Business Review", recorded_by=[
444
446
  "ceo@acme.com",
445
447
  "pm@acme.com",
446
448
  ], teams=[
@@ -103,7 +103,7 @@ with Fathom(
103
103
  res = fathom.list_meetings(calendar_invitees_domains=[
104
104
  "acme.com",
105
105
  "client.com",
106
- ], calendar_invitees_domains_type=models.ListMeetingsCalendarInviteesDomainsType.ALL, include_action_items=False, include_crm_matches=False, include_summary=False, include_transcript=False, meeting_type=models.MeetingType.ALL, recorded_by=[
106
+ ], calendar_invitees_domains_type=models.ListMeetingsCalendarInviteesDomainsType.ALL, include_action_items=False, include_crm_matches=False, include_highlights=False, include_summary=False, include_transcript=False, meeting_type="Quarterly Business Review", recorded_by=[
107
107
  "ceo@acme.com",
108
108
  "pm@acme.com",
109
109
  ], teams=[
@@ -138,7 +138,7 @@ async def main():
138
138
  res = await fathom.list_meetings_async(calendar_invitees_domains=[
139
139
  "acme.com",
140
140
  "client.com",
141
- ], calendar_invitees_domains_type=models.ListMeetingsCalendarInviteesDomainsType.ALL, include_action_items=False, include_crm_matches=False, include_summary=False, include_transcript=False, meeting_type=models.MeetingType.ALL, recorded_by=[
141
+ ], calendar_invitees_domains_type=models.ListMeetingsCalendarInviteesDomainsType.ALL, include_action_items=False, include_crm_matches=False, include_highlights=False, include_summary=False, include_transcript=False, meeting_type="Quarterly Business Review", recorded_by=[
142
142
  "ceo@acme.com",
143
143
  "pm@acme.com",
144
144
  ], teams=[
@@ -182,7 +182,7 @@ with Fathom(
182
182
  res = fathom.list_meetings(calendar_invitees_domains=[
183
183
  "acme.com",
184
184
  "client.com",
185
- ], calendar_invitees_domains_type=models.ListMeetingsCalendarInviteesDomainsType.ALL, include_action_items=False, include_crm_matches=False, include_summary=False, include_transcript=False, meeting_type=models.MeetingType.ALL, recorded_by=[
185
+ ], calendar_invitees_domains_type=models.ListMeetingsCalendarInviteesDomainsType.ALL, include_action_items=False, include_crm_matches=False, include_highlights=False, include_summary=False, include_transcript=False, meeting_type="Quarterly Business Review", recorded_by=[
186
186
  "ceo@acme.com",
187
187
  "pm@acme.com",
188
188
  ], teams=[
@@ -211,6 +211,7 @@ with Fathom(
211
211
  * [get_recording_transcript](docs/sdks/fathom/README.md#get_recording_transcript) - Get transcript
212
212
  * [list_teams](docs/sdks/fathom/README.md#list_teams) - List teams
213
213
  * [list_team_members](docs/sdks/fathom/README.md#list_team_members) - List team members
214
+ * [list_meeting_types](docs/sdks/fathom/README.md#list_meeting_types) - List meeting types
214
215
  * [create_webhook](docs/sdks/fathom/README.md#create_webhook) - Create a webhook
215
216
  * [delete_webhook](docs/sdks/fathom/README.md#delete_webhook) - Delete a webhook
216
217
 
@@ -239,7 +240,7 @@ with Fathom(
239
240
  res = fathom.list_meetings(calendar_invitees_domains=[
240
241
  "acme.com",
241
242
  "client.com",
242
- ], calendar_invitees_domains_type=models.ListMeetingsCalendarInviteesDomainsType.ALL, include_action_items=False, include_crm_matches=False, include_summary=False, include_transcript=False, meeting_type=models.MeetingType.ALL, recorded_by=[
243
+ ], calendar_invitees_domains_type=models.ListMeetingsCalendarInviteesDomainsType.ALL, include_action_items=False, include_crm_matches=False, include_highlights=False, include_summary=False, include_transcript=False, meeting_type="Quarterly Business Review", recorded_by=[
243
244
  "ceo@acme.com",
244
245
  "pm@acme.com",
245
246
  ], teams=[
@@ -276,7 +277,7 @@ with Fathom(
276
277
  res = fathom.list_meetings(calendar_invitees_domains=[
277
278
  "acme.com",
278
279
  "client.com",
279
- ], calendar_invitees_domains_type=models.ListMeetingsCalendarInviteesDomainsType.ALL, include_action_items=False, include_crm_matches=False, include_summary=False, include_transcript=False, meeting_type=models.MeetingType.ALL, recorded_by=[
280
+ ], calendar_invitees_domains_type=models.ListMeetingsCalendarInviteesDomainsType.ALL, include_action_items=False, include_crm_matches=False, include_highlights=False, include_summary=False, include_transcript=False, meeting_type="Quarterly Business Review", recorded_by=[
280
281
  "ceo@acme.com",
281
282
  "pm@acme.com",
282
283
  ], teams=[
@@ -309,7 +310,7 @@ with Fathom(
309
310
  res = fathom.list_meetings(calendar_invitees_domains=[
310
311
  "acme.com",
311
312
  "client.com",
312
- ], calendar_invitees_domains_type=models.ListMeetingsCalendarInviteesDomainsType.ALL, include_action_items=False, include_crm_matches=False, include_summary=False, include_transcript=False, meeting_type=models.MeetingType.ALL, recorded_by=[
313
+ ], calendar_invitees_domains_type=models.ListMeetingsCalendarInviteesDomainsType.ALL, include_action_items=False, include_crm_matches=False, include_highlights=False, include_summary=False, include_transcript=False, meeting_type="Quarterly Business Review", recorded_by=[
313
314
  "ceo@acme.com",
314
315
  "pm@acme.com",
315
316
  ], teams=[
@@ -355,7 +356,7 @@ with Fathom(
355
356
  res = fathom.list_meetings(calendar_invitees_domains=[
356
357
  "acme.com",
357
358
  "client.com",
358
- ], calendar_invitees_domains_type=models.ListMeetingsCalendarInviteesDomainsType.ALL, include_action_items=False, include_crm_matches=False, include_summary=False, include_transcript=False, meeting_type=models.MeetingType.ALL, recorded_by=[
359
+ ], calendar_invitees_domains_type=models.ListMeetingsCalendarInviteesDomainsType.ALL, include_action_items=False, include_crm_matches=False, include_highlights=False, include_summary=False, include_transcript=False, meeting_type="Quarterly Business Review", recorded_by=[
359
360
  "ceo@acme.com",
360
361
  "pm@acme.com",
361
362
  ], teams=[
@@ -420,7 +421,7 @@ with Fathom(
420
421
  res = fathom.list_meetings(calendar_invitees_domains=[
421
422
  "acme.com",
422
423
  "client.com",
423
- ], calendar_invitees_domains_type=models.ListMeetingsCalendarInviteesDomainsType.ALL, include_action_items=False, include_crm_matches=False, include_summary=False, include_transcript=False, meeting_type=models.MeetingType.ALL, recorded_by=[
424
+ ], calendar_invitees_domains_type=models.ListMeetingsCalendarInviteesDomainsType.ALL, include_action_items=False, include_crm_matches=False, include_highlights=False, include_summary=False, include_transcript=False, meeting_type="Quarterly Business Review", recorded_by=[
424
425
  "ceo@acme.com",
425
426
  "pm@acme.com",
426
427
  ], teams=[
@@ -1,7 +1,7 @@
1
1
 
2
2
  [project]
3
3
  name = "fathom-python"
4
- version = "0.0.37"
4
+ version = "0.0.39"
5
5
  description = "Fathom's official Python SDK."
6
6
  authors = [{ name = "Speakeasy" },]
7
7
  readme = "README.md"
@@ -3,10 +3,10 @@
3
3
  import importlib.metadata
4
4
 
5
5
  __title__: str = "fathom-python"
6
- __version__: str = "0.0.37"
6
+ __version__: str = "0.0.39"
7
7
  __openapi_doc_version__: str = "1.0.0"
8
8
  __gen_version__: str = "2.762.0"
9
- __user_agent__: str = "speakeasy-sdk/python 0.0.37 2.762.0 1.0.0 fathom-python"
9
+ __user_agent__: str = "speakeasy-sdk/python 0.0.39 2.762.0 1.0.0 fathom-python"
10
10
 
11
11
  try:
12
12
  if __package__ is not None:
@@ -36,6 +36,7 @@ if TYPE_CHECKING:
36
36
  GetRecordingTranscriptResponseBodyTypedDict,
37
37
  GetRecordingTranscriptResponseTypedDict,
38
38
  )
39
+ from .highlight import Highlight, HighlightTypedDict
39
40
  from .invitee import Invitee, InviteeTypedDict
40
41
  from .listmeetingsop import (
41
42
  ListMeetingsCalendarInviteesDomainsType,
@@ -43,7 +44,12 @@ if TYPE_CHECKING:
43
44
  ListMeetingsRequestTypedDict,
44
45
  ListMeetingsResponse,
45
46
  ListMeetingsResponseTypedDict,
46
- MeetingType,
47
+ )
48
+ from .listmeetingtypesop import (
49
+ ListMeetingTypesRequest,
50
+ ListMeetingTypesRequestTypedDict,
51
+ ListMeetingTypesResponse,
52
+ ListMeetingTypesResponseTypedDict,
47
53
  )
48
54
  from .listteammembersop import (
49
55
  ListTeamMembersRequest,
@@ -60,6 +66,11 @@ if TYPE_CHECKING:
60
66
  from .meeting import CalendarInviteesDomainsType, Meeting, MeetingTypedDict
61
67
  from .meetinglistresponse import MeetingListResponse, MeetingListResponseTypedDict
62
68
  from .meetingsummary import MeetingSummary, MeetingSummaryTypedDict
69
+ from .meetingtype import MeetingType, MeetingTypeTypedDict, Status
70
+ from .meetingtypelistresponse import (
71
+ MeetingTypeListResponse,
72
+ MeetingTypeListResponseTypedDict,
73
+ )
63
74
  from .security import Security, SecurityTypedDict
64
75
  from .team import Team, TeamTypedDict
65
76
  from .teamlistresponse import TeamListResponse, TeamListResponseTypedDict
@@ -110,8 +121,14 @@ __all__ = [
110
121
  "GetRecordingTranscriptResponseBody",
111
122
  "GetRecordingTranscriptResponseBodyTypedDict",
112
123
  "GetRecordingTranscriptResponseTypedDict",
124
+ "Highlight",
125
+ "HighlightTypedDict",
113
126
  "Invitee",
114
127
  "InviteeTypedDict",
128
+ "ListMeetingTypesRequest",
129
+ "ListMeetingTypesRequestTypedDict",
130
+ "ListMeetingTypesResponse",
131
+ "ListMeetingTypesResponseTypedDict",
115
132
  "ListMeetingsCalendarInviteesDomainsType",
116
133
  "ListMeetingsRequest",
117
134
  "ListMeetingsRequestTypedDict",
@@ -131,9 +148,13 @@ __all__ = [
131
148
  "MeetingSummary",
132
149
  "MeetingSummaryTypedDict",
133
150
  "MeetingType",
151
+ "MeetingTypeListResponse",
152
+ "MeetingTypeListResponseTypedDict",
153
+ "MeetingTypeTypedDict",
134
154
  "MeetingTypedDict",
135
155
  "Security",
136
156
  "SecurityTypedDict",
157
+ "Status",
137
158
  "Team",
138
159
  "TeamListResponse",
139
160
  "TeamListResponseTypedDict",
@@ -185,6 +206,8 @@ _dynamic_imports: dict[str, str] = {
185
206
  "GetRecordingTranscriptResponseBody": ".getrecordingtranscriptop",
186
207
  "GetRecordingTranscriptResponseBodyTypedDict": ".getrecordingtranscriptop",
187
208
  "GetRecordingTranscriptResponseTypedDict": ".getrecordingtranscriptop",
209
+ "Highlight": ".highlight",
210
+ "HighlightTypedDict": ".highlight",
188
211
  "Invitee": ".invitee",
189
212
  "InviteeTypedDict": ".invitee",
190
213
  "ListMeetingsCalendarInviteesDomainsType": ".listmeetingsop",
@@ -192,7 +215,10 @@ _dynamic_imports: dict[str, str] = {
192
215
  "ListMeetingsRequestTypedDict": ".listmeetingsop",
193
216
  "ListMeetingsResponse": ".listmeetingsop",
194
217
  "ListMeetingsResponseTypedDict": ".listmeetingsop",
195
- "MeetingType": ".listmeetingsop",
218
+ "ListMeetingTypesRequest": ".listmeetingtypesop",
219
+ "ListMeetingTypesRequestTypedDict": ".listmeetingtypesop",
220
+ "ListMeetingTypesResponse": ".listmeetingtypesop",
221
+ "ListMeetingTypesResponseTypedDict": ".listmeetingtypesop",
196
222
  "ListTeamMembersRequest": ".listteammembersop",
197
223
  "ListTeamMembersRequestTypedDict": ".listteammembersop",
198
224
  "ListTeamMembersResponse": ".listteammembersop",
@@ -208,6 +234,11 @@ _dynamic_imports: dict[str, str] = {
208
234
  "MeetingListResponseTypedDict": ".meetinglistresponse",
209
235
  "MeetingSummary": ".meetingsummary",
210
236
  "MeetingSummaryTypedDict": ".meetingsummary",
237
+ "MeetingType": ".meetingtype",
238
+ "MeetingTypeTypedDict": ".meetingtype",
239
+ "Status": ".meetingtype",
240
+ "MeetingTypeListResponse": ".meetingtypelistresponse",
241
+ "MeetingTypeListResponseTypedDict": ".meetingtypelistresponse",
211
242
  "Security": ".security",
212
243
  "SecurityTypedDict": ".security",
213
244
  "Team": ".team",
@@ -0,0 +1,67 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+
3
+ from __future__ import annotations
4
+ from fathom_python.types import BaseModel, Nullable, UNSET_SENTINEL
5
+ from pydantic import model_serializer
6
+ from typing import Optional
7
+ from typing_extensions import NotRequired, TypedDict
8
+
9
+
10
+ class HighlightTypedDict(TypedDict):
11
+ type: str
12
+ r"""The label of the bookmark this highlight was created from."""
13
+ summary: Nullable[str]
14
+ r"""A short summary of the highlighted moment."""
15
+ start_time: float
16
+ r"""Start of the highlight, in seconds from the start of the recording."""
17
+ end_time: float
18
+ r"""End of the highlight, in seconds from the start of the recording."""
19
+ text: NotRequired[str]
20
+ r"""The full text of the highlight. Only present when it differs from `summary`."""
21
+
22
+
23
+ class Highlight(BaseModel):
24
+ type: str
25
+ r"""The label of the bookmark this highlight was created from."""
26
+
27
+ summary: Nullable[str]
28
+ r"""A short summary of the highlighted moment."""
29
+
30
+ start_time: float
31
+ r"""Start of the highlight, in seconds from the start of the recording."""
32
+
33
+ end_time: float
34
+ r"""End of the highlight, in seconds from the start of the recording."""
35
+
36
+ text: Optional[str] = None
37
+ r"""The full text of the highlight. Only present when it differs from `summary`."""
38
+
39
+ @model_serializer(mode="wrap")
40
+ def serialize_model(self, handler):
41
+ optional_fields = ["text"]
42
+ nullable_fields = ["summary"]
43
+ null_default_fields = []
44
+
45
+ serialized = handler(self)
46
+
47
+ m = {}
48
+
49
+ for n, f in type(self).model_fields.items():
50
+ k = f.alias or n
51
+ val = serialized.get(k)
52
+ serialized.pop(k, None)
53
+
54
+ optional_nullable = k in optional_fields and k in nullable_fields
55
+ is_set = (
56
+ self.__pydantic_fields_set__.intersection({n})
57
+ or k in null_default_fields
58
+ ) # pylint: disable=no-member
59
+
60
+ if val is not None and val != UNSET_SENTINEL:
61
+ m[k] = val
62
+ elif val != UNSET_SENTINEL and (
63
+ not k in optional_fields or (optional_nullable and is_set)
64
+ ):
65
+ m[k] = val
66
+
67
+ return m
@@ -18,14 +18,6 @@ class ListMeetingsCalendarInviteesDomainsType(str, Enum):
18
18
  ONE_OR_MORE_EXTERNAL = "one_or_more_external"
19
19
 
20
20
 
21
- class MeetingType(str, Enum):
22
- r"""Filter by meeting type."""
23
-
24
- ALL = "all"
25
- INTERNAL = "internal"
26
- EXTERNAL = "external"
27
-
28
-
29
21
  class ListMeetingsRequestTypedDict(TypedDict):
30
22
  calendar_invitees_domains: NotRequired[List[str]]
31
23
  r"""Domains of the companies to filter by. Exact match.
@@ -48,12 +40,18 @@ class ListMeetingsRequestTypedDict(TypedDict):
48
40
  r"""Include the action items for each meeting."""
49
41
  include_crm_matches: NotRequired[bool]
50
42
  r"""Include CRM matches for each meeting. Only returns data from your or your team's linked CRM."""
43
+ include_highlights: NotRequired[bool]
44
+ r"""Include the highlights for each meeting."""
51
45
  include_summary: NotRequired[bool]
52
46
  r"""Include the summary for each meeting. Unavailable for OAuth connected apps (use /recordings instead)."""
53
47
  include_transcript: NotRequired[bool]
54
48
  r"""Include the transcript for each meeting. Unavailable for OAuth connected apps (use /recordings instead)."""
55
- meeting_type: NotRequired[MeetingType]
56
- r"""Filter by meeting type."""
49
+ meeting_type: NotRequired[str]
50
+ r"""Filter by meeting type name.
51
+
52
+ Returns only meetings assigned the meeting type with this name. Use /meeting_types to discover valid values. An unknown or non-matching name returns an empty list.
53
+
54
+ """
57
55
  recorded_by: NotRequired[List[str]]
58
56
  r"""Email addresses of users who recorded meetings.
59
57
 
@@ -125,6 +123,12 @@ class ListMeetingsRequest(BaseModel):
125
123
  ] = False
126
124
  r"""Include CRM matches for each meeting. Only returns data from your or your team's linked CRM."""
127
125
 
126
+ include_highlights: Annotated[
127
+ Optional[bool],
128
+ FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
129
+ ] = False
130
+ r"""Include the highlights for each meeting."""
131
+
128
132
  include_summary: Annotated[
129
133
  Optional[bool],
130
134
  FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
@@ -138,13 +142,14 @@ class ListMeetingsRequest(BaseModel):
138
142
  r"""Include the transcript for each meeting. Unavailable for OAuth connected apps (use /recordings instead)."""
139
143
 
140
144
  meeting_type: Annotated[
141
- Optional[MeetingType],
142
- pydantic.Field(
143
- deprecated="warning: ** DEPRECATED ** - This will be removed in a future release, please migrate away from it as soon as possible."
144
- ),
145
+ Optional[str],
145
146
  FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
146
147
  ] = None
147
- r"""Filter by meeting type."""
148
+ r"""Filter by meeting type name.
149
+
150
+ Returns only meetings assigned the meeting type with this name. Use /meeting_types to discover valid values. An unknown or non-matching name returns an empty list.
151
+
152
+ """
148
153
 
149
154
  recorded_by: Annotated[
150
155
  Optional[List[str]],
@@ -0,0 +1,34 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+
3
+ from __future__ import annotations
4
+ from .meetingtypelistresponse import (
5
+ MeetingTypeListResponse,
6
+ MeetingTypeListResponseTypedDict,
7
+ )
8
+ from fathom_python.types import BaseModel
9
+ from fathom_python.utils import FieldMetadata, QueryParamMetadata
10
+ from typing import Callable, Optional
11
+ from typing_extensions import Annotated, NotRequired, TypedDict
12
+
13
+
14
+ class ListMeetingTypesRequestTypedDict(TypedDict):
15
+ cursor: NotRequired[str]
16
+ r"""Cursor for pagination."""
17
+
18
+
19
+ class ListMeetingTypesRequest(BaseModel):
20
+ cursor: Annotated[
21
+ Optional[str],
22
+ FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
23
+ ] = None
24
+ r"""Cursor for pagination."""
25
+
26
+
27
+ class ListMeetingTypesResponseTypedDict(TypedDict):
28
+ result: MeetingTypeListResponseTypedDict
29
+
30
+
31
+ class ListMeetingTypesResponse(BaseModel):
32
+ next: Callable[[], Optional[ListMeetingTypesResponse]]
33
+
34
+ result: MeetingTypeListResponse
@@ -4,6 +4,7 @@ from __future__ import annotations
4
4
  from .actionitem import ActionItem, ActionItemTypedDict
5
5
  from .crmmatches import CRMMatches, CRMMatchesTypedDict
6
6
  from .fathomuser import FathomUser, FathomUserTypedDict
7
+ from .highlight import Highlight, HighlightTypedDict
7
8
  from .invitee import Invitee, InviteeTypedDict
8
9
  from .meetingsummary import MeetingSummary, MeetingSummaryTypedDict
9
10
  from .transcriptitem import TranscriptItem, TranscriptItemTypedDict
@@ -30,6 +31,8 @@ class MeetingTypedDict(TypedDict):
30
31
  title: str
31
32
  meeting_title: Nullable[str]
32
33
  r"""Calendar event title."""
34
+ meeting_type: Nullable[str]
35
+ r"""The name of the meeting type assigned to this meeting, or `null` if none is assigned."""
33
36
  recording_id: int
34
37
  r"""The ID of the meeting recording."""
35
38
  url: str
@@ -46,6 +49,7 @@ class MeetingTypedDict(TypedDict):
46
49
  transcript: NotRequired[Nullable[List[TranscriptItemTypedDict]]]
47
50
  default_summary: NotRequired[Nullable[MeetingSummaryTypedDict]]
48
51
  action_items: NotRequired[Nullable[List[ActionItemTypedDict]]]
52
+ highlights: NotRequired[Nullable[List[HighlightTypedDict]]]
49
53
  crm_matches: NotRequired[Nullable[CRMMatchesTypedDict]]
50
54
  r"""CRM data linked to the meeting. Only returns data from your or your team's linked CRM.
51
55
  If no CRM is connected for the workspace, the `error` field will be populated.
@@ -59,6 +63,9 @@ class Meeting(BaseModel):
59
63
  meeting_title: Nullable[str]
60
64
  r"""Calendar event title."""
61
65
 
66
+ meeting_type: Nullable[str]
67
+ r"""The name of the meeting type assigned to this meeting, or `null` if none is assigned."""
68
+
62
69
  recording_id: int
63
70
  r"""The ID of the meeting recording."""
64
71
 
@@ -90,6 +97,8 @@ class Meeting(BaseModel):
90
97
 
91
98
  action_items: OptionalNullable[List[ActionItem]] = UNSET
92
99
 
100
+ highlights: OptionalNullable[List[Highlight]] = UNSET
101
+
93
102
  crm_matches: OptionalNullable[CRMMatches] = UNSET
94
103
  r"""CRM data linked to the meeting. Only returns data from your or your team's linked CRM.
95
104
  If no CRM is connected for the workspace, the `error` field will be populated.
@@ -102,13 +111,16 @@ class Meeting(BaseModel):
102
111
  "transcript",
103
112
  "default_summary",
104
113
  "action_items",
114
+ "highlights",
105
115
  "crm_matches",
106
116
  ]
107
117
  nullable_fields = [
108
118
  "meeting_title",
119
+ "meeting_type",
109
120
  "transcript",
110
121
  "default_summary",
111
122
  "action_items",
123
+ "highlights",
112
124
  "crm_matches",
113
125
  ]
114
126
  null_default_fields = []
@@ -0,0 +1,34 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+
3
+ from __future__ import annotations
4
+ from datetime import datetime
5
+ from enum import Enum
6
+ from fathom_python.types import BaseModel
7
+ from typing_extensions import TypedDict
8
+
9
+
10
+ class Status(str, Enum):
11
+ r"""Whether the meeting type is currently assignable. `active` types can be assigned to meetings going forward; `inactive` types are no longer assigned going forward but may still appear on historical meetings."""
12
+
13
+ ACTIVE = "active"
14
+ INACTIVE = "inactive"
15
+
16
+
17
+ class MeetingTypeTypedDict(TypedDict):
18
+ name: str
19
+ status: Status
20
+ r"""Whether the meeting type is currently assignable. `active` types can be assigned to meetings going forward; `inactive` types are no longer assigned going forward but may still appear on historical meetings.
21
+
22
+ """
23
+ created_at: datetime
24
+
25
+
26
+ class MeetingType(BaseModel):
27
+ name: str
28
+
29
+ status: Status
30
+ r"""Whether the meeting type is currently assignable. `active` types can be assigned to meetings going forward; `inactive` types are no longer assigned going forward but may still appear on historical meetings.
31
+
32
+ """
33
+
34
+ created_at: datetime
@@ -0,0 +1,52 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+
3
+ from __future__ import annotations
4
+ from .meetingtype import MeetingType, MeetingTypeTypedDict
5
+ from fathom_python.types import BaseModel, Nullable, UNSET_SENTINEL
6
+ from pydantic import model_serializer
7
+ from typing import List
8
+ from typing_extensions import TypedDict
9
+
10
+
11
+ class MeetingTypeListResponseTypedDict(TypedDict):
12
+ limit: Nullable[int]
13
+ next_cursor: Nullable[str]
14
+ items: List[MeetingTypeTypedDict]
15
+
16
+
17
+ class MeetingTypeListResponse(BaseModel):
18
+ limit: Nullable[int]
19
+
20
+ next_cursor: Nullable[str]
21
+
22
+ items: List[MeetingType]
23
+
24
+ @model_serializer(mode="wrap")
25
+ def serialize_model(self, handler):
26
+ optional_fields = []
27
+ nullable_fields = ["limit", "next_cursor"]
28
+ null_default_fields = []
29
+
30
+ serialized = handler(self)
31
+
32
+ m = {}
33
+
34
+ for n, f in type(self).model_fields.items():
35
+ k = f.alias or n
36
+ val = serialized.get(k)
37
+ serialized.pop(k, None)
38
+
39
+ optional_nullable = k in optional_fields and k in nullable_fields
40
+ is_set = (
41
+ self.__pydantic_fields_set__.intersection({n})
42
+ or k in null_default_fields
43
+ ) # pylint: disable=no-member
44
+
45
+ if val is not None and val != UNSET_SENTINEL:
46
+ m[k] = val
47
+ elif val != UNSET_SENTINEL and (
48
+ not k in optional_fields or (optional_nullable and is_set)
49
+ ):
50
+ m[k] = val
51
+
52
+ return m
@@ -275,9 +275,10 @@ class Fathom(BaseSDK):
275
275
  cursor: Optional[str] = None,
276
276
  include_action_items: Optional[bool] = False,
277
277
  include_crm_matches: Optional[bool] = False,
278
+ include_highlights: Optional[bool] = False,
278
279
  include_summary: Optional[bool] = False,
279
280
  include_transcript: Optional[bool] = False,
280
- meeting_type: Optional[models.MeetingType] = None,
281
+ meeting_type: Optional[str] = None,
281
282
  recorded_by: Optional[List[str]] = None,
282
283
  teams: Optional[List[str]] = None,
283
284
  retries: OptionalNullable[utils.RetryConfig] = UNSET,
@@ -300,9 +301,13 @@ class Fathom(BaseSDK):
300
301
  :param cursor: Cursor for pagination.
301
302
  :param include_action_items: Include the action items for each meeting.
302
303
  :param include_crm_matches: Include CRM matches for each meeting. Only returns data from your or your team's linked CRM.
304
+ :param include_highlights: Include the highlights for each meeting.
303
305
  :param include_summary: Include the summary for each meeting. Unavailable for OAuth connected apps (use /recordings instead).
304
306
  :param include_transcript: Include the transcript for each meeting. Unavailable for OAuth connected apps (use /recordings instead).
305
- :param meeting_type: Filter by meeting type.
307
+ :param meeting_type: Filter by meeting type name.
308
+
309
+ Returns only meetings assigned the meeting type with this name. Use /meeting_types to discover valid values. An unknown or non-matching name returns an empty list.
310
+
306
311
  :param recorded_by: Email addresses of users who recorded meetings.
307
312
 
308
313
  Pass the parameter once per value, e.g.
@@ -340,6 +345,7 @@ class Fathom(BaseSDK):
340
345
  cursor=cursor,
341
346
  include_action_items=include_action_items,
342
347
  include_crm_matches=include_crm_matches,
348
+ include_highlights=include_highlights,
343
349
  include_summary=include_summary,
344
350
  include_transcript=include_transcript,
345
351
  meeting_type=meeting_type,
@@ -405,6 +411,7 @@ class Fathom(BaseSDK):
405
411
  cursor=next_cursor,
406
412
  include_action_items=include_action_items,
407
413
  include_crm_matches=include_crm_matches,
414
+ include_highlights=include_highlights,
408
415
  include_summary=include_summary,
409
416
  include_transcript=include_transcript,
410
417
  meeting_type=meeting_type,
@@ -439,9 +446,10 @@ class Fathom(BaseSDK):
439
446
  cursor: Optional[str] = None,
440
447
  include_action_items: Optional[bool] = False,
441
448
  include_crm_matches: Optional[bool] = False,
449
+ include_highlights: Optional[bool] = False,
442
450
  include_summary: Optional[bool] = False,
443
451
  include_transcript: Optional[bool] = False,
444
- meeting_type: Optional[models.MeetingType] = None,
452
+ meeting_type: Optional[str] = None,
445
453
  recorded_by: Optional[List[str]] = None,
446
454
  teams: Optional[List[str]] = None,
447
455
  retries: OptionalNullable[utils.RetryConfig] = UNSET,
@@ -464,9 +472,13 @@ class Fathom(BaseSDK):
464
472
  :param cursor: Cursor for pagination.
465
473
  :param include_action_items: Include the action items for each meeting.
466
474
  :param include_crm_matches: Include CRM matches for each meeting. Only returns data from your or your team's linked CRM.
475
+ :param include_highlights: Include the highlights for each meeting.
467
476
  :param include_summary: Include the summary for each meeting. Unavailable for OAuth connected apps (use /recordings instead).
468
477
  :param include_transcript: Include the transcript for each meeting. Unavailable for OAuth connected apps (use /recordings instead).
469
- :param meeting_type: Filter by meeting type.
478
+ :param meeting_type: Filter by meeting type name.
479
+
480
+ Returns only meetings assigned the meeting type with this name. Use /meeting_types to discover valid values. An unknown or non-matching name returns an empty list.
481
+
470
482
  :param recorded_by: Email addresses of users who recorded meetings.
471
483
 
472
484
  Pass the parameter once per value, e.g.
@@ -504,6 +516,7 @@ class Fathom(BaseSDK):
504
516
  cursor=cursor,
505
517
  include_action_items=include_action_items,
506
518
  include_crm_matches=include_crm_matches,
519
+ include_highlights=include_highlights,
507
520
  include_summary=include_summary,
508
521
  include_transcript=include_transcript,
509
522
  meeting_type=meeting_type,
@@ -569,6 +582,7 @@ class Fathom(BaseSDK):
569
582
  cursor=next_cursor,
570
583
  include_action_items=include_action_items,
571
584
  include_crm_matches=include_crm_matches,
585
+ include_highlights=include_highlights,
572
586
  include_summary=include_summary,
573
587
  include_transcript=include_transcript,
574
588
  meeting_type=meeting_type,
@@ -1359,6 +1373,216 @@ class Fathom(BaseSDK):
1359
1373
 
1360
1374
  raise errors.APIError("Unexpected response received", http_res)
1361
1375
 
1376
+ def list_meeting_types(
1377
+ self,
1378
+ *,
1379
+ cursor: Optional[str] = None,
1380
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
1381
+ server_url: Optional[str] = None,
1382
+ timeout_ms: Optional[int] = None,
1383
+ http_headers: Optional[Mapping[str, str]] = None,
1384
+ ) -> Optional[models.ListMeetingTypesResponse]:
1385
+ r"""List meeting types
1386
+
1387
+ List your team's published meeting types (both `active` and `inactive`). Draft meeting types, which are not yet fully created and never appear on meetings, are excluded. Use the returned `name` values to filter /meetings via its meeting_type parameter.
1388
+
1389
+
1390
+ :param cursor: Cursor for pagination.
1391
+ :param retries: Override the default retry configuration for this method
1392
+ :param server_url: Override the default server URL for this method
1393
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
1394
+ :param http_headers: Additional headers to set or replace on requests.
1395
+ """
1396
+ base_url = None
1397
+ url_variables = None
1398
+ if timeout_ms is None:
1399
+ timeout_ms = self.sdk_configuration.timeout_ms
1400
+
1401
+ if server_url is not None:
1402
+ base_url = server_url
1403
+ else:
1404
+ base_url = self._get_url(base_url, url_variables)
1405
+
1406
+ request = models.ListMeetingTypesRequest(
1407
+ cursor=cursor,
1408
+ )
1409
+
1410
+ req = self._build_request(
1411
+ method="GET",
1412
+ path="/meeting_types",
1413
+ base_url=base_url,
1414
+ url_variables=url_variables,
1415
+ request=request,
1416
+ request_body_required=False,
1417
+ request_has_path_params=False,
1418
+ request_has_query_params=True,
1419
+ user_agent_header="user-agent",
1420
+ accept_header_value="application/json",
1421
+ http_headers=http_headers,
1422
+ security=self.sdk_configuration.security,
1423
+ timeout_ms=timeout_ms,
1424
+ )
1425
+
1426
+ if retries == UNSET:
1427
+ if self.sdk_configuration.retry_config is not UNSET:
1428
+ retries = self.sdk_configuration.retry_config
1429
+
1430
+ retry_config = None
1431
+ if isinstance(retries, utils.RetryConfig):
1432
+ retry_config = (retries, ["429", "500", "502", "503", "504"])
1433
+
1434
+ http_res = self.do_request(
1435
+ hook_ctx=HookContext(
1436
+ config=self.sdk_configuration,
1437
+ base_url=base_url or "",
1438
+ operation_id="listMeetingTypes",
1439
+ oauth2_scopes=None,
1440
+ security_source=get_security_from_env(
1441
+ self.sdk_configuration.security, models.Security
1442
+ ),
1443
+ ),
1444
+ request=req,
1445
+ error_status_codes=["400", "401", "429", "4XX", "5XX"],
1446
+ retry_config=retry_config,
1447
+ )
1448
+
1449
+ def next_func() -> Optional[models.ListMeetingTypesResponse]:
1450
+ body = utils.unmarshal_json(http_res.text, Union[Dict[Any, Any], List[Any]])
1451
+ next_cursor = JSONPath("$.next_cursor").parse(body)
1452
+
1453
+ if len(next_cursor) == 0:
1454
+ return None
1455
+
1456
+ next_cursor = next_cursor[0]
1457
+ if next_cursor is None or str(next_cursor).strip() == "":
1458
+ return None
1459
+
1460
+ return self.list_meeting_types(
1461
+ cursor=next_cursor,
1462
+ retries=retries,
1463
+ )
1464
+
1465
+ if utils.match_response(http_res, "200", "application/json"):
1466
+ return models.ListMeetingTypesResponse(
1467
+ result=unmarshal_json_response(
1468
+ models.MeetingTypeListResponse, http_res
1469
+ ),
1470
+ next=next_func,
1471
+ )
1472
+ if utils.match_response(http_res, ["400", "401", "429", "4XX"], "*"):
1473
+ http_res_text = utils.stream_to_text(http_res)
1474
+ raise errors.APIError("API error occurred", http_res, http_res_text)
1475
+ if utils.match_response(http_res, "5XX", "*"):
1476
+ http_res_text = utils.stream_to_text(http_res)
1477
+ raise errors.APIError("API error occurred", http_res, http_res_text)
1478
+
1479
+ raise errors.APIError("Unexpected response received", http_res)
1480
+
1481
+ async def list_meeting_types_async(
1482
+ self,
1483
+ *,
1484
+ cursor: Optional[str] = None,
1485
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
1486
+ server_url: Optional[str] = None,
1487
+ timeout_ms: Optional[int] = None,
1488
+ http_headers: Optional[Mapping[str, str]] = None,
1489
+ ) -> Optional[models.ListMeetingTypesResponse]:
1490
+ r"""List meeting types
1491
+
1492
+ List your team's published meeting types (both `active` and `inactive`). Draft meeting types, which are not yet fully created and never appear on meetings, are excluded. Use the returned `name` values to filter /meetings via its meeting_type parameter.
1493
+
1494
+
1495
+ :param cursor: Cursor for pagination.
1496
+ :param retries: Override the default retry configuration for this method
1497
+ :param server_url: Override the default server URL for this method
1498
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
1499
+ :param http_headers: Additional headers to set or replace on requests.
1500
+ """
1501
+ base_url = None
1502
+ url_variables = None
1503
+ if timeout_ms is None:
1504
+ timeout_ms = self.sdk_configuration.timeout_ms
1505
+
1506
+ if server_url is not None:
1507
+ base_url = server_url
1508
+ else:
1509
+ base_url = self._get_url(base_url, url_variables)
1510
+
1511
+ request = models.ListMeetingTypesRequest(
1512
+ cursor=cursor,
1513
+ )
1514
+
1515
+ req = self._build_request_async(
1516
+ method="GET",
1517
+ path="/meeting_types",
1518
+ base_url=base_url,
1519
+ url_variables=url_variables,
1520
+ request=request,
1521
+ request_body_required=False,
1522
+ request_has_path_params=False,
1523
+ request_has_query_params=True,
1524
+ user_agent_header="user-agent",
1525
+ accept_header_value="application/json",
1526
+ http_headers=http_headers,
1527
+ security=self.sdk_configuration.security,
1528
+ timeout_ms=timeout_ms,
1529
+ )
1530
+
1531
+ if retries == UNSET:
1532
+ if self.sdk_configuration.retry_config is not UNSET:
1533
+ retries = self.sdk_configuration.retry_config
1534
+
1535
+ retry_config = None
1536
+ if isinstance(retries, utils.RetryConfig):
1537
+ retry_config = (retries, ["429", "500", "502", "503", "504"])
1538
+
1539
+ http_res = await self.do_request_async(
1540
+ hook_ctx=HookContext(
1541
+ config=self.sdk_configuration,
1542
+ base_url=base_url or "",
1543
+ operation_id="listMeetingTypes",
1544
+ oauth2_scopes=None,
1545
+ security_source=get_security_from_env(
1546
+ self.sdk_configuration.security, models.Security
1547
+ ),
1548
+ ),
1549
+ request=req,
1550
+ error_status_codes=["400", "401", "429", "4XX", "5XX"],
1551
+ retry_config=retry_config,
1552
+ )
1553
+
1554
+ def next_func() -> Optional[models.ListMeetingTypesResponse]:
1555
+ body = utils.unmarshal_json(http_res.text, Union[Dict[Any, Any], List[Any]])
1556
+ next_cursor = JSONPath("$.next_cursor").parse(body)
1557
+
1558
+ if len(next_cursor) == 0:
1559
+ return None
1560
+
1561
+ next_cursor = next_cursor[0]
1562
+ if next_cursor is None or str(next_cursor).strip() == "":
1563
+ return None
1564
+
1565
+ return self.list_meeting_types(
1566
+ cursor=next_cursor,
1567
+ retries=retries,
1568
+ )
1569
+
1570
+ if utils.match_response(http_res, "200", "application/json"):
1571
+ return models.ListMeetingTypesResponse(
1572
+ result=unmarshal_json_response(
1573
+ models.MeetingTypeListResponse, http_res
1574
+ ),
1575
+ next=next_func,
1576
+ )
1577
+ if utils.match_response(http_res, ["400", "401", "429", "4XX"], "*"):
1578
+ http_res_text = await utils.stream_to_text_async(http_res)
1579
+ raise errors.APIError("API error occurred", http_res, http_res_text)
1580
+ if utils.match_response(http_res, "5XX", "*"):
1581
+ http_res_text = await utils.stream_to_text_async(http_res)
1582
+ raise errors.APIError("API error occurred", http_res, http_res_text)
1583
+
1584
+ raise errors.APIError("Unexpected response received", http_res)
1585
+
1362
1586
  def create_webhook(
1363
1587
  self,
1364
1588
  *,
@@ -0,0 +1,39 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import base64
6
+ import io
7
+ from os import PathLike
8
+ from typing import IO, Any, Union
9
+
10
+ from pydantic.functional_validators import BeforeValidator
11
+ from typing_extensions import Annotated
12
+
13
+
14
+ Base64FileInput = Union[IO[bytes], PathLike[str]]
15
+
16
+
17
+ def encode_base64_file_input(value: Any) -> Any:
18
+ """Convert PathLike or IO[bytes] inputs to a base64 string. All standard binary streams
19
+ that inherit from io.IOBase are handled. Other values pass through.
20
+ """
21
+ if isinstance(value, (PathLike, io.IOBase)):
22
+ if isinstance(value, PathLike):
23
+ with open(value, "rb") as fh:
24
+ binary = fh.read()
25
+ else:
26
+ binary = value.read()
27
+ if isinstance(binary, str):
28
+ binary = binary.encode()
29
+ if not isinstance(binary, (bytes, bytearray)):
30
+ raise TypeError(
31
+ f"Base64FileInput expected binary IO returning bytes; got {type(binary).__name__}"
32
+ )
33
+ return base64.b64encode(binary).decode("ascii")
34
+ return value
35
+
36
+
37
+ # Non-str inputs are converted to base64 by the BeforeValidator at construction time.
38
+ # Callers can also pass a pre-encoded base64 str.
39
+ Base64EncodedString = Annotated[str, BeforeValidator(encode_base64_file_input)]
@@ -0,0 +1,54 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+
3
+ from importlib import import_module
4
+ import builtins
5
+ import sys
6
+
7
+
8
+ def dynamic_import(package, modname, retries=3):
9
+ """Import a module relative to package, retrying on KeyError from half-initialized modules."""
10
+ for attempt in range(retries):
11
+ try:
12
+ return import_module(modname, package)
13
+ except KeyError:
14
+ sys.modules.pop(modname, None)
15
+ if attempt == retries - 1:
16
+ break
17
+ raise KeyError(f"Failed to import module '{modname}' after {retries} attempts")
18
+
19
+
20
+ def lazy_getattr(attr_name, *, package, dynamic_imports, sub_packages=None):
21
+ """Module-level __getattr__ that lazily loads from a dynamic_imports mapping.
22
+
23
+ Args:
24
+ attr_name: The attribute being looked up.
25
+ package: The caller's __package__ (for relative imports).
26
+ dynamic_imports: Dict mapping attribute names to relative module paths.
27
+ sub_packages: Optional list of subpackage names to lazy-load.
28
+ """
29
+ module_name = dynamic_imports.get(attr_name)
30
+ if module_name is not None:
31
+ try:
32
+ module = dynamic_import(package, module_name)
33
+ return getattr(module, attr_name)
34
+ except ImportError as e:
35
+ raise ImportError(
36
+ f"Failed to import {attr_name} from {module_name}: {e}"
37
+ ) from e
38
+ except AttributeError as e:
39
+ raise AttributeError(
40
+ f"Failed to get {attr_name} from {module_name}: {e}"
41
+ ) from e
42
+
43
+ if sub_packages and attr_name in sub_packages:
44
+ return import_module(f".{attr_name}", package)
45
+
46
+ raise AttributeError(f"module '{package}' has no attribute '{attr_name}'")
47
+
48
+
49
+ def lazy_dir(*, dynamic_imports, sub_packages=None):
50
+ """Module-level __dir__ that lists lazily-loadable attributes."""
51
+ lazy_attrs = builtins.list(dynamic_imports.keys())
52
+ if sub_packages:
53
+ lazy_attrs.extend(sub_packages)
54
+ return builtins.sorted(lazy_attrs)
File without changes