moovio_sdk 0.9.0__py3-none-any.whl → 0.10.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.
- moovio_sdk/_version.py +3 -3
- moovio_sdk/httpclient.py +7 -37
- moovio_sdk/models/__init__.py +0 -1
- moovio_sdk/models/components/__init__.py +1804 -845
- moovio_sdk/models/components/sweep.py +7 -1
- moovio_sdk/models/components/sweepsubtotal.py +27 -0
- moovio_sdk/models/errors/__init__.py +193 -77
- moovio_sdk/models/internal/__init__.py +35 -1
- moovio_sdk/models/operations/__init__.py +1908 -1073
- moovio_sdk/sdk.py +142 -104
- moovio_sdk/utils/__init__.py +131 -46
- {moovio_sdk-0.9.0.dist-info → moovio_sdk-0.10.0.dist-info}/METADATA +45 -376
- {moovio_sdk-0.9.0.dist-info → moovio_sdk-0.10.0.dist-info}/RECORD +14 -13
- {moovio_sdk-0.9.0.dist-info → moovio_sdk-0.10.0.dist-info}/WHEEL +0 -0
moovio_sdk/sdk.py
CHANGED
@@ -6,46 +6,49 @@ from .sdkconfiguration import SDKConfiguration
|
|
6
6
|
from .utils.logger import Logger, get_default_logger
|
7
7
|
from .utils.retries import RetryConfig
|
8
8
|
import httpx
|
9
|
+
import importlib
|
9
10
|
from moovio_sdk import utils
|
10
11
|
from moovio_sdk._hooks import SDKHooks
|
11
|
-
from moovio_sdk.account_terminal_applications import AccountTerminalApplications
|
12
|
-
from moovio_sdk.accounts import Accounts
|
13
|
-
from moovio_sdk.adjustments import Adjustments
|
14
|
-
from moovio_sdk.apple_pay import ApplePay
|
15
|
-
from moovio_sdk.authentication import Authentication
|
16
|
-
from moovio_sdk.avatars import Avatars
|
17
|
-
from moovio_sdk.bank_accounts import BankAccounts
|
18
|
-
from moovio_sdk.branding import Branding
|
19
|
-
from moovio_sdk.capabilities import Capabilities
|
20
|
-
from moovio_sdk.card_issuing import CardIssuing
|
21
|
-
from moovio_sdk.cards import Cards
|
22
|
-
from moovio_sdk.disputes import Disputes
|
23
|
-
from moovio_sdk.end_to_end_encryption import EndToEndEncryption
|
24
|
-
from moovio_sdk.enriched_address import EnrichedAddress
|
25
|
-
from moovio_sdk.enriched_profile import EnrichedProfile
|
26
|
-
from moovio_sdk.fee_plans import FeePlans
|
27
|
-
from moovio_sdk.files import Files
|
28
|
-
from moovio_sdk.industries import Industries
|
29
|
-
from moovio_sdk.institutions import Institutions
|
30
|
-
from moovio_sdk.issuing_transactions import IssuingTransactions
|
31
12
|
from moovio_sdk.models import components, internal
|
32
|
-
from moovio_sdk.onboarding import Onboarding
|
33
|
-
from moovio_sdk.payment_links import PaymentLinks
|
34
|
-
from moovio_sdk.payment_methods import PaymentMethods
|
35
|
-
from moovio_sdk.ping import Ping
|
36
|
-
from moovio_sdk.receipts import Receipts
|
37
|
-
from moovio_sdk.representatives import Representatives
|
38
|
-
from moovio_sdk.scheduling import Scheduling
|
39
|
-
from moovio_sdk.sweeps import Sweeps
|
40
|
-
from moovio_sdk.terminal_applications import TerminalApplications
|
41
|
-
from moovio_sdk.transfers import Transfers
|
42
13
|
from moovio_sdk.types import OptionalNullable, UNSET
|
43
|
-
from
|
44
|
-
from moovio_sdk.wallet_transactions import WalletTransactions
|
45
|
-
from moovio_sdk.wallets import Wallets
|
46
|
-
from typing import Callable, Dict, Optional, Union, cast
|
14
|
+
from typing import Callable, Dict, Optional, TYPE_CHECKING, Union, cast
|
47
15
|
import weakref
|
48
16
|
|
17
|
+
if TYPE_CHECKING:
|
18
|
+
from moovio_sdk.account_terminal_applications import AccountTerminalApplications
|
19
|
+
from moovio_sdk.accounts import Accounts
|
20
|
+
from moovio_sdk.adjustments import Adjustments
|
21
|
+
from moovio_sdk.apple_pay import ApplePay
|
22
|
+
from moovio_sdk.authentication import Authentication
|
23
|
+
from moovio_sdk.avatars import Avatars
|
24
|
+
from moovio_sdk.bank_accounts import BankAccounts
|
25
|
+
from moovio_sdk.branding import Branding
|
26
|
+
from moovio_sdk.capabilities import Capabilities
|
27
|
+
from moovio_sdk.card_issuing import CardIssuing
|
28
|
+
from moovio_sdk.cards import Cards
|
29
|
+
from moovio_sdk.disputes import Disputes
|
30
|
+
from moovio_sdk.end_to_end_encryption import EndToEndEncryption
|
31
|
+
from moovio_sdk.enriched_address import EnrichedAddress
|
32
|
+
from moovio_sdk.enriched_profile import EnrichedProfile
|
33
|
+
from moovio_sdk.fee_plans import FeePlans
|
34
|
+
from moovio_sdk.files import Files
|
35
|
+
from moovio_sdk.industries import Industries
|
36
|
+
from moovio_sdk.institutions import Institutions
|
37
|
+
from moovio_sdk.issuing_transactions import IssuingTransactions
|
38
|
+
from moovio_sdk.onboarding import Onboarding
|
39
|
+
from moovio_sdk.payment_links import PaymentLinks
|
40
|
+
from moovio_sdk.payment_methods import PaymentMethods
|
41
|
+
from moovio_sdk.ping import Ping
|
42
|
+
from moovio_sdk.receipts import Receipts
|
43
|
+
from moovio_sdk.representatives import Representatives
|
44
|
+
from moovio_sdk.scheduling import Scheduling
|
45
|
+
from moovio_sdk.sweeps import Sweeps
|
46
|
+
from moovio_sdk.terminal_applications import TerminalApplications
|
47
|
+
from moovio_sdk.transfers import Transfers
|
48
|
+
from moovio_sdk.underwriting import Underwriting
|
49
|
+
from moovio_sdk.wallet_transactions import WalletTransactions
|
50
|
+
from moovio_sdk.wallets import Wallets
|
51
|
+
|
49
52
|
|
50
53
|
class Moov(BaseSDK):
|
51
54
|
r"""Moov API: Moov is a platform that enables developers to integrate all aspects of money movement with ease and speed.
|
@@ -54,39 +57,86 @@ class Moov(BaseSDK):
|
|
54
57
|
works at a high level, read our [concepts](https://docs.moov.io/guides/get-started/glossary/) guide.
|
55
58
|
"""
|
56
59
|
|
57
|
-
accounts: Accounts
|
58
|
-
adjustments: Adjustments
|
59
|
-
apple_pay: ApplePay
|
60
|
-
bank_accounts: BankAccounts
|
61
|
-
branding: Branding
|
62
|
-
capabilities: Capabilities
|
63
|
-
cards: Cards
|
64
|
-
disputes: Disputes
|
65
|
-
fee_plans: FeePlans
|
66
|
-
files: Files
|
67
|
-
payment_links: PaymentLinks
|
68
|
-
payment_methods: PaymentMethods
|
69
|
-
representatives: Representatives
|
70
|
-
scheduling: Scheduling
|
71
|
-
sweeps: Sweeps
|
72
|
-
account_terminal_applications: AccountTerminalApplications
|
73
|
-
transfers: Transfers
|
74
|
-
underwriting: Underwriting
|
75
|
-
wallets: Wallets
|
76
|
-
wallet_transactions: WalletTransactions
|
77
|
-
avatars: Avatars
|
78
|
-
end_to_end_encryption: EndToEndEncryption
|
79
|
-
enriched_address: EnrichedAddress
|
80
|
-
enriched_profile: EnrichedProfile
|
81
|
-
industries: Industries
|
82
|
-
institutions: Institutions
|
83
|
-
issuing_transactions: IssuingTransactions
|
84
|
-
card_issuing: CardIssuing
|
85
|
-
authentication: Authentication
|
86
|
-
onboarding: Onboarding
|
87
|
-
ping: Ping
|
88
|
-
receipts: Receipts
|
89
|
-
terminal_applications: TerminalApplications
|
60
|
+
accounts: "Accounts"
|
61
|
+
adjustments: "Adjustments"
|
62
|
+
apple_pay: "ApplePay"
|
63
|
+
bank_accounts: "BankAccounts"
|
64
|
+
branding: "Branding"
|
65
|
+
capabilities: "Capabilities"
|
66
|
+
cards: "Cards"
|
67
|
+
disputes: "Disputes"
|
68
|
+
fee_plans: "FeePlans"
|
69
|
+
files: "Files"
|
70
|
+
payment_links: "PaymentLinks"
|
71
|
+
payment_methods: "PaymentMethods"
|
72
|
+
representatives: "Representatives"
|
73
|
+
scheduling: "Scheduling"
|
74
|
+
sweeps: "Sweeps"
|
75
|
+
account_terminal_applications: "AccountTerminalApplications"
|
76
|
+
transfers: "Transfers"
|
77
|
+
underwriting: "Underwriting"
|
78
|
+
wallets: "Wallets"
|
79
|
+
wallet_transactions: "WalletTransactions"
|
80
|
+
avatars: "Avatars"
|
81
|
+
end_to_end_encryption: "EndToEndEncryption"
|
82
|
+
enriched_address: "EnrichedAddress"
|
83
|
+
enriched_profile: "EnrichedProfile"
|
84
|
+
industries: "Industries"
|
85
|
+
institutions: "Institutions"
|
86
|
+
issuing_transactions: "IssuingTransactions"
|
87
|
+
card_issuing: "CardIssuing"
|
88
|
+
authentication: "Authentication"
|
89
|
+
onboarding: "Onboarding"
|
90
|
+
ping: "Ping"
|
91
|
+
receipts: "Receipts"
|
92
|
+
terminal_applications: "TerminalApplications"
|
93
|
+
_sub_sdk_map = {
|
94
|
+
"accounts": ("moovio_sdk.accounts", "Accounts"),
|
95
|
+
"adjustments": ("moovio_sdk.adjustments", "Adjustments"),
|
96
|
+
"apple_pay": ("moovio_sdk.apple_pay", "ApplePay"),
|
97
|
+
"bank_accounts": ("moovio_sdk.bank_accounts", "BankAccounts"),
|
98
|
+
"branding": ("moovio_sdk.branding", "Branding"),
|
99
|
+
"capabilities": ("moovio_sdk.capabilities", "Capabilities"),
|
100
|
+
"cards": ("moovio_sdk.cards", "Cards"),
|
101
|
+
"disputes": ("moovio_sdk.disputes", "Disputes"),
|
102
|
+
"fee_plans": ("moovio_sdk.fee_plans", "FeePlans"),
|
103
|
+
"files": ("moovio_sdk.files", "Files"),
|
104
|
+
"payment_links": ("moovio_sdk.payment_links", "PaymentLinks"),
|
105
|
+
"payment_methods": ("moovio_sdk.payment_methods", "PaymentMethods"),
|
106
|
+
"representatives": ("moovio_sdk.representatives", "Representatives"),
|
107
|
+
"scheduling": ("moovio_sdk.scheduling", "Scheduling"),
|
108
|
+
"sweeps": ("moovio_sdk.sweeps", "Sweeps"),
|
109
|
+
"account_terminal_applications": (
|
110
|
+
"moovio_sdk.account_terminal_applications",
|
111
|
+
"AccountTerminalApplications",
|
112
|
+
),
|
113
|
+
"transfers": ("moovio_sdk.transfers", "Transfers"),
|
114
|
+
"underwriting": ("moovio_sdk.underwriting", "Underwriting"),
|
115
|
+
"wallets": ("moovio_sdk.wallets", "Wallets"),
|
116
|
+
"wallet_transactions": ("moovio_sdk.wallet_transactions", "WalletTransactions"),
|
117
|
+
"avatars": ("moovio_sdk.avatars", "Avatars"),
|
118
|
+
"end_to_end_encryption": (
|
119
|
+
"moovio_sdk.end_to_end_encryption",
|
120
|
+
"EndToEndEncryption",
|
121
|
+
),
|
122
|
+
"enriched_address": ("moovio_sdk.enriched_address", "EnrichedAddress"),
|
123
|
+
"enriched_profile": ("moovio_sdk.enriched_profile", "EnrichedProfile"),
|
124
|
+
"industries": ("moovio_sdk.industries", "Industries"),
|
125
|
+
"institutions": ("moovio_sdk.institutions", "Institutions"),
|
126
|
+
"issuing_transactions": (
|
127
|
+
"moovio_sdk.issuing_transactions",
|
128
|
+
"IssuingTransactions",
|
129
|
+
),
|
130
|
+
"card_issuing": ("moovio_sdk.card_issuing", "CardIssuing"),
|
131
|
+
"authentication": ("moovio_sdk.authentication", "Authentication"),
|
132
|
+
"onboarding": ("moovio_sdk.onboarding", "Onboarding"),
|
133
|
+
"ping": ("moovio_sdk.ping", "Ping"),
|
134
|
+
"receipts": ("moovio_sdk.receipts", "Receipts"),
|
135
|
+
"terminal_applications": (
|
136
|
+
"moovio_sdk.terminal_applications",
|
137
|
+
"TerminalApplications",
|
138
|
+
),
|
139
|
+
}
|
90
140
|
|
91
141
|
def __init__(
|
92
142
|
self,
|
@@ -185,44 +235,32 @@ class Moov(BaseSDK):
|
|
185
235
|
self.sdk_configuration.async_client_supplied,
|
186
236
|
)
|
187
237
|
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
self.
|
238
|
+
def __getattr__(self, name: str):
|
239
|
+
if name in self._sub_sdk_map:
|
240
|
+
module_path, class_name = self._sub_sdk_map[name]
|
241
|
+
try:
|
242
|
+
module = importlib.import_module(module_path)
|
243
|
+
klass = getattr(module, class_name)
|
244
|
+
instance = klass(self.sdk_configuration)
|
245
|
+
setattr(self, name, instance)
|
246
|
+
return instance
|
247
|
+
except ImportError as e:
|
248
|
+
raise AttributeError(
|
249
|
+
f"Failed to import module {module_path} for attribute {name}: {e}"
|
250
|
+
) from e
|
251
|
+
except AttributeError as e:
|
252
|
+
raise AttributeError(
|
253
|
+
f"Failed to find class {class_name} in module {module_path} for attribute {name}: {e}"
|
254
|
+
) from e
|
255
|
+
|
256
|
+
raise AttributeError(
|
257
|
+
f"'{type(self).__name__}' object has no attribute '{name}'"
|
208
258
|
)
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
self.end_to_end_encryption = EndToEndEncryption(self.sdk_configuration)
|
215
|
-
self.enriched_address = EnrichedAddress(self.sdk_configuration)
|
216
|
-
self.enriched_profile = EnrichedProfile(self.sdk_configuration)
|
217
|
-
self.industries = Industries(self.sdk_configuration)
|
218
|
-
self.institutions = Institutions(self.sdk_configuration)
|
219
|
-
self.issuing_transactions = IssuingTransactions(self.sdk_configuration)
|
220
|
-
self.card_issuing = CardIssuing(self.sdk_configuration)
|
221
|
-
self.authentication = Authentication(self.sdk_configuration)
|
222
|
-
self.onboarding = Onboarding(self.sdk_configuration)
|
223
|
-
self.ping = Ping(self.sdk_configuration)
|
224
|
-
self.receipts = Receipts(self.sdk_configuration)
|
225
|
-
self.terminal_applications = TerminalApplications(self.sdk_configuration)
|
259
|
+
|
260
|
+
def __dir__(self):
|
261
|
+
default_attrs = list(super().__dir__())
|
262
|
+
lazy_attrs = list(self._sub_sdk_map.keys())
|
263
|
+
return sorted(list(set(default_attrs + lazy_attrs)))
|
226
264
|
|
227
265
|
def __enter__(self):
|
228
266
|
return self
|
moovio_sdk/utils/__init__.py
CHANGED
@@ -1,52 +1,56 @@
|
|
1
1
|
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
2
2
|
|
3
|
-
from
|
4
|
-
from
|
5
|
-
from .enums import OpenEnumMeta
|
6
|
-
from .headers import get_headers, get_response_headers
|
7
|
-
from .metadata import (
|
8
|
-
FieldMetadata,
|
9
|
-
find_metadata,
|
10
|
-
FormMetadata,
|
11
|
-
HeaderMetadata,
|
12
|
-
MultipartFormMetadata,
|
13
|
-
PathParamMetadata,
|
14
|
-
QueryParamMetadata,
|
15
|
-
RequestMetadata,
|
16
|
-
SecurityMetadata,
|
17
|
-
)
|
18
|
-
from .queryparams import get_query_params
|
19
|
-
from .retries import BackoffStrategy, Retries, retry, retry_async, RetryConfig
|
20
|
-
from .requestbodies import serialize_request_body, SerializedRequestBody
|
21
|
-
from .security import get_security, get_security_from_env
|
3
|
+
from typing import TYPE_CHECKING
|
4
|
+
from importlib import import_module
|
22
5
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
from .
|
42
|
-
from .
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
6
|
+
if TYPE_CHECKING:
|
7
|
+
from .annotations import get_discriminator
|
8
|
+
from .datetimes import parse_datetime
|
9
|
+
from .enums import OpenEnumMeta
|
10
|
+
from .headers import get_headers, get_response_headers
|
11
|
+
from .metadata import (
|
12
|
+
FieldMetadata,
|
13
|
+
find_metadata,
|
14
|
+
FormMetadata,
|
15
|
+
HeaderMetadata,
|
16
|
+
MultipartFormMetadata,
|
17
|
+
PathParamMetadata,
|
18
|
+
QueryParamMetadata,
|
19
|
+
RequestMetadata,
|
20
|
+
SecurityMetadata,
|
21
|
+
)
|
22
|
+
from .queryparams import get_query_params
|
23
|
+
from .retries import BackoffStrategy, Retries, retry, retry_async, RetryConfig
|
24
|
+
from .requestbodies import serialize_request_body, SerializedRequestBody
|
25
|
+
from .security import get_security, get_security_from_env
|
26
|
+
|
27
|
+
from .serializers import (
|
28
|
+
get_pydantic_model,
|
29
|
+
marshal_json,
|
30
|
+
unmarshal,
|
31
|
+
unmarshal_json,
|
32
|
+
serialize_decimal,
|
33
|
+
serialize_float,
|
34
|
+
serialize_int,
|
35
|
+
stream_to_text,
|
36
|
+
stream_to_text_async,
|
37
|
+
stream_to_bytes,
|
38
|
+
stream_to_bytes_async,
|
39
|
+
validate_const,
|
40
|
+
validate_decimal,
|
41
|
+
validate_float,
|
42
|
+
validate_int,
|
43
|
+
validate_open_enum,
|
44
|
+
)
|
45
|
+
from .url import generate_url, template_url, remove_suffix
|
46
|
+
from .values import (
|
47
|
+
get_global_from_env,
|
48
|
+
match_content_type,
|
49
|
+
match_status_codes,
|
50
|
+
match_response,
|
51
|
+
cast_partial,
|
52
|
+
)
|
53
|
+
from .logger import Logger, get_body_content, get_default_logger
|
50
54
|
|
51
55
|
__all__ = [
|
52
56
|
"BackoffStrategy",
|
@@ -57,6 +61,7 @@ __all__ = [
|
|
57
61
|
"get_body_content",
|
58
62
|
"get_default_logger",
|
59
63
|
"get_discriminator",
|
64
|
+
"parse_datetime",
|
60
65
|
"get_global_from_env",
|
61
66
|
"get_headers",
|
62
67
|
"get_pydantic_model",
|
@@ -100,3 +105,83 @@ __all__ = [
|
|
100
105
|
"validate_open_enum",
|
101
106
|
"cast_partial",
|
102
107
|
]
|
108
|
+
|
109
|
+
_dynamic_imports: dict[str, str] = {
|
110
|
+
"BackoffStrategy": ".retries",
|
111
|
+
"FieldMetadata": ".metadata",
|
112
|
+
"find_metadata": ".metadata",
|
113
|
+
"FormMetadata": ".metadata",
|
114
|
+
"generate_url": ".url",
|
115
|
+
"get_body_content": ".logger",
|
116
|
+
"get_default_logger": ".logger",
|
117
|
+
"get_discriminator": ".annotations",
|
118
|
+
"parse_datetime": ".datetimes",
|
119
|
+
"get_global_from_env": ".values",
|
120
|
+
"get_headers": ".headers",
|
121
|
+
"get_pydantic_model": ".serializers",
|
122
|
+
"get_query_params": ".queryparams",
|
123
|
+
"get_response_headers": ".headers",
|
124
|
+
"get_security": ".security",
|
125
|
+
"get_security_from_env": ".security",
|
126
|
+
"HeaderMetadata": ".metadata",
|
127
|
+
"Logger": ".logger",
|
128
|
+
"marshal_json": ".serializers",
|
129
|
+
"match_content_type": ".values",
|
130
|
+
"match_status_codes": ".values",
|
131
|
+
"match_response": ".values",
|
132
|
+
"MultipartFormMetadata": ".metadata",
|
133
|
+
"OpenEnumMeta": ".enums",
|
134
|
+
"PathParamMetadata": ".metadata",
|
135
|
+
"QueryParamMetadata": ".metadata",
|
136
|
+
"remove_suffix": ".url",
|
137
|
+
"Retries": ".retries",
|
138
|
+
"retry": ".retries",
|
139
|
+
"retry_async": ".retries",
|
140
|
+
"RetryConfig": ".retries",
|
141
|
+
"RequestMetadata": ".metadata",
|
142
|
+
"SecurityMetadata": ".metadata",
|
143
|
+
"serialize_decimal": ".serializers",
|
144
|
+
"serialize_float": ".serializers",
|
145
|
+
"serialize_int": ".serializers",
|
146
|
+
"serialize_request_body": ".requestbodies",
|
147
|
+
"SerializedRequestBody": ".requestbodies",
|
148
|
+
"stream_to_text": ".serializers",
|
149
|
+
"stream_to_text_async": ".serializers",
|
150
|
+
"stream_to_bytes": ".serializers",
|
151
|
+
"stream_to_bytes_async": ".serializers",
|
152
|
+
"template_url": ".url",
|
153
|
+
"unmarshal": ".serializers",
|
154
|
+
"unmarshal_json": ".serializers",
|
155
|
+
"validate_decimal": ".serializers",
|
156
|
+
"validate_const": ".serializers",
|
157
|
+
"validate_float": ".serializers",
|
158
|
+
"validate_int": ".serializers",
|
159
|
+
"validate_open_enum": ".serializers",
|
160
|
+
"cast_partial": ".values",
|
161
|
+
}
|
162
|
+
|
163
|
+
|
164
|
+
def __getattr__(attr_name: str) -> object:
|
165
|
+
module_name = _dynamic_imports.get(attr_name)
|
166
|
+
if module_name is None:
|
167
|
+
raise AttributeError(
|
168
|
+
f"no {attr_name} found in _dynamic_imports, module name -> {__name__} "
|
169
|
+
)
|
170
|
+
|
171
|
+
try:
|
172
|
+
module = import_module(module_name, __package__)
|
173
|
+
result = getattr(module, attr_name)
|
174
|
+
return result
|
175
|
+
except ImportError as e:
|
176
|
+
raise ImportError(
|
177
|
+
f"Failed to import {attr_name} from {module_name}: {e}"
|
178
|
+
) from e
|
179
|
+
except AttributeError as e:
|
180
|
+
raise AttributeError(
|
181
|
+
f"Failed to get {attr_name} from {module_name}: {e}"
|
182
|
+
) from e
|
183
|
+
|
184
|
+
|
185
|
+
def __dir__():
|
186
|
+
lazy_attrs = list(_dynamic_imports.keys())
|
187
|
+
return sorted(lazy_attrs)
|