fathom-python 0.0.30__py3-none-any.whl → 0.0.31__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.
fathom_python/_version.py CHANGED
@@ -3,10 +3,10 @@
3
3
  import importlib.metadata
4
4
 
5
5
  __title__: str = "fathom-python"
6
- __version__: str = "0.0.30"
6
+ __version__: str = "0.0.31"
7
7
  __openapi_doc_version__: str = "1.0.0"
8
- __gen_version__: str = "2.669.0"
9
- __user_agent__: str = "speakeasy-sdk/python 0.0.30 2.669.0 1.0.0 fathom-python"
8
+ __gen_version__: str = "2.670.1"
9
+ __user_agent__: str = "speakeasy-sdk/python 0.0.31 2.670.1 1.0.0 fathom-python"
10
10
 
11
11
  try:
12
12
  if __package__ is not None:
@@ -13,14 +13,6 @@ if TYPE_CHECKING:
13
13
  from .crmmatches import CRMMatches, CRMMatchesTypedDict
14
14
  from .deletewebhookop import DeleteWebhookRequest, DeleteWebhookRequestTypedDict
15
15
  from .fathomuser import FathomUser, FathomUserTypedDict
16
- from .gettokenop import (
17
- GET_TOKEN_OP_SERVERS,
18
- GetTokenGrantType,
19
- GetTokenRequest,
20
- GetTokenRequestTypedDict,
21
- GetTokenResponse,
22
- GetTokenResponseTypedDict,
23
- )
24
16
  from .invitee import Invitee, InviteeTypedDict
25
17
  from .listmeetingsop import (
26
18
  ListMeetingsMeetingType,
@@ -37,11 +29,6 @@ if TYPE_CHECKING:
37
29
  from .meeting import Meeting, MeetingType, MeetingTypedDict
38
30
  from .meetinglistresponse import MeetingListResponse, MeetingListResponseTypedDict
39
31
  from .meetingsummary import MeetingSummary, MeetingSummaryTypedDict
40
- from .schemetokenrequeststandalone import (
41
- GrantType,
42
- SchemeTokenRequestStandalone,
43
- SchemeTokenRequestStandaloneTypedDict,
44
- )
45
32
  from .security import Security, SecurityTypedDict
46
33
  from .team import Team, TeamTypedDict
47
34
  from .teamlistresponse import TeamListResponse, TeamListResponseTypedDict
@@ -76,13 +63,6 @@ __all__ = [
76
63
  "DeleteWebhookRequestTypedDict",
77
64
  "FathomUser",
78
65
  "FathomUserTypedDict",
79
- "GET_TOKEN_OP_SERVERS",
80
- "GetTokenGrantType",
81
- "GetTokenRequest",
82
- "GetTokenRequestTypedDict",
83
- "GetTokenResponse",
84
- "GetTokenResponseTypedDict",
85
- "GrantType",
86
66
  "Invitee",
87
67
  "InviteeTypedDict",
88
68
  "ListMeetingsMeetingType",
@@ -101,8 +81,6 @@ __all__ = [
101
81
  "MeetingSummaryTypedDict",
102
82
  "MeetingType",
103
83
  "MeetingTypedDict",
104
- "SchemeTokenRequestStandalone",
105
- "SchemeTokenRequestStandaloneTypedDict",
106
84
  "Security",
107
85
  "SecurityTypedDict",
108
86
  "Team",
@@ -140,12 +118,6 @@ _dynamic_imports: dict[str, str] = {
140
118
  "DeleteWebhookRequestTypedDict": ".deletewebhookop",
141
119
  "FathomUser": ".fathomuser",
142
120
  "FathomUserTypedDict": ".fathomuser",
143
- "GET_TOKEN_OP_SERVERS": ".gettokenop",
144
- "GetTokenGrantType": ".gettokenop",
145
- "GetTokenRequest": ".gettokenop",
146
- "GetTokenRequestTypedDict": ".gettokenop",
147
- "GetTokenResponse": ".gettokenop",
148
- "GetTokenResponseTypedDict": ".gettokenop",
149
121
  "Invitee": ".invitee",
150
122
  "InviteeTypedDict": ".invitee",
151
123
  "ListMeetingsMeetingType": ".listmeetingsop",
@@ -164,9 +136,6 @@ _dynamic_imports: dict[str, str] = {
164
136
  "MeetingListResponseTypedDict": ".meetinglistresponse",
165
137
  "MeetingSummary": ".meetingsummary",
166
138
  "MeetingSummaryTypedDict": ".meetingsummary",
167
- "GrantType": ".schemetokenrequeststandalone",
168
- "SchemeTokenRequestStandalone": ".schemetokenrequeststandalone",
169
- "SchemeTokenRequestStandaloneTypedDict": ".schemetokenrequeststandalone",
170
139
  "Security": ".security",
171
140
  "SecurityTypedDict": ".security",
172
141
  "Team": ".team",
@@ -4,7 +4,14 @@ from __future__ import annotations
4
4
  from .crmcompanymatch import CRMCompanyMatch, CRMCompanyMatchTypedDict
5
5
  from .crmcontactmatch import CRMContactMatch, CRMContactMatchTypedDict
6
6
  from .crmdealmatch import CRMDealMatch, CRMDealMatchTypedDict
7
- from fathom_python.types import BaseModel
7
+ from fathom_python.types import (
8
+ BaseModel,
9
+ Nullable,
10
+ OptionalNullable,
11
+ UNSET,
12
+ UNSET_SENTINEL,
13
+ )
14
+ from pydantic import model_serializer
8
15
  from typing import List, Optional
9
16
  from typing_extensions import NotRequired, TypedDict
10
17
 
@@ -18,7 +25,7 @@ class CRMMatchesTypedDict(TypedDict):
18
25
  contacts: NotRequired[List[CRMContactMatchTypedDict]]
19
26
  companies: NotRequired[List[CRMCompanyMatchTypedDict]]
20
27
  deals: NotRequired[List[CRMDealMatchTypedDict]]
21
- error: NotRequired[str]
28
+ error: NotRequired[Nullable[str]]
22
29
 
23
30
 
24
31
  class CRMMatches(BaseModel):
@@ -33,4 +40,34 @@ class CRMMatches(BaseModel):
33
40
 
34
41
  deals: Optional[List[CRMDealMatch]] = None
35
42
 
36
- error: Optional[str] = None
43
+ error: OptionalNullable[str] = UNSET
44
+
45
+ @model_serializer(mode="wrap")
46
+ def serialize_model(self, handler):
47
+ optional_fields = ["contacts", "companies", "deals", "error"]
48
+ nullable_fields = ["error"]
49
+ null_default_fields = []
50
+
51
+ serialized = handler(self)
52
+
53
+ m = {}
54
+
55
+ for n, f in type(self).model_fields.items():
56
+ k = f.alias or n
57
+ val = serialized.get(k)
58
+ serialized.pop(k, None)
59
+
60
+ optional_nullable = k in optional_fields and k in nullable_fields
61
+ is_set = (
62
+ self.__pydantic_fields_set__.intersection({n})
63
+ or k in null_default_fields
64
+ ) # pylint: disable=no-member
65
+
66
+ if val is not None and val != UNSET_SENTINEL:
67
+ m[k] = val
68
+ elif val != UNSET_SENTINEL and (
69
+ not k in optional_fields or (optional_nullable and is_set)
70
+ ):
71
+ m[k] = val
72
+
73
+ return m
@@ -17,7 +17,7 @@ from fathom_python.types import (
17
17
  UNSET_SENTINEL,
18
18
  )
19
19
  from pydantic import model_serializer
20
- from typing import List, Optional
20
+ from typing import List
21
21
  from typing_extensions import NotRequired, TypedDict
22
22
 
23
23
 
@@ -42,7 +42,7 @@ class MeetingTypedDict(TypedDict):
42
42
  calendar_invitees: List[InviteeTypedDict]
43
43
  recorded_by: FathomUserTypedDict
44
44
  transcript: NotRequired[Nullable[List[TranscriptItemTypedDict]]]
45
- default_summary: NotRequired[MeetingSummaryTypedDict]
45
+ default_summary: NotRequired[Nullable[MeetingSummaryTypedDict]]
46
46
  action_items: NotRequired[Nullable[List[ActionItemTypedDict]]]
47
47
  crm_matches: NotRequired[Nullable[CRMMatchesTypedDict]]
48
48
  r"""CRM data linked to the meeting. Only returns data from your or your team's linked CRM.
@@ -81,7 +81,7 @@ class Meeting(BaseModel):
81
81
 
82
82
  transcript: OptionalNullable[List[TranscriptItem]] = UNSET
83
83
 
84
- default_summary: Optional[MeetingSummary] = None
84
+ default_summary: OptionalNullable[MeetingSummary] = UNSET
85
85
 
86
86
  action_items: OptionalNullable[List[ActionItem]] = UNSET
87
87
 
@@ -99,7 +99,12 @@ class Meeting(BaseModel):
99
99
  "action_items",
100
100
  "crm_matches",
101
101
  ]
102
- nullable_fields = ["transcript", "action_items", "crm_matches"]
102
+ nullable_fields = [
103
+ "transcript",
104
+ "default_summary",
105
+ "action_items",
106
+ "crm_matches",
107
+ ]
103
108
  null_default_fields = []
104
109
 
105
110
  serialized = handler(self)
@@ -1,10 +1,6 @@
1
1
  """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
2
 
3
3
  from __future__ import annotations
4
- from .schemetokenrequeststandalone import (
5
- SchemeTokenRequestStandalone,
6
- SchemeTokenRequestStandaloneTypedDict,
7
- )
8
4
  from fathom_python.types import BaseModel
9
5
  from fathom_python.utils import FieldMetadata, SecurityMetadata
10
6
  from typing import Optional
@@ -14,7 +10,6 @@ from typing_extensions import Annotated, NotRequired, TypedDict
14
10
  class SecurityTypedDict(TypedDict):
15
11
  api_key_auth: NotRequired[str]
16
12
  bearer_auth: NotRequired[str]
17
- token_request_standalone: NotRequired[SchemeTokenRequestStandaloneTypedDict]
18
13
 
19
14
 
20
15
  class Security(BaseModel):
@@ -41,12 +36,3 @@ class Security(BaseModel):
41
36
  )
42
37
  ),
43
38
  ] = None
44
-
45
- token_request_standalone: Annotated[
46
- Optional[SchemeTokenRequestStandalone],
47
- FieldMetadata(
48
- security=SecurityMetadata(
49
- scheme=True, scheme_type="http", sub_type="custom"
50
- )
51
- ),
52
- ] = None
@@ -9,9 +9,15 @@ from typing_extensions import NotRequired, TypedDict
9
9
  class TranscriptItemSpeakerTypedDict(TypedDict):
10
10
  display_name: str
11
11
  matched_calendar_invitee_email: NotRequired[str]
12
+ r"""**Coming soon!**
13
+
14
+ """
12
15
 
13
16
 
14
17
  class TranscriptItemSpeaker(BaseModel):
15
18
  display_name: str
16
19
 
17
20
  matched_calendar_invitee_email: Optional[str] = None
21
+ r"""**Coming soon!**
22
+
23
+ """
fathom_python/sdk.py CHANGED
@@ -1233,201 +1233,3 @@ class Fathom(BaseSDK):
1233
1233
  raise errors.APIError("API error occurred", http_res, http_res_text)
1234
1234
 
1235
1235
  raise errors.APIError("Unexpected response received", http_res)
1236
-
1237
- def get_token(
1238
- self,
1239
- *,
1240
- grant_type: models.GetTokenGrantType,
1241
- code: str,
1242
- redirect_uri: str,
1243
- client_id: str,
1244
- client_secret: str,
1245
- refresh_token: Optional[str] = None,
1246
- retries: OptionalNullable[utils.RetryConfig] = UNSET,
1247
- server_url: Optional[str] = None,
1248
- timeout_ms: Optional[int] = None,
1249
- http_headers: Optional[Mapping[str, str]] = None,
1250
- ) -> models.GetTokenResponse:
1251
- r"""Token endpoint for exchanging an authorization code or refreshing an access token
1252
-
1253
- :param grant_type:
1254
- :param code: authorization code received from `/authorize`
1255
- :param redirect_uri: must match the redirect URI used in `/authorize`
1256
- :param client_id:
1257
- :param client_secret:
1258
- :param refresh_token: refresh token issued previously
1259
- :param retries: Override the default retry configuration for this method
1260
- :param server_url: Override the default server URL for this method
1261
- :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
1262
- :param http_headers: Additional headers to set or replace on requests.
1263
- """
1264
- base_url = None
1265
- url_variables = None
1266
- if timeout_ms is None:
1267
- timeout_ms = self.sdk_configuration.timeout_ms
1268
-
1269
- if server_url is not None:
1270
- base_url = server_url
1271
- else:
1272
- base_url = models.GET_TOKEN_OP_SERVERS[0]
1273
-
1274
- request = models.GetTokenRequest(
1275
- grant_type=grant_type,
1276
- code=code,
1277
- redirect_uri=redirect_uri,
1278
- client_id=client_id,
1279
- client_secret=client_secret,
1280
- refresh_token=refresh_token,
1281
- )
1282
-
1283
- req = self._build_request(
1284
- method="POST",
1285
- path="/oauth2/token",
1286
- base_url=base_url,
1287
- url_variables=url_variables,
1288
- request=request,
1289
- request_body_required=True,
1290
- request_has_path_params=False,
1291
- request_has_query_params=True,
1292
- user_agent_header="user-agent",
1293
- accept_header_value="application/json",
1294
- http_headers=http_headers,
1295
- security=self.sdk_configuration.security,
1296
- get_serialized_body=lambda: utils.serialize_request_body(
1297
- request, False, False, "form", models.GetTokenRequest
1298
- ),
1299
- timeout_ms=timeout_ms,
1300
- )
1301
-
1302
- if retries == UNSET:
1303
- if self.sdk_configuration.retry_config is not UNSET:
1304
- retries = self.sdk_configuration.retry_config
1305
-
1306
- retry_config = None
1307
- if isinstance(retries, utils.RetryConfig):
1308
- retry_config = (retries, ["429", "500", "502", "503", "504"])
1309
-
1310
- http_res = self.do_request(
1311
- hook_ctx=HookContext(
1312
- config=self.sdk_configuration,
1313
- base_url=base_url or "",
1314
- operation_id="getToken",
1315
- oauth2_scopes=[],
1316
- security_source=get_security_from_env(
1317
- self.sdk_configuration.security, models.Security
1318
- ),
1319
- ),
1320
- request=req,
1321
- error_status_codes=["400", "4XX", "5XX"],
1322
- retry_config=retry_config,
1323
- )
1324
-
1325
- if utils.match_response(http_res, "200", "application/json"):
1326
- return unmarshal_json_response(models.GetTokenResponse, http_res)
1327
- if utils.match_response(http_res, ["400", "4XX"], "*"):
1328
- http_res_text = utils.stream_to_text(http_res)
1329
- raise errors.APIError("API error occurred", http_res, http_res_text)
1330
- if utils.match_response(http_res, "5XX", "*"):
1331
- http_res_text = utils.stream_to_text(http_res)
1332
- raise errors.APIError("API error occurred", http_res, http_res_text)
1333
-
1334
- raise errors.APIError("Unexpected response received", http_res)
1335
-
1336
- async def get_token_async(
1337
- self,
1338
- *,
1339
- grant_type: models.GetTokenGrantType,
1340
- code: str,
1341
- redirect_uri: str,
1342
- client_id: str,
1343
- client_secret: str,
1344
- refresh_token: Optional[str] = None,
1345
- retries: OptionalNullable[utils.RetryConfig] = UNSET,
1346
- server_url: Optional[str] = None,
1347
- timeout_ms: Optional[int] = None,
1348
- http_headers: Optional[Mapping[str, str]] = None,
1349
- ) -> models.GetTokenResponse:
1350
- r"""Token endpoint for exchanging an authorization code or refreshing an access token
1351
-
1352
- :param grant_type:
1353
- :param code: authorization code received from `/authorize`
1354
- :param redirect_uri: must match the redirect URI used in `/authorize`
1355
- :param client_id:
1356
- :param client_secret:
1357
- :param refresh_token: refresh token issued previously
1358
- :param retries: Override the default retry configuration for this method
1359
- :param server_url: Override the default server URL for this method
1360
- :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
1361
- :param http_headers: Additional headers to set or replace on requests.
1362
- """
1363
- base_url = None
1364
- url_variables = None
1365
- if timeout_ms is None:
1366
- timeout_ms = self.sdk_configuration.timeout_ms
1367
-
1368
- if server_url is not None:
1369
- base_url = server_url
1370
- else:
1371
- base_url = models.GET_TOKEN_OP_SERVERS[0]
1372
-
1373
- request = models.GetTokenRequest(
1374
- grant_type=grant_type,
1375
- code=code,
1376
- redirect_uri=redirect_uri,
1377
- client_id=client_id,
1378
- client_secret=client_secret,
1379
- refresh_token=refresh_token,
1380
- )
1381
-
1382
- req = self._build_request_async(
1383
- method="POST",
1384
- path="/oauth2/token",
1385
- base_url=base_url,
1386
- url_variables=url_variables,
1387
- request=request,
1388
- request_body_required=True,
1389
- request_has_path_params=False,
1390
- request_has_query_params=True,
1391
- user_agent_header="user-agent",
1392
- accept_header_value="application/json",
1393
- http_headers=http_headers,
1394
- security=self.sdk_configuration.security,
1395
- get_serialized_body=lambda: utils.serialize_request_body(
1396
- request, False, False, "form", models.GetTokenRequest
1397
- ),
1398
- timeout_ms=timeout_ms,
1399
- )
1400
-
1401
- if retries == UNSET:
1402
- if self.sdk_configuration.retry_config is not UNSET:
1403
- retries = self.sdk_configuration.retry_config
1404
-
1405
- retry_config = None
1406
- if isinstance(retries, utils.RetryConfig):
1407
- retry_config = (retries, ["429", "500", "502", "503", "504"])
1408
-
1409
- http_res = await self.do_request_async(
1410
- hook_ctx=HookContext(
1411
- config=self.sdk_configuration,
1412
- base_url=base_url or "",
1413
- operation_id="getToken",
1414
- oauth2_scopes=[],
1415
- security_source=get_security_from_env(
1416
- self.sdk_configuration.security, models.Security
1417
- ),
1418
- ),
1419
- request=req,
1420
- error_status_codes=["400", "4XX", "5XX"],
1421
- retry_config=retry_config,
1422
- )
1423
-
1424
- if utils.match_response(http_res, "200", "application/json"):
1425
- return unmarshal_json_response(models.GetTokenResponse, http_res)
1426
- if utils.match_response(http_res, ["400", "4XX"], "*"):
1427
- http_res_text = await utils.stream_to_text_async(http_res)
1428
- raise errors.APIError("API error occurred", http_res, http_res_text)
1429
- if utils.match_response(http_res, "5XX", "*"):
1430
- http_res_text = await utils.stream_to_text_async(http_res)
1431
- raise errors.APIError("API error occurred", http_res, http_res_text)
1432
-
1433
- raise errors.APIError("Unexpected response received", http_res)
@@ -70,31 +70,6 @@ def get_security_from_env(security: Any, security_class: Any) -> Optional[BaseMo
70
70
  if os.getenv("FATHOM_BEARER_AUTH"):
71
71
  security_dict["bearer_auth"] = os.getenv("FATHOM_BEARER_AUTH")
72
72
 
73
- if os.getenv("FATHOM_GRANT_TYPE"):
74
- security_dict.setdefault("token_request_standalone", {})["grant_type"] = (
75
- os.getenv("FATHOM_GRANT_TYPE")
76
- )
77
-
78
- if os.getenv("FATHOM_CLIENT_ID"):
79
- security_dict.setdefault("token_request_standalone", {})["client_id"] = (
80
- os.getenv("FATHOM_CLIENT_ID")
81
- )
82
-
83
- if os.getenv("FATHOM_CLIENT_SECRET"):
84
- security_dict.setdefault("token_request_standalone", {})["client_secret"] = (
85
- os.getenv("FATHOM_CLIENT_SECRET")
86
- )
87
-
88
- if os.getenv("FATHOM_REDIRECT_URI"):
89
- security_dict.setdefault("token_request_standalone", {})["redirect_uri"] = (
90
- os.getenv("FATHOM_REDIRECT_URI")
91
- )
92
-
93
- if os.getenv("FATHOM_CODE"):
94
- security_dict.setdefault("token_request_standalone", {})["code"] = os.getenv(
95
- "FATHOM_CODE"
96
- )
97
-
98
73
  return security_class(**security_dict) if security_dict else None
99
74
 
100
75
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: fathom-python
3
- Version: 0.0.30
3
+ Version: 0.0.31
4
4
  Summary: Python Client SDK Generated by Speakeasy.
5
5
  Author: Speakeasy
6
6
  Requires-Python: >=3.9.2
@@ -30,21 +30,22 @@ optionally receive webhooks when content from a new meeting is ready.
30
30
  <!-- Start Table of Contents [toc] -->
31
31
  ## Table of Contents
32
32
  <!-- $toc-max-depth=2 -->
33
- * [fathom-python](#fathom-python)
34
- * [SDK Installation](#sdk-installation)
35
- * [IDE Support](#ide-support)
36
- * [SDK Example Usage](#sdk-example-usage)
37
- * [Authentication](#authentication)
38
- * [Available Resources and Operations](#available-resources-and-operations)
39
- * [Pagination](#pagination)
40
- * [Retries](#retries)
41
- * [Error Handling](#error-handling)
42
- * [Server Selection](#server-selection)
43
- * [Custom HTTP Client](#custom-http-client)
44
- * [Resource Management](#resource-management)
45
- * [Debugging](#debugging)
46
- * [Development](#development)
47
- * [Maturity](#maturity)
33
+ * fathom-api
34
+ * SDK Installation
35
+ * Requirements
36
+ * SDK Example Usage
37
+ * Authentication
38
+ * Available Resources and Operations
39
+ * Standalone functions
40
+ * Pagination
41
+ * Retries
42
+ * Error Handling
43
+ * Custom HTTP Client
44
+ * Resource Management
45
+ * Debugging
46
+ * Development
47
+ * Maturity
48
+ * Custom HTTP Client
48
49
 
49
50
  <!-- End Table of Contents [toc] -->
50
51
 
@@ -200,11 +201,10 @@ asyncio.run(main())
200
201
 
201
202
  This SDK supports the following security schemes globally:
202
203
 
203
- | Name | Type | Scheme | Environment Variable |
204
- | -------------------------- | ------ | ----------- | --------------------------------- |
205
- | `api_key_auth` | apiKey | API key | `FATHOM_API_KEY_AUTH` |
206
- | `bearer_auth` | http | HTTP Bearer | `FATHOM_BEARER_AUTH` |
207
- | `token_request_standalone` | http | Custom HTTP | `FATHOM_TOKEN_REQUEST_STANDALONE` |
204
+ | Name | Type | Scheme | Environment Variable |
205
+ | -------------- | ------ | ----------- | --------------------- |
206
+ | `api_key_auth` | apiKey | API key | `FATHOM_API_KEY_AUTH` |
207
+ | `bearer_auth` | http | HTTP Bearer | `FATHOM_BEARER_AUTH` |
208
208
 
209
209
  You can set the security parameters through the `security` optional parameter when initializing the SDK client instance. The selected scheme will be used by default to authenticate with the API for all operations that support it. For example:
210
210
  ```python
@@ -253,7 +253,6 @@ with Fathom(
253
253
  * [list_team_members](docs/sdks/fathom/README.md#list_team_members) - List team members
254
254
  * [create_webhook](docs/sdks/fathom/README.md#create_webhook) - Create a webhook
255
255
  * [delete_webhook](docs/sdks/fathom/README.md#delete_webhook) - Delete a webhook
256
- * [get_token](docs/sdks/fathom/README.md#get_token) - Token endpoint for exchanging an authorization code or refreshing an access token
257
256
 
258
257
  </details>
259
258
  <!-- End Available Resources and Operations [operations] -->
@@ -490,27 +489,6 @@ with Fathom(
490
489
 
491
490
  res = res.next()
492
491
 
493
- ```
494
-
495
- ### Override Server URL Per-Operation
496
-
497
- The server URL can also be overridden on a per-operation basis, provided a server list was specified for the operation. For example:
498
- ```python
499
- from fathom_python import Fathom, models
500
- import os
501
-
502
-
503
- with Fathom(
504
- security=models.Security(
505
- api_key_auth=os.getenv("FATHOM_API_KEY_AUTH", ""),
506
- ),
507
- ) as fathom:
508
-
509
- res = fathom.get_token(grant_type=models.GetTokenGrantType.REFRESH_TOKEN, code="<value>", redirect_uri="https://aware-honesty.info", client_id="<id>", client_secret="<value>", server_url="https://fathom.video/external/v1")
510
-
511
- # Handle response
512
- print(res)
513
-
514
492
  ```
515
493
  <!-- End Server Selection [server] -->
516
494
 
@@ -3,7 +3,7 @@ fathom_python/_hooks/__init__.py,sha256=9_7W5jAYw8rcO8Kfc-Ty-lB82BHfksAJJpVFb_Ue
3
3
  fathom_python/_hooks/registration.py,sha256=1QZB41w6If7I9dXiOSQx6dhSc6BPWrnI5Q5bMOr4iVA,624
4
4
  fathom_python/_hooks/sdkhooks.py,sha256=SyxWCUZakr1ZlORVhbgZJ-xM5W4QvTTS4Mymtte2LrI,2530
5
5
  fathom_python/_hooks/types.py,sha256=OOkf6lkat8zumtftMupq5qK6pigExGTdcBF38RyT_gU,2992
6
- fathom_python/_version.py,sha256=xO1-qxoFPikknGRcf3XzAwMycBrqZ4bgjgs2-3Ie86o,470
6
+ fathom_python/_version.py,sha256=SSGDVArSMSi7xgfMx__aZLRgPIvNSz52c182t0NWoqM,470
7
7
  fathom_python/basesdk.py,sha256=9qN6Bu3fwQg-SBOTMoF2vJRRKZc2MNJxgRRk6dpqM9Q,11919
8
8
  fathom_python/errors/__init__.py,sha256=aoR8B-AGozzmcw2Ke7VFzd_rwuYfHDXP46FR2mOPTIw,1408
9
9
  fathom_python/errors/apierror.py,sha256=R3kCxpU61dTgCgfMRAClKc1rQo_qYAQlzEfNlrKdx_A,1225
@@ -11,35 +11,33 @@ fathom_python/errors/fathomerror.py,sha256=jduH6kU8A6QXhH-OyYIaXDWcOXayfcJ1kGX1E
11
11
  fathom_python/errors/no_response_error.py,sha256=FQG44Lq6uF7uUlzbUYfM3dJon6sbqXzJ0Ri6YrDdsEs,380
12
12
  fathom_python/errors/responsevalidationerror.py,sha256=wL-ySlcDiysdVUiWJJA9W1YMdKuFc04EGPAQaJlY-_o,692
13
13
  fathom_python/httpclient.py,sha256=Eu73urOAiZQtdUIyOUnPccxCiBbWEKrXG-JrRG3SLM4,3946
14
- fathom_python/models/__init__.py,sha256=pDfovy85TC4vUiKVqZcISiILS6HSn1uC6mv23DC9YWE,7597
14
+ fathom_python/models/__init__.py,sha256=8kW-0O47Ao9-BBBUbQdLrAexkyZZzYPgJu-8a7JDBeM,6511
15
15
  fathom_python/models/actionitem.py,sha256=Ab36zDi8torOZAMXyTfVlcbayc-m1114XDLVBMJSljE,849
16
16
  fathom_python/models/assignee.py,sha256=q7FZ4ai6dKZPBTP9cEVoYgwHyCWLkxjaTSy-9lu617U,1384
17
17
  fathom_python/models/createwebhookop.py,sha256=Uel0Wbs49TQIqayPA6pUCDp7Xo1kvP06hGe4h5aE3A4,1336
18
18
  fathom_python/models/crmcompanymatch.py,sha256=5Ksn1RxvOD4QaPdTMSsZUj2W1JD0zl_Q8fGA80ORL14,340
19
19
  fathom_python/models/crmcontactmatch.py,sha256=eULhxxw54i9moVGJG5MbS8Ync0mw0-GmqiRO1mXvR2E,371
20
20
  fathom_python/models/crmdealmatch.py,sha256=n8PTc9ceEaDS4wG2KGz13VUm1g525OhDU5mLv1hGru8,439
21
- fathom_python/models/crmmatches.py,sha256=hlo4e013617agkZGkXLxJeqiU-Vo5cEx8uz_6O3Frng,1274
21
+ fathom_python/models/crmmatches.py,sha256=NyvFBbCFg5xbV-9sg-GBO7edTThXZyOZayuELnCRvV0,2347
22
22
  fathom_python/models/deletewebhookop.py,sha256=MWARoymWlECo7vcOZn6YY9JsE0T5SQZvDYfs_-3yMYc,564
23
23
  fathom_python/models/fathomuser.py,sha256=65woueqr3ivmO5X8jni59-vEZ8g0MESNy9Pv_GjkN2U,1331
24
- fathom_python/models/gettokenop.py,sha256=TdOzo_0WwQqstWQPUkmMRiSCud2oE2ighT5-M5HgyK0,1994
25
24
  fathom_python/models/invitee.py,sha256=JKKZ-x2Mvm0d9pGX9If5WW88Vcavm5opObqgcmaTI78,1689
26
25
  fathom_python/models/listmeetingsop.py,sha256=vTaGNNm5D_phZRbKgzhKgaeuYp4D06UN6zr7ePEeDm0,5898
27
26
  fathom_python/models/listteammembersop.py,sha256=pOF9Y-5_e80sw6Eh-Mkr2DzFkIE4Y-wOjTyOI9W0_z8,868
28
27
  fathom_python/models/listteamsop.py,sha256=JyNw9GHJIp5cOqU9pitgr_iDz4Uc9Dnr7Ju2JBdVfpk,624
29
- fathom_python/models/meeting.py,sha256=Pnw3FJjqVJnTwgRmHlOerRV58Zhmagi7xusRB3hMfJI,3628
28
+ fathom_python/models/meeting.py,sha256=ce1giBFYDX2NeXZ5164l0KfFFDYz3dr79CyGpWjKAA4,3715
30
29
  fathom_python/models/meetinglistresponse.py,sha256=DWgl0mQn76jXk91xK9syGFaxw_g-7zUOUBGscLQSXNg,1501
31
30
  fathom_python/models/meetingsummary.py,sha256=AKmIdH7fci9FSEyHFEIoA0HnVvwhLURXNR2ZjexA1BY,1485
32
- fathom_python/models/schemetokenrequeststandalone.py,sha256=zv2eWKsmFyl4TmP9QFb6rp6XWOv1Wu45-ccfhLphpLE,1242
33
- fathom_python/models/security.py,sha256=11TuLaEmqCcibbIvjGuFOeDFttIDQoVOhPRImopsIOQ,1493
31
+ fathom_python/models/security.py,sha256=hcxt1Cf-Bg5WplpU91H68EyvsxiMISup1sCJgilsjxQ,1032
34
32
  fathom_python/models/team.py,sha256=-bOFAH_rcYvRQU10bd9KUJSbV_3V3VrFQCIwrXH6o9U,358
35
33
  fathom_python/models/teamlistresponse.py,sha256=7Sxs2CgfkOY1ROji1mJ6Wzpro54pL0arNoxo0ClqYvk,1451
36
34
  fathom_python/models/teammember.py,sha256=Zrq8DeGXNB_x6QlumTdWTwYtStqkuypfC04N3DhSf2Y,401
37
35
  fathom_python/models/teammemberlistresponse.py,sha256=fItFDZd7RtXPHs-jfGJad8tuBoulg0600ciSsWPz-ug,1493
38
36
  fathom_python/models/transcriptitem.py,sha256=pGg4S32z86vBu0eaSLK1Tf1TvvvTZj10nJSRz8vW3JY,645
39
- fathom_python/models/transcriptitemspeaker.py,sha256=dYO_A50vR5ta1tG3BoETzg3me8BYDi1QHEF7B5rhkn4,479
37
+ fathom_python/models/transcriptitemspeaker.py,sha256=GFF9PKJtf0aHaB8x8dievopoT43JUIcOAj70oFi5ilE,547
40
38
  fathom_python/models/webhook.py,sha256=3LA4QgRAgkyQPcKXrOFWegn_StWPkDaj3MmRLjlpr5g,922
41
39
  fathom_python/py.typed,sha256=zrp19r0G21lr2yRiMC0f8MFkQFGj9wMpSbboePMg8KM,59
42
- fathom_python/sdk.py,sha256=27gmmJ4HJGeUTmllX2NzjAOhy3sj-BBrmfajycD4oKk,58510
40
+ fathom_python/sdk.py,sha256=rXOV_XS34EzB7BcUGyvUBO92JGg2jo1tiWjRT4foXQk,50606
43
41
  fathom_python/sdkconfiguration.py,sha256=s06HLCZA48IdYWZd8E9q8AK7WazaxybG7ZdqoWF-e7s,1586
44
42
  fathom_python/types/__init__.py,sha256=RArOwSgeeTIva6h-4ttjXwMUeCkz10nAFBL9D-QljI4,377
45
43
  fathom_python/types/basemodel.py,sha256=L79WXvTECbSqaJzs8D3ud_KdIWkU7Cx2wbohDAktE9E,1127
@@ -55,11 +53,11 @@ fathom_python/utils/metadata.py,sha256=Per2KFXXOqOtoUWXrlIfjrSrBg199KrRW0nKQDgHI
55
53
  fathom_python/utils/queryparams.py,sha256=MTK6inMS1_WwjmMJEJmAn67tSHHJyarpdGRlorRHEtI,5899
56
54
  fathom_python/utils/requestbodies.py,sha256=ySjEyjcLi731LNUahWvLOrES2HihuA8VrOJx4eQ7Qzg,2101
57
55
  fathom_python/utils/retries.py,sha256=6yhfZifqIat9i76xF0lTR2jLj1IN9BNGyqqxATlEFPU,6348
58
- fathom_python/utils/security.py,sha256=iYW_QPGxULeMy89KumYboKMJ8Yqg11YY9DR3trZKJz4,7005
56
+ fathom_python/utils/security.py,sha256=ObqK8V4EbMaHb9Gc3MpVs8mEY3F8I6H5Y_EsQf7lS0k,6133
59
57
  fathom_python/utils/serializers.py,sha256=Hndks5M_rJXVub_N5lu0gKZQUoEmWrn6PN7R-0HwvOE,5999
60
58
  fathom_python/utils/unmarshal_json_response.py,sha256=M1-rdgF0E7flFEKlOODnhlvvrvpdnD-ZF_E31FgEWVA,589
61
59
  fathom_python/utils/url.py,sha256=BgGPgcTA6MRK4bF8fjP2dUopN3NzEzxWMXPBVg8NQUA,5254
62
60
  fathom_python/utils/values.py,sha256=CcaCXEa3xHhkUDROyXZocN8f0bdITftv9Y0P9lTf0YM,3517
63
- fathom_python-0.0.30.dist-info/METADATA,sha256=MOzsVmcACKdE07k8nuAi-BUDNQTw_YV_coluKV8PDMw,20982
64
- fathom_python-0.0.30.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
65
- fathom_python-0.0.30.dist-info/RECORD,,
61
+ fathom_python-0.0.31.dist-info/METADATA,sha256=1Xo7kdLeOQOJOPxQjF_X7GLyS76g_afudQcHBOIQkxM,19764
62
+ fathom_python-0.0.31.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
63
+ fathom_python-0.0.31.dist-info/RECORD,,
@@ -1,74 +0,0 @@
1
- """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
-
3
- from __future__ import annotations
4
- from enum import Enum
5
- from fathom_python.types import BaseModel
6
- from fathom_python.utils import FieldMetadata
7
- from typing import Optional
8
- from typing_extensions import Annotated, NotRequired, TypedDict
9
-
10
-
11
- GET_TOKEN_OP_SERVERS = [
12
- # Auth server
13
- "https://fathom.video/external/v1",
14
- ]
15
-
16
-
17
- class GetTokenGrantType(str, Enum):
18
- AUTHORIZATION_CODE = "authorization_code"
19
- REFRESH_TOKEN = "refresh_token"
20
-
21
-
22
- class GetTokenRequestTypedDict(TypedDict):
23
- grant_type: GetTokenGrantType
24
- code: str
25
- r"""authorization code received from `/authorize`"""
26
- redirect_uri: str
27
- r"""must match the redirect URI used in `/authorize`"""
28
- client_id: str
29
- client_secret: str
30
- refresh_token: NotRequired[str]
31
- r"""refresh token issued previously"""
32
-
33
-
34
- class GetTokenRequest(BaseModel):
35
- grant_type: Annotated[GetTokenGrantType, FieldMetadata(form=True)]
36
-
37
- code: Annotated[str, FieldMetadata(form=True)]
38
- r"""authorization code received from `/authorize`"""
39
-
40
- redirect_uri: Annotated[str, FieldMetadata(form=True)]
41
- r"""must match the redirect URI used in `/authorize`"""
42
-
43
- client_id: Annotated[str, FieldMetadata(form=True)]
44
-
45
- client_secret: Annotated[str, FieldMetadata(form=True)]
46
-
47
- refresh_token: Annotated[Optional[str], FieldMetadata(form=True)] = None
48
- r"""refresh token issued previously"""
49
-
50
-
51
- class GetTokenResponseTypedDict(TypedDict):
52
- r"""Access token (and optionally refresh token) response"""
53
-
54
- access_token: str
55
- expires_in: int
56
- r"""seconds until expiration"""
57
- refresh_token: str
58
- token_type: NotRequired[str]
59
- scope: NotRequired[str]
60
-
61
-
62
- class GetTokenResponse(BaseModel):
63
- r"""Access token (and optionally refresh token) response"""
64
-
65
- access_token: str
66
-
67
- expires_in: int
68
- r"""seconds until expiration"""
69
-
70
- refresh_token: str
71
-
72
- token_type: Optional[str] = None
73
-
74
- scope: Optional[str] = None
@@ -1,42 +0,0 @@
1
- """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
-
3
- from __future__ import annotations
4
- from enum import Enum
5
- from fathom_python.types import BaseModel
6
- from fathom_python.utils import FieldMetadata, SecurityMetadata
7
- from typing import Optional
8
- from typing_extensions import Annotated, NotRequired, TypedDict
9
-
10
-
11
- class GrantType(str, Enum):
12
- AUTHORIZATION_CODE = "authorization_code"
13
- REFRESH_TOKEN = "refresh_token"
14
-
15
-
16
- class SchemeTokenRequestStandaloneTypedDict(TypedDict):
17
- client_id: str
18
- client_secret: str
19
- redirect_uri: str
20
- code: str
21
- grant_type: NotRequired[GrantType]
22
-
23
-
24
- class SchemeTokenRequestStandalone(BaseModel):
25
- client_id: Annotated[
26
- str, FieldMetadata(security=SecurityMetadata(field_name="client_id"))
27
- ]
28
-
29
- client_secret: Annotated[
30
- str, FieldMetadata(security=SecurityMetadata(field_name="client_secret"))
31
- ]
32
-
33
- redirect_uri: Annotated[
34
- str, FieldMetadata(security=SecurityMetadata(field_name="redirect_uri"))
35
- ]
36
-
37
- code: Annotated[str, FieldMetadata(security=SecurityMetadata(field_name="code"))]
38
-
39
- grant_type: Annotated[
40
- Optional[GrantType],
41
- FieldMetadata(security=SecurityMetadata(field_name="grant_type")),
42
- ] = None