fathom-python 0.0.36__tar.gz → 0.0.37__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 (67) hide show
  1. {fathom_python-0.0.36 → fathom_python-0.0.37}/PKG-INFO +9 -33
  2. {fathom_python-0.0.36 → fathom_python-0.0.37}/README.md +8 -32
  3. {fathom_python-0.0.36 → fathom_python-0.0.37}/pyproject.toml +2 -1
  4. {fathom_python-0.0.36 → fathom_python-0.0.37}/src/fathom_python/_version.py +3 -3
  5. {fathom_python-0.0.36 → fathom_python-0.0.37}/src/fathom_python/errors/apierror.py +1 -1
  6. {fathom_python-0.0.36 → fathom_python-0.0.37}/src/fathom_python/errors/fathomerror.py +1 -1
  7. {fathom_python-0.0.36 → fathom_python-0.0.37}/src/fathom_python/errors/no_response_error.py +1 -1
  8. {fathom_python-0.0.36 → fathom_python-0.0.37}/src/fathom_python/errors/responsevalidationerror.py +1 -1
  9. {fathom_python-0.0.36 → fathom_python-0.0.37}/src/fathom_python/models/listmeetingsop.py +0 -25
  10. {fathom_python-0.0.36 → fathom_python-0.0.37}/src/fathom_python/sdk.py +54 -16
  11. {fathom_python-0.0.36 → fathom_python-0.0.37}/src/fathom_python/utils/retries.py +69 -5
  12. {fathom_python-0.0.36 → fathom_python-0.0.37}/src/fathom_python/utils/unmarshal_json_response.py +15 -1
  13. {fathom_python-0.0.36 → fathom_python-0.0.37}/py.typed +0 -0
  14. {fathom_python-0.0.36 → fathom_python-0.0.37}/src/fathom_python/__init__.py +0 -0
  15. {fathom_python-0.0.36 → fathom_python-0.0.37}/src/fathom_python/_hooks/__init__.py +0 -0
  16. {fathom_python-0.0.36 → fathom_python-0.0.37}/src/fathom_python/_hooks/registration.py +0 -0
  17. {fathom_python-0.0.36 → fathom_python-0.0.37}/src/fathom_python/_hooks/sdkhooks.py +0 -0
  18. {fathom_python-0.0.36 → fathom_python-0.0.37}/src/fathom_python/_hooks/types.py +0 -0
  19. {fathom_python-0.0.36 → fathom_python-0.0.37}/src/fathom_python/basesdk.py +0 -0
  20. {fathom_python-0.0.36 → fathom_python-0.0.37}/src/fathom_python/errors/__init__.py +0 -0
  21. {fathom_python-0.0.36 → fathom_python-0.0.37}/src/fathom_python/httpclient.py +0 -0
  22. {fathom_python-0.0.36 → fathom_python-0.0.37}/src/fathom_python/models/__init__.py +0 -0
  23. {fathom_python-0.0.36 → fathom_python-0.0.37}/src/fathom_python/models/actionitem.py +0 -0
  24. {fathom_python-0.0.36 → fathom_python-0.0.37}/src/fathom_python/models/assignee.py +0 -0
  25. {fathom_python-0.0.36 → fathom_python-0.0.37}/src/fathom_python/models/callbackresponse.py +0 -0
  26. {fathom_python-0.0.36 → fathom_python-0.0.37}/src/fathom_python/models/createwebhookop.py +0 -0
  27. {fathom_python-0.0.36 → fathom_python-0.0.37}/src/fathom_python/models/crmcompanymatch.py +0 -0
  28. {fathom_python-0.0.36 → fathom_python-0.0.37}/src/fathom_python/models/crmcontactmatch.py +0 -0
  29. {fathom_python-0.0.36 → fathom_python-0.0.37}/src/fathom_python/models/crmdealmatch.py +0 -0
  30. {fathom_python-0.0.36 → fathom_python-0.0.37}/src/fathom_python/models/crmmatches.py +0 -0
  31. {fathom_python-0.0.36 → fathom_python-0.0.37}/src/fathom_python/models/deletewebhookop.py +0 -0
  32. {fathom_python-0.0.36 → fathom_python-0.0.37}/src/fathom_python/models/fathomuser.py +0 -0
  33. {fathom_python-0.0.36 → fathom_python-0.0.37}/src/fathom_python/models/getrecordingsummaryop.py +0 -0
  34. {fathom_python-0.0.36 → fathom_python-0.0.37}/src/fathom_python/models/getrecordingtranscriptop.py +0 -0
  35. {fathom_python-0.0.36 → fathom_python-0.0.37}/src/fathom_python/models/invitee.py +0 -0
  36. {fathom_python-0.0.36 → fathom_python-0.0.37}/src/fathom_python/models/listteammembersop.py +0 -0
  37. {fathom_python-0.0.36 → fathom_python-0.0.37}/src/fathom_python/models/listteamsop.py +0 -0
  38. {fathom_python-0.0.36 → fathom_python-0.0.37}/src/fathom_python/models/meeting.py +0 -0
  39. {fathom_python-0.0.36 → fathom_python-0.0.37}/src/fathom_python/models/meetinglistresponse.py +0 -0
  40. {fathom_python-0.0.36 → fathom_python-0.0.37}/src/fathom_python/models/meetingsummary.py +0 -0
  41. {fathom_python-0.0.36 → fathom_python-0.0.37}/src/fathom_python/models/security.py +0 -0
  42. {fathom_python-0.0.36 → fathom_python-0.0.37}/src/fathom_python/models/team.py +0 -0
  43. {fathom_python-0.0.36 → fathom_python-0.0.37}/src/fathom_python/models/teamlistresponse.py +0 -0
  44. {fathom_python-0.0.36 → fathom_python-0.0.37}/src/fathom_python/models/teammember.py +0 -0
  45. {fathom_python-0.0.36 → fathom_python-0.0.37}/src/fathom_python/models/teammemberlistresponse.py +0 -0
  46. {fathom_python-0.0.36 → fathom_python-0.0.37}/src/fathom_python/models/transcriptitem.py +0 -0
  47. {fathom_python-0.0.36 → fathom_python-0.0.37}/src/fathom_python/models/transcriptitemspeaker.py +0 -0
  48. {fathom_python-0.0.36 → fathom_python-0.0.37}/src/fathom_python/models/webhook.py +0 -0
  49. {fathom_python-0.0.36 → fathom_python-0.0.37}/src/fathom_python/py.typed +0 -0
  50. {fathom_python-0.0.36 → fathom_python-0.0.37}/src/fathom_python/sdkconfiguration.py +0 -0
  51. {fathom_python-0.0.36 → fathom_python-0.0.37}/src/fathom_python/types/__init__.py +0 -0
  52. {fathom_python-0.0.36 → fathom_python-0.0.37}/src/fathom_python/types/basemodel.py +0 -0
  53. {fathom_python-0.0.36 → fathom_python-0.0.37}/src/fathom_python/utils/__init__.py +0 -0
  54. {fathom_python-0.0.36 → fathom_python-0.0.37}/src/fathom_python/utils/annotations.py +0 -0
  55. {fathom_python-0.0.36 → fathom_python-0.0.37}/src/fathom_python/utils/datetimes.py +0 -0
  56. {fathom_python-0.0.36 → fathom_python-0.0.37}/src/fathom_python/utils/enums.py +0 -0
  57. {fathom_python-0.0.36 → fathom_python-0.0.37}/src/fathom_python/utils/eventstreaming.py +0 -0
  58. {fathom_python-0.0.36 → fathom_python-0.0.37}/src/fathom_python/utils/forms.py +0 -0
  59. {fathom_python-0.0.36 → fathom_python-0.0.37}/src/fathom_python/utils/headers.py +0 -0
  60. {fathom_python-0.0.36 → fathom_python-0.0.37}/src/fathom_python/utils/logger.py +0 -0
  61. {fathom_python-0.0.36 → fathom_python-0.0.37}/src/fathom_python/utils/metadata.py +0 -0
  62. {fathom_python-0.0.36 → fathom_python-0.0.37}/src/fathom_python/utils/queryparams.py +0 -0
  63. {fathom_python-0.0.36 → fathom_python-0.0.37}/src/fathom_python/utils/requestbodies.py +0 -0
  64. {fathom_python-0.0.36 → fathom_python-0.0.37}/src/fathom_python/utils/security.py +0 -0
  65. {fathom_python-0.0.36 → fathom_python-0.0.37}/src/fathom_python/utils/serializers.py +0 -0
  66. {fathom_python-0.0.36 → fathom_python-0.0.37}/src/fathom_python/utils/url.py +0 -0
  67. {fathom_python-0.0.36 → fathom_python-0.0.37}/src/fathom_python/utils/values.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: fathom-python
3
- Version: 0.0.36
3
+ Version: 0.0.37
4
4
  Summary: Fathom's official Python SDK.
5
5
  Author: Speakeasy
6
6
  Requires-Python: >=3.9.2
@@ -120,10 +120,7 @@ with Fathom(
120
120
  ),
121
121
  ) as fathom:
122
122
 
123
- res = fathom.list_meetings(calendar_invitees=[
124
- "cfo@acme.com",
125
- "legal@acme.com",
126
- ], calendar_invitees_domains=[
123
+ res = fathom.list_meetings(calendar_invitees_domains=[
127
124
  "acme.com",
128
125
  "client.com",
129
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=[
@@ -158,10 +155,7 @@ async def main():
158
155
  ),
159
156
  ) as fathom:
160
157
 
161
- res = await fathom.list_meetings_async(calendar_invitees=[
162
- "cfo@acme.com",
163
- "legal@acme.com",
164
- ], calendar_invitees_domains=[
158
+ res = await fathom.list_meetings_async(calendar_invitees_domains=[
165
159
  "acme.com",
166
160
  "client.com",
167
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=[
@@ -205,10 +199,7 @@ with Fathom(
205
199
  ),
206
200
  ) as fathom:
207
201
 
208
- res = fathom.list_meetings(calendar_invitees=[
209
- "cfo@acme.com",
210
- "legal@acme.com",
211
- ], calendar_invitees_domains=[
202
+ res = fathom.list_meetings(calendar_invitees_domains=[
212
203
  "acme.com",
213
204
  "client.com",
214
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=[
@@ -265,10 +256,7 @@ with Fathom(
265
256
  ),
266
257
  ) as fathom:
267
258
 
268
- res = fathom.list_meetings(calendar_invitees=[
269
- "cfo@acme.com",
270
- "legal@acme.com",
271
- ], calendar_invitees_domains=[
259
+ res = fathom.list_meetings(calendar_invitees_domains=[
272
260
  "acme.com",
273
261
  "client.com",
274
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=[
@@ -305,10 +293,7 @@ with Fathom(
305
293
  ),
306
294
  ) as fathom:
307
295
 
308
- res = fathom.list_meetings(calendar_invitees=[
309
- "cfo@acme.com",
310
- "legal@acme.com",
311
- ], calendar_invitees_domains=[
296
+ res = fathom.list_meetings(calendar_invitees_domains=[
312
297
  "acme.com",
313
298
  "client.com",
314
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=[
@@ -341,10 +326,7 @@ with Fathom(
341
326
  ),
342
327
  ) as fathom:
343
328
 
344
- res = fathom.list_meetings(calendar_invitees=[
345
- "cfo@acme.com",
346
- "legal@acme.com",
347
- ], calendar_invitees_domains=[
329
+ res = fathom.list_meetings(calendar_invitees_domains=[
348
330
  "acme.com",
349
331
  "client.com",
350
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=[
@@ -390,10 +372,7 @@ with Fathom(
390
372
  res = None
391
373
  try:
392
374
 
393
- res = fathom.list_meetings(calendar_invitees=[
394
- "cfo@acme.com",
395
- "legal@acme.com",
396
- ], calendar_invitees_domains=[
375
+ res = fathom.list_meetings(calendar_invitees_domains=[
397
376
  "acme.com",
398
377
  "client.com",
399
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=[
@@ -458,10 +437,7 @@ with Fathom(
458
437
  ),
459
438
  ) as fathom:
460
439
 
461
- res = fathom.list_meetings(calendar_invitees=[
462
- "cfo@acme.com",
463
- "legal@acme.com",
464
- ], calendar_invitees_domains=[
440
+ res = fathom.list_meetings(calendar_invitees_domains=[
465
441
  "acme.com",
466
442
  "client.com",
467
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=[
@@ -100,10 +100,7 @@ with Fathom(
100
100
  ),
101
101
  ) as fathom:
102
102
 
103
- res = fathom.list_meetings(calendar_invitees=[
104
- "cfo@acme.com",
105
- "legal@acme.com",
106
- ], calendar_invitees_domains=[
103
+ res = fathom.list_meetings(calendar_invitees_domains=[
107
104
  "acme.com",
108
105
  "client.com",
109
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=[
@@ -138,10 +135,7 @@ async def main():
138
135
  ),
139
136
  ) as fathom:
140
137
 
141
- res = await fathom.list_meetings_async(calendar_invitees=[
142
- "cfo@acme.com",
143
- "legal@acme.com",
144
- ], calendar_invitees_domains=[
138
+ res = await fathom.list_meetings_async(calendar_invitees_domains=[
145
139
  "acme.com",
146
140
  "client.com",
147
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=[
@@ -185,10 +179,7 @@ with Fathom(
185
179
  ),
186
180
  ) as fathom:
187
181
 
188
- res = fathom.list_meetings(calendar_invitees=[
189
- "cfo@acme.com",
190
- "legal@acme.com",
191
- ], calendar_invitees_domains=[
182
+ res = fathom.list_meetings(calendar_invitees_domains=[
192
183
  "acme.com",
193
184
  "client.com",
194
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=[
@@ -245,10 +236,7 @@ with Fathom(
245
236
  ),
246
237
  ) as fathom:
247
238
 
248
- res = fathom.list_meetings(calendar_invitees=[
249
- "cfo@acme.com",
250
- "legal@acme.com",
251
- ], calendar_invitees_domains=[
239
+ res = fathom.list_meetings(calendar_invitees_domains=[
252
240
  "acme.com",
253
241
  "client.com",
254
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=[
@@ -285,10 +273,7 @@ with Fathom(
285
273
  ),
286
274
  ) as fathom:
287
275
 
288
- res = fathom.list_meetings(calendar_invitees=[
289
- "cfo@acme.com",
290
- "legal@acme.com",
291
- ], calendar_invitees_domains=[
276
+ res = fathom.list_meetings(calendar_invitees_domains=[
292
277
  "acme.com",
293
278
  "client.com",
294
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=[
@@ -321,10 +306,7 @@ with Fathom(
321
306
  ),
322
307
  ) as fathom:
323
308
 
324
- res = fathom.list_meetings(calendar_invitees=[
325
- "cfo@acme.com",
326
- "legal@acme.com",
327
- ], calendar_invitees_domains=[
309
+ res = fathom.list_meetings(calendar_invitees_domains=[
328
310
  "acme.com",
329
311
  "client.com",
330
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=[
@@ -370,10 +352,7 @@ with Fathom(
370
352
  res = None
371
353
  try:
372
354
 
373
- res = fathom.list_meetings(calendar_invitees=[
374
- "cfo@acme.com",
375
- "legal@acme.com",
376
- ], calendar_invitees_domains=[
355
+ res = fathom.list_meetings(calendar_invitees_domains=[
377
356
  "acme.com",
378
357
  "client.com",
379
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=[
@@ -438,10 +417,7 @@ with Fathom(
438
417
  ),
439
418
  ) as fathom:
440
419
 
441
- res = fathom.list_meetings(calendar_invitees=[
442
- "cfo@acme.com",
443
- "legal@acme.com",
444
- ], calendar_invitees_domains=[
420
+ res = fathom.list_meetings(calendar_invitees_domains=[
445
421
  "acme.com",
446
422
  "client.com",
447
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=[
@@ -1,7 +1,7 @@
1
1
 
2
2
  [project]
3
3
  name = "fathom-python"
4
- version = "0.0.36"
4
+ version = "0.0.37"
5
5
  description = "Fathom's official Python SDK."
6
6
  authors = [{ name = "Speakeasy" },]
7
7
  readme = "README.md"
@@ -31,6 +31,7 @@ in-project = true
31
31
  [tool.poetry.group.dev.dependencies]
32
32
  mypy = "==1.15.0"
33
33
  pylint = "==3.2.3"
34
+ pyright = "==1.1.398"
34
35
 
35
36
  [build-system]
36
37
  requires = ["poetry-core"]
@@ -3,10 +3,10 @@
3
3
  import importlib.metadata
4
4
 
5
5
  __title__: str = "fathom-python"
6
- __version__: str = "0.0.36"
6
+ __version__: str = "0.0.37"
7
7
  __openapi_doc_version__: str = "1.0.0"
8
- __gen_version__: str = "2.723.8"
9
- __user_agent__: str = "speakeasy-sdk/python 0.0.36 2.723.8 1.0.0 fathom-python"
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"
10
10
 
11
11
  try:
12
12
  if __package__ is not None:
@@ -9,7 +9,7 @@ from fathom_python.errors import FathomError
9
9
  MAX_MESSAGE_LEN = 10_000
10
10
 
11
11
 
12
- @dataclass(frozen=True)
12
+ @dataclass(unsafe_hash=True)
13
13
  class APIError(FathomError):
14
14
  """The fallback error class if no more specific error class is matched."""
15
15
 
@@ -5,7 +5,7 @@ from typing import Optional
5
5
  from dataclasses import dataclass, field
6
6
 
7
7
 
8
- @dataclass(frozen=True)
8
+ @dataclass(unsafe_hash=True)
9
9
  class FathomError(Exception):
10
10
  """The base class for all HTTP error responses."""
11
11
 
@@ -3,7 +3,7 @@
3
3
  from dataclasses import dataclass
4
4
 
5
5
 
6
- @dataclass(frozen=True)
6
+ @dataclass(unsafe_hash=True)
7
7
  class NoResponseError(Exception):
8
8
  """Error raised when no HTTP response is received from the server."""
9
9
 
@@ -7,7 +7,7 @@ from dataclasses import dataclass
7
7
  from fathom_python.errors import FathomError
8
8
 
9
9
 
10
- @dataclass(frozen=True)
10
+ @dataclass(unsafe_hash=True)
11
11
  class ResponseValidationError(FathomError):
12
12
  """Error raised when there is a type mismatch between the response data and the expected Pydantic model."""
13
13
 
@@ -27,16 +27,6 @@ class MeetingType(str, Enum):
27
27
 
28
28
 
29
29
  class ListMeetingsRequestTypedDict(TypedDict):
30
- calendar_invitees: NotRequired[List[str]]
31
- r"""Email address of calendar_invitees to filter by.
32
-
33
- Pass the parameter once per value, e.g.
34
- `calendar_invitees[]=cfo@acme.com&calendar_invitees[]=legal@acme.com`.
35
-
36
- Returns meetings where any of the given email addresses appear
37
- in the calendar_invitees list.
38
-
39
- """
40
30
  calendar_invitees_domains: NotRequired[List[str]]
41
31
  r"""Domains of the companies to filter by. Exact match.
42
32
 
@@ -85,21 +75,6 @@ class ListMeetingsRequestTypedDict(TypedDict):
85
75
 
86
76
 
87
77
  class ListMeetingsRequest(BaseModel):
88
- calendar_invitees: Annotated[
89
- Optional[List[str]],
90
- pydantic.Field(alias="calendar_invitees[]"),
91
- FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
92
- ] = None
93
- r"""Email address of calendar_invitees to filter by.
94
-
95
- Pass the parameter once per value, e.g.
96
- `calendar_invitees[]=cfo@acme.com&calendar_invitees[]=legal@acme.com`.
97
-
98
- Returns meetings where any of the given email addresses appear
99
- in the calendar_invitees list.
100
-
101
- """
102
-
103
78
  calendar_invitees_domains: Annotated[
104
79
  Optional[List[str]],
105
80
  pydantic.Field(alias="calendar_invitees_domains[]"),
@@ -266,7 +266,6 @@ class Fathom(BaseSDK):
266
266
  def list_meetings(
267
267
  self,
268
268
  *,
269
- calendar_invitees: Optional[List[str]] = None,
270
269
  calendar_invitees_domains: Optional[List[str]] = None,
271
270
  calendar_invitees_domains_type: Optional[
272
271
  models.ListMeetingsCalendarInviteesDomainsType
@@ -288,8 +287,13 @@ class Fathom(BaseSDK):
288
287
  ) -> Optional[models.ListMeetingsResponse]:
289
288
  r"""List meetings
290
289
 
291
- :param calendar_invitees: Email address of calendar_invitees to filter by. Pass the parameter once per value, e.g. `calendar_invitees[]=cfo@acme.com&calendar_invitees[]=legal@acme.com`. Returns meetings where any of the given email addresses appear in the calendar_invitees list.
292
- :param calendar_invitees_domains: Domains of the companies to filter by. Exact match. Pass the parameter once per value, e.g. `calendar_invitees_domains[]=acme.com&calendar_invitees_domains[]=client.com`. Returns meetings where any of the given company domains appear in the meeting.
290
+ :param calendar_invitees_domains: Domains of the companies to filter by. Exact match.
291
+
292
+ Pass the parameter once per value, e.g.
293
+ `calendar_invitees_domains[]=acme.com&calendar_invitees_domains[]=client.com`.
294
+
295
+ Returns meetings where any of the given company domains appear in the meeting.
296
+
293
297
  :param calendar_invitees_domains_type: Filter by whether calendar invitee list includes external email domains.
294
298
  :param created_after: Filter to meetings with created_at after this timestamp, e.g. `created_after=2025-01-01T00:00:00Z`.
295
299
  :param created_before: Filter to meetings with created_at before this timestamp, e.g. `created_before=2025-01-01T00:00:00Z`.
@@ -299,8 +303,20 @@ class Fathom(BaseSDK):
299
303
  :param include_summary: Include the summary for each meeting. Unavailable for OAuth connected apps (use /recordings instead).
300
304
  :param include_transcript: Include the transcript for each meeting. Unavailable for OAuth connected apps (use /recordings instead).
301
305
  :param meeting_type: Filter by meeting type.
302
- :param recorded_by: Email addresses of users who recorded meetings. Pass the parameter once per value, e.g. `recorded_by[]=ceo@acme.com&recorded_by[]=pm@acme.com`. Returns meetings recorded by any of the specified users.
303
- :param teams: Team names to filter by. Pass the parameter once per value, e.g. `teams[]=Sales&teams[]=Engineering`. Returns meetings that belong to any of the specified teams.
306
+ :param recorded_by: Email addresses of users who recorded meetings.
307
+
308
+ Pass the parameter once per value, e.g.
309
+ `recorded_by[]=ceo@acme.com&recorded_by[]=pm@acme.com`.
310
+
311
+ Returns meetings recorded by any of the specified users.
312
+
313
+ :param teams: Team names to filter by.
314
+
315
+ Pass the parameter once per value, e.g.
316
+ `teams[]=Sales&teams[]=Engineering`.
317
+
318
+ Returns meetings that belong to any of the specified teams.
319
+
304
320
  :param retries: Override the default retry configuration for this method
305
321
  :param server_url: Override the default server URL for this method
306
322
  :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
@@ -317,7 +333,6 @@ class Fathom(BaseSDK):
317
333
  base_url = self._get_url(base_url, url_variables)
318
334
 
319
335
  request = models.ListMeetingsRequest(
320
- calendar_invitees=calendar_invitees,
321
336
  calendar_invitees_domains=calendar_invitees_domains,
322
337
  calendar_invitees_domains_type=calendar_invitees_domains_type,
323
338
  created_after=created_after,
@@ -383,7 +398,6 @@ class Fathom(BaseSDK):
383
398
  return None
384
399
 
385
400
  return self.list_meetings(
386
- calendar_invitees=calendar_invitees,
387
401
  calendar_invitees_domains=calendar_invitees_domains,
388
402
  calendar_invitees_domains_type=calendar_invitees_domains_type,
389
403
  created_after=created_after,
@@ -416,7 +430,6 @@ class Fathom(BaseSDK):
416
430
  async def list_meetings_async(
417
431
  self,
418
432
  *,
419
- calendar_invitees: Optional[List[str]] = None,
420
433
  calendar_invitees_domains: Optional[List[str]] = None,
421
434
  calendar_invitees_domains_type: Optional[
422
435
  models.ListMeetingsCalendarInviteesDomainsType
@@ -438,8 +451,13 @@ class Fathom(BaseSDK):
438
451
  ) -> Optional[models.ListMeetingsResponse]:
439
452
  r"""List meetings
440
453
 
441
- :param calendar_invitees: Email address of calendar_invitees to filter by. Pass the parameter once per value, e.g. `calendar_invitees[]=cfo@acme.com&calendar_invitees[]=legal@acme.com`. Returns meetings where any of the given email addresses appear in the calendar_invitees list.
442
- :param calendar_invitees_domains: Domains of the companies to filter by. Exact match. Pass the parameter once per value, e.g. `calendar_invitees_domains[]=acme.com&calendar_invitees_domains[]=client.com`. Returns meetings where any of the given company domains appear in the meeting.
454
+ :param calendar_invitees_domains: Domains of the companies to filter by. Exact match.
455
+
456
+ Pass the parameter once per value, e.g.
457
+ `calendar_invitees_domains[]=acme.com&calendar_invitees_domains[]=client.com`.
458
+
459
+ Returns meetings where any of the given company domains appear in the meeting.
460
+
443
461
  :param calendar_invitees_domains_type: Filter by whether calendar invitee list includes external email domains.
444
462
  :param created_after: Filter to meetings with created_at after this timestamp, e.g. `created_after=2025-01-01T00:00:00Z`.
445
463
  :param created_before: Filter to meetings with created_at before this timestamp, e.g. `created_before=2025-01-01T00:00:00Z`.
@@ -449,8 +467,20 @@ class Fathom(BaseSDK):
449
467
  :param include_summary: Include the summary for each meeting. Unavailable for OAuth connected apps (use /recordings instead).
450
468
  :param include_transcript: Include the transcript for each meeting. Unavailable for OAuth connected apps (use /recordings instead).
451
469
  :param meeting_type: Filter by meeting type.
452
- :param recorded_by: Email addresses of users who recorded meetings. Pass the parameter once per value, e.g. `recorded_by[]=ceo@acme.com&recorded_by[]=pm@acme.com`. Returns meetings recorded by any of the specified users.
453
- :param teams: Team names to filter by. Pass the parameter once per value, e.g. `teams[]=Sales&teams[]=Engineering`. Returns meetings that belong to any of the specified teams.
470
+ :param recorded_by: Email addresses of users who recorded meetings.
471
+
472
+ Pass the parameter once per value, e.g.
473
+ `recorded_by[]=ceo@acme.com&recorded_by[]=pm@acme.com`.
474
+
475
+ Returns meetings recorded by any of the specified users.
476
+
477
+ :param teams: Team names to filter by.
478
+
479
+ Pass the parameter once per value, e.g.
480
+ `teams[]=Sales&teams[]=Engineering`.
481
+
482
+ Returns meetings that belong to any of the specified teams.
483
+
454
484
  :param retries: Override the default retry configuration for this method
455
485
  :param server_url: Override the default server URL for this method
456
486
  :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
@@ -467,7 +497,6 @@ class Fathom(BaseSDK):
467
497
  base_url = self._get_url(base_url, url_variables)
468
498
 
469
499
  request = models.ListMeetingsRequest(
470
- calendar_invitees=calendar_invitees,
471
500
  calendar_invitees_domains=calendar_invitees_domains,
472
501
  calendar_invitees_domains_type=calendar_invitees_domains_type,
473
502
  created_after=created_after,
@@ -533,7 +562,6 @@ class Fathom(BaseSDK):
533
562
  return None
534
563
 
535
564
  return self.list_meetings(
536
- calendar_invitees=calendar_invitees,
537
565
  calendar_invitees_domains=calendar_invitees_domains,
538
566
  calendar_invitees_domains_type=calendar_invitees_domains_type,
539
567
  created_after=created_after,
@@ -1352,7 +1380,12 @@ class Fathom(BaseSDK):
1352
1380
 
1353
1381
 
1354
1382
  :param destination_url: The URL to send the webhook to.
1355
- :param triggered_for: You must send at least one of the following types of recordings to trigger on. - `my_recordings`: Your private recordings, as well as those you've shared with individuals. (On Team Plans, this excludes recordings you've shared with any teams.) - `shared_external_recordings`: Recordings shared with you by other users. (For Team Plans, this does not include recordings shared by other users on your Team Plan.) - `my_shared_with_team_recordings`: (Team Plans only). All recordings that you have shared with other teams (e.g. Marketing or Sales). Recordings you've shared with individuals but not with teams are not included. - `shared_team_recordings`: (Team Plans only) All recordings you can access from other users on your Team Plan, whether shared with you individually or with your team.
1383
+ :param triggered_for: You must send at least one of the following types of recordings to trigger on.
1384
+ - `my_recordings`: Your private recordings, as well as those you've shared with individuals. (On Team Plans, this excludes recordings you've shared with any teams.)
1385
+ - `shared_external_recordings`: Recordings shared with you by other users. (For Team Plans, this does not include recordings shared by other users on your Team Plan.)
1386
+ - `my_shared_with_team_recordings`: (Team Plans only). All recordings that you have shared with other teams (e.g. Marketing or Sales). Recordings you've shared with individuals but not with teams are not included.
1387
+ - `shared_team_recordings`: (Team Plans only) All recordings you can access from other users on your Team Plan, whether shared with you individually or with your team.
1388
+
1356
1389
  :param include_action_items: Include the action items for each meeting.
1357
1390
  :param include_crm_matches: Include CRM matches for each meeting. Only returns data from your or your team's linked CRM.
1358
1391
  :param include_summary: Include the summary for each meeting.
@@ -1455,7 +1488,12 @@ class Fathom(BaseSDK):
1455
1488
 
1456
1489
 
1457
1490
  :param destination_url: The URL to send the webhook to.
1458
- :param triggered_for: You must send at least one of the following types of recordings to trigger on. - `my_recordings`: Your private recordings, as well as those you've shared with individuals. (On Team Plans, this excludes recordings you've shared with any teams.) - `shared_external_recordings`: Recordings shared with you by other users. (For Team Plans, this does not include recordings shared by other users on your Team Plan.) - `my_shared_with_team_recordings`: (Team Plans only). All recordings that you have shared with other teams (e.g. Marketing or Sales). Recordings you've shared with individuals but not with teams are not included. - `shared_team_recordings`: (Team Plans only) All recordings you can access from other users on your Team Plan, whether shared with you individually or with your team.
1491
+ :param triggered_for: You must send at least one of the following types of recordings to trigger on.
1492
+ - `my_recordings`: Your private recordings, as well as those you've shared with individuals. (On Team Plans, this excludes recordings you've shared with any teams.)
1493
+ - `shared_external_recordings`: Recordings shared with you by other users. (For Team Plans, this does not include recordings shared by other users on your Team Plan.)
1494
+ - `my_shared_with_team_recordings`: (Team Plans only). All recordings that you have shared with other teams (e.g. Marketing or Sales). Recordings you've shared with individuals but not with teams are not included.
1495
+ - `shared_team_recordings`: (Team Plans only) All recordings you can access from other users on your Team Plan, whether shared with you individually or with your team.
1496
+
1459
1497
  :param include_action_items: Include the action items for each meeting.
1460
1498
  :param include_crm_matches: Include CRM matches for each meeting. Only returns data from your or your team's linked CRM.
1461
1499
  :param include_summary: Include the summary for each meeting.
@@ -3,7 +3,9 @@
3
3
  import asyncio
4
4
  import random
5
5
  import time
6
- from typing import List
6
+ from datetime import datetime
7
+ from email.utils import parsedate_to_datetime
8
+ from typing import List, Optional
7
9
 
8
10
  import httpx
9
11
 
@@ -51,9 +53,11 @@ class Retries:
51
53
 
52
54
  class TemporaryError(Exception):
53
55
  response: httpx.Response
56
+ retry_after: Optional[int]
54
57
 
55
58
  def __init__(self, response: httpx.Response):
56
59
  self.response = response
60
+ self.retry_after = _parse_retry_after_header(response)
57
61
 
58
62
 
59
63
  class PermanentError(Exception):
@@ -63,6 +67,62 @@ class PermanentError(Exception):
63
67
  self.inner = inner
64
68
 
65
69
 
70
+ def _parse_retry_after_header(response: httpx.Response) -> Optional[int]:
71
+ """Parse Retry-After header from response.
72
+
73
+ Returns:
74
+ Retry interval in milliseconds, or None if header is missing or invalid.
75
+ """
76
+ retry_after_header = response.headers.get("retry-after")
77
+ if not retry_after_header:
78
+ return None
79
+
80
+ try:
81
+ seconds = float(retry_after_header)
82
+ return round(seconds * 1000)
83
+ except ValueError:
84
+ pass
85
+
86
+ try:
87
+ retry_date = parsedate_to_datetime(retry_after_header)
88
+ delta = (retry_date - datetime.now(retry_date.tzinfo)).total_seconds()
89
+ return round(max(0, delta) * 1000)
90
+ except (ValueError, TypeError):
91
+ pass
92
+
93
+ return None
94
+
95
+
96
+ def _get_sleep_interval(
97
+ exception: Exception,
98
+ initial_interval: int,
99
+ max_interval: int,
100
+ exponent: float,
101
+ retries: int,
102
+ ) -> float:
103
+ """Get sleep interval for retry with exponential backoff.
104
+
105
+ Args:
106
+ exception: The exception that triggered the retry.
107
+ initial_interval: Initial retry interval in milliseconds.
108
+ max_interval: Maximum retry interval in milliseconds.
109
+ exponent: Base for exponential backoff calculation.
110
+ retries: Current retry attempt count.
111
+
112
+ Returns:
113
+ Sleep interval in seconds.
114
+ """
115
+ if (
116
+ isinstance(exception, TemporaryError)
117
+ and exception.retry_after is not None
118
+ and exception.retry_after > 0
119
+ ):
120
+ return exception.retry_after / 1000
121
+
122
+ sleep = (initial_interval / 1000) * exponent**retries + random.uniform(0, 1)
123
+ return min(sleep, max_interval / 1000)
124
+
125
+
66
126
  def retry(func, retries: Retries):
67
127
  if retries.config.strategy == "backoff":
68
128
 
@@ -183,8 +243,10 @@ def retry_with_backoff(
183
243
  return exception.response
184
244
 
185
245
  raise
186
- sleep = (initial_interval / 1000) * exponent**retries + random.uniform(0, 1)
187
- sleep = min(sleep, max_interval / 1000)
246
+
247
+ sleep = _get_sleep_interval(
248
+ exception, initial_interval, max_interval, exponent, retries
249
+ )
188
250
  time.sleep(sleep)
189
251
  retries += 1
190
252
 
@@ -211,7 +273,9 @@ async def retry_with_backoff_async(
211
273
  return exception.response
212
274
 
213
275
  raise
214
- sleep = (initial_interval / 1000) * exponent**retries + random.uniform(0, 1)
215
- sleep = min(sleep, max_interval / 1000)
276
+
277
+ sleep = _get_sleep_interval(
278
+ exception, initial_interval, max_interval, exponent, retries
279
+ )
216
280
  await asyncio.sleep(sleep)
217
281
  retries += 1
@@ -1,12 +1,26 @@
1
1
  """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
2
 
3
- from typing import Any, Optional
3
+ from typing import Any, Optional, Type, TypeVar, overload
4
4
 
5
5
  import httpx
6
6
 
7
7
  from .serializers import unmarshal_json
8
8
  from fathom_python import errors
9
9
 
10
+ T = TypeVar("T")
11
+
12
+
13
+ @overload
14
+ def unmarshal_json_response(
15
+ typ: Type[T], http_res: httpx.Response, body: Optional[str] = None
16
+ ) -> T: ...
17
+
18
+
19
+ @overload
20
+ def unmarshal_json_response(
21
+ typ: Any, http_res: httpx.Response, body: Optional[str] = None
22
+ ) -> Any: ...
23
+
10
24
 
11
25
  def unmarshal_json_response(
12
26
  typ: Any, http_res: httpx.Response, body: Optional[str] = None
File without changes