mergepythonclient 2.2.0__py3-none-any.whl → 2.3.0__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.
- merge/__init__.py +40 -4
- merge/client.py +118 -18
- merge/core/__init__.py +75 -21
- merge/core/client_wrapper.py +2 -2
- merge/resources/__init__.py +33 -1
- merge/resources/accounting/__init__.py +1240 -609
- merge/resources/accounting/client.py +835 -165
- merge/resources/accounting/resources/__init__.py +208 -92
- merge/resources/accounting/resources/accounts/__init__.py +36 -6
- merge/resources/accounting/resources/accounts/types/__init__.py +34 -4
- merge/resources/accounting/resources/async_passthrough/__init__.py +26 -1
- merge/resources/accounting/resources/async_passthrough/types/__init__.py +26 -1
- merge/resources/accounting/resources/company_info/__init__.py +29 -1
- merge/resources/accounting/resources/company_info/types/__init__.py +30 -2
- merge/resources/accounting/resources/contacts/__init__.py +29 -1
- merge/resources/accounting/resources/contacts/types/__init__.py +30 -2
- merge/resources/accounting/resources/credit_notes/__init__.py +40 -8
- merge/resources/accounting/resources/credit_notes/types/__init__.py +38 -6
- merge/resources/accounting/resources/expense_reports/__init__.py +34 -5
- merge/resources/accounting/resources/expense_reports/types/__init__.py +32 -3
- merge/resources/accounting/resources/expenses/__init__.py +29 -1
- merge/resources/accounting/resources/expenses/types/__init__.py +30 -2
- merge/resources/accounting/resources/general_ledger_transactions/__init__.py +29 -1
- merge/resources/accounting/resources/general_ledger_transactions/types/__init__.py +30 -2
- merge/resources/accounting/resources/invoices/__init__.py +36 -6
- merge/resources/accounting/resources/invoices/types/__init__.py +34 -4
- merge/resources/accounting/resources/issues/__init__.py +26 -1
- merge/resources/accounting/resources/issues/types/__init__.py +26 -1
- merge/resources/accounting/resources/items/__init__.py +26 -1
- merge/resources/accounting/resources/items/types/__init__.py +30 -2
- merge/resources/accounting/resources/journal_entries/__init__.py +29 -1
- merge/resources/accounting/resources/journal_entries/types/__init__.py +30 -2
- merge/resources/accounting/resources/link_token/__init__.py +26 -1
- merge/resources/accounting/resources/link_token/types/__init__.py +26 -1
- merge/resources/accounting/resources/linked_accounts/__init__.py +26 -1
- merge/resources/accounting/resources/linked_accounts/types/__init__.py +28 -1
- merge/resources/accounting/resources/payments/__init__.py +29 -1
- merge/resources/accounting/resources/payments/types/__init__.py +30 -2
- merge/resources/accounting/resources/projects/__init__.py +29 -1
- merge/resources/accounting/resources/projects/types/__init__.py +30 -2
- merge/resources/accounting/resources/purchase_orders/__init__.py +29 -1
- merge/resources/accounting/resources/purchase_orders/types/__init__.py +30 -2
- merge/resources/accounting/resources/transactions/__init__.py +29 -1
- merge/resources/accounting/resources/transactions/types/__init__.py +30 -2
- merge/resources/accounting/resources/vendor_credits/__init__.py +29 -1
- merge/resources/accounting/resources/vendor_credits/types/__init__.py +30 -2
- merge/resources/accounting/types/__init__.py +1068 -521
- merge/resources/ats/__init__.py +586 -282
- merge/resources/ats/client.py +590 -120
- merge/resources/ats/resources/__init__.py +150 -63
- merge/resources/ats/resources/activities/__init__.py +36 -6
- merge/resources/ats/resources/activities/types/__init__.py +34 -4
- merge/resources/ats/resources/applications/__init__.py +29 -1
- merge/resources/ats/resources/applications/types/__init__.py +30 -2
- merge/resources/ats/resources/async_passthrough/__init__.py +26 -1
- merge/resources/ats/resources/async_passthrough/types/__init__.py +26 -1
- merge/resources/ats/resources/candidates/__init__.py +30 -1
- merge/resources/ats/resources/candidates/types/__init__.py +32 -3
- merge/resources/ats/resources/eeocs/__init__.py +36 -6
- merge/resources/ats/resources/eeocs/types/__init__.py +34 -4
- merge/resources/ats/resources/interviews/__init__.py +29 -1
- merge/resources/ats/resources/interviews/types/__init__.py +30 -2
- merge/resources/ats/resources/issues/__init__.py +26 -1
- merge/resources/ats/resources/issues/types/__init__.py +26 -1
- merge/resources/ats/resources/job_postings/__init__.py +26 -1
- merge/resources/ats/resources/job_postings/types/__init__.py +26 -1
- merge/resources/ats/resources/jobs/__init__.py +36 -6
- merge/resources/ats/resources/jobs/types/__init__.py +34 -4
- merge/resources/ats/resources/link_token/__init__.py +26 -1
- merge/resources/ats/resources/link_token/types/__init__.py +26 -1
- merge/resources/ats/resources/linked_accounts/__init__.py +26 -1
- merge/resources/ats/resources/linked_accounts/types/__init__.py +28 -1
- merge/resources/ats/resources/offers/__init__.py +26 -1
- merge/resources/ats/resources/offers/types/__init__.py +30 -2
- merge/resources/ats/resources/scorecards/__init__.py +29 -1
- merge/resources/ats/resources/scorecards/types/__init__.py +30 -2
- merge/resources/ats/types/__init__.py +462 -219
- merge/resources/crm/__init__.py +566 -272
- merge/resources/crm/client.py +556 -114
- merge/resources/crm/resources/__init__.py +121 -47
- merge/resources/crm/resources/async_passthrough/__init__.py +26 -1
- merge/resources/crm/resources/async_passthrough/types/__init__.py +26 -1
- merge/resources/crm/resources/contacts/__init__.py +29 -1
- merge/resources/crm/resources/contacts/types/__init__.py +30 -2
- merge/resources/crm/resources/engagements/__init__.py +29 -1
- merge/resources/crm/resources/engagements/types/__init__.py +30 -2
- merge/resources/crm/resources/issues/__init__.py +26 -1
- merge/resources/crm/resources/issues/types/__init__.py +26 -1
- merge/resources/crm/resources/leads/__init__.py +26 -1
- merge/resources/crm/resources/leads/types/__init__.py +30 -2
- merge/resources/crm/resources/link_token/__init__.py +26 -1
- merge/resources/crm/resources/link_token/types/__init__.py +26 -1
- merge/resources/crm/resources/linked_accounts/__init__.py +26 -1
- merge/resources/crm/resources/linked_accounts/types/__init__.py +28 -1
- merge/resources/crm/resources/notes/__init__.py +26 -1
- merge/resources/crm/resources/notes/types/__init__.py +30 -2
- merge/resources/crm/resources/opportunities/__init__.py +34 -1
- merge/resources/crm/resources/opportunities/types/__init__.py +32 -3
- merge/resources/crm/resources/tasks/__init__.py +26 -1
- merge/resources/crm/resources/tasks/types/__init__.py +30 -2
- merge/resources/crm/types/__init__.py +470 -224
- merge/resources/filestorage/__init__.py +322 -150
- merge/resources/filestorage/client.py +405 -87
- merge/resources/filestorage/resources/__init__.py +91 -34
- merge/resources/filestorage/resources/async_passthrough/__init__.py +26 -1
- merge/resources/filestorage/resources/async_passthrough/types/__init__.py +26 -1
- merge/resources/filestorage/resources/files/__init__.py +36 -6
- merge/resources/filestorage/resources/files/types/__init__.py +34 -4
- merge/resources/filestorage/resources/folders/__init__.py +29 -1
- merge/resources/filestorage/resources/folders/types/__init__.py +30 -2
- merge/resources/filestorage/resources/issues/__init__.py +26 -1
- merge/resources/filestorage/resources/issues/types/__init__.py +26 -1
- merge/resources/filestorage/resources/linked_accounts/__init__.py +26 -1
- merge/resources/filestorage/resources/linked_accounts/types/__init__.py +28 -1
- merge/resources/filestorage/types/__init__.py +258 -117
- merge/resources/hris/__init__.py +576 -277
- merge/resources/hris/client.py +590 -120
- merge/resources/hris/resources/__init__.py +188 -86
- merge/resources/hris/resources/async_passthrough/__init__.py +26 -1
- merge/resources/hris/resources/async_passthrough/types/__init__.py +26 -1
- merge/resources/hris/resources/bank_info/__init__.py +29 -1
- merge/resources/hris/resources/bank_info/types/__init__.py +30 -2
- merge/resources/hris/resources/employee_payroll_runs/__init__.py +29 -1
- merge/resources/hris/resources/employee_payroll_runs/types/__init__.py +30 -2
- merge/resources/hris/resources/employees/__init__.py +44 -10
- merge/resources/hris/resources/employees/types/__init__.py +42 -8
- merge/resources/hris/resources/employments/__init__.py +42 -9
- merge/resources/hris/resources/employments/types/__init__.py +40 -7
- merge/resources/hris/resources/issues/__init__.py +26 -1
- merge/resources/hris/resources/issues/types/__init__.py +26 -1
- merge/resources/hris/resources/link_token/__init__.py +26 -1
- merge/resources/hris/resources/link_token/types/__init__.py +26 -1
- merge/resources/hris/resources/linked_accounts/__init__.py +26 -1
- merge/resources/hris/resources/linked_accounts/types/__init__.py +28 -1
- merge/resources/hris/resources/locations/__init__.py +38 -7
- merge/resources/hris/resources/locations/types/__init__.py +36 -5
- merge/resources/hris/resources/payroll_runs/__init__.py +38 -7
- merge/resources/hris/resources/payroll_runs/types/__init__.py +36 -5
- merge/resources/hris/resources/time_off/__init__.py +44 -10
- merge/resources/hris/resources/time_off/types/__init__.py +42 -8
- merge/resources/hris/resources/time_off_balances/__init__.py +26 -1
- merge/resources/hris/resources/time_off_balances/types/__init__.py +28 -1
- merge/resources/hris/resources/timesheet_entries/__init__.py +26 -1
- merge/resources/hris/resources/timesheet_entries/types/__init__.py +28 -1
- merge/resources/hris/types/__init__.py +422 -199
- merge/resources/ticketing/__init__.py +464 -221
- merge/resources/ticketing/client.py +507 -105
- merge/resources/ticketing/resources/__init__.py +120 -48
- merge/resources/ticketing/resources/async_passthrough/__init__.py +26 -1
- merge/resources/ticketing/resources/async_passthrough/types/__init__.py +26 -1
- merge/resources/ticketing/resources/collections/__init__.py +26 -1
- merge/resources/ticketing/resources/collections/types/__init__.py +28 -1
- merge/resources/ticketing/resources/comments/__init__.py +29 -1
- merge/resources/ticketing/resources/comments/types/__init__.py +30 -2
- merge/resources/ticketing/resources/issues/__init__.py +26 -1
- merge/resources/ticketing/resources/issues/types/__init__.py +26 -1
- merge/resources/ticketing/resources/link_token/__init__.py +26 -1
- merge/resources/ticketing/resources/link_token/types/__init__.py +26 -1
- merge/resources/ticketing/resources/linked_accounts/__init__.py +26 -1
- merge/resources/ticketing/resources/linked_accounts/types/__init__.py +28 -1
- merge/resources/ticketing/resources/projects/__init__.py +26 -1
- merge/resources/ticketing/resources/projects/types/__init__.py +26 -1
- merge/resources/ticketing/resources/tickets/__init__.py +44 -10
- merge/resources/ticketing/resources/tickets/types/__init__.py +42 -8
- merge/resources/ticketing/resources/users/__init__.py +26 -1
- merge/resources/ticketing/resources/users/types/__init__.py +30 -2
- merge/resources/ticketing/types/__init__.py +370 -173
- {mergepythonclient-2.2.0.dist-info → mergepythonclient-2.3.0.dist-info}/METADATA +2 -1
- {mergepythonclient-2.2.0.dist-info → mergepythonclient-2.3.0.dist-info}/RECORD +171 -171
- {mergepythonclient-2.2.0.dist-info → mergepythonclient-2.3.0.dist-info}/LICENSE.md +0 -0
- {mergepythonclient-2.2.0.dist-info → mergepythonclient-2.3.0.dist-info}/WHEEL +0 -0
merge/__init__.py
CHANGED
|
@@ -2,10 +2,46 @@
|
|
|
2
2
|
|
|
3
3
|
# isort: skip_file
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
from
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
import typing
|
|
6
|
+
from importlib import import_module
|
|
7
|
+
|
|
8
|
+
if typing.TYPE_CHECKING:
|
|
9
|
+
from .resources import accounting, ats, crm, filestorage, hris, ticketing
|
|
10
|
+
from .client import AsyncMerge, Merge
|
|
11
|
+
from .environment import MergeEnvironment
|
|
12
|
+
from .version import __version__
|
|
13
|
+
_dynamic_imports: typing.Dict[str, str] = {
|
|
14
|
+
"AsyncMerge": ".client",
|
|
15
|
+
"Merge": ".client",
|
|
16
|
+
"MergeEnvironment": ".environment",
|
|
17
|
+
"__version__": ".version",
|
|
18
|
+
"accounting": ".resources",
|
|
19
|
+
"ats": ".resources",
|
|
20
|
+
"crm": ".resources",
|
|
21
|
+
"filestorage": ".resources",
|
|
22
|
+
"hris": ".resources",
|
|
23
|
+
"ticketing": ".resources",
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def __getattr__(attr_name: str) -> typing.Any:
|
|
28
|
+
module_name = _dynamic_imports.get(attr_name)
|
|
29
|
+
if module_name is None:
|
|
30
|
+
raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}")
|
|
31
|
+
try:
|
|
32
|
+
module = import_module(module_name, __package__)
|
|
33
|
+
result = getattr(module, attr_name)
|
|
34
|
+
return result
|
|
35
|
+
except ImportError as e:
|
|
36
|
+
raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e
|
|
37
|
+
except AttributeError as e:
|
|
38
|
+
raise AttributeError(f"Failed to get {attr_name} from {module_name}: {e}") from e
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def __dir__():
|
|
42
|
+
lazy_attrs = list(_dynamic_imports.keys())
|
|
43
|
+
return sorted(lazy_attrs)
|
|
44
|
+
|
|
9
45
|
|
|
10
46
|
__all__ = [
|
|
11
47
|
"AsyncMerge",
|
merge/client.py
CHANGED
|
@@ -1,16 +1,20 @@
|
|
|
1
1
|
# This file was auto-generated by Fern from our API Definition.
|
|
2
2
|
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
3
5
|
import typing
|
|
4
6
|
|
|
5
7
|
import httpx
|
|
6
8
|
from .core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
|
|
7
9
|
from .environment import MergeEnvironment
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
from .resources.
|
|
11
|
-
from .resources.
|
|
12
|
-
from .resources.
|
|
13
|
-
from .resources.
|
|
10
|
+
|
|
11
|
+
if typing.TYPE_CHECKING:
|
|
12
|
+
from .resources.accounting.client import AccountingClient, AsyncAccountingClient
|
|
13
|
+
from .resources.ats.client import AsyncAtsClient, AtsClient
|
|
14
|
+
from .resources.crm.client import AsyncCrmClient, CrmClient
|
|
15
|
+
from .resources.filestorage.client import AsyncFilestorageClient, FilestorageClient
|
|
16
|
+
from .resources.hris.client import AsyncHrisClient, HrisClient
|
|
17
|
+
from .resources.ticketing.client import AsyncTicketingClient, TicketingClient
|
|
14
18
|
|
|
15
19
|
|
|
16
20
|
class Merge:
|
|
@@ -82,12 +86,60 @@ class Merge:
|
|
|
82
86
|
else httpx.Client(timeout=_defaulted_timeout),
|
|
83
87
|
timeout=_defaulted_timeout,
|
|
84
88
|
)
|
|
85
|
-
self.
|
|
86
|
-
self.
|
|
87
|
-
self.
|
|
88
|
-
self.
|
|
89
|
-
self.
|
|
90
|
-
self.
|
|
89
|
+
self._ats: typing.Optional[AtsClient] = None
|
|
90
|
+
self._crm: typing.Optional[CrmClient] = None
|
|
91
|
+
self._filestorage: typing.Optional[FilestorageClient] = None
|
|
92
|
+
self._hris: typing.Optional[HrisClient] = None
|
|
93
|
+
self._ticketing: typing.Optional[TicketingClient] = None
|
|
94
|
+
self._accounting: typing.Optional[AccountingClient] = None
|
|
95
|
+
|
|
96
|
+
@property
|
|
97
|
+
def ats(self):
|
|
98
|
+
if self._ats is None:
|
|
99
|
+
from .resources.ats.client import AtsClient # noqa: E402
|
|
100
|
+
|
|
101
|
+
self._ats = AtsClient(client_wrapper=self._client_wrapper)
|
|
102
|
+
return self._ats
|
|
103
|
+
|
|
104
|
+
@property
|
|
105
|
+
def crm(self):
|
|
106
|
+
if self._crm is None:
|
|
107
|
+
from .resources.crm.client import CrmClient # noqa: E402
|
|
108
|
+
|
|
109
|
+
self._crm = CrmClient(client_wrapper=self._client_wrapper)
|
|
110
|
+
return self._crm
|
|
111
|
+
|
|
112
|
+
@property
|
|
113
|
+
def filestorage(self):
|
|
114
|
+
if self._filestorage is None:
|
|
115
|
+
from .resources.filestorage.client import FilestorageClient # noqa: E402
|
|
116
|
+
|
|
117
|
+
self._filestorage = FilestorageClient(client_wrapper=self._client_wrapper)
|
|
118
|
+
return self._filestorage
|
|
119
|
+
|
|
120
|
+
@property
|
|
121
|
+
def hris(self):
|
|
122
|
+
if self._hris is None:
|
|
123
|
+
from .resources.hris.client import HrisClient # noqa: E402
|
|
124
|
+
|
|
125
|
+
self._hris = HrisClient(client_wrapper=self._client_wrapper)
|
|
126
|
+
return self._hris
|
|
127
|
+
|
|
128
|
+
@property
|
|
129
|
+
def ticketing(self):
|
|
130
|
+
if self._ticketing is None:
|
|
131
|
+
from .resources.ticketing.client import TicketingClient # noqa: E402
|
|
132
|
+
|
|
133
|
+
self._ticketing = TicketingClient(client_wrapper=self._client_wrapper)
|
|
134
|
+
return self._ticketing
|
|
135
|
+
|
|
136
|
+
@property
|
|
137
|
+
def accounting(self):
|
|
138
|
+
if self._accounting is None:
|
|
139
|
+
from .resources.accounting.client import AccountingClient # noqa: E402
|
|
140
|
+
|
|
141
|
+
self._accounting = AccountingClient(client_wrapper=self._client_wrapper)
|
|
142
|
+
return self._accounting
|
|
91
143
|
|
|
92
144
|
|
|
93
145
|
class AsyncMerge:
|
|
@@ -159,12 +211,60 @@ class AsyncMerge:
|
|
|
159
211
|
else httpx.AsyncClient(timeout=_defaulted_timeout),
|
|
160
212
|
timeout=_defaulted_timeout,
|
|
161
213
|
)
|
|
162
|
-
self.
|
|
163
|
-
self.
|
|
164
|
-
self.
|
|
165
|
-
self.
|
|
166
|
-
self.
|
|
167
|
-
self.
|
|
214
|
+
self._ats: typing.Optional[AsyncAtsClient] = None
|
|
215
|
+
self._crm: typing.Optional[AsyncCrmClient] = None
|
|
216
|
+
self._filestorage: typing.Optional[AsyncFilestorageClient] = None
|
|
217
|
+
self._hris: typing.Optional[AsyncHrisClient] = None
|
|
218
|
+
self._ticketing: typing.Optional[AsyncTicketingClient] = None
|
|
219
|
+
self._accounting: typing.Optional[AsyncAccountingClient] = None
|
|
220
|
+
|
|
221
|
+
@property
|
|
222
|
+
def ats(self):
|
|
223
|
+
if self._ats is None:
|
|
224
|
+
from .resources.ats.client import AsyncAtsClient # noqa: E402
|
|
225
|
+
|
|
226
|
+
self._ats = AsyncAtsClient(client_wrapper=self._client_wrapper)
|
|
227
|
+
return self._ats
|
|
228
|
+
|
|
229
|
+
@property
|
|
230
|
+
def crm(self):
|
|
231
|
+
if self._crm is None:
|
|
232
|
+
from .resources.crm.client import AsyncCrmClient # noqa: E402
|
|
233
|
+
|
|
234
|
+
self._crm = AsyncCrmClient(client_wrapper=self._client_wrapper)
|
|
235
|
+
return self._crm
|
|
236
|
+
|
|
237
|
+
@property
|
|
238
|
+
def filestorage(self):
|
|
239
|
+
if self._filestorage is None:
|
|
240
|
+
from .resources.filestorage.client import AsyncFilestorageClient # noqa: E402
|
|
241
|
+
|
|
242
|
+
self._filestorage = AsyncFilestorageClient(client_wrapper=self._client_wrapper)
|
|
243
|
+
return self._filestorage
|
|
244
|
+
|
|
245
|
+
@property
|
|
246
|
+
def hris(self):
|
|
247
|
+
if self._hris is None:
|
|
248
|
+
from .resources.hris.client import AsyncHrisClient # noqa: E402
|
|
249
|
+
|
|
250
|
+
self._hris = AsyncHrisClient(client_wrapper=self._client_wrapper)
|
|
251
|
+
return self._hris
|
|
252
|
+
|
|
253
|
+
@property
|
|
254
|
+
def ticketing(self):
|
|
255
|
+
if self._ticketing is None:
|
|
256
|
+
from .resources.ticketing.client import AsyncTicketingClient # noqa: E402
|
|
257
|
+
|
|
258
|
+
self._ticketing = AsyncTicketingClient(client_wrapper=self._client_wrapper)
|
|
259
|
+
return self._ticketing
|
|
260
|
+
|
|
261
|
+
@property
|
|
262
|
+
def accounting(self):
|
|
263
|
+
if self._accounting is None:
|
|
264
|
+
from .resources.accounting.client import AsyncAccountingClient # noqa: E402
|
|
265
|
+
|
|
266
|
+
self._accounting = AsyncAccountingClient(client_wrapper=self._client_wrapper)
|
|
267
|
+
return self._accounting
|
|
168
268
|
|
|
169
269
|
|
|
170
270
|
def _get_base_url(*, base_url: typing.Optional[str] = None, environment: MergeEnvironment) -> str:
|
merge/core/__init__.py
CHANGED
|
@@ -2,27 +2,81 @@
|
|
|
2
2
|
|
|
3
3
|
# isort: skip_file
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
from
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
from .
|
|
10
|
-
from .
|
|
11
|
-
from .
|
|
12
|
-
from .
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
from .
|
|
5
|
+
import typing
|
|
6
|
+
from importlib import import_module
|
|
7
|
+
|
|
8
|
+
if typing.TYPE_CHECKING:
|
|
9
|
+
from .api_error import ApiError
|
|
10
|
+
from .client_wrapper import AsyncClientWrapper, BaseClientWrapper, SyncClientWrapper
|
|
11
|
+
from .datetime_utils import serialize_datetime
|
|
12
|
+
from .file import File, convert_file_dict_to_httpx_tuples, with_content_type
|
|
13
|
+
from .http_client import AsyncHttpClient, HttpClient
|
|
14
|
+
from .http_response import AsyncHttpResponse, HttpResponse
|
|
15
|
+
from .jsonable_encoder import jsonable_encoder
|
|
16
|
+
from .pydantic_utilities import (
|
|
17
|
+
IS_PYDANTIC_V2,
|
|
18
|
+
UniversalBaseModel,
|
|
19
|
+
UniversalRootModel,
|
|
20
|
+
parse_obj_as,
|
|
21
|
+
universal_field_validator,
|
|
22
|
+
universal_root_validator,
|
|
23
|
+
update_forward_refs,
|
|
24
|
+
)
|
|
25
|
+
from .query_encoder import encode_query
|
|
26
|
+
from .remove_none_from_dict import remove_none_from_dict
|
|
27
|
+
from .request_options import RequestOptions
|
|
28
|
+
from .serialization import FieldMetadata, convert_and_respect_annotation_metadata
|
|
29
|
+
from .unchecked_base_model import UncheckedBaseModel, UnionMetadata, construct_type
|
|
30
|
+
_dynamic_imports: typing.Dict[str, str] = {
|
|
31
|
+
"ApiError": ".api_error",
|
|
32
|
+
"AsyncClientWrapper": ".client_wrapper",
|
|
33
|
+
"AsyncHttpClient": ".http_client",
|
|
34
|
+
"AsyncHttpResponse": ".http_response",
|
|
35
|
+
"BaseClientWrapper": ".client_wrapper",
|
|
36
|
+
"FieldMetadata": ".serialization",
|
|
37
|
+
"File": ".file",
|
|
38
|
+
"HttpClient": ".http_client",
|
|
39
|
+
"HttpResponse": ".http_response",
|
|
40
|
+
"IS_PYDANTIC_V2": ".pydantic_utilities",
|
|
41
|
+
"RequestOptions": ".request_options",
|
|
42
|
+
"SyncClientWrapper": ".client_wrapper",
|
|
43
|
+
"UncheckedBaseModel": ".unchecked_base_model",
|
|
44
|
+
"UnionMetadata": ".unchecked_base_model",
|
|
45
|
+
"UniversalBaseModel": ".pydantic_utilities",
|
|
46
|
+
"UniversalRootModel": ".pydantic_utilities",
|
|
47
|
+
"construct_type": ".unchecked_base_model",
|
|
48
|
+
"convert_and_respect_annotation_metadata": ".serialization",
|
|
49
|
+
"convert_file_dict_to_httpx_tuples": ".file",
|
|
50
|
+
"encode_query": ".query_encoder",
|
|
51
|
+
"jsonable_encoder": ".jsonable_encoder",
|
|
52
|
+
"parse_obj_as": ".pydantic_utilities",
|
|
53
|
+
"remove_none_from_dict": ".remove_none_from_dict",
|
|
54
|
+
"serialize_datetime": ".datetime_utils",
|
|
55
|
+
"universal_field_validator": ".pydantic_utilities",
|
|
56
|
+
"universal_root_validator": ".pydantic_utilities",
|
|
57
|
+
"update_forward_refs": ".pydantic_utilities",
|
|
58
|
+
"with_content_type": ".file",
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
def __getattr__(attr_name: str) -> typing.Any:
|
|
63
|
+
module_name = _dynamic_imports.get(attr_name)
|
|
64
|
+
if module_name is None:
|
|
65
|
+
raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}")
|
|
66
|
+
try:
|
|
67
|
+
module = import_module(module_name, __package__)
|
|
68
|
+
result = getattr(module, attr_name)
|
|
69
|
+
return result
|
|
70
|
+
except ImportError as e:
|
|
71
|
+
raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e
|
|
72
|
+
except AttributeError as e:
|
|
73
|
+
raise AttributeError(f"Failed to get {attr_name} from {module_name}: {e}") from e
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def __dir__():
|
|
77
|
+
lazy_attrs = list(_dynamic_imports.keys())
|
|
78
|
+
return sorted(lazy_attrs)
|
|
79
|
+
|
|
26
80
|
|
|
27
81
|
__all__ = [
|
|
28
82
|
"ApiError",
|
merge/core/client_wrapper.py
CHANGED
|
@@ -24,10 +24,10 @@ class BaseClientWrapper:
|
|
|
24
24
|
|
|
25
25
|
def get_headers(self) -> typing.Dict[str, str]:
|
|
26
26
|
headers: typing.Dict[str, str] = {
|
|
27
|
-
"User-Agent": "MergePythonClient/2.
|
|
27
|
+
"User-Agent": "MergePythonClient/2.3.0",
|
|
28
28
|
"X-Fern-Language": "Python",
|
|
29
29
|
"X-Fern-SDK-Name": "MergePythonClient",
|
|
30
|
-
"X-Fern-SDK-Version": "2.
|
|
30
|
+
"X-Fern-SDK-Version": "2.3.0",
|
|
31
31
|
**(self.get_custom_headers() or {}),
|
|
32
32
|
}
|
|
33
33
|
if self._account_token is not None:
|
merge/resources/__init__.py
CHANGED
|
@@ -2,6 +2,38 @@
|
|
|
2
2
|
|
|
3
3
|
# isort: skip_file
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
import typing
|
|
6
|
+
from importlib import import_module
|
|
7
|
+
|
|
8
|
+
if typing.TYPE_CHECKING:
|
|
9
|
+
from . import accounting, ats, crm, filestorage, hris, ticketing
|
|
10
|
+
_dynamic_imports: typing.Dict[str, str] = {
|
|
11
|
+
"accounting": ".",
|
|
12
|
+
"ats": ".",
|
|
13
|
+
"crm": ".",
|
|
14
|
+
"filestorage": ".",
|
|
15
|
+
"hris": ".",
|
|
16
|
+
"ticketing": ".",
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def __getattr__(attr_name: str) -> typing.Any:
|
|
21
|
+
module_name = _dynamic_imports.get(attr_name)
|
|
22
|
+
if module_name is None:
|
|
23
|
+
raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}")
|
|
24
|
+
try:
|
|
25
|
+
module = import_module(module_name, __package__)
|
|
26
|
+
result = getattr(module, attr_name)
|
|
27
|
+
return result
|
|
28
|
+
except ImportError as e:
|
|
29
|
+
raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e
|
|
30
|
+
except AttributeError as e:
|
|
31
|
+
raise AttributeError(f"Failed to get {attr_name} from {module_name}: {e}") from e
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def __dir__():
|
|
35
|
+
lazy_attrs = list(_dynamic_imports.keys())
|
|
36
|
+
return sorted(lazy_attrs)
|
|
37
|
+
|
|
6
38
|
|
|
7
39
|
__all__ = ["accounting", "ats", "crm", "filestorage", "hris", "ticketing"]
|