From 187721541baccbeb8dd91954bc08dba82a117ead Mon Sep 17 00:00:00 2001 From: Lena Garber Date: Tue, 8 Apr 2025 15:17:04 -0400 Subject: [PATCH 1/4] Enhanced Interfaces: Add account-related fields --- linode_api4/objects/account.py | 1 + test/fixtures/account.json | 3 ++- test/fixtures/account_settings.json | 3 ++- test/unit/linode_client_test.py | 8 +++++++- test/unit/objects/account_test.py | 25 +++++++++++++++++++++++++ 5 files changed, 37 insertions(+), 3 deletions(-) diff --git a/linode_api4/objects/account.py b/linode_api4/objects/account.py index 375e5fc03..686162a08 100644 --- a/linode_api4/objects/account.py +++ b/linode_api4/objects/account.py @@ -197,6 +197,7 @@ class AccountSettings(Base): ), "object_storage": Property(), "backups_enabled": Property(mutable=True), + "interfaces_for_new_linodes": Property(mutable=True), } diff --git a/test/fixtures/account.json b/test/fixtures/account.json index 1d823798b..001d7adad 100644 --- a/test/fixtures/account.json +++ b/test/fixtures/account.json @@ -16,7 +16,8 @@ "Linodes", "NodeBalancers", "Block Storage", - "Object Storage" + "Object Storage", + "Linode Interfaces" ], "active_promotions": [ { diff --git a/test/fixtures/account_settings.json b/test/fixtures/account_settings.json index 77a2fdac3..02b711aa6 100644 --- a/test/fixtures/account_settings.json +++ b/test/fixtures/account_settings.json @@ -3,5 +3,6 @@ "managed": false, "network_helper": false, "object_storage": "active", - "backups_enabled": true + "backups_enabled": true, + "interfaces_for_new_linodes": "linode_default_but_legacy_config_allowed" } diff --git a/test/unit/linode_client_test.py b/test/unit/linode_client_test.py index c79c0a88d..d2237a366 100644 --- a/test/unit/linode_client_test.py +++ b/test/unit/linode_client_test.py @@ -44,7 +44,13 @@ def test_get_account(self): self.assertEqual(a.balance, 0) self.assertEqual( a.capabilities, - ["Linodes", "NodeBalancers", "Block Storage", "Object Storage"], + [ + "Linodes", + "NodeBalancers", + "Block Storage", + "Object Storage", + "Linode Interfaces", + ], ) def test_get_regions(self): diff --git a/test/unit/objects/account_test.py b/test/unit/objects/account_test.py index 1f9da98fb..db1c944c6 100644 --- a/test/unit/objects/account_test.py +++ b/test/unit/objects/account_test.py @@ -97,6 +97,7 @@ def test_get_account(self): self.assertEqual(account.balance_uninvoiced, 145) self.assertEqual(account.billing_source, "akamai") self.assertEqual(account.euuid, "E1AF5EEC-526F-487D-B317EBEB34C87D71") + self.assertIn("Linode Interfaces", account.capabilities) def test_get_login(self): """ @@ -121,6 +122,30 @@ def test_get_account_settings(self): self.assertEqual(settings.network_helper, False) self.assertEqual(settings.object_storage, "active") self.assertEqual(settings.backups_enabled, True) + self.assertEqual( + settings.interfaces_for_new_linodes, + "linode_default_but_legacy_config_allowed", + ) + + def test_post_account_settings(self): + """ + Tests that account settings can be updated successfully + """ + settings = self.client.account.settings() + print(settings._raw_json) + + settings.network_helper = True + settings.backups_enabled = False + settings.interfaces_for_new_linodes = "linode_only" + + with self.mock_put("/account/settings") as m: + settings.save() + + assert m.call_data == { + "network_helper": True, + "backups_enabled": False, + "interfaces_for_new_linodes": "linode_only", + } def test_get_event(self): """ From 8beedeb7103905216297d919cfca43d2dec3bbaa Mon Sep 17 00:00:00 2001 From: Lena Garber Date: Tue, 8 Apr 2025 15:35:35 -0400 Subject: [PATCH 2/4] Add setting enum --- linode_api4/objects/account.py | 17 +++++++++++++++++ test/integration/models/account/test_account.py | 1 + test/unit/objects/account_test.py | 9 ++++++--- 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/linode_api4/objects/account.py b/linode_api4/objects/account.py index 686162a08..c75d1e036 100644 --- a/linode_api4/objects/account.py +++ b/linode_api4/objects/account.py @@ -16,6 +16,7 @@ from linode_api4.objects.networking import Firewall from linode_api4.objects.nodebalancer import NodeBalancer from linode_api4.objects.profile import PersonalAccessToken +from linode_api4.objects.serializable import StrEnum from linode_api4.objects.support import SupportTicket from linode_api4.objects.volume import Volume from linode_api4.objects.vpc import VPC @@ -179,6 +180,22 @@ class Login(Base): } +class AccountSettingsInterfacesForNewLinodes(StrEnum): + """ + A string enum corresponding to valid values + for the AccountSettings(...).interfaces_for_new_linodes field. + """ + + legacy_config_only = "legacy_config_only" + legacy_config_default_but_linode_allowed = ( + "legacy_config_default_but_linode_allowed" + ) + linode_default_but_legacy_config_allowed = ( + "linode_default_but_legacy_config_allowed" + ) + linode_only = "linode_only" + + class AccountSettings(Base): """ Information related to your Account settings. diff --git a/test/integration/models/account/test_account.py b/test/integration/models/account/test_account.py index decad434f..1ee700495 100644 --- a/test/integration/models/account/test_account.py +++ b/test/integration/models/account/test_account.py @@ -59,6 +59,7 @@ def test_get_account_settings(test_linode_client): assert "longview_subscription" in str(account_settings._raw_json) assert "backups_enabled" in str(account_settings._raw_json) assert "object_storage" in str(account_settings._raw_json) + assert isinstance(account_settings.interfaces_for_new_linodes, str) @pytest.mark.smoke diff --git a/test/unit/objects/account_test.py b/test/unit/objects/account_test.py index db1c944c6..eaf935e74 100644 --- a/test/unit/objects/account_test.py +++ b/test/unit/objects/account_test.py @@ -3,6 +3,7 @@ from datetime import datetime from test.unit.base import ClientBaseCase +from linode_api4 import AccountSettingsInterfacesForNewLinodes from linode_api4.objects import ( Account, AccountAvailability, @@ -124,7 +125,7 @@ def test_get_account_settings(self): self.assertEqual(settings.backups_enabled, True) self.assertEqual( settings.interfaces_for_new_linodes, - "linode_default_but_legacy_config_allowed", + AccountSettingsInterfacesForNewLinodes.linode_default_but_legacy_config_allowed, ) def test_post_account_settings(self): @@ -136,7 +137,9 @@ def test_post_account_settings(self): settings.network_helper = True settings.backups_enabled = False - settings.interfaces_for_new_linodes = "linode_only" + settings.interfaces_for_new_linodes = ( + AccountSettingsInterfacesForNewLinodes.linode_only + ) with self.mock_put("/account/settings") as m: settings.save() @@ -144,7 +147,7 @@ def test_post_account_settings(self): assert m.call_data == { "network_helper": True, "backups_enabled": False, - "interfaces_for_new_linodes": "linode_only", + "interfaces_for_new_linodes": AccountSettingsInterfacesForNewLinodes.linode_only, } def test_get_event(self): From b79652011ade4bb7a5cd418870707ae2b83ec2e0 Mon Sep 17 00:00:00 2001 From: Lena Garber Date: Tue, 15 Apr 2025 09:11:01 -0400 Subject: [PATCH 3/4] Add LA notice --- linode_api4/objects/account.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/linode_api4/objects/account.py b/linode_api4/objects/account.py index c75d1e036..44aeaa715 100644 --- a/linode_api4/objects/account.py +++ b/linode_api4/objects/account.py @@ -184,6 +184,8 @@ class AccountSettingsInterfacesForNewLinodes(StrEnum): """ A string enum corresponding to valid values for the AccountSettings(...).interfaces_for_new_linodes field. + + NOTE: This feature may not currently be available to all users. """ legacy_config_only = "legacy_config_only" From f8a50b862a5192a95304a3cf78e3b95aa9f2c3ac Mon Sep 17 00:00:00 2001 From: Lena Garber Date: Tue, 15 Apr 2025 09:11:53 -0400 Subject: [PATCH 4/4] Drop residual print --- test/unit/objects/account_test.py | 1 - 1 file changed, 1 deletion(-) diff --git a/test/unit/objects/account_test.py b/test/unit/objects/account_test.py index eaf935e74..650874f45 100644 --- a/test/unit/objects/account_test.py +++ b/test/unit/objects/account_test.py @@ -133,7 +133,6 @@ def test_post_account_settings(self): Tests that account settings can be updated successfully """ settings = self.client.account.settings() - print(settings._raw_json) settings.network_helper = True settings.backups_enabled = False