fathom-python 0.0.31__py3-none-any.whl → 0.0.33__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 +3 -3
- fathom_python/basesdk.py +11 -1
- fathom_python/errors/__init__.py +18 -5
- fathom_python/errors/apierror.py +2 -0
- fathom_python/errors/fathomerror.py +11 -7
- fathom_python/errors/no_response_error.py +5 -1
- fathom_python/errors/responsevalidationerror.py +2 -0
- fathom_python/models/__init__.py +96 -11
- fathom_python/models/callbackresponse.py +13 -0
- fathom_python/models/createwebhookop.py +26 -1
- fathom_python/models/fathomuser.py +3 -0
- fathom_python/models/getrecordingsummaryop.py +82 -0
- fathom_python/models/getrecordingtranscriptop.py +50 -0
- fathom_python/models/invitee.py +9 -1
- fathom_python/models/listmeetingsop.py +37 -10
- fathom_python/models/listteammembersop.py +15 -1
- fathom_python/models/listteamsop.py +12 -1
- fathom_python/models/meeting.py +10 -5
- fathom_python/models/webhook.py +12 -0
- fathom_python/sdk.py +481 -20
- fathom_python/utils/__init__.py +18 -5
- fathom_python/utils/eventstreaming.py +10 -0
- {fathom_python-0.0.31.dist-info → fathom_python-0.0.33.dist-info}/METADATA +21 -35
- {fathom_python-0.0.31.dist-info → fathom_python-0.0.33.dist-info}/RECORD +25 -22
- {fathom_python-0.0.31.dist-info → fathom_python-0.0.33.dist-info}/WHEEL +0 -0
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.
|
|
6
|
+
__version__: str = "0.0.33"
|
|
7
7
|
__openapi_doc_version__: str = "1.0.0"
|
|
8
|
-
__gen_version__: str = "2.
|
|
9
|
-
__user_agent__: str = "speakeasy-sdk/python 0.0.
|
|
8
|
+
__gen_version__: str = "2.698.4"
|
|
9
|
+
__user_agent__: str = "speakeasy-sdk/python 0.0.33 2.698.4 1.0.0 fathom-python"
|
|
10
10
|
|
|
11
11
|
try:
|
|
12
12
|
if __package__ is not None:
|
fathom_python/basesdk.py
CHANGED
|
@@ -15,9 +15,19 @@ from urllib.parse import parse_qs, urlparse
|
|
|
15
15
|
|
|
16
16
|
class BaseSDK:
|
|
17
17
|
sdk_configuration: SDKConfiguration
|
|
18
|
+
parent_ref: Optional[object] = None
|
|
19
|
+
"""
|
|
20
|
+
Reference to the root SDK instance, if any. This will prevent it from
|
|
21
|
+
being garbage collected while there are active streams.
|
|
22
|
+
"""
|
|
18
23
|
|
|
19
|
-
def __init__(
|
|
24
|
+
def __init__(
|
|
25
|
+
self,
|
|
26
|
+
sdk_config: SDKConfiguration,
|
|
27
|
+
parent_ref: Optional[object] = None,
|
|
28
|
+
) -> None:
|
|
20
29
|
self.sdk_configuration = sdk_config
|
|
30
|
+
self.parent_ref = parent_ref
|
|
21
31
|
|
|
22
32
|
def _get_url(self, base_url, url_variables):
|
|
23
33
|
sdk_url, sdk_variables = self.sdk_configuration.get_server_details()
|
fathom_python/errors/__init__.py
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
|
2
2
|
|
|
3
|
+
from .fathomerror import FathomError
|
|
3
4
|
from typing import TYPE_CHECKING
|
|
4
5
|
from importlib import import_module
|
|
6
|
+
import builtins
|
|
7
|
+
import sys
|
|
5
8
|
|
|
6
9
|
if TYPE_CHECKING:
|
|
7
10
|
from .apierror import APIError
|
|
8
|
-
from .fathomerror import FathomError
|
|
9
11
|
from .no_response_error import NoResponseError
|
|
10
12
|
from .responsevalidationerror import ResponseValidationError
|
|
11
13
|
|
|
@@ -13,12 +15,23 @@ __all__ = ["APIError", "FathomError", "NoResponseError", "ResponseValidationErro
|
|
|
13
15
|
|
|
14
16
|
_dynamic_imports: dict[str, str] = {
|
|
15
17
|
"APIError": ".apierror",
|
|
16
|
-
"FathomError": ".fathomerror",
|
|
17
18
|
"NoResponseError": ".no_response_error",
|
|
18
19
|
"ResponseValidationError": ".responsevalidationerror",
|
|
19
20
|
}
|
|
20
21
|
|
|
21
22
|
|
|
23
|
+
def dynamic_import(modname, retries=3):
|
|
24
|
+
for attempt in range(retries):
|
|
25
|
+
try:
|
|
26
|
+
return import_module(modname, __package__)
|
|
27
|
+
except KeyError:
|
|
28
|
+
# Clear any half-initialized module and retry
|
|
29
|
+
sys.modules.pop(modname, None)
|
|
30
|
+
if attempt == retries - 1:
|
|
31
|
+
break
|
|
32
|
+
raise KeyError(f"Failed to import module '{modname}' after {retries} attempts")
|
|
33
|
+
|
|
34
|
+
|
|
22
35
|
def __getattr__(attr_name: str) -> object:
|
|
23
36
|
module_name = _dynamic_imports.get(attr_name)
|
|
24
37
|
if module_name is None:
|
|
@@ -27,7 +40,7 @@ def __getattr__(attr_name: str) -> object:
|
|
|
27
40
|
)
|
|
28
41
|
|
|
29
42
|
try:
|
|
30
|
-
module =
|
|
43
|
+
module = dynamic_import(module_name)
|
|
31
44
|
result = getattr(module, attr_name)
|
|
32
45
|
return result
|
|
33
46
|
except ImportError as e:
|
|
@@ -41,5 +54,5 @@ def __getattr__(attr_name: str) -> object:
|
|
|
41
54
|
|
|
42
55
|
|
|
43
56
|
def __dir__():
|
|
44
|
-
lazy_attrs = list(_dynamic_imports.keys())
|
|
45
|
-
return sorted(lazy_attrs)
|
|
57
|
+
lazy_attrs = builtins.list(_dynamic_imports.keys())
|
|
58
|
+
return builtins.sorted(lazy_attrs)
|
fathom_python/errors/apierror.py
CHANGED
|
@@ -2,12 +2,14 @@
|
|
|
2
2
|
|
|
3
3
|
import httpx
|
|
4
4
|
from typing import Optional
|
|
5
|
+
from dataclasses import dataclass
|
|
5
6
|
|
|
6
7
|
from fathom_python.errors import FathomError
|
|
7
8
|
|
|
8
9
|
MAX_MESSAGE_LEN = 10_000
|
|
9
10
|
|
|
10
11
|
|
|
12
|
+
@dataclass(frozen=True)
|
|
11
13
|
class APIError(FathomError):
|
|
12
14
|
"""The fallback error class if no more specific error class is matched."""
|
|
13
15
|
|
|
@@ -2,25 +2,29 @@
|
|
|
2
2
|
|
|
3
3
|
import httpx
|
|
4
4
|
from typing import Optional
|
|
5
|
+
from dataclasses import dataclass, field
|
|
5
6
|
|
|
6
7
|
|
|
8
|
+
@dataclass(frozen=True)
|
|
7
9
|
class FathomError(Exception):
|
|
8
10
|
"""The base class for all HTTP error responses."""
|
|
9
11
|
|
|
10
12
|
message: str
|
|
11
13
|
status_code: int
|
|
12
14
|
body: str
|
|
13
|
-
headers: httpx.Headers
|
|
14
|
-
raw_response: httpx.Response
|
|
15
|
+
headers: httpx.Headers = field(hash=False)
|
|
16
|
+
raw_response: httpx.Response = field(hash=False)
|
|
15
17
|
|
|
16
18
|
def __init__(
|
|
17
19
|
self, message: str, raw_response: httpx.Response, body: Optional[str] = None
|
|
18
20
|
):
|
|
19
|
-
self
|
|
20
|
-
self
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
21
|
+
object.__setattr__(self, "message", message)
|
|
22
|
+
object.__setattr__(self, "status_code", raw_response.status_code)
|
|
23
|
+
object.__setattr__(
|
|
24
|
+
self, "body", body if body is not None else raw_response.text
|
|
25
|
+
)
|
|
26
|
+
object.__setattr__(self, "headers", raw_response.headers)
|
|
27
|
+
object.__setattr__(self, "raw_response", raw_response)
|
|
24
28
|
|
|
25
29
|
def __str__(self):
|
|
26
30
|
return self.message
|
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
|
2
2
|
|
|
3
|
+
from dataclasses import dataclass
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
@dataclass(frozen=True)
|
|
3
7
|
class NoResponseError(Exception):
|
|
4
8
|
"""Error raised when no HTTP response is received from the server."""
|
|
5
9
|
|
|
6
10
|
message: str
|
|
7
11
|
|
|
8
12
|
def __init__(self, message: str = "No response received"):
|
|
9
|
-
self
|
|
13
|
+
object.__setattr__(self, "message", message)
|
|
10
14
|
super().__init__(message)
|
|
11
15
|
|
|
12
16
|
def __str__(self):
|
|
@@ -2,10 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
import httpx
|
|
4
4
|
from typing import Optional
|
|
5
|
+
from dataclasses import dataclass
|
|
5
6
|
|
|
6
7
|
from fathom_python.errors import FathomError
|
|
7
8
|
|
|
8
9
|
|
|
10
|
+
@dataclass(frozen=True)
|
|
9
11
|
class ResponseValidationError(FathomError):
|
|
10
12
|
"""Error raised when there is a type mismatch between the response data and the expected Pydantic model."""
|
|
11
13
|
|
fathom_python/models/__init__.py
CHANGED
|
@@ -2,31 +2,62 @@
|
|
|
2
2
|
|
|
3
3
|
from typing import TYPE_CHECKING
|
|
4
4
|
from importlib import import_module
|
|
5
|
+
import builtins
|
|
6
|
+
import sys
|
|
5
7
|
|
|
6
8
|
if TYPE_CHECKING:
|
|
7
9
|
from .actionitem import ActionItem, ActionItemTypedDict
|
|
8
10
|
from .assignee import Assignee, AssigneeTypedDict
|
|
9
|
-
from .
|
|
11
|
+
from .callbackresponse import CallbackResponse, CallbackResponseTypedDict
|
|
12
|
+
from .createwebhookop import (
|
|
13
|
+
CreateWebhookRequest,
|
|
14
|
+
CreateWebhookRequestTypedDict,
|
|
15
|
+
CreateWebhookTriggeredFor,
|
|
16
|
+
)
|
|
10
17
|
from .crmcompanymatch import CRMCompanyMatch, CRMCompanyMatchTypedDict
|
|
11
18
|
from .crmcontactmatch import CRMContactMatch, CRMContactMatchTypedDict
|
|
12
19
|
from .crmdealmatch import CRMDealMatch, CRMDealMatchTypedDict
|
|
13
20
|
from .crmmatches import CRMMatches, CRMMatchesTypedDict
|
|
14
21
|
from .deletewebhookop import DeleteWebhookRequest, DeleteWebhookRequestTypedDict
|
|
15
22
|
from .fathomuser import FathomUser, FathomUserTypedDict
|
|
23
|
+
from .getrecordingsummaryop import (
|
|
24
|
+
GetRecordingSummaryRequest,
|
|
25
|
+
GetRecordingSummaryRequestTypedDict,
|
|
26
|
+
GetRecordingSummaryResponse,
|
|
27
|
+
GetRecordingSummaryResponseBody,
|
|
28
|
+
GetRecordingSummaryResponseBodyTypedDict,
|
|
29
|
+
GetRecordingSummaryResponseTypedDict,
|
|
30
|
+
)
|
|
31
|
+
from .getrecordingtranscriptop import (
|
|
32
|
+
GetRecordingTranscriptRequest,
|
|
33
|
+
GetRecordingTranscriptRequestTypedDict,
|
|
34
|
+
GetRecordingTranscriptResponse,
|
|
35
|
+
GetRecordingTranscriptResponseBody,
|
|
36
|
+
GetRecordingTranscriptResponseBodyTypedDict,
|
|
37
|
+
GetRecordingTranscriptResponseTypedDict,
|
|
38
|
+
)
|
|
16
39
|
from .invitee import Invitee, InviteeTypedDict
|
|
17
40
|
from .listmeetingsop import (
|
|
18
|
-
|
|
41
|
+
ListMeetingsCalendarInviteesDomainsType,
|
|
19
42
|
ListMeetingsRequest,
|
|
20
43
|
ListMeetingsRequestTypedDict,
|
|
21
44
|
ListMeetingsResponse,
|
|
22
45
|
ListMeetingsResponseTypedDict,
|
|
46
|
+
MeetingType,
|
|
23
47
|
)
|
|
24
48
|
from .listteammembersop import (
|
|
25
49
|
ListTeamMembersRequest,
|
|
26
50
|
ListTeamMembersRequestTypedDict,
|
|
51
|
+
ListTeamMembersResponse,
|
|
52
|
+
ListTeamMembersResponseTypedDict,
|
|
27
53
|
)
|
|
28
|
-
from .listteamsop import
|
|
29
|
-
|
|
54
|
+
from .listteamsop import (
|
|
55
|
+
ListTeamsRequest,
|
|
56
|
+
ListTeamsRequestTypedDict,
|
|
57
|
+
ListTeamsResponse,
|
|
58
|
+
ListTeamsResponseTypedDict,
|
|
59
|
+
)
|
|
60
|
+
from .meeting import CalendarInviteesDomainsType, Meeting, MeetingTypedDict
|
|
30
61
|
from .meetinglistresponse import MeetingListResponse, MeetingListResponseTypedDict
|
|
31
62
|
from .meetingsummary import MeetingSummary, MeetingSummaryTypedDict
|
|
32
63
|
from .security import Security, SecurityTypedDict
|
|
@@ -42,7 +73,7 @@ if TYPE_CHECKING:
|
|
|
42
73
|
TranscriptItemSpeaker,
|
|
43
74
|
TranscriptItemSpeakerTypedDict,
|
|
44
75
|
)
|
|
45
|
-
from .webhook import Webhook, WebhookTypedDict
|
|
76
|
+
from .webhook import TriggeredFor, Webhook, WebhookTypedDict
|
|
46
77
|
|
|
47
78
|
__all__ = [
|
|
48
79
|
"ActionItem",
|
|
@@ -57,23 +88,43 @@ __all__ = [
|
|
|
57
88
|
"CRMDealMatchTypedDict",
|
|
58
89
|
"CRMMatches",
|
|
59
90
|
"CRMMatchesTypedDict",
|
|
91
|
+
"CalendarInviteesDomainsType",
|
|
92
|
+
"CallbackResponse",
|
|
93
|
+
"CallbackResponseTypedDict",
|
|
60
94
|
"CreateWebhookRequest",
|
|
61
95
|
"CreateWebhookRequestTypedDict",
|
|
96
|
+
"CreateWebhookTriggeredFor",
|
|
62
97
|
"DeleteWebhookRequest",
|
|
63
98
|
"DeleteWebhookRequestTypedDict",
|
|
64
99
|
"FathomUser",
|
|
65
100
|
"FathomUserTypedDict",
|
|
101
|
+
"GetRecordingSummaryRequest",
|
|
102
|
+
"GetRecordingSummaryRequestTypedDict",
|
|
103
|
+
"GetRecordingSummaryResponse",
|
|
104
|
+
"GetRecordingSummaryResponseBody",
|
|
105
|
+
"GetRecordingSummaryResponseBodyTypedDict",
|
|
106
|
+
"GetRecordingSummaryResponseTypedDict",
|
|
107
|
+
"GetRecordingTranscriptRequest",
|
|
108
|
+
"GetRecordingTranscriptRequestTypedDict",
|
|
109
|
+
"GetRecordingTranscriptResponse",
|
|
110
|
+
"GetRecordingTranscriptResponseBody",
|
|
111
|
+
"GetRecordingTranscriptResponseBodyTypedDict",
|
|
112
|
+
"GetRecordingTranscriptResponseTypedDict",
|
|
66
113
|
"Invitee",
|
|
67
114
|
"InviteeTypedDict",
|
|
68
|
-
"
|
|
115
|
+
"ListMeetingsCalendarInviteesDomainsType",
|
|
69
116
|
"ListMeetingsRequest",
|
|
70
117
|
"ListMeetingsRequestTypedDict",
|
|
71
118
|
"ListMeetingsResponse",
|
|
72
119
|
"ListMeetingsResponseTypedDict",
|
|
73
120
|
"ListTeamMembersRequest",
|
|
74
121
|
"ListTeamMembersRequestTypedDict",
|
|
122
|
+
"ListTeamMembersResponse",
|
|
123
|
+
"ListTeamMembersResponseTypedDict",
|
|
75
124
|
"ListTeamsRequest",
|
|
76
125
|
"ListTeamsRequestTypedDict",
|
|
126
|
+
"ListTeamsResponse",
|
|
127
|
+
"ListTeamsResponseTypedDict",
|
|
77
128
|
"Meeting",
|
|
78
129
|
"MeetingListResponse",
|
|
79
130
|
"MeetingListResponseTypedDict",
|
|
@@ -95,6 +146,7 @@ __all__ = [
|
|
|
95
146
|
"TranscriptItemSpeaker",
|
|
96
147
|
"TranscriptItemSpeakerTypedDict",
|
|
97
148
|
"TranscriptItemTypedDict",
|
|
149
|
+
"TriggeredFor",
|
|
98
150
|
"Webhook",
|
|
99
151
|
"WebhookTypedDict",
|
|
100
152
|
]
|
|
@@ -104,8 +156,11 @@ _dynamic_imports: dict[str, str] = {
|
|
|
104
156
|
"ActionItemTypedDict": ".actionitem",
|
|
105
157
|
"Assignee": ".assignee",
|
|
106
158
|
"AssigneeTypedDict": ".assignee",
|
|
159
|
+
"CallbackResponse": ".callbackresponse",
|
|
160
|
+
"CallbackResponseTypedDict": ".callbackresponse",
|
|
107
161
|
"CreateWebhookRequest": ".createwebhookop",
|
|
108
162
|
"CreateWebhookRequestTypedDict": ".createwebhookop",
|
|
163
|
+
"CreateWebhookTriggeredFor": ".createwebhookop",
|
|
109
164
|
"CRMCompanyMatch": ".crmcompanymatch",
|
|
110
165
|
"CRMCompanyMatchTypedDict": ".crmcompanymatch",
|
|
111
166
|
"CRMContactMatch": ".crmcontactmatch",
|
|
@@ -118,19 +173,36 @@ _dynamic_imports: dict[str, str] = {
|
|
|
118
173
|
"DeleteWebhookRequestTypedDict": ".deletewebhookop",
|
|
119
174
|
"FathomUser": ".fathomuser",
|
|
120
175
|
"FathomUserTypedDict": ".fathomuser",
|
|
176
|
+
"GetRecordingSummaryRequest": ".getrecordingsummaryop",
|
|
177
|
+
"GetRecordingSummaryRequestTypedDict": ".getrecordingsummaryop",
|
|
178
|
+
"GetRecordingSummaryResponse": ".getrecordingsummaryop",
|
|
179
|
+
"GetRecordingSummaryResponseBody": ".getrecordingsummaryop",
|
|
180
|
+
"GetRecordingSummaryResponseBodyTypedDict": ".getrecordingsummaryop",
|
|
181
|
+
"GetRecordingSummaryResponseTypedDict": ".getrecordingsummaryop",
|
|
182
|
+
"GetRecordingTranscriptRequest": ".getrecordingtranscriptop",
|
|
183
|
+
"GetRecordingTranscriptRequestTypedDict": ".getrecordingtranscriptop",
|
|
184
|
+
"GetRecordingTranscriptResponse": ".getrecordingtranscriptop",
|
|
185
|
+
"GetRecordingTranscriptResponseBody": ".getrecordingtranscriptop",
|
|
186
|
+
"GetRecordingTranscriptResponseBodyTypedDict": ".getrecordingtranscriptop",
|
|
187
|
+
"GetRecordingTranscriptResponseTypedDict": ".getrecordingtranscriptop",
|
|
121
188
|
"Invitee": ".invitee",
|
|
122
189
|
"InviteeTypedDict": ".invitee",
|
|
123
|
-
"
|
|
190
|
+
"ListMeetingsCalendarInviteesDomainsType": ".listmeetingsop",
|
|
124
191
|
"ListMeetingsRequest": ".listmeetingsop",
|
|
125
192
|
"ListMeetingsRequestTypedDict": ".listmeetingsop",
|
|
126
193
|
"ListMeetingsResponse": ".listmeetingsop",
|
|
127
194
|
"ListMeetingsResponseTypedDict": ".listmeetingsop",
|
|
195
|
+
"MeetingType": ".listmeetingsop",
|
|
128
196
|
"ListTeamMembersRequest": ".listteammembersop",
|
|
129
197
|
"ListTeamMembersRequestTypedDict": ".listteammembersop",
|
|
198
|
+
"ListTeamMembersResponse": ".listteammembersop",
|
|
199
|
+
"ListTeamMembersResponseTypedDict": ".listteammembersop",
|
|
130
200
|
"ListTeamsRequest": ".listteamsop",
|
|
131
201
|
"ListTeamsRequestTypedDict": ".listteamsop",
|
|
202
|
+
"ListTeamsResponse": ".listteamsop",
|
|
203
|
+
"ListTeamsResponseTypedDict": ".listteamsop",
|
|
204
|
+
"CalendarInviteesDomainsType": ".meeting",
|
|
132
205
|
"Meeting": ".meeting",
|
|
133
|
-
"MeetingType": ".meeting",
|
|
134
206
|
"MeetingTypedDict": ".meeting",
|
|
135
207
|
"MeetingListResponse": ".meetinglistresponse",
|
|
136
208
|
"MeetingListResponseTypedDict": ".meetinglistresponse",
|
|
@@ -150,11 +222,24 @@ _dynamic_imports: dict[str, str] = {
|
|
|
150
222
|
"TranscriptItemTypedDict": ".transcriptitem",
|
|
151
223
|
"TranscriptItemSpeaker": ".transcriptitemspeaker",
|
|
152
224
|
"TranscriptItemSpeakerTypedDict": ".transcriptitemspeaker",
|
|
225
|
+
"TriggeredFor": ".webhook",
|
|
153
226
|
"Webhook": ".webhook",
|
|
154
227
|
"WebhookTypedDict": ".webhook",
|
|
155
228
|
}
|
|
156
229
|
|
|
157
230
|
|
|
231
|
+
def dynamic_import(modname, retries=3):
|
|
232
|
+
for attempt in range(retries):
|
|
233
|
+
try:
|
|
234
|
+
return import_module(modname, __package__)
|
|
235
|
+
except KeyError:
|
|
236
|
+
# Clear any half-initialized module and retry
|
|
237
|
+
sys.modules.pop(modname, None)
|
|
238
|
+
if attempt == retries - 1:
|
|
239
|
+
break
|
|
240
|
+
raise KeyError(f"Failed to import module '{modname}' after {retries} attempts")
|
|
241
|
+
|
|
242
|
+
|
|
158
243
|
def __getattr__(attr_name: str) -> object:
|
|
159
244
|
module_name = _dynamic_imports.get(attr_name)
|
|
160
245
|
if module_name is None:
|
|
@@ -163,7 +248,7 @@ def __getattr__(attr_name: str) -> object:
|
|
|
163
248
|
)
|
|
164
249
|
|
|
165
250
|
try:
|
|
166
|
-
module =
|
|
251
|
+
module = dynamic_import(module_name)
|
|
167
252
|
result = getattr(module, attr_name)
|
|
168
253
|
return result
|
|
169
254
|
except ImportError as e:
|
|
@@ -177,5 +262,5 @@ def __getattr__(attr_name: str) -> object:
|
|
|
177
262
|
|
|
178
263
|
|
|
179
264
|
def __dir__():
|
|
180
|
-
lazy_attrs = list(_dynamic_imports.keys())
|
|
181
|
-
return sorted(lazy_attrs)
|
|
265
|
+
lazy_attrs = builtins.list(_dynamic_imports.keys())
|
|
266
|
+
return builtins.sorted(lazy_attrs)
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
from fathom_python.types import BaseModel
|
|
5
|
+
from typing_extensions import TypedDict
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class CallbackResponseTypedDict(TypedDict):
|
|
9
|
+
destination_url: str
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class CallbackResponse(BaseModel):
|
|
13
|
+
destination_url: str
|
|
@@ -1,14 +1,30 @@
|
|
|
1
1
|
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
|
+
from enum import Enum
|
|
4
5
|
from fathom_python.types import BaseModel
|
|
5
|
-
from typing import Optional
|
|
6
|
+
from typing import List, Optional
|
|
6
7
|
from typing_extensions import NotRequired, TypedDict
|
|
7
8
|
|
|
8
9
|
|
|
10
|
+
class CreateWebhookTriggeredFor(str, Enum):
|
|
11
|
+
MY_RECORDINGS = "my_recordings"
|
|
12
|
+
SHARED_EXTERNAL_RECORDINGS = "shared_external_recordings"
|
|
13
|
+
MY_SHARED_WITH_TEAM_RECORDINGS = "my_shared_with_team_recordings"
|
|
14
|
+
SHARED_TEAM_RECORDINGS = "shared_team_recordings"
|
|
15
|
+
|
|
16
|
+
|
|
9
17
|
class CreateWebhookRequestTypedDict(TypedDict):
|
|
10
18
|
destination_url: str
|
|
11
19
|
r"""The URL to send the webhook to."""
|
|
20
|
+
triggered_for: List[CreateWebhookTriggeredFor]
|
|
21
|
+
r"""You must send at least one of the following types of recordings to trigger on.
|
|
22
|
+
- `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.)
|
|
23
|
+
- `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.)
|
|
24
|
+
- `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.
|
|
25
|
+
- `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.
|
|
26
|
+
|
|
27
|
+
"""
|
|
12
28
|
include_action_items: NotRequired[bool]
|
|
13
29
|
r"""Include the action items for each meeting."""
|
|
14
30
|
include_crm_matches: NotRequired[bool]
|
|
@@ -23,6 +39,15 @@ class CreateWebhookRequest(BaseModel):
|
|
|
23
39
|
destination_url: str
|
|
24
40
|
r"""The URL to send the webhook to."""
|
|
25
41
|
|
|
42
|
+
triggered_for: List[CreateWebhookTriggeredFor]
|
|
43
|
+
r"""You must send at least one of the following types of recordings to trigger on.
|
|
44
|
+
- `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.)
|
|
45
|
+
- `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.)
|
|
46
|
+
- `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.
|
|
47
|
+
- `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.
|
|
48
|
+
|
|
49
|
+
"""
|
|
50
|
+
|
|
26
51
|
include_action_items: Optional[bool] = False
|
|
27
52
|
r"""Include the action items for each meeting."""
|
|
28
53
|
|
|
@@ -9,6 +9,7 @@ from typing_extensions import TypedDict
|
|
|
9
9
|
class FathomUserTypedDict(TypedDict):
|
|
10
10
|
name: str
|
|
11
11
|
email: str
|
|
12
|
+
email_domain: str
|
|
12
13
|
team: Nullable[str]
|
|
13
14
|
|
|
14
15
|
|
|
@@ -17,6 +18,8 @@ class FathomUser(BaseModel):
|
|
|
17
18
|
|
|
18
19
|
email: str
|
|
19
20
|
|
|
21
|
+
email_domain: str
|
|
22
|
+
|
|
20
23
|
team: Nullable[str]
|
|
21
24
|
|
|
22
25
|
@model_serializer(mode="wrap")
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
from .callbackresponse import CallbackResponse, CallbackResponseTypedDict
|
|
5
|
+
from .meetingsummary import MeetingSummary, MeetingSummaryTypedDict
|
|
6
|
+
from fathom_python.types import BaseModel, Nullable, UNSET_SENTINEL
|
|
7
|
+
from fathom_python.utils import FieldMetadata, PathParamMetadata, QueryParamMetadata
|
|
8
|
+
from pydantic import model_serializer
|
|
9
|
+
from typing import Optional, Union
|
|
10
|
+
from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class GetRecordingSummaryRequestTypedDict(TypedDict):
|
|
14
|
+
recording_id: int
|
|
15
|
+
r"""The ID of the meeting recording to fetch the call summary for."""
|
|
16
|
+
destination_url: NotRequired[str]
|
|
17
|
+
r"""Destination URL for where we'll POST the call summary. If not sent, this endpoint will return the data directly."""
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class GetRecordingSummaryRequest(BaseModel):
|
|
21
|
+
recording_id: Annotated[
|
|
22
|
+
int, FieldMetadata(path=PathParamMetadata(style="simple", explode=False))
|
|
23
|
+
]
|
|
24
|
+
r"""The ID of the meeting recording to fetch the call summary for."""
|
|
25
|
+
|
|
26
|
+
destination_url: Annotated[
|
|
27
|
+
Optional[str],
|
|
28
|
+
FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
|
|
29
|
+
] = None
|
|
30
|
+
r"""Destination URL for where we'll POST the call summary. If not sent, this endpoint will return the data directly."""
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
class GetRecordingSummaryResponseBodyTypedDict(TypedDict):
|
|
34
|
+
summary: Nullable[MeetingSummaryTypedDict]
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
class GetRecordingSummaryResponseBody(BaseModel):
|
|
38
|
+
summary: Nullable[MeetingSummary]
|
|
39
|
+
|
|
40
|
+
@model_serializer(mode="wrap")
|
|
41
|
+
def serialize_model(self, handler):
|
|
42
|
+
optional_fields = []
|
|
43
|
+
nullable_fields = ["summary"]
|
|
44
|
+
null_default_fields = []
|
|
45
|
+
|
|
46
|
+
serialized = handler(self)
|
|
47
|
+
|
|
48
|
+
m = {}
|
|
49
|
+
|
|
50
|
+
for n, f in type(self).model_fields.items():
|
|
51
|
+
k = f.alias or n
|
|
52
|
+
val = serialized.get(k)
|
|
53
|
+
serialized.pop(k, None)
|
|
54
|
+
|
|
55
|
+
optional_nullable = k in optional_fields and k in nullable_fields
|
|
56
|
+
is_set = (
|
|
57
|
+
self.__pydantic_fields_set__.intersection({n})
|
|
58
|
+
or k in null_default_fields
|
|
59
|
+
) # pylint: disable=no-member
|
|
60
|
+
|
|
61
|
+
if val is not None and val != UNSET_SENTINEL:
|
|
62
|
+
m[k] = val
|
|
63
|
+
elif val != UNSET_SENTINEL and (
|
|
64
|
+
not k in optional_fields or (optional_nullable and is_set)
|
|
65
|
+
):
|
|
66
|
+
m[k] = val
|
|
67
|
+
|
|
68
|
+
return m
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
GetRecordingSummaryResponseTypedDict = TypeAliasType(
|
|
72
|
+
"GetRecordingSummaryResponseTypedDict",
|
|
73
|
+
Union[GetRecordingSummaryResponseBodyTypedDict, CallbackResponseTypedDict],
|
|
74
|
+
)
|
|
75
|
+
r"""Either the destination URL for where we'll POST the call summary, or the summary for the recording."""
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
GetRecordingSummaryResponse = TypeAliasType(
|
|
79
|
+
"GetRecordingSummaryResponse",
|
|
80
|
+
Union[GetRecordingSummaryResponseBody, CallbackResponse],
|
|
81
|
+
)
|
|
82
|
+
r"""Either the destination URL for where we'll POST the call summary, or the summary for the recording."""
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
from .callbackresponse import CallbackResponse, CallbackResponseTypedDict
|
|
5
|
+
from .transcriptitem import TranscriptItem, TranscriptItemTypedDict
|
|
6
|
+
from fathom_python.types import BaseModel
|
|
7
|
+
from fathom_python.utils import FieldMetadata, PathParamMetadata, QueryParamMetadata
|
|
8
|
+
from typing import List, Union
|
|
9
|
+
from typing_extensions import Annotated, TypeAliasType, TypedDict
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class GetRecordingTranscriptRequestTypedDict(TypedDict):
|
|
13
|
+
recording_id: int
|
|
14
|
+
r"""The ID of the meeting recording to fetch the transcript for."""
|
|
15
|
+
destination_url: str
|
|
16
|
+
r"""Destination URL for where we'll POST the transcript. If not sent, this endpoint will return the data directly."""
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class GetRecordingTranscriptRequest(BaseModel):
|
|
20
|
+
recording_id: Annotated[
|
|
21
|
+
int, FieldMetadata(path=PathParamMetadata(style="simple", explode=False))
|
|
22
|
+
]
|
|
23
|
+
r"""The ID of the meeting recording to fetch the transcript for."""
|
|
24
|
+
|
|
25
|
+
destination_url: Annotated[
|
|
26
|
+
str, FieldMetadata(query=QueryParamMetadata(style="form", explode=True))
|
|
27
|
+
]
|
|
28
|
+
r"""Destination URL for where we'll POST the transcript. If not sent, this endpoint will return the data directly."""
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class GetRecordingTranscriptResponseBodyTypedDict(TypedDict):
|
|
32
|
+
transcript: List[TranscriptItemTypedDict]
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class GetRecordingTranscriptResponseBody(BaseModel):
|
|
36
|
+
transcript: List[TranscriptItem]
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
GetRecordingTranscriptResponseTypedDict = TypeAliasType(
|
|
40
|
+
"GetRecordingTranscriptResponseTypedDict",
|
|
41
|
+
Union[GetRecordingTranscriptResponseBodyTypedDict, CallbackResponseTypedDict],
|
|
42
|
+
)
|
|
43
|
+
r"""Either the destination URL for where we'll POST the transcript, or the transcript for the recording as an array."""
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
GetRecordingTranscriptResponse = TypeAliasType(
|
|
47
|
+
"GetRecordingTranscriptResponse",
|
|
48
|
+
Union[GetRecordingTranscriptResponseBody, CallbackResponse],
|
|
49
|
+
)
|
|
50
|
+
r"""Either the destination URL for where we'll POST the transcript, or the transcript for the recording as an array."""
|
fathom_python/models/invitee.py
CHANGED
|
@@ -15,6 +15,7 @@ from typing_extensions import NotRequired, TypedDict
|
|
|
15
15
|
class InviteeTypedDict(TypedDict):
|
|
16
16
|
name: Nullable[str]
|
|
17
17
|
email: Nullable[str]
|
|
18
|
+
email_domain: Nullable[str]
|
|
18
19
|
is_external: bool
|
|
19
20
|
matched_speaker_display_name: NotRequired[Nullable[str]]
|
|
20
21
|
r"""**Coming soon!**
|
|
@@ -27,6 +28,8 @@ class Invitee(BaseModel):
|
|
|
27
28
|
|
|
28
29
|
email: Nullable[str]
|
|
29
30
|
|
|
31
|
+
email_domain: Nullable[str]
|
|
32
|
+
|
|
30
33
|
is_external: bool
|
|
31
34
|
|
|
32
35
|
matched_speaker_display_name: OptionalNullable[str] = UNSET
|
|
@@ -37,7 +40,12 @@ class Invitee(BaseModel):
|
|
|
37
40
|
@model_serializer(mode="wrap")
|
|
38
41
|
def serialize_model(self, handler):
|
|
39
42
|
optional_fields = ["matched_speaker_display_name"]
|
|
40
|
-
nullable_fields = [
|
|
43
|
+
nullable_fields = [
|
|
44
|
+
"name",
|
|
45
|
+
"matched_speaker_display_name",
|
|
46
|
+
"email",
|
|
47
|
+
"email_domain",
|
|
48
|
+
]
|
|
41
49
|
null_default_fields = []
|
|
42
50
|
|
|
43
51
|
serialized = handler(self)
|