Skip to content

Commit 8981ef3

Browse files
Fix interfaces settings
1 parent d6f5cc7 commit 8981ef3

File tree

5 files changed

+23
-14
lines changed

5 files changed

+23
-14
lines changed

linode_api4/linode_client.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -283,6 +283,10 @@ def _api_call(
283283
verify=self.ca_path or self.session.verify,
284284
)
285285

286+
print(
287+
"\nNEW REQUEST:\n", method, url, "\n", body, "\n", response.json()
288+
)
289+
286290
warning = response.headers.get("Warning", None)
287291
if warning:
288292
logger.warning("Received warning from server: {}".format(warning))

linode_api4/objects/base.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -239,6 +239,7 @@ def __setattr__(self, name, value):
239239
"""
240240
Enforces allowing editing of only Properties defined as mutable
241241
"""
242+
242243
if name in type(self).properties.keys():
243244
if not type(self).properties[name].mutable:
244245
raise AttributeError(

linode_api4/objects/linode.py

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1940,24 +1940,26 @@ def interface_create(
19401940
return LinodeInterface(self._client, result["id"], self.id, json=result)
19411941

19421942
@property
1943-
def interfaces_settings(self):
1943+
def interfaces_settings(self) -> LinodeInterfacesSettings:
1944+
"""
1945+
The settings for all interfaces under this Linode.
1946+
1947+
:returns: The settings for instance-level interface settings for this Linode.
1948+
"""
19441949

19451950
# NOTE: We do not implement this as a Property because Property does
19461951
# not currently have a mechanism for 1:1 sub-entities.
1947-
result = self._client.get(
1948-
"{}/interfaces/settings".format(Instance.api_endpoint), model=self
1949-
)
19501952

1951-
if not "network_helper" in result:
1952-
raise UnexpectedResponseError(
1953-
"Unexpected response when getting settings for Linode interfaces!",
1954-
json=result,
1953+
if not hasattr(self, "_interfaces_settings"):
1954+
self._set(
1955+
"_interfaces_settings",
1956+
# We don't use lazy loading here because it can trigger a known issue
1957+
# where setting fields for updates before the entity has been lazy loaded
1958+
# causes the user's value to be discarded.
1959+
self._client.load(LinodeInterfacesSettings, self.id),
19551960
)
19561961

1957-
# TODO (Enhanced Interfaces): Error handling for Linodes using legacy interfaces?
1958-
1959-
s = LinodeInterfacesSettings(self._client, self.id, result)
1960-
return s
1962+
return self._interfaces_settings
19611963

19621964
@property
19631965
def interfaces(self):

linode_api4/objects/linode_interfaces.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ class LinodeInterfacesSettingsDefaultRoute(JSONObject):
3232

3333

3434
class LinodeInterfacesSettings(Base):
35-
""" "
36-
The settings for a Linode's network interfaces.
35+
"""
36+
The settings related to a Linode's network interfaces.
3737
3838
API Documentation: Not yet available.
3939
"""

test/unit/objects/linode_test.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -518,6 +518,8 @@ def test_update_interfaces_settings(self):
518518
iface_settings.default_route.ipv4_interface_id = 456
519519
iface_settings.default_route.ipv6_interface_id = 123
520520

521+
print(vars(iface_settings))
522+
521523
with self.mock_put("/linode/instances/124/interfaces/settings") as m:
522524
iface_settings.save()
523525

0 commit comments

Comments
 (0)