diff --git a/hcloud/certificates/client.py b/hcloud/certificates/client.py index 9404513e..8b2a7ef7 100644 --- a/hcloud/certificates/client.py +++ b/hcloud/certificates/client.py @@ -202,7 +202,7 @@ def get_by_name(self, name: str) -> BoundCertificate | None: Used to get certificate by name. :return: :class:`BoundCertificate ` """ - return self._get_first_by(name=name) + return self._get_first_by(self.get_list, name=name) def create( self, diff --git a/hcloud/core/client.py b/hcloud/core/client.py index da9901f8..c33b0352 100644 --- a/hcloud/core/client.py +++ b/hcloud/core/client.py @@ -46,10 +46,8 @@ def _iter_pages( # type: ignore[no-untyped-def] return results - def _get_first_by(self, **kwargs): # type: ignore[no-untyped-def] - assert hasattr(self, "get_list") - # pylint: disable=no-member - entities, _ = self.get_list(**kwargs) + def _get_first_by(self, list_function: Callable, *args, **kwargs): # type: ignore[no-untyped-def] + entities, _ = list_function(*args, **kwargs) return entities[0] if entities else None diff --git a/hcloud/datacenters/client.py b/hcloud/datacenters/client.py index 880e1c24..ae338a5a 100644 --- a/hcloud/datacenters/client.py +++ b/hcloud/datacenters/client.py @@ -115,4 +115,4 @@ def get_by_name(self, name: str) -> BoundDatacenter | None: Used to get datacenter by name. :return: :class:`BoundDatacenter ` """ - return self._get_first_by(name=name) + return self._get_first_by(self.get_list, name=name) diff --git a/hcloud/firewalls/client.py b/hcloud/firewalls/client.py index 771f3845..a088947a 100644 --- a/hcloud/firewalls/client.py +++ b/hcloud/firewalls/client.py @@ -351,7 +351,7 @@ def get_by_name(self, name: str) -> BoundFirewall | None: Used to get Firewall by name. :return: :class:`BoundFirewall ` """ - return self._get_first_by(name=name) + return self._get_first_by(self.get_list, name=name) def create( self, diff --git a/hcloud/floating_ips/client.py b/hcloud/floating_ips/client.py index 15432d1a..ce28be3d 100644 --- a/hcloud/floating_ips/client.py +++ b/hcloud/floating_ips/client.py @@ -293,7 +293,7 @@ def get_by_name(self, name: str) -> BoundFloatingIP | None: Used to get Floating IP by name. :return: :class:`BoundFloatingIP ` """ - return self._get_first_by(name=name) + return self._get_first_by(self.get_list, name=name) def create( self, diff --git a/hcloud/images/client.py b/hcloud/images/client.py index 3933ebe4..b9425b78 100644 --- a/hcloud/images/client.py +++ b/hcloud/images/client.py @@ -329,7 +329,7 @@ def get_by_name(self, name: str) -> BoundImage | None: DeprecationWarning, stacklevel=2, ) - return self._get_first_by(name=name) + return self._get_first_by(self.get_list, name=name) def get_by_name_and_architecture( self, @@ -349,6 +349,7 @@ def get_by_name_and_architecture( :return: :class:`BoundImage ` """ return self._get_first_by( + self.get_list, name=name, architecture=[architecture], include_deprecated=include_deprecated, diff --git a/hcloud/isos/client.py b/hcloud/isos/client.py index f3e86896..d5e44963 100644 --- a/hcloud/isos/client.py +++ b/hcloud/isos/client.py @@ -99,4 +99,4 @@ def get_by_name(self, name: str) -> BoundIso | None: Used to get iso by name. :return: :class:`BoundIso ` """ - return self._get_first_by(name=name) + return self._get_first_by(self.get_list, name=name) diff --git a/hcloud/load_balancer_types/client.py b/hcloud/load_balancer_types/client.py index 12d0f03e..fbfb08d1 100644 --- a/hcloud/load_balancer_types/client.py +++ b/hcloud/load_balancer_types/client.py @@ -81,4 +81,4 @@ def get_by_name(self, name: str) -> BoundLoadBalancerType | None: Used to get Load Balancer type by name. :return: :class:`BoundLoadBalancerType ` """ - return self._get_first_by(name=name) + return self._get_first_by(self.get_list, name=name) diff --git a/hcloud/load_balancers/client.py b/hcloud/load_balancers/client.py index 1317b732..2539101b 100644 --- a/hcloud/load_balancers/client.py +++ b/hcloud/load_balancers/client.py @@ -467,7 +467,7 @@ def get_by_name(self, name: str) -> BoundLoadBalancer | None: Used to get Load Balancer by name. :return: :class:`BoundLoadBalancer ` """ - return self._get_first_by(name=name) + return self._get_first_by(self.get_list, name=name) def create( self, diff --git a/hcloud/locations/client.py b/hcloud/locations/client.py index 154ba843..e6f685db 100644 --- a/hcloud/locations/client.py +++ b/hcloud/locations/client.py @@ -76,4 +76,4 @@ def get_by_name(self, name: str) -> BoundLocation | None: Used to get location by name. :return: :class:`BoundLocation ` """ - return self._get_first_by(name=name) + return self._get_first_by(self.get_list, name=name) diff --git a/hcloud/networks/client.py b/hcloud/networks/client.py index 7c6846a8..abef2b63 100644 --- a/hcloud/networks/client.py +++ b/hcloud/networks/client.py @@ -252,7 +252,7 @@ def get_by_name(self, name: str) -> BoundNetwork | None: Used to get network by name. :return: :class:`BoundNetwork ` """ - return self._get_first_by(name=name) + return self._get_first_by(self.get_list, name=name) def create( self, diff --git a/hcloud/placement_groups/client.py b/hcloud/placement_groups/client.py index de61330b..94939341 100644 --- a/hcloud/placement_groups/client.py +++ b/hcloud/placement_groups/client.py @@ -131,7 +131,7 @@ def get_by_name(self, name: str) -> BoundPlacementGroup | None: Used to get Placement Group by name :return: class:`BoundPlacementGroup ` """ - return self._get_first_by(name=name) + return self._get_first_by(self.get_list, name=name) def create( self, diff --git a/hcloud/primary_ips/client.py b/hcloud/primary_ips/client.py index c6acf6ef..eb5d30d1 100644 --- a/hcloud/primary_ips/client.py +++ b/hcloud/primary_ips/client.py @@ -189,7 +189,7 @@ def get_by_name(self, name: str) -> BoundPrimaryIP | None: Used to get Primary IP by name. :return: :class:`BoundPrimaryIP ` """ - return self._get_first_by(name=name) + return self._get_first_by(self.get_list, name=name) def create( self, diff --git a/hcloud/server_types/client.py b/hcloud/server_types/client.py index bfa525c2..db0ef54a 100644 --- a/hcloud/server_types/client.py +++ b/hcloud/server_types/client.py @@ -99,4 +99,4 @@ def get_by_name(self, name: str) -> BoundServerType | None: Used to get Server type by name. :return: :class:`BoundServerType ` """ - return self._get_first_by(name=name) + return self._get_first_by(self.get_list, name=name) diff --git a/hcloud/servers/client.py b/hcloud/servers/client.py index faeed0be..626c6c36 100644 --- a/hcloud/servers/client.py +++ b/hcloud/servers/client.py @@ -596,7 +596,7 @@ def get_by_name(self, name: str) -> BoundServer | None: Used to get server by name. :return: :class:`BoundServer ` """ - return self._get_first_by(name=name) + return self._get_first_by(self.get_list, name=name) # pylint: disable=too-many-branches,too-many-locals def create( diff --git a/hcloud/ssh_keys/client.py b/hcloud/ssh_keys/client.py index 4fc541f5..a565469b 100644 --- a/hcloud/ssh_keys/client.py +++ b/hcloud/ssh_keys/client.py @@ -121,7 +121,7 @@ def get_by_name(self, name: str) -> BoundSSHKey | None: Used to get ssh key by name. :return: :class:`BoundSSHKey ` """ - return self._get_first_by(name=name) + return self._get_first_by(self.get_list, name=name) def get_by_fingerprint(self, fingerprint: str) -> BoundSSHKey | None: """Get ssh key by fingerprint @@ -130,7 +130,7 @@ def get_by_fingerprint(self, fingerprint: str) -> BoundSSHKey | None: Used to get ssh key by fingerprint. :return: :class:`BoundSSHKey ` """ - return self._get_first_by(fingerprint=fingerprint) + return self._get_first_by(self.get_list, fingerprint=fingerprint) def create( self, diff --git a/hcloud/volumes/client.py b/hcloud/volumes/client.py index 0b1b9667..9d1cded6 100644 --- a/hcloud/volumes/client.py +++ b/hcloud/volumes/client.py @@ -225,7 +225,7 @@ def get_by_name(self, name: str) -> BoundVolume | None: Used to get volume by name. :return: :class:`BoundVolume ` """ - return self._get_first_by(name=name) + return self._get_first_by(self.get_list, name=name) def create( self, diff --git a/tests/unit/core/test_client.py b/tests/unit/core/test_client.py index 72e90879..d2ff4250 100644 --- a/tests/unit/core/test_client.py +++ b/tests/unit/core/test_client.py @@ -223,7 +223,7 @@ def json_content_function(p): candies_client = client_class_constructor(json_content_function) - result = candies_client._get_first_by(status="sweet") + result = candies_client._get_first_by(candies_client.get_list, status="sweet") assert result == (1, None, "sweet", None) @@ -235,6 +235,6 @@ def json_content_function(p): candies_client = client_class_constructor(json_content_function) - result = candies_client._get_first_by(status="sweet") + result = candies_client._get_first_by(candies_client.get_list, status="sweet") assert result is None