latitudesh-python-sdk 1.0.0__py3-none-any.whl → 2.0.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.

Potentially problematic release.


This version of latitudesh-python-sdk might be problematic. Click here for more details.

Files changed (96) hide show
  1. latitudesh_python_sdk/_hooks/types.py +7 -0
  2. latitudesh_python_sdk/_version.py +6 -4
  3. latitudesh_python_sdk/apikeys.py +22 -18
  4. latitudesh_python_sdk/basesdk.py +12 -20
  5. latitudesh_python_sdk/billing.py +2 -0
  6. latitudesh_python_sdk/events_sdk.py +86 -5
  7. latitudesh_python_sdk/firewalls_sdk.py +146 -9
  8. latitudesh_python_sdk/httpclient.py +6 -16
  9. latitudesh_python_sdk/ipaddresses_sdk.py +82 -5
  10. latitudesh_python_sdk/models/__init__.py +2597 -1071
  11. latitudesh_python_sdk/models/assign_server_virtual_networkop.py +2 -2
  12. latitudesh_python_sdk/models/{bandwidth_plan.py → bandwidth_plan_data.py} +9 -9
  13. latitudesh_python_sdk/models/bandwidth_plans.py +14 -3
  14. latitudesh_python_sdk/models/billing_usage.py +3 -0
  15. latitudesh_python_sdk/models/custom_tag.py +15 -0
  16. latitudesh_python_sdk/models/custom_tag_data.py +54 -0
  17. latitudesh_python_sdk/models/custom_tags.py +26 -0
  18. latitudesh_python_sdk/models/delete_ssh_keyop.py +16 -0
  19. latitudesh_python_sdk/models/delete_user_dataop.py +16 -0
  20. latitudesh_python_sdk/models/event_data.py +98 -0
  21. latitudesh_python_sdk/models/events.py +16 -1
  22. latitudesh_python_sdk/models/filesystem_data.py +4 -0
  23. latitudesh_python_sdk/models/firewall.py +15 -0
  24. latitudesh_python_sdk/models/firewall_assignment_data.py +50 -0
  25. latitudesh_python_sdk/models/firewall_assignments.py +29 -0
  26. latitudesh_python_sdk/models/firewall_data.py +71 -0
  27. latitudesh_python_sdk/models/firewall_server.py +4 -1
  28. latitudesh_python_sdk/models/firewalls.py +7 -7
  29. latitudesh_python_sdk/models/get_bandwidth_plansop.py +30 -1
  30. latitudesh_python_sdk/models/get_eventsop.py +29 -1
  31. latitudesh_python_sdk/models/get_firewall_assignmentsop.py +37 -2
  32. latitudesh_python_sdk/models/get_ipsop.py +30 -1
  33. latitudesh_python_sdk/models/get_plans_operating_systemop.py +37 -2
  34. latitudesh_python_sdk/models/get_projectsop.py +30 -1
  35. latitudesh_python_sdk/models/get_regionsop.py +42 -0
  36. latitudesh_python_sdk/models/get_rolesop.py +37 -2
  37. latitudesh_python_sdk/models/get_serversop.py +30 -1
  38. latitudesh_python_sdk/models/get_ssh_keyop.py +30 -0
  39. latitudesh_python_sdk/models/get_ssh_keysop.py +22 -0
  40. latitudesh_python_sdk/models/get_team_membersop.py +42 -0
  41. latitudesh_python_sdk/models/get_traffic_consumptionop.py +8 -4
  42. latitudesh_python_sdk/models/get_user_dataop.py +31 -0
  43. latitudesh_python_sdk/models/get_users_dataop.py +35 -0
  44. latitudesh_python_sdk/models/get_virtual_networks_assignmentsop.py +33 -1
  45. latitudesh_python_sdk/models/get_virtual_networksop.py +30 -1
  46. latitudesh_python_sdk/models/list_firewallsop.py +30 -1
  47. latitudesh_python_sdk/models/operating_system_data.py +65 -0
  48. latitudesh_python_sdk/models/operating_systems.py +15 -0
  49. latitudesh_python_sdk/models/out_of_band_connection.py +4 -4
  50. latitudesh_python_sdk/models/patch_user_dataop.py +69 -0
  51. latitudesh_python_sdk/models/post_ssh_keyop.py +58 -0
  52. latitudesh_python_sdk/models/post_user_dataop.py +45 -0
  53. latitudesh_python_sdk/models/project_include.py +3 -0
  54. latitudesh_python_sdk/models/put_ssh_keyop.py +80 -0
  55. latitudesh_python_sdk/models/role.py +11 -0
  56. latitudesh_python_sdk/models/server_data.py +8 -0
  57. latitudesh_python_sdk/models/{ssh_key.py → ssh_keys.py} +13 -2
  58. latitudesh_python_sdk/models/storage_plan_data.py +47 -0
  59. latitudesh_python_sdk/models/storage_plans.py +14 -3
  60. latitudesh_python_sdk/models/update_serverop.py +60 -10
  61. latitudesh_python_sdk/models/user_data.py +11 -0
  62. latitudesh_python_sdk/models/virtual_network.py +19 -1
  63. latitudesh_python_sdk/models/virtual_network1.py +15 -0
  64. latitudesh_python_sdk/models/virtual_network_assignment.py +41 -0
  65. latitudesh_python_sdk/models/virtual_network_assignment_data.py +68 -0
  66. latitudesh_python_sdk/models/virtual_network_assignments.py +5 -5
  67. latitudesh_python_sdk/models/virtual_network_data.py +88 -0
  68. latitudesh_python_sdk/models/virtual_networks.py +3 -3
  69. latitudesh_python_sdk/operatingsystems_sdk.py +78 -9
  70. latitudesh_python_sdk/plans.py +109 -30
  71. latitudesh_python_sdk/privatenetworks.py +185 -36
  72. latitudesh_python_sdk/projects_sdk.py +113 -32
  73. latitudesh_python_sdk/regions_sdk.py +78 -7
  74. latitudesh_python_sdk/roles.py +78 -7
  75. latitudesh_python_sdk/sdk.py +110 -73
  76. latitudesh_python_sdk/sdkconfiguration.py +0 -7
  77. latitudesh_python_sdk/servers_sdk.py +195 -50
  78. latitudesh_python_sdk/{sshkeys.py → sshkeys_sdk.py} +1030 -5
  79. latitudesh_python_sdk/storage.py +8 -0
  80. latitudesh_python_sdk/tags.py +30 -22
  81. latitudesh_python_sdk/teams_sdk.py +6 -0
  82. latitudesh_python_sdk/teamsmembers.py +80 -7
  83. latitudesh_python_sdk/traffic_sdk.py +12 -8
  84. latitudesh_python_sdk/userdata_sdk.py +1029 -0
  85. latitudesh_python_sdk/userprofile.py +6 -0
  86. latitudesh_python_sdk/utils/__init__.py +131 -45
  87. latitudesh_python_sdk/utils/datetimes.py +23 -0
  88. latitudesh_python_sdk/utils/forms.py +49 -28
  89. latitudesh_python_sdk/utils/serializers.py +32 -3
  90. latitudesh_python_sdk/virtualmachines.py +36 -18
  91. latitudesh_python_sdk/vpnsessions.py +38 -26
  92. {latitudesh_python_sdk-1.0.0.dist-info → latitudesh_python_sdk-2.0.0.dist-info}/METADATA +58 -22
  93. {latitudesh_python_sdk-1.0.0.dist-info → latitudesh_python_sdk-2.0.0.dist-info}/RECORD +95 -73
  94. {latitudesh_python_sdk-1.0.0.dist-info → latitudesh_python_sdk-2.0.0.dist-info}/WHEEL +1 -1
  95. latitudesh_python_sdk/models/storage_plan.py +0 -36
  96. {latitudesh_python_sdk-1.0.0.dist-info → latitudesh_python_sdk-2.0.0.dist-info}/LICENSE +0 -0
@@ -1,27 +1,32 @@
1
1
  """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
2
 
3
3
  from .basesdk import BaseSDK
4
+ from jsonpath import JSONPath
4
5
  from latitudesh_python_sdk import models, utils
5
6
  from latitudesh_python_sdk._hooks import HookContext
6
7
  from latitudesh_python_sdk.types import OptionalNullable, UNSET
7
8
  from latitudesh_python_sdk.utils import get_security_from_env
8
- from typing import Any, Mapping, Optional
9
+ from typing import Any, Dict, List, Mapping, Optional, Union
9
10
 
10
11
 
11
12
  class Roles(BaseSDK):
12
13
  def list(
13
14
  self,
14
15
  *,
16
+ page_size: Optional[int] = 20,
17
+ page_number: Optional[int] = 1,
15
18
  retries: OptionalNullable[utils.RetryConfig] = UNSET,
16
19
  server_url: Optional[str] = None,
17
20
  timeout_ms: Optional[int] = None,
18
21
  http_headers: Optional[Mapping[str, str]] = None,
19
- ) -> models.GetRolesResponseBody:
22
+ ) -> Optional[models.GetRolesResponse]:
20
23
  r"""List all Roles
21
24
 
22
25
  Returns a list of all roles that can be assigned to users
23
26
 
24
27
 
28
+ :param page_size: Number of items to return per page
29
+ :param page_number: Page number to return (starts at 1)
25
30
  :param retries: Override the default retry configuration for this method
26
31
  :param server_url: Override the default server URL for this method
27
32
  :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
@@ -36,12 +41,18 @@ class Roles(BaseSDK):
36
41
  base_url = server_url
37
42
  else:
38
43
  base_url = self._get_url(base_url, url_variables)
44
+
45
+ request = models.GetRolesRequest(
46
+ page_size=page_size,
47
+ page_number=page_number,
48
+ )
49
+
39
50
  req = self._build_request(
40
51
  method="GET",
41
52
  path="/roles",
42
53
  base_url=base_url,
43
54
  url_variables=url_variables,
44
- request=None,
55
+ request=request,
45
56
  request_body_required=False,
46
57
  request_has_path_params=False,
47
58
  request_has_query_params=True,
@@ -62,6 +73,7 @@ class Roles(BaseSDK):
62
73
 
63
74
  http_res = self.do_request(
64
75
  hook_ctx=HookContext(
76
+ config=self.sdk_configuration,
65
77
  base_url=base_url or "",
66
78
  operation_id="get-roles",
67
79
  oauth2_scopes=[],
@@ -74,8 +86,31 @@ class Roles(BaseSDK):
74
86
  retry_config=retry_config,
75
87
  )
76
88
 
89
+ def next_func() -> Optional[models.GetRolesResponse]:
90
+ body = utils.unmarshal_json(http_res.text, Union[Dict[Any, Any], List[Any]])
91
+ page = request.page_number if not request.page_number is None else 1
92
+ next_page = page + 1
93
+
94
+ if not http_res.text:
95
+ return None
96
+ results = JSONPath("$.data").parse(body)
97
+ if len(results) == 0 or len(results[0]) == 0:
98
+ return None
99
+ limit = request.page_size if not request.page_size is None else 20
100
+ if len(results[0]) < limit:
101
+ return None
102
+
103
+ return self.list(
104
+ page_size=page_size,
105
+ page_number=next_page,
106
+ retries=retries,
107
+ )
108
+
77
109
  if utils.match_response(http_res, "200", "application/vnd.api+json"):
78
- return utils.unmarshal_json(http_res.text, models.GetRolesResponseBody)
110
+ return models.GetRolesResponse(
111
+ result=utils.unmarshal_json(http_res.text, models.GetRolesResponseBody),
112
+ next=next_func,
113
+ )
79
114
  if utils.match_response(http_res, "4XX", "*"):
80
115
  http_res_text = utils.stream_to_text(http_res)
81
116
  raise models.APIError(
@@ -99,16 +134,20 @@ class Roles(BaseSDK):
99
134
  async def list_async(
100
135
  self,
101
136
  *,
137
+ page_size: Optional[int] = 20,
138
+ page_number: Optional[int] = 1,
102
139
  retries: OptionalNullable[utils.RetryConfig] = UNSET,
103
140
  server_url: Optional[str] = None,
104
141
  timeout_ms: Optional[int] = None,
105
142
  http_headers: Optional[Mapping[str, str]] = None,
106
- ) -> models.GetRolesResponseBody:
143
+ ) -> Optional[models.GetRolesResponse]:
107
144
  r"""List all Roles
108
145
 
109
146
  Returns a list of all roles that can be assigned to users
110
147
 
111
148
 
149
+ :param page_size: Number of items to return per page
150
+ :param page_number: Page number to return (starts at 1)
112
151
  :param retries: Override the default retry configuration for this method
113
152
  :param server_url: Override the default server URL for this method
114
153
  :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
@@ -123,12 +162,18 @@ class Roles(BaseSDK):
123
162
  base_url = server_url
124
163
  else:
125
164
  base_url = self._get_url(base_url, url_variables)
165
+
166
+ request = models.GetRolesRequest(
167
+ page_size=page_size,
168
+ page_number=page_number,
169
+ )
170
+
126
171
  req = self._build_request_async(
127
172
  method="GET",
128
173
  path="/roles",
129
174
  base_url=base_url,
130
175
  url_variables=url_variables,
131
- request=None,
176
+ request=request,
132
177
  request_body_required=False,
133
178
  request_has_path_params=False,
134
179
  request_has_query_params=True,
@@ -149,6 +194,7 @@ class Roles(BaseSDK):
149
194
 
150
195
  http_res = await self.do_request_async(
151
196
  hook_ctx=HookContext(
197
+ config=self.sdk_configuration,
152
198
  base_url=base_url or "",
153
199
  operation_id="get-roles",
154
200
  oauth2_scopes=[],
@@ -161,8 +207,31 @@ class Roles(BaseSDK):
161
207
  retry_config=retry_config,
162
208
  )
163
209
 
210
+ def next_func() -> Optional[models.GetRolesResponse]:
211
+ body = utils.unmarshal_json(http_res.text, Union[Dict[Any, Any], List[Any]])
212
+ page = request.page_number if not request.page_number is None else 1
213
+ next_page = page + 1
214
+
215
+ if not http_res.text:
216
+ return None
217
+ results = JSONPath("$.data").parse(body)
218
+ if len(results) == 0 or len(results[0]) == 0:
219
+ return None
220
+ limit = request.page_size if not request.page_size is None else 20
221
+ if len(results[0]) < limit:
222
+ return None
223
+
224
+ return self.list(
225
+ page_size=page_size,
226
+ page_number=next_page,
227
+ retries=retries,
228
+ )
229
+
164
230
  if utils.match_response(http_res, "200", "application/vnd.api+json"):
165
- return utils.unmarshal_json(http_res.text, models.GetRolesResponseBody)
231
+ return models.GetRolesResponse(
232
+ result=utils.unmarshal_json(http_res.text, models.GetRolesResponseBody),
233
+ next=next_func,
234
+ )
166
235
  if utils.match_response(http_res, "4XX", "*"):
167
236
  http_res_text = await utils.stream_to_text_async(http_res)
168
237
  raise models.APIError(
@@ -240,6 +309,7 @@ class Roles(BaseSDK):
240
309
 
241
310
  http_res = self.do_request(
242
311
  hook_ctx=HookContext(
312
+ config=self.sdk_configuration,
243
313
  base_url=base_url or "",
244
314
  operation_id="get-role-id",
245
315
  oauth2_scopes=[],
@@ -335,6 +405,7 @@ class Roles(BaseSDK):
335
405
 
336
406
  http_res = await self.do_request_async(
337
407
  hook_ctx=HookContext(
408
+ config=self.sdk_configuration,
338
409
  base_url=base_url or "",
339
410
  operation_id="get-role-id",
340
411
  oauth2_scopes=[],
@@ -6,60 +6,96 @@ 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 latitudesh_python_sdk import models, utils
10
11
  from latitudesh_python_sdk._hooks import SDKHooks
11
- from latitudesh_python_sdk.apikeys import APIKeys
12
- from latitudesh_python_sdk.billing import Billing
13
- from latitudesh_python_sdk.events_sdk import EventsSDK
14
- from latitudesh_python_sdk.firewalls_sdk import FirewallsSDK
15
- from latitudesh_python_sdk.ipaddresses_sdk import IPAddressesSDK
16
- from latitudesh_python_sdk.operatingsystems_sdk import OperatingSystemsSDK
17
- from latitudesh_python_sdk.plans import Plans
18
- from latitudesh_python_sdk.privatenetworks import PrivateNetworks
19
- from latitudesh_python_sdk.projects_sdk import ProjectsSDK
20
- from latitudesh_python_sdk.regions_sdk import RegionsSDK
21
- from latitudesh_python_sdk.roles import Roles
22
- from latitudesh_python_sdk.servers_sdk import ServersSDK
23
- from latitudesh_python_sdk.sshkeys import SSHKeys
24
- from latitudesh_python_sdk.storage import Storage
25
- from latitudesh_python_sdk.tags import Tags
26
- from latitudesh_python_sdk.teams_sdk import TeamsSDK
27
- from latitudesh_python_sdk.teamsmembers import TeamsMembers
28
- from latitudesh_python_sdk.traffic_sdk import TrafficSDK
29
12
  from latitudesh_python_sdk.types import OptionalNullable, UNSET
30
- from latitudesh_python_sdk.userdata_sdk import UserDataSDK
31
- from latitudesh_python_sdk.userprofile import UserProfile
32
- from latitudesh_python_sdk.virtualmachines import VirtualMachines
33
- from latitudesh_python_sdk.vpnsessions import VpnSessions
34
- from typing import Any, Callable, Dict, List, Optional, Union, cast
13
+ from typing import Any, Callable, Dict, List, Optional, TYPE_CHECKING, Union, cast
35
14
  import weakref
36
15
 
16
+ if TYPE_CHECKING:
17
+ from latitudesh_python_sdk.apikeys import APIKeys
18
+ from latitudesh_python_sdk.billing import Billing
19
+ from latitudesh_python_sdk.events_sdk import EventsSDK
20
+ from latitudesh_python_sdk.firewalls_sdk import FirewallsSDK
21
+ from latitudesh_python_sdk.ipaddresses_sdk import IPAddressesSDK
22
+ from latitudesh_python_sdk.operatingsystems_sdk import OperatingSystemsSDK
23
+ from latitudesh_python_sdk.plans import Plans
24
+ from latitudesh_python_sdk.privatenetworks import PrivateNetworks
25
+ from latitudesh_python_sdk.projects_sdk import ProjectsSDK
26
+ from latitudesh_python_sdk.regions_sdk import RegionsSDK
27
+ from latitudesh_python_sdk.roles import Roles
28
+ from latitudesh_python_sdk.servers_sdk import ServersSDK
29
+ from latitudesh_python_sdk.sshkeys_sdk import SSHKeysSDK
30
+ from latitudesh_python_sdk.storage import Storage
31
+ from latitudesh_python_sdk.tags import Tags
32
+ from latitudesh_python_sdk.teams_sdk import TeamsSDK
33
+ from latitudesh_python_sdk.teamsmembers import TeamsMembers
34
+ from latitudesh_python_sdk.traffic_sdk import TrafficSDK
35
+ from latitudesh_python_sdk.userdata_sdk import UserDataSDK
36
+ from latitudesh_python_sdk.userprofile import UserProfile
37
+ from latitudesh_python_sdk.virtualmachines import VirtualMachines
38
+ from latitudesh_python_sdk.vpnsessions import VpnSessions
39
+
37
40
 
38
41
  class Latitudesh(BaseSDK):
39
42
  r"""Latitude.sh API: The Latitude.sh API is a RESTful API to manage your Latitude.sh account. It allows you to perform the same actions as the Latitude.sh dashboard."""
40
43
 
41
- api_keys: APIKeys
42
- billing: Billing
43
- events: EventsSDK
44
- firewalls: FirewallsSDK
45
- ip_addresses: IPAddressesSDK
46
- teams_members: TeamsMembers
47
- operating_systems: OperatingSystemsSDK
48
- plans: Plans
49
- projects: ProjectsSDK
50
- regions: RegionsSDK
51
- roles: Roles
52
- servers: ServersSDK
53
- ssh_keys: SSHKeys
54
- storage: Storage
55
- tags: Tags
56
- teams: TeamsSDK
57
- traffic: TrafficSDK
58
- user_data: UserDataSDK
59
- user_profile: UserProfile
60
- virtual_machines: VirtualMachines
61
- private_networks: PrivateNetworks
62
- vpn_sessions: VpnSessions
44
+ api_keys: "APIKeys"
45
+ billing: "Billing"
46
+ events: "EventsSDK"
47
+ firewalls: "FirewallsSDK"
48
+ ip_addresses: "IPAddressesSDK"
49
+ teams_members: "TeamsMembers"
50
+ operating_systems: "OperatingSystemsSDK"
51
+ plans: "Plans"
52
+ projects: "ProjectsSDK"
53
+ regions: "RegionsSDK"
54
+ roles: "Roles"
55
+ servers: "ServersSDK"
56
+ ssh_keys: "SSHKeysSDK"
57
+ storage: "Storage"
58
+ tags: "Tags"
59
+ teams: "TeamsSDK"
60
+ traffic: "TrafficSDK"
61
+ user_data: "UserDataSDK"
62
+ user_profile: "UserProfile"
63
+ virtual_machines: "VirtualMachines"
64
+ private_networks: "PrivateNetworks"
65
+ vpn_sessions: "VpnSessions"
66
+ _sub_sdk_map = {
67
+ "api_keys": ("latitudesh_python_sdk.apikeys", "APIKeys"),
68
+ "billing": ("latitudesh_python_sdk.billing", "Billing"),
69
+ "events": ("latitudesh_python_sdk.events_sdk", "EventsSDK"),
70
+ "firewalls": ("latitudesh_python_sdk.firewalls_sdk", "FirewallsSDK"),
71
+ "ip_addresses": ("latitudesh_python_sdk.ipaddresses_sdk", "IPAddressesSDK"),
72
+ "teams_members": ("latitudesh_python_sdk.teamsmembers", "TeamsMembers"),
73
+ "operating_systems": (
74
+ "latitudesh_python_sdk.operatingsystems_sdk",
75
+ "OperatingSystemsSDK",
76
+ ),
77
+ "plans": ("latitudesh_python_sdk.plans", "Plans"),
78
+ "projects": ("latitudesh_python_sdk.projects_sdk", "ProjectsSDK"),
79
+ "regions": ("latitudesh_python_sdk.regions_sdk", "RegionsSDK"),
80
+ "roles": ("latitudesh_python_sdk.roles", "Roles"),
81
+ "servers": ("latitudesh_python_sdk.servers_sdk", "ServersSDK"),
82
+ "ssh_keys": ("latitudesh_python_sdk.sshkeys_sdk", "SSHKeysSDK"),
83
+ "storage": ("latitudesh_python_sdk.storage", "Storage"),
84
+ "tags": ("latitudesh_python_sdk.tags", "Tags"),
85
+ "teams": ("latitudesh_python_sdk.teams_sdk", "TeamsSDK"),
86
+ "traffic": ("latitudesh_python_sdk.traffic_sdk", "TrafficSDK"),
87
+ "user_data": ("latitudesh_python_sdk.userdata_sdk", "UserDataSDK"),
88
+ "user_profile": ("latitudesh_python_sdk.userprofile", "UserProfile"),
89
+ "virtual_machines": (
90
+ "latitudesh_python_sdk.virtualmachines",
91
+ "VirtualMachines",
92
+ ),
93
+ "private_networks": (
94
+ "latitudesh_python_sdk.privatenetworks",
95
+ "PrivateNetworks",
96
+ ),
97
+ "vpn_sessions": ("latitudesh_python_sdk.vpnsessions", "VpnSessions"),
98
+ }
63
99
 
64
100
  def __init__(
65
101
  self,
@@ -145,6 +181,9 @@ class Latitudesh(BaseSDK):
145
181
 
146
182
  hooks = SDKHooks()
147
183
 
184
+ # pylint: disable=protected-access
185
+ self.sdk_configuration.__dict__["_hooks"] = hooks
186
+
148
187
  current_server_url, *_ = self.sdk_configuration.get_server_details()
149
188
  server_url, self.sdk_configuration.client = hooks.sdk_init(
150
189
  current_server_url, client
@@ -152,9 +191,6 @@ class Latitudesh(BaseSDK):
152
191
  if current_server_url != server_url:
153
192
  self.sdk_configuration.server_url = server_url
154
193
 
155
- # pylint: disable=protected-access
156
- self.sdk_configuration.__dict__["_hooks"] = hooks
157
-
158
194
  weakref.finalize(
159
195
  self,
160
196
  close_clients,
@@ -165,31 +201,32 @@ class Latitudesh(BaseSDK):
165
201
  self.sdk_configuration.async_client_supplied,
166
202
  )
167
203
 
168
- self._init_sdks()
169
-
170
- def _init_sdks(self):
171
- self.api_keys = APIKeys(self.sdk_configuration)
172
- self.billing = Billing(self.sdk_configuration)
173
- self.events = EventsSDK(self.sdk_configuration)
174
- self.firewalls = FirewallsSDK(self.sdk_configuration)
175
- self.ip_addresses = IPAddressesSDK(self.sdk_configuration)
176
- self.teams_members = TeamsMembers(self.sdk_configuration)
177
- self.operating_systems = OperatingSystemsSDK(self.sdk_configuration)
178
- self.plans = Plans(self.sdk_configuration)
179
- self.projects = ProjectsSDK(self.sdk_configuration)
180
- self.regions = RegionsSDK(self.sdk_configuration)
181
- self.roles = Roles(self.sdk_configuration)
182
- self.servers = ServersSDK(self.sdk_configuration)
183
- self.ssh_keys = SSHKeys(self.sdk_configuration)
184
- self.storage = Storage(self.sdk_configuration)
185
- self.tags = Tags(self.sdk_configuration)
186
- self.teams = TeamsSDK(self.sdk_configuration)
187
- self.traffic = TrafficSDK(self.sdk_configuration)
188
- self.user_data = UserDataSDK(self.sdk_configuration)
189
- self.user_profile = UserProfile(self.sdk_configuration)
190
- self.virtual_machines = VirtualMachines(self.sdk_configuration)
191
- self.private_networks = PrivateNetworks(self.sdk_configuration)
192
- self.vpn_sessions = VpnSessions(self.sdk_configuration)
204
+ def __getattr__(self, name: str):
205
+ if name in self._sub_sdk_map:
206
+ module_path, class_name = self._sub_sdk_map[name]
207
+ try:
208
+ module = importlib.import_module(module_path)
209
+ klass = getattr(module, class_name)
210
+ instance = klass(self.sdk_configuration)
211
+ setattr(self, name, instance)
212
+ return instance
213
+ except ImportError as e:
214
+ raise AttributeError(
215
+ f"Failed to import module {module_path} for attribute {name}: {e}"
216
+ ) from e
217
+ except AttributeError as e:
218
+ raise AttributeError(
219
+ f"Failed to find class {class_name} in module {module_path} for attribute {name}: {e}"
220
+ ) from e
221
+
222
+ raise AttributeError(
223
+ f"'{type(self).__name__}' object has no attribute '{name}'"
224
+ )
225
+
226
+ def __dir__(self):
227
+ default_attrs = list(super().__dir__())
228
+ lazy_attrs = list(self._sub_sdk_map.keys())
229
+ return sorted(list(set(default_attrs + lazy_attrs)))
193
230
 
194
231
  def __enter__(self):
195
232
  return self
@@ -1,6 +1,5 @@
1
1
  """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
2
 
3
- from ._hooks import SDKHooks
4
3
  from ._version import (
5
4
  __gen_version__,
6
5
  __openapi_doc_version__,
@@ -42,9 +41,6 @@ class SDKConfiguration:
42
41
  retry_config: OptionalNullable[RetryConfig] = Field(default_factory=lambda: UNSET)
43
42
  timeout_ms: Optional[int] = None
44
43
 
45
- def __post_init__(self):
46
- self._hooks = SDKHooks()
47
-
48
44
  def get_server_details(self) -> Tuple[str, Dict[str, str]]:
49
45
  if self.server_url is not None and self.server_url:
50
46
  return remove_suffix(self.server_url, "/"), {}
@@ -52,6 +48,3 @@ class SDKConfiguration:
52
48
  self.server_idx = 0
53
49
 
54
50
  return SERVERS[self.server_idx], self.server_defaults[self.server_idx]
55
-
56
- def get_hooks(self) -> SDKHooks:
57
- return self._hooks