mergepythonclient 2.2.0__py3-none-any.whl → 2.3.1__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.
Files changed (171) hide show
  1. merge/__init__.py +40 -4
  2. merge/client.py +118 -18
  3. merge/core/__init__.py +75 -21
  4. merge/core/client_wrapper.py +2 -2
  5. merge/resources/__init__.py +33 -1
  6. merge/resources/accounting/__init__.py +1240 -609
  7. merge/resources/accounting/client.py +835 -165
  8. merge/resources/accounting/resources/__init__.py +208 -92
  9. merge/resources/accounting/resources/accounts/__init__.py +36 -6
  10. merge/resources/accounting/resources/accounts/types/__init__.py +34 -4
  11. merge/resources/accounting/resources/async_passthrough/__init__.py +26 -1
  12. merge/resources/accounting/resources/async_passthrough/types/__init__.py +26 -1
  13. merge/resources/accounting/resources/company_info/__init__.py +29 -1
  14. merge/resources/accounting/resources/company_info/types/__init__.py +30 -2
  15. merge/resources/accounting/resources/contacts/__init__.py +29 -1
  16. merge/resources/accounting/resources/contacts/types/__init__.py +30 -2
  17. merge/resources/accounting/resources/credit_notes/__init__.py +40 -8
  18. merge/resources/accounting/resources/credit_notes/types/__init__.py +38 -6
  19. merge/resources/accounting/resources/expense_reports/__init__.py +34 -5
  20. merge/resources/accounting/resources/expense_reports/types/__init__.py +32 -3
  21. merge/resources/accounting/resources/expenses/__init__.py +29 -1
  22. merge/resources/accounting/resources/expenses/types/__init__.py +30 -2
  23. merge/resources/accounting/resources/general_ledger_transactions/__init__.py +29 -1
  24. merge/resources/accounting/resources/general_ledger_transactions/types/__init__.py +30 -2
  25. merge/resources/accounting/resources/invoices/__init__.py +36 -6
  26. merge/resources/accounting/resources/invoices/types/__init__.py +34 -4
  27. merge/resources/accounting/resources/issues/__init__.py +26 -1
  28. merge/resources/accounting/resources/issues/types/__init__.py +26 -1
  29. merge/resources/accounting/resources/items/__init__.py +26 -1
  30. merge/resources/accounting/resources/items/types/__init__.py +30 -2
  31. merge/resources/accounting/resources/journal_entries/__init__.py +29 -1
  32. merge/resources/accounting/resources/journal_entries/types/__init__.py +30 -2
  33. merge/resources/accounting/resources/link_token/__init__.py +26 -1
  34. merge/resources/accounting/resources/link_token/types/__init__.py +26 -1
  35. merge/resources/accounting/resources/linked_accounts/__init__.py +26 -1
  36. merge/resources/accounting/resources/linked_accounts/types/__init__.py +28 -1
  37. merge/resources/accounting/resources/payments/__init__.py +29 -1
  38. merge/resources/accounting/resources/payments/types/__init__.py +30 -2
  39. merge/resources/accounting/resources/projects/__init__.py +29 -1
  40. merge/resources/accounting/resources/projects/types/__init__.py +30 -2
  41. merge/resources/accounting/resources/purchase_orders/__init__.py +29 -1
  42. merge/resources/accounting/resources/purchase_orders/types/__init__.py +30 -2
  43. merge/resources/accounting/resources/transactions/__init__.py +29 -1
  44. merge/resources/accounting/resources/transactions/types/__init__.py +30 -2
  45. merge/resources/accounting/resources/vendor_credits/__init__.py +29 -1
  46. merge/resources/accounting/resources/vendor_credits/types/__init__.py +30 -2
  47. merge/resources/accounting/types/__init__.py +1068 -521
  48. merge/resources/ats/__init__.py +586 -282
  49. merge/resources/ats/client.py +590 -120
  50. merge/resources/ats/resources/__init__.py +150 -63
  51. merge/resources/ats/resources/activities/__init__.py +36 -6
  52. merge/resources/ats/resources/activities/types/__init__.py +34 -4
  53. merge/resources/ats/resources/applications/__init__.py +29 -1
  54. merge/resources/ats/resources/applications/types/__init__.py +30 -2
  55. merge/resources/ats/resources/async_passthrough/__init__.py +26 -1
  56. merge/resources/ats/resources/async_passthrough/types/__init__.py +26 -1
  57. merge/resources/ats/resources/candidates/__init__.py +30 -1
  58. merge/resources/ats/resources/candidates/types/__init__.py +32 -3
  59. merge/resources/ats/resources/eeocs/__init__.py +36 -6
  60. merge/resources/ats/resources/eeocs/types/__init__.py +34 -4
  61. merge/resources/ats/resources/interviews/__init__.py +29 -1
  62. merge/resources/ats/resources/interviews/types/__init__.py +30 -2
  63. merge/resources/ats/resources/issues/__init__.py +26 -1
  64. merge/resources/ats/resources/issues/types/__init__.py +26 -1
  65. merge/resources/ats/resources/job_postings/__init__.py +26 -1
  66. merge/resources/ats/resources/job_postings/types/__init__.py +26 -1
  67. merge/resources/ats/resources/jobs/__init__.py +36 -6
  68. merge/resources/ats/resources/jobs/types/__init__.py +34 -4
  69. merge/resources/ats/resources/link_token/__init__.py +26 -1
  70. merge/resources/ats/resources/link_token/types/__init__.py +26 -1
  71. merge/resources/ats/resources/linked_accounts/__init__.py +26 -1
  72. merge/resources/ats/resources/linked_accounts/types/__init__.py +28 -1
  73. merge/resources/ats/resources/offers/__init__.py +26 -1
  74. merge/resources/ats/resources/offers/types/__init__.py +30 -2
  75. merge/resources/ats/resources/scorecards/__init__.py +29 -1
  76. merge/resources/ats/resources/scorecards/types/__init__.py +30 -2
  77. merge/resources/ats/types/__init__.py +462 -219
  78. merge/resources/crm/__init__.py +566 -272
  79. merge/resources/crm/client.py +556 -114
  80. merge/resources/crm/resources/__init__.py +121 -47
  81. merge/resources/crm/resources/async_passthrough/__init__.py +26 -1
  82. merge/resources/crm/resources/async_passthrough/types/__init__.py +26 -1
  83. merge/resources/crm/resources/contacts/__init__.py +29 -1
  84. merge/resources/crm/resources/contacts/types/__init__.py +30 -2
  85. merge/resources/crm/resources/engagements/__init__.py +29 -1
  86. merge/resources/crm/resources/engagements/types/__init__.py +30 -2
  87. merge/resources/crm/resources/issues/__init__.py +26 -1
  88. merge/resources/crm/resources/issues/types/__init__.py +26 -1
  89. merge/resources/crm/resources/leads/__init__.py +26 -1
  90. merge/resources/crm/resources/leads/types/__init__.py +30 -2
  91. merge/resources/crm/resources/link_token/__init__.py +26 -1
  92. merge/resources/crm/resources/link_token/types/__init__.py +26 -1
  93. merge/resources/crm/resources/linked_accounts/__init__.py +26 -1
  94. merge/resources/crm/resources/linked_accounts/types/__init__.py +28 -1
  95. merge/resources/crm/resources/notes/__init__.py +26 -1
  96. merge/resources/crm/resources/notes/types/__init__.py +30 -2
  97. merge/resources/crm/resources/opportunities/__init__.py +34 -1
  98. merge/resources/crm/resources/opportunities/types/__init__.py +32 -3
  99. merge/resources/crm/resources/tasks/__init__.py +26 -1
  100. merge/resources/crm/resources/tasks/types/__init__.py +30 -2
  101. merge/resources/crm/types/__init__.py +470 -224
  102. merge/resources/filestorage/__init__.py +322 -150
  103. merge/resources/filestorage/client.py +405 -87
  104. merge/resources/filestorage/resources/__init__.py +91 -34
  105. merge/resources/filestorage/resources/async_passthrough/__init__.py +26 -1
  106. merge/resources/filestorage/resources/async_passthrough/types/__init__.py +26 -1
  107. merge/resources/filestorage/resources/files/__init__.py +36 -6
  108. merge/resources/filestorage/resources/files/types/__init__.py +34 -4
  109. merge/resources/filestorage/resources/folders/__init__.py +29 -1
  110. merge/resources/filestorage/resources/folders/types/__init__.py +30 -2
  111. merge/resources/filestorage/resources/issues/__init__.py +26 -1
  112. merge/resources/filestorage/resources/issues/types/__init__.py +26 -1
  113. merge/resources/filestorage/resources/linked_accounts/__init__.py +26 -1
  114. merge/resources/filestorage/resources/linked_accounts/types/__init__.py +28 -1
  115. merge/resources/filestorage/types/__init__.py +258 -117
  116. merge/resources/hris/__init__.py +576 -277
  117. merge/resources/hris/client.py +590 -120
  118. merge/resources/hris/resources/__init__.py +188 -86
  119. merge/resources/hris/resources/async_passthrough/__init__.py +26 -1
  120. merge/resources/hris/resources/async_passthrough/types/__init__.py +26 -1
  121. merge/resources/hris/resources/bank_info/__init__.py +29 -1
  122. merge/resources/hris/resources/bank_info/types/__init__.py +30 -2
  123. merge/resources/hris/resources/employee_payroll_runs/__init__.py +29 -1
  124. merge/resources/hris/resources/employee_payroll_runs/types/__init__.py +30 -2
  125. merge/resources/hris/resources/employees/__init__.py +44 -10
  126. merge/resources/hris/resources/employees/types/__init__.py +42 -8
  127. merge/resources/hris/resources/employments/__init__.py +42 -9
  128. merge/resources/hris/resources/employments/types/__init__.py +40 -7
  129. merge/resources/hris/resources/issues/__init__.py +26 -1
  130. merge/resources/hris/resources/issues/types/__init__.py +26 -1
  131. merge/resources/hris/resources/link_token/__init__.py +26 -1
  132. merge/resources/hris/resources/link_token/types/__init__.py +26 -1
  133. merge/resources/hris/resources/linked_accounts/__init__.py +26 -1
  134. merge/resources/hris/resources/linked_accounts/types/__init__.py +28 -1
  135. merge/resources/hris/resources/locations/__init__.py +38 -7
  136. merge/resources/hris/resources/locations/types/__init__.py +36 -5
  137. merge/resources/hris/resources/payroll_runs/__init__.py +38 -7
  138. merge/resources/hris/resources/payroll_runs/types/__init__.py +36 -5
  139. merge/resources/hris/resources/time_off/__init__.py +44 -10
  140. merge/resources/hris/resources/time_off/types/__init__.py +42 -8
  141. merge/resources/hris/resources/time_off_balances/__init__.py +26 -1
  142. merge/resources/hris/resources/time_off_balances/types/__init__.py +28 -1
  143. merge/resources/hris/resources/timesheet_entries/__init__.py +26 -1
  144. merge/resources/hris/resources/timesheet_entries/types/__init__.py +28 -1
  145. merge/resources/hris/types/__init__.py +422 -199
  146. merge/resources/ticketing/__init__.py +464 -221
  147. merge/resources/ticketing/client.py +507 -105
  148. merge/resources/ticketing/resources/__init__.py +120 -48
  149. merge/resources/ticketing/resources/async_passthrough/__init__.py +26 -1
  150. merge/resources/ticketing/resources/async_passthrough/types/__init__.py +26 -1
  151. merge/resources/ticketing/resources/collections/__init__.py +26 -1
  152. merge/resources/ticketing/resources/collections/types/__init__.py +28 -1
  153. merge/resources/ticketing/resources/comments/__init__.py +29 -1
  154. merge/resources/ticketing/resources/comments/types/__init__.py +30 -2
  155. merge/resources/ticketing/resources/issues/__init__.py +26 -1
  156. merge/resources/ticketing/resources/issues/types/__init__.py +26 -1
  157. merge/resources/ticketing/resources/link_token/__init__.py +26 -1
  158. merge/resources/ticketing/resources/link_token/types/__init__.py +26 -1
  159. merge/resources/ticketing/resources/linked_accounts/__init__.py +26 -1
  160. merge/resources/ticketing/resources/linked_accounts/types/__init__.py +28 -1
  161. merge/resources/ticketing/resources/projects/__init__.py +26 -1
  162. merge/resources/ticketing/resources/projects/types/__init__.py +26 -1
  163. merge/resources/ticketing/resources/tickets/__init__.py +44 -10
  164. merge/resources/ticketing/resources/tickets/types/__init__.py +42 -8
  165. merge/resources/ticketing/resources/users/__init__.py +26 -1
  166. merge/resources/ticketing/resources/users/types/__init__.py +30 -2
  167. merge/resources/ticketing/types/__init__.py +370 -173
  168. {mergepythonclient-2.2.0.dist-info → mergepythonclient-2.3.1.dist-info}/METADATA +2 -1
  169. {mergepythonclient-2.2.0.dist-info → mergepythonclient-2.3.1.dist-info}/RECORD +171 -171
  170. {mergepythonclient-2.2.0.dist-info → mergepythonclient-2.3.1.dist-info}/LICENSE.md +0 -0
  171. {mergepythonclient-2.2.0.dist-info → mergepythonclient-2.3.1.dist-info}/WHEEL +0 -0
merge/__init__.py CHANGED
@@ -2,10 +2,46 @@
2
2
 
3
3
  # isort: skip_file
4
4
 
5
- from .resources import accounting, ats, crm, filestorage, hris, ticketing
6
- from .client import AsyncMerge, Merge
7
- from .environment import MergeEnvironment
8
- from .version import __version__
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
- from .resources.accounting.client import AccountingClient, AsyncAccountingClient
9
- from .resources.ats.client import AsyncAtsClient, AtsClient
10
- from .resources.crm.client import AsyncCrmClient, CrmClient
11
- from .resources.filestorage.client import AsyncFilestorageClient, FilestorageClient
12
- from .resources.hris.client import AsyncHrisClient, HrisClient
13
- from .resources.ticketing.client import AsyncTicketingClient, TicketingClient
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.ats = AtsClient(client_wrapper=self._client_wrapper)
86
- self.crm = CrmClient(client_wrapper=self._client_wrapper)
87
- self.filestorage = FilestorageClient(client_wrapper=self._client_wrapper)
88
- self.hris = HrisClient(client_wrapper=self._client_wrapper)
89
- self.ticketing = TicketingClient(client_wrapper=self._client_wrapper)
90
- self.accounting = AccountingClient(client_wrapper=self._client_wrapper)
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.ats = AsyncAtsClient(client_wrapper=self._client_wrapper)
163
- self.crm = AsyncCrmClient(client_wrapper=self._client_wrapper)
164
- self.filestorage = AsyncFilestorageClient(client_wrapper=self._client_wrapper)
165
- self.hris = AsyncHrisClient(client_wrapper=self._client_wrapper)
166
- self.ticketing = AsyncTicketingClient(client_wrapper=self._client_wrapper)
167
- self.accounting = AsyncAccountingClient(client_wrapper=self._client_wrapper)
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
- from .api_error import ApiError
6
- from .client_wrapper import AsyncClientWrapper, BaseClientWrapper, SyncClientWrapper
7
- from .datetime_utils import serialize_datetime
8
- from .file import File, convert_file_dict_to_httpx_tuples, with_content_type
9
- from .http_client import AsyncHttpClient, HttpClient
10
- from .http_response import AsyncHttpResponse, HttpResponse
11
- from .jsonable_encoder import jsonable_encoder
12
- from .pydantic_utilities import (
13
- IS_PYDANTIC_V2,
14
- UniversalBaseModel,
15
- UniversalRootModel,
16
- parse_obj_as,
17
- universal_field_validator,
18
- universal_root_validator,
19
- update_forward_refs,
20
- )
21
- from .query_encoder import encode_query
22
- from .remove_none_from_dict import remove_none_from_dict
23
- from .request_options import RequestOptions
24
- from .serialization import FieldMetadata, convert_and_respect_annotation_metadata
25
- from .unchecked_base_model import UncheckedBaseModel, UnionMetadata, construct_type
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",
@@ -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.2.0",
27
+ "User-Agent": "MergePythonClient/2.3.1",
28
28
  "X-Fern-Language": "Python",
29
29
  "X-Fern-SDK-Name": "MergePythonClient",
30
- "X-Fern-SDK-Version": "2.2.0",
30
+ "X-Fern-SDK-Version": "2.3.1",
31
31
  **(self.get_custom_headers() or {}),
32
32
  }
33
33
  if self._account_token is not None:
@@ -2,6 +2,38 @@
2
2
 
3
3
  # isort: skip_file
4
4
 
5
- from . import accounting, ats, crm, filestorage, hris, ticketing
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"]