Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-hcloud for openSUSE:Factory checked in at 2025-11-21 16:56:35 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-hcloud (Old) and /work/SRC/openSUSE:Factory/.python-hcloud.new.2061 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-hcloud" Fri Nov 21 16:56:35 2025 rev:14 rq:1318839 version:2.11.1 Changes: -------- --- /work/SRC/openSUSE:Factory/python-hcloud/python-hcloud.changes 2025-11-10 19:20:59.573535776 +0100 +++ /work/SRC/openSUSE:Factory/.python-hcloud.new.2061/python-hcloud.changes 2025-11-21 16:57:27.736342332 +0100 @@ -1,0 +2,8 @@ +Thu Nov 20 09:35:03 UTC 2025 - John Paul Adrian Glaubitz <[email protected]> + +- Update to 2.11.1 + * support reloading sub resource bound models (#590) +- from version 2.11.0 + * DNS support is now generally available (#581) + +------------------------------------------------------------------- Old: ---- hcloud-2.10.0.tar.gz New: ---- hcloud-2.11.1.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-hcloud.spec ++++++ --- /var/tmp/diff_new_pack.drIXgH/_old 2025-11-21 16:57:28.364368797 +0100 +++ /var/tmp/diff_new_pack.drIXgH/_new 2025-11-21 16:57:28.368368965 +0100 @@ -17,7 +17,7 @@ %{?sle15_python_module_pythons} Name: python-hcloud -Version: 2.10.0 +Version: 2.11.1 Release: 0 Summary: Hetzner Cloud Python library License: MIT ++++++ hcloud-2.10.0.tar.gz -> hcloud-2.11.1.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hcloud-2.10.0/CHANGELOG.md new/hcloud-2.11.1/CHANGELOG.md --- old/hcloud-2.10.0/CHANGELOG.md 2025-11-07 14:42:42.000000000 +0100 +++ new/hcloud-2.11.1/CHANGELOG.md 2025-11-14 14:02:21.000000000 +0100 @@ -1,5 +1,25 @@ # Changelog +## [v2.11.1](https://github.com/hetznercloud/hcloud-python/releases/tag/v2.11.1) + +### Bug Fixes + +- support reloading sub resource bound models (#590) + +## [v2.11.0](https://github.com/hetznercloud/hcloud-python/releases/tag/v2.11.0) + +### DNS API is now generally available + +The DNS API is now generally available, as well as support for features in this project that are related to the DNS API. + +To migrate existing zones to the new DNS API, see the [DNS migration guide](https://docs.hetzner.com/networking/dns/migration-to-hetzner-console/process). + +See the [changelog](https://docs.hetzner.cloud/changelog#2025-11-10-dns-ga) for more details. + +### Features + +- DNS support is now generally available (#581) + ## [v2.10.0](https://github.com/hetznercloud/hcloud-python/releases/tag/v2.10.0) ### Features diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hcloud-2.10.0/PKG-INFO new/hcloud-2.11.1/PKG-INFO --- old/hcloud-2.10.0/PKG-INFO 2025-11-07 14:42:55.555976400 +0100 +++ new/hcloud-2.11.1/PKG-INFO 2025-11-14 14:02:31.712159900 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 2.4 Name: hcloud -Version: 2.10.0 +Version: 2.11.1 Summary: Official Hetzner Cloud python library Home-page: https://github.com/hetznercloud/hcloud-python Author: Hetzner Cloud GmbH @@ -33,7 +33,7 @@ Provides-Extra: test Requires-Dist: coverage<7.12,>=7.11; extra == "test" Requires-Dist: pylint<4.1,>=4; extra == "test" -Requires-Dist: pytest<8.5,>=8; extra == "test" +Requires-Dist: pytest<9.1,>=9; extra == "test" Requires-Dist: pytest-cov<7.1,>=7; extra == "test" Requires-Dist: mypy<1.19,>=1.18; extra == "test" Requires-Dist: types-python-dateutil; extra == "test" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hcloud-2.10.0/hcloud/_version.py new/hcloud-2.11.1/hcloud/_version.py --- old/hcloud-2.10.0/hcloud/_version.py 2025-11-07 14:42:42.000000000 +0100 +++ new/hcloud-2.11.1/hcloud/_version.py 2025-11-14 14:02:21.000000000 +0100 @@ -1,3 +1,3 @@ from __future__ import annotations -__version__ = "2.10.0" # x-releaser-pleaser-version +__version__ = "2.11.1" # x-releaser-pleaser-version diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hcloud-2.10.0/hcloud/certificates/client.py new/hcloud-2.11.1/hcloud/certificates/client.py --- old/hcloud-2.10.0/hcloud/certificates/client.py 2025-11-07 14:42:42.000000000 +0100 +++ new/hcloud-2.11.1/hcloud/certificates/client.py 2025-11-14 14:02:21.000000000 +0100 @@ -202,7 +202,7 @@ Used to get certificate by name. :return: :class:`BoundCertificate <hcloud.certificates.client.BoundCertificate>` """ - return self._get_first_by(name=name) + return self._get_first_by(self.get_list, name=name) def create( self, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hcloud-2.10.0/hcloud/core/client.py new/hcloud-2.11.1/hcloud/core/client.py --- old/hcloud-2.10.0/hcloud/core/client.py 2025-11-07 14:42:42.000000000 +0100 +++ new/hcloud-2.11.1/hcloud/core/client.py 2025-11-14 14:02:21.000000000 +0100 @@ -46,10 +46,8 @@ 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 @@ -105,10 +103,13 @@ value = getattr(self.data_model, name) return value - def reload(self) -> None: - """Reloads the model and tries to get all data from the APIx""" + def _get_self(self) -> BoundModelBase: assert hasattr(self._client, "get_by_id") - bound_model = self._client.get_by_id(self.data_model.id) + return self._client.get_by_id(self.data_model.id) + + def reload(self) -> None: + """Reloads the model and tries to get all data from the API""" + bound_model = self._get_self() self.data_model = bound_model.data_model self.complete = True diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hcloud-2.10.0/hcloud/datacenters/client.py new/hcloud-2.11.1/hcloud/datacenters/client.py --- old/hcloud-2.10.0/hcloud/datacenters/client.py 2025-11-07 14:42:42.000000000 +0100 +++ new/hcloud-2.11.1/hcloud/datacenters/client.py 2025-11-14 14:02:21.000000000 +0100 @@ -115,4 +115,4 @@ Used to get datacenter by name. :return: :class:`BoundDatacenter <hcloud.datacenters.client.BoundDatacenter>` """ - return self._get_first_by(name=name) + return self._get_first_by(self.get_list, name=name) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hcloud-2.10.0/hcloud/firewalls/client.py new/hcloud-2.11.1/hcloud/firewalls/client.py --- old/hcloud-2.10.0/hcloud/firewalls/client.py 2025-11-07 14:42:42.000000000 +0100 +++ new/hcloud-2.11.1/hcloud/firewalls/client.py 2025-11-14 14:02:21.000000000 +0100 @@ -351,7 +351,7 @@ Used to get Firewall by name. :return: :class:`BoundFirewall <hcloud.firewalls.client.BoundFirewall>` """ - return self._get_first_by(name=name) + return self._get_first_by(self.get_list, name=name) def create( self, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hcloud-2.10.0/hcloud/floating_ips/client.py new/hcloud-2.11.1/hcloud/floating_ips/client.py --- old/hcloud-2.10.0/hcloud/floating_ips/client.py 2025-11-07 14:42:42.000000000 +0100 +++ new/hcloud-2.11.1/hcloud/floating_ips/client.py 2025-11-14 14:02:21.000000000 +0100 @@ -293,7 +293,7 @@ Used to get Floating IP by name. :return: :class:`BoundFloatingIP <hcloud.floating_ips.client.BoundFloatingIP>` """ - return self._get_first_by(name=name) + return self._get_first_by(self.get_list, name=name) def create( self, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hcloud-2.10.0/hcloud/images/client.py new/hcloud-2.11.1/hcloud/images/client.py --- old/hcloud-2.10.0/hcloud/images/client.py 2025-11-07 14:42:42.000000000 +0100 +++ new/hcloud-2.11.1/hcloud/images/client.py 2025-11-14 14:02:21.000000000 +0100 @@ -329,7 +329,7 @@ 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 @@ :return: :class:`BoundImage <hcloud.images.client.BoundImage>` """ return self._get_first_by( + self.get_list, name=name, architecture=[architecture], include_deprecated=include_deprecated, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hcloud-2.10.0/hcloud/isos/client.py new/hcloud-2.11.1/hcloud/isos/client.py --- old/hcloud-2.10.0/hcloud/isos/client.py 2025-11-07 14:42:42.000000000 +0100 +++ new/hcloud-2.11.1/hcloud/isos/client.py 2025-11-14 14:02:21.000000000 +0100 @@ -99,4 +99,4 @@ Used to get iso by name. :return: :class:`BoundIso <hcloud.isos.client.BoundIso>` """ - return self._get_first_by(name=name) + return self._get_first_by(self.get_list, name=name) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hcloud-2.10.0/hcloud/load_balancer_types/client.py new/hcloud-2.11.1/hcloud/load_balancer_types/client.py --- old/hcloud-2.10.0/hcloud/load_balancer_types/client.py 2025-11-07 14:42:42.000000000 +0100 +++ new/hcloud-2.11.1/hcloud/load_balancer_types/client.py 2025-11-14 14:02:21.000000000 +0100 @@ -81,4 +81,4 @@ Used to get Load Balancer type by name. :return: :class:`BoundLoadBalancerType <hcloud.load_balancer_types.client.BoundLoadBalancerType>` """ - return self._get_first_by(name=name) + return self._get_first_by(self.get_list, name=name) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hcloud-2.10.0/hcloud/load_balancers/client.py new/hcloud-2.11.1/hcloud/load_balancers/client.py --- old/hcloud-2.10.0/hcloud/load_balancers/client.py 2025-11-07 14:42:42.000000000 +0100 +++ new/hcloud-2.11.1/hcloud/load_balancers/client.py 2025-11-14 14:02:21.000000000 +0100 @@ -467,7 +467,7 @@ Used to get Load Balancer by name. :return: :class:`BoundLoadBalancer <hcloud.load_balancers.client.BoundLoadBalancer>` """ - return self._get_first_by(name=name) + return self._get_first_by(self.get_list, name=name) def create( self, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hcloud-2.10.0/hcloud/locations/client.py new/hcloud-2.11.1/hcloud/locations/client.py --- old/hcloud-2.10.0/hcloud/locations/client.py 2025-11-07 14:42:42.000000000 +0100 +++ new/hcloud-2.11.1/hcloud/locations/client.py 2025-11-14 14:02:21.000000000 +0100 @@ -76,4 +76,4 @@ Used to get location by name. :return: :class:`BoundLocation <hcloud.locations.client.BoundLocation>` """ - return self._get_first_by(name=name) + return self._get_first_by(self.get_list, name=name) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hcloud-2.10.0/hcloud/networks/client.py new/hcloud-2.11.1/hcloud/networks/client.py --- old/hcloud-2.10.0/hcloud/networks/client.py 2025-11-07 14:42:42.000000000 +0100 +++ new/hcloud-2.11.1/hcloud/networks/client.py 2025-11-14 14:02:21.000000000 +0100 @@ -252,7 +252,7 @@ Used to get network by name. :return: :class:`BoundNetwork <hcloud.networks.client.BoundNetwork>` """ - return self._get_first_by(name=name) + return self._get_first_by(self.get_list, name=name) def create( self, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hcloud-2.10.0/hcloud/placement_groups/client.py new/hcloud-2.11.1/hcloud/placement_groups/client.py --- old/hcloud-2.10.0/hcloud/placement_groups/client.py 2025-11-07 14:42:42.000000000 +0100 +++ new/hcloud-2.11.1/hcloud/placement_groups/client.py 2025-11-14 14:02:21.000000000 +0100 @@ -131,7 +131,7 @@ Used to get Placement Group by name :return: class:`BoundPlacementGroup <hcloud.placement_groups.client.BoundPlacementGroup>` """ - return self._get_first_by(name=name) + return self._get_first_by(self.get_list, name=name) def create( self, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hcloud-2.10.0/hcloud/primary_ips/client.py new/hcloud-2.11.1/hcloud/primary_ips/client.py --- old/hcloud-2.10.0/hcloud/primary_ips/client.py 2025-11-07 14:42:42.000000000 +0100 +++ new/hcloud-2.11.1/hcloud/primary_ips/client.py 2025-11-14 14:02:21.000000000 +0100 @@ -189,7 +189,7 @@ Used to get Primary IP by name. :return: :class:`BoundPrimaryIP <hcloud.primary_ips.client.BoundPrimaryIP>` """ - return self._get_first_by(name=name) + return self._get_first_by(self.get_list, name=name) def create( self, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hcloud-2.10.0/hcloud/server_types/client.py new/hcloud-2.11.1/hcloud/server_types/client.py --- old/hcloud-2.10.0/hcloud/server_types/client.py 2025-11-07 14:42:42.000000000 +0100 +++ new/hcloud-2.11.1/hcloud/server_types/client.py 2025-11-14 14:02:21.000000000 +0100 @@ -99,4 +99,4 @@ Used to get Server type by name. :return: :class:`BoundServerType <hcloud.server_types.client.BoundServerType>` """ - return self._get_first_by(name=name) + return self._get_first_by(self.get_list, name=name) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hcloud-2.10.0/hcloud/servers/client.py new/hcloud-2.11.1/hcloud/servers/client.py --- old/hcloud-2.10.0/hcloud/servers/client.py 2025-11-07 14:42:42.000000000 +0100 +++ new/hcloud-2.11.1/hcloud/servers/client.py 2025-11-14 14:02:21.000000000 +0100 @@ -596,7 +596,7 @@ Used to get server by name. :return: :class:`BoundServer <hcloud.servers.client.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 -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hcloud-2.10.0/hcloud/ssh_keys/client.py new/hcloud-2.11.1/hcloud/ssh_keys/client.py --- old/hcloud-2.10.0/hcloud/ssh_keys/client.py 2025-11-07 14:42:42.000000000 +0100 +++ new/hcloud-2.11.1/hcloud/ssh_keys/client.py 2025-11-14 14:02:21.000000000 +0100 @@ -121,7 +121,7 @@ Used to get ssh key by name. :return: :class:`BoundSSHKey <hcloud.ssh_keys.client.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 @@ Used to get ssh key by fingerprint. :return: :class:`BoundSSHKey <hcloud.ssh_keys.client.BoundSSHKey>` """ - return self._get_first_by(fingerprint=fingerprint) + return self._get_first_by(self.get_list, fingerprint=fingerprint) def create( self, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hcloud-2.10.0/hcloud/volumes/client.py new/hcloud-2.11.1/hcloud/volumes/client.py --- old/hcloud-2.10.0/hcloud/volumes/client.py 2025-11-07 14:42:42.000000000 +0100 +++ new/hcloud-2.11.1/hcloud/volumes/client.py 2025-11-14 14:02:21.000000000 +0100 @@ -225,7 +225,7 @@ Used to get volume by name. :return: :class:`BoundVolume <hcloud.volumes.client.BoundVolume>` """ - return self._get_first_by(name=name) + return self._get_first_by(self.get_list, name=name) def create( self, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hcloud-2.10.0/hcloud/zones/client.py new/hcloud-2.11.1/hcloud/zones/client.py --- old/hcloud-2.10.0/hcloud/zones/client.py 2025-11-07 14:42:42.000000000 +0100 +++ new/hcloud-2.11.1/hcloud/zones/client.py 2025-11-14 14:02:21.000000000 +0100 @@ -59,10 +59,6 @@ See https://docs.hetzner.cloud/reference/cloud#zones-update-a-zone :param labels: User-defined labels (key/value pairs) for the Resource. - - Experimental: - DNS API is in beta, breaking changes may occur within minor releases. - See https://docs.hetzner.cloud/changelog#2025-10-07-dns-beta for more details. """ return self._client.update(self, labels=labels) @@ -71,10 +67,6 @@ Deletes the Zone. See https://docs.hetzner.cloud/reference/cloud#zones-delete-a-zone - - Experimental: - DNS API is in beta, breaking changes may occur within minor releases. - See https://docs.hetzner.cloud/changelog#2025-10-07-dns-beta for more details. """ return self._client.delete(self) @@ -83,10 +75,6 @@ Returns a generated Zone file in BIND (RFC 1034/1035) format. See https://docs.hetzner.cloud/reference/cloud#zones-export-a-zone-file - - Experimental: - DNS API is in beta, breaking changes may occur within minor releases. - See https://docs.hetzner.cloud/changelog#2025-10-07-dns-beta for more details. """ return self._client.export_zonefile(self) @@ -107,10 +95,6 @@ :param sort: Sort resources by field and direction. :param page: Page number to return. :param per_page: Maximum number of entries returned per page. - - Experimental: - DNS API is in beta, breaking changes may occur within minor releases. - See https://docs.hetzner.cloud/changelog#2025-10-07-dns-beta for more details. """ return self._client.get_actions_list( self, @@ -133,10 +117,6 @@ :param status: Filter the actions by status. The response will only contain actions matching the specified statuses. :param sort: Sort resources by field and direction. - - Experimental: - DNS API is in beta, breaking changes may occur within minor releases. - See https://docs.hetzner.cloud/changelog#2025-10-07-dns-beta for more details. """ return self._client.get_actions( self, @@ -154,10 +134,6 @@ See https://docs.hetzner.cloud/reference/cloud#zone-actions-import-a-zone-file :param zonefile: Zone file to import. - - Experimental: - DNS API is in beta, breaking changes may occur within minor releases. - See https://docs.hetzner.cloud/changelog#2025-10-07-dns-beta for more details. """ return self._client.import_zonefile(self, zonefile=zonefile) @@ -172,10 +148,6 @@ See https://docs.hetzner.cloud/reference/cloud#zone-actions-change-a-zones-protection :param delete: Prevents the Zone from being deleted. - - Experimental: - DNS API is in beta, breaking changes may occur within minor releases. - See https://docs.hetzner.cloud/changelog#2025-10-07-dns-beta for more details. """ return self._client.change_protection(self, delete=delete) @@ -189,10 +161,6 @@ See https://docs.hetzner.cloud/reference/cloud#zone-actions-change-a-zones-default-ttl :param ttl: Default Time To Live (TTL) of the Zone. - - Experimental: - DNS API is in beta, breaking changes may occur within minor releases. - See https://docs.hetzner.cloud/changelog#2025-10-07-dns-beta for more details. """ return self._client.change_ttl(self, ttl=ttl) @@ -206,10 +174,6 @@ See https://docs.hetzner.cloud/reference/cloud#zone-actions-change-a-zones-primary-nameservers :param primary_nameservers: Primary nameservers of the Zone. - - Experimental: - DNS API is in beta, breaking changes may occur within minor releases. - See https://docs.hetzner.cloud/changelog#2025-10-07-dns-beta for more details. """ return self._client.change_primary_nameservers( self, @@ -228,10 +192,6 @@ :param name: Name of the RRSet. :param type: Type of the RRSet. - - Experimental: - DNS API is in beta, breaking changes may occur within minor releases. - See https://docs.hetzner.cloud/changelog#2025-10-07-dns-beta for more details. """ return self._client.get_rrset(self, name=name, type=type) @@ -256,10 +216,6 @@ :param sort: Sort resources by field and direction. :param page: Page number to return. :param per_page: Maximum number of entries returned per page. - - Experimental: - DNS API is in beta, breaking changes may occur within minor releases. - See https://docs.hetzner.cloud/changelog#2025-10-07-dns-beta for more details. """ return self._client.get_rrset_list( self, @@ -288,10 +244,6 @@ :param type: Filter resources by their type. The response will only contain the resources matching exactly the specified type. :param label_selector: Filter resources by labels. The response will only contain resources matching the label selector. :param sort: Sort resources by field and direction. - - Experimental: - DNS API is in beta, breaking changes may occur within minor releases. - See https://docs.hetzner.cloud/changelog#2025-10-07-dns-beta for more details. """ return self._client.get_rrset_all( self, @@ -320,10 +272,6 @@ :param ttl: Time To Live (TTL) of the RRSet. :param labels: User-defined labels (key/value pairs) for the Resource. :param records: Records of the RRSet. - - Experimental: - DNS API is in beta, breaking changes may occur within minor releases. - See https://docs.hetzner.cloud/changelog#2025-10-07-dns-beta for more details. """ return self._client.create_rrset( self, @@ -347,10 +295,6 @@ :param rrset: RRSet to update. :param labels: User-defined labels (key/value pairs) for the Resource. - - Experimental: - DNS API is in beta, breaking changes may occur within minor releases. - See https://docs.hetzner.cloud/changelog#2025-10-07-dns-beta for more details. """ return self._client.update_rrset(rrset=rrset, labels=labels) @@ -364,10 +308,6 @@ See https://docs.hetzner.cloud/reference/cloud#zone-rrsets-delete-an-rrset :param rrset: RRSet to delete. - - Experimental: - DNS API is in beta, breaking changes may occur within minor releases. - See https://docs.hetzner.cloud/changelog#2025-10-07-dns-beta for more details. """ return self._client.delete_rrset(rrset=rrset) @@ -384,10 +324,6 @@ :param rrset: RRSet to update. :param change: Prevent the Zone from being changed (deletion and updates). - - Experimental: - DNS API is in beta, breaking changes may occur within minor releases. - See https://docs.hetzner.cloud/changelog#2025-10-07-dns-beta for more details. """ return self._client.change_rrset_protection(rrset=rrset, change=change) @@ -403,10 +339,6 @@ :param rrset: RRSet to update. :param change: Time To Live (TTL) of the RRSet. - - Experimental: - DNS API is in beta, breaking changes may occur within minor releases. - See https://docs.hetzner.cloud/changelog#2025-10-07-dns-beta for more details. """ return self._client.change_rrset_ttl(rrset=rrset, ttl=ttl) @@ -424,10 +356,6 @@ :param rrset: RRSet to update. :param records: Records to add to the RRSet. :param ttl: Time To Live (TTL) of the RRSet. - - Experimental: - DNS API is in beta, breaking changes may occur within minor releases. - See https://docs.hetzner.cloud/changelog#2025-10-07-dns-beta for more details. """ return self._client.add_rrset_records(rrset=rrset, records=records, ttl=ttl) @@ -443,10 +371,6 @@ :param rrset: RRSet to update. :param records: Records to remove from the RRSet. - - Experimental: - DNS API is in beta, breaking changes may occur within minor releases. - See https://docs.hetzner.cloud/changelog#2025-10-07-dns-beta for more details. """ return self._client.remove_rrset_records(rrset=rrset, records=records) @@ -462,10 +386,6 @@ :param rrset: RRSet to update. :param records: Records to set in the RRSet. - - Experimental: - DNS API is in beta, breaking changes may occur within minor releases. - See https://docs.hetzner.cloud/changelog#2025-10-07-dns-beta for more details. """ return self._client.set_rrset_records(rrset=rrset, records=records) @@ -486,6 +406,13 @@ super().__init__(client, data, complete) + def _get_self(self) -> BoundZoneRRSet: + return self._client.get_rrset( + self.data_model.zone, + self.data_model.name, + self.data_model.type, + ) + def update_rrset( self, *, @@ -497,10 +424,6 @@ See https://docs.hetzner.cloud/reference/cloud#zone-rrsets-update-an-rrset :param labels: User-defined labels (key/value pairs) for the Resource. - - Experimental: - DNS API is in beta, breaking changes may occur within minor releases. - See https://docs.hetzner.cloud/changelog#2025-10-07-dns-beta for more details. """ return self._client.update_rrset(self, labels=labels) @@ -511,10 +434,6 @@ Deletes the ZoneRRSet. See https://docs.hetzner.cloud/reference/cloud#zone-rrsets-delete-an-rrset - - Experimental: - DNS API is in beta, breaking changes may occur within minor releases. - See https://docs.hetzner.cloud/changelog#2025-10-07-dns-beta for more details. """ return self._client.delete_rrset(self) @@ -529,10 +448,6 @@ See https://docs.hetzner.cloud/reference/cloud#zone-rrset-actions-change-an-rrsets-protection :param change: Prevent the Zone from being changed (deletion and updates). - - Experimental: - DNS API is in beta, breaking changes may occur within minor releases. - See https://docs.hetzner.cloud/changelog#2025-10-07-dns-beta for more details. """ return self._client.change_rrset_protection(self, change=change) @@ -546,10 +461,6 @@ See https://docs.hetzner.cloud/reference/cloud#zone-rrset-actions-change-an-rrsets-ttl :param change: Time To Live (TTL) of the RRSet. - - Experimental: - DNS API is in beta, breaking changes may occur within minor releases. - See https://docs.hetzner.cloud/changelog#2025-10-07-dns-beta for more details. """ return self._client.change_rrset_ttl(self, ttl=ttl) @@ -565,10 +476,6 @@ :param records: Records to add to the RRSet. :param ttl: Time To Live (TTL) of the RRSet. - - Experimental: - DNS API is in beta, breaking changes may occur within minor releases. - See https://docs.hetzner.cloud/changelog#2025-10-07-dns-beta for more details. """ return self._client.add_rrset_records(self, records=records, ttl=ttl) @@ -582,10 +489,6 @@ See https://docs.hetzner.cloud/reference/cloud#zone-rrset-actions-remove-records-from-an-rrset :param records: Records to remove from the RRSet. - - Experimental: - DNS API is in beta, breaking changes may occur within minor releases. - See https://docs.hetzner.cloud/changelog#2025-10-07-dns-beta for more details. """ return self._client.remove_rrset_records(self, records=records) @@ -599,10 +502,6 @@ See https://docs.hetzner.cloud/reference/cloud#zone-rrset-actions-set-records-of-an-rrset :param records: Records to set in the RRSet. - - Experimental: - DNS API is in beta, breaking changes may occur within minor releases. - See https://docs.hetzner.cloud/changelog#2025-10-07-dns-beta for more details. """ return self._client.set_rrset_records(self, records=records) @@ -622,10 +521,6 @@ ZoneClient is a client for the Zone (DNS) API. See https://docs.hetzner.cloud/reference/cloud#zones and https://docs.hetzner.cloud/reference/cloud#zone-rrsets. - - Experimental: - DNS API is in beta, breaking changes may occur within minor releases. - See https://docs.hetzner.cloud/changelog#2025-10-07-dns-beta for more details. """ _base_url = "/zones" @@ -647,10 +542,6 @@ See https://docs.hetzner.cloud/reference/cloud#zones-get-a-zone :param id_or_name: ID or Name of the Zone. - - Experimental: - DNS API is in beta, breaking changes may occur within minor releases. - See https://docs.hetzner.cloud/changelog#2025-10-07-dns-beta for more details. """ response = self._client.request( method="GET", @@ -679,10 +570,6 @@ :param sort: Sort resources by field and direction. :param page: Page number to return. :param per_page: Maximum number of entries returned per page. - - Experimental: - DNS API is in beta, breaking changes may occur within minor releases. - See https://docs.hetzner.cloud/changelog#2025-10-07-dns-beta for more details. """ params: dict[str, Any] = {} if name is not None: @@ -725,10 +612,6 @@ :param mode: Filter resources by their mode. The response will only contain the resources matching exactly the specified mode. :param label_selector: Filter resources by labels. The response will only contain resources matching the label selector. :param sort: Sort resources by field and direction. - - Experimental: - DNS API is in beta, breaking changes may occur within minor releases. - See https://docs.hetzner.cloud/changelog#2025-10-07-dns-beta for more details. """ return self._iter_pages( self.get_list, @@ -763,10 +646,6 @@ :param primary_nameservers: Primary nameservers of the Zone. :param rrsets: RRSets to be added to the Zone. :param zonefile: Zone file to import. - - Experimental: - DNS API is in beta, breaking changes may occur within minor releases. - See https://docs.hetzner.cloud/changelog#2025-10-07-dns-beta for more details. """ data: dict[str, Any] = { "name": name, @@ -807,10 +686,6 @@ :param zone: Zone to update. :param labels: User-defined labels (key/value pairs) for the Resource. - - Experimental: - DNS API is in beta, breaking changes may occur within minor releases. - See https://docs.hetzner.cloud/changelog#2025-10-07-dns-beta for more details. """ data: dict[str, Any] = {} if labels is not None: @@ -833,10 +708,6 @@ See https://docs.hetzner.cloud/reference/cloud#zones-delete-a-zone :param zone: Zone to delete. - - Experimental: - DNS API is in beta, breaking changes may occur within minor releases. - See https://docs.hetzner.cloud/changelog#2025-10-07-dns-beta for more details. """ response = self._client.request( method="DELETE", @@ -857,10 +728,6 @@ See https://docs.hetzner.cloud/reference/cloud#zones-export-a-zone-file :param zone: Zone to export the zone file from. - - Experimental: - DNS API is in beta, breaking changes may occur within minor releases. - See https://docs.hetzner.cloud/changelog#2025-10-07-dns-beta for more details. """ response = self._client.request( method="GET", @@ -887,10 +754,6 @@ :param sort: Sort resources by field and direction. :param page: Page number to return. :param per_page: Maximum number of entries returned per page. - - Experimental: - DNS API is in beta, breaking changes may occur within minor releases. - See https://docs.hetzner.cloud/changelog#2025-10-07-dns-beta for more details. """ params: dict[str, Any] = {} if status is not None: @@ -927,10 +790,6 @@ :param zone: Zone to fetch the Actions from. :param status: Filter the actions by status. The response will only contain actions matching the specified statuses. :param sort: Sort resources by field and direction. - - Experimental: - DNS API is in beta, breaking changes may occur within minor releases. - See https://docs.hetzner.cloud/changelog#2025-10-07-dns-beta for more details. """ return self._iter_pages( self.get_actions_list, @@ -951,10 +810,6 @@ :param zone: Zone to import the zone file into. :param zonefile: Zone file to import. - - Experimental: - DNS API is in beta, breaking changes may occur within minor releases. - See https://docs.hetzner.cloud/changelog#2025-10-07-dns-beta for more details. """ data: dict[str, Any] = { "zonefile": zonefile, @@ -980,10 +835,6 @@ :param zone: Zone to update. :param delete: Prevents the Zone from being deleted. - - Experimental: - DNS API is in beta, breaking changes may occur within minor releases. - See https://docs.hetzner.cloud/changelog#2025-10-07-dns-beta for more details. """ data: dict[str, Any] = {} if delete is not None: @@ -1008,10 +859,6 @@ :param zone: Zone to update. :param ttl: Default Time To Live (TTL) of the Zone. - - Experimental: - DNS API is in beta, breaking changes may occur within minor releases. - See https://docs.hetzner.cloud/changelog#2025-10-07-dns-beta for more details. """ data: dict[str, Any] = { "ttl": ttl, @@ -1036,10 +883,6 @@ :param zone: Zone to update. :param primary_nameservers: Primary nameservers of the Zone. - - Experimental: - DNS API is in beta, breaking changes may occur within minor releases. - See https://docs.hetzner.cloud/changelog#2025-10-07-dns-beta for more details. """ data: dict[str, Any] = { "primary_nameservers": [o.to_payload() for o in primary_nameservers], @@ -1066,10 +909,6 @@ :param zone: Zone to fetch the RRSet from. :param name: Name of the RRSet. :param type: Type of the RRSet. - - Experimental: - DNS API is in beta, breaking changes may occur within minor releases. - See https://docs.hetzner.cloud/changelog#2025-10-07-dns-beta for more details. """ response = self._client.request( method="GET", @@ -1100,10 +939,6 @@ :param sort: Sort resources by field and direction. :param page: Page number to return. :param per_page: Maximum number of entries returned per page. - - Experimental: - DNS API is in beta, breaking changes may occur within minor releases. - See https://docs.hetzner.cloud/changelog#2025-10-07-dns-beta for more details. """ params: dict[str, Any] = {} if name is not None: @@ -1148,10 +983,6 @@ :param type: Filter resources by their type. The response will only contain the resources matching exactly the specified type. :param label_selector: Filter resources by labels. The response will only contain resources matching the label selector. :param sort: Sort resources by field and direction. - - Experimental: - DNS API is in beta, breaking changes may occur within minor releases. - See https://docs.hetzner.cloud/changelog#2025-10-07-dns-beta for more details. """ return self._iter_pages( self.get_rrset_list, @@ -1183,10 +1014,6 @@ :param ttl: Time To Live (TTL) of the RRSet. :param labels: User-defined labels (key/value pairs) for the Resource. :param records: Records of the RRSet. - - Experimental: - DNS API is in beta, breaking changes may occur within minor releases. - See https://docs.hetzner.cloud/changelog#2025-10-07-dns-beta for more details. """ data: dict[str, Any] = { "name": name, @@ -1222,10 +1049,6 @@ :param rrset: RRSet to update. :param labels: User-defined labels (key/value pairs) for the Resource. - - Experimental: - DNS API is in beta, breaking changes may occur within minor releases. - See https://docs.hetzner.cloud/changelog#2025-10-07-dns-beta for more details. """ if rrset.zone is None: raise ValueError("rrset zone property is none") @@ -1251,10 +1074,6 @@ See https://docs.hetzner.cloud/reference/cloud#zone-rrsets-delete-an-rrset :param rrset: RRSet to delete. - - Experimental: - DNS API is in beta, breaking changes may occur within minor releases. - See https://docs.hetzner.cloud/changelog#2025-10-07-dns-beta for more details. """ if rrset.zone is None: raise ValueError("rrset zone property is none") @@ -1280,10 +1099,6 @@ :param rrset: RRSet to update. :param change: Prevent the Zone from being changed (deletion and updates). - - Experimental: - DNS API is in beta, breaking changes may occur within minor releases. - See https://docs.hetzner.cloud/changelog#2025-10-07-dns-beta for more details. """ if rrset.zone is None: raise ValueError("rrset zone property is none") @@ -1311,10 +1126,6 @@ :param rrset: RRSet to update. :param change: Time To Live (TTL) of the RRSet. - - Experimental: - DNS API is in beta, breaking changes may occur within minor releases. - See https://docs.hetzner.cloud/changelog#2025-10-07-dns-beta for more details. """ if rrset.zone is None: raise ValueError("rrset zone property is none") @@ -1344,10 +1155,6 @@ :param rrset: RRSet to update. :param records: Records to add to the RRSet. :param ttl: Time To Live (TTL) of the RRSet. - - Experimental: - DNS API is in beta, breaking changes may occur within minor releases. - See https://docs.hetzner.cloud/changelog#2025-10-07-dns-beta for more details. """ if rrset.zone is None: raise ValueError("rrset zone property is none") @@ -1377,10 +1184,6 @@ :param rrset: RRSet to update. :param records: Records to remove from the RRSet. - - Experimental: - DNS API is in beta, breaking changes may occur within minor releases. - See https://docs.hetzner.cloud/changelog#2025-10-07-dns-beta for more details. """ if rrset.zone is None: raise ValueError("rrset zone property is none") @@ -1408,10 +1211,6 @@ :param rrset: RRSet to update. :param records: Records to set in the RRSet. - - Experimental: - DNS API is in beta, breaking changes may occur within minor releases. - See https://docs.hetzner.cloud/changelog#2025-10-07-dns-beta for more details. """ if rrset.zone is None: raise ValueError("rrset zone property is none") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hcloud-2.10.0/hcloud.egg-info/PKG-INFO new/hcloud-2.11.1/hcloud.egg-info/PKG-INFO --- old/hcloud-2.10.0/hcloud.egg-info/PKG-INFO 2025-11-07 14:42:55.000000000 +0100 +++ new/hcloud-2.11.1/hcloud.egg-info/PKG-INFO 2025-11-14 14:02:31.000000000 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 2.4 Name: hcloud -Version: 2.10.0 +Version: 2.11.1 Summary: Official Hetzner Cloud python library Home-page: https://github.com/hetznercloud/hcloud-python Author: Hetzner Cloud GmbH @@ -33,7 +33,7 @@ Provides-Extra: test Requires-Dist: coverage<7.12,>=7.11; extra == "test" Requires-Dist: pylint<4.1,>=4; extra == "test" -Requires-Dist: pytest<8.5,>=8; extra == "test" +Requires-Dist: pytest<9.1,>=9; extra == "test" Requires-Dist: pytest-cov<7.1,>=7; extra == "test" Requires-Dist: mypy<1.19,>=1.18; extra == "test" Requires-Dist: types-python-dateutil; extra == "test" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hcloud-2.10.0/hcloud.egg-info/requires.txt new/hcloud-2.11.1/hcloud.egg-info/requires.txt --- old/hcloud-2.10.0/hcloud.egg-info/requires.txt 2025-11-07 14:42:55.000000000 +0100 +++ new/hcloud-2.11.1/hcloud.egg-info/requires.txt 2025-11-14 14:02:31.000000000 +0100 @@ -10,7 +10,7 @@ [test] coverage<7.12,>=7.11 pylint<4.1,>=4 -pytest<8.5,>=8 +pytest<9.1,>=9 pytest-cov<7.1,>=7 mypy<1.19,>=1.18 types-python-dateutil diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hcloud-2.10.0/setup.py new/hcloud-2.11.1/setup.py --- old/hcloud-2.10.0/setup.py 2025-11-07 14:42:42.000000000 +0100 +++ new/hcloud-2.11.1/setup.py 2025-11-14 14:02:21.000000000 +0100 @@ -7,7 +7,7 @@ setup( name="hcloud", - version="2.10.0", # x-releaser-pleaser-version + version="2.11.1", # x-releaser-pleaser-version keywords="hcloud hetzner cloud", description="Official Hetzner Cloud python library", long_description=readme, @@ -48,7 +48,7 @@ "test": [ "coverage>=7.11,<7.12", "pylint>=4,<4.1", - "pytest>=8,<8.5", + "pytest>=9,<9.1", "pytest-cov>=7,<7.1", "mypy>=1.18,<1.19", "types-python-dateutil", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hcloud-2.10.0/tests/unit/actions/test_domain.py new/hcloud-2.11.1/tests/unit/actions/test_domain.py --- old/hcloud-2.10.0/tests/unit/actions/test_domain.py 2025-11-07 14:42:42.000000000 +0100 +++ new/hcloud-2.11.1/tests/unit/actions/test_domain.py 2025-11-14 14:02:21.000000000 +0100 @@ -20,7 +20,7 @@ ], ) def test_eq(value): - assert value == value + assert value.__eq__(value) class TestAction: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hcloud-2.10.0/tests/unit/certificates/test_domain.py new/hcloud-2.11.1/tests/unit/certificates/test_domain.py --- old/hcloud-2.10.0/tests/unit/certificates/test_domain.py 2025-11-07 14:42:42.000000000 +0100 +++ new/hcloud-2.11.1/tests/unit/certificates/test_domain.py 2025-11-14 14:02:21.000000000 +0100 @@ -21,7 +21,7 @@ ], ) def test_eq(value): - assert value == value + assert value.__eq__(value) class TestCertificate: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hcloud-2.10.0/tests/unit/conftest.py new/hcloud-2.11.1/tests/unit/conftest.py --- old/hcloud-2.10.0/tests/unit/conftest.py 2025-11-07 14:42:42.000000000 +0100 +++ new/hcloud-2.11.1/tests/unit/conftest.py 2025-11-14 14:02:21.000000000 +0100 @@ -188,6 +188,10 @@ lambda m: inspect.ismethod(m) and m.__func__ in bound_model.__class__.__dict__.values(), ): + # Ignore private methods + if name.startswith("_"): + continue + # Actions methods are already tested in TestBoundModelActions. if name in ("__init__", "get_actions", "get_actions_list"): continue diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hcloud-2.10.0/tests/unit/core/test_client.py new/hcloud-2.11.1/tests/unit/core/test_client.py --- old/hcloud-2.10.0/tests/unit/core/test_client.py 2025-11-07 14:42:42.000000000 +0100 +++ new/hcloud-2.11.1/tests/unit/core/test_client.py 2025-11-14 14:02:21.000000000 +0100 @@ -47,7 +47,7 @@ client=client, data={"id": 1, "name": "name", "description": "description"} ) with pytest.raises(AttributeError): - bound_model.content + _ = bound_model.content client.get_by_id.assert_not_called() def test_get_exists_model_attribute_incomplete_model( @@ -77,7 +77,7 @@ ): bound_model = bound_model_class(client=client, data={"id": 1}, complete=False) with pytest.raises(AttributeError): - bound_model.content + _ = bound_model.content client.get_by_id.assert_not_called() assert bound_model.complete is False @@ -137,7 +137,7 @@ def test_iter_pages_no_meta(self, client_class_constructor): json_content = {"candies": [1, 2]} - def json_content_function(p): + def json_content_function(_): return json_content candies_client = client_class_constructor(json_content_function) @@ -152,7 +152,7 @@ "meta": {"pagination": {"page": 1, "per_page": 11, "next_page": None}}, } - def json_content_function(p): + def json_content_function(_): return json_content candies_client = client_class_constructor(json_content_function) @@ -218,23 +218,23 @@ def test_get_first_by_result_exists(self, client_class_constructor): json_content = {"candies": [1]} - def json_content_function(p): + def json_content_function(_): return json_content 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) def test_get_first_by_result_does_not_exist(self, client_class_constructor): json_content = {"candies": []} - def json_content_function(p): + def json_content_function(_): return json_content 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 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hcloud-2.10.0/tests/unit/datacenters/test_domain.py new/hcloud-2.11.1/tests/unit/datacenters/test_domain.py --- old/hcloud-2.10.0/tests/unit/datacenters/test_domain.py 2025-11-07 14:42:42.000000000 +0100 +++ new/hcloud-2.11.1/tests/unit/datacenters/test_domain.py 2025-11-14 14:02:21.000000000 +0100 @@ -13,4 +13,4 @@ ], ) def test_eq(value): - assert value == value + assert value.__eq__(value) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hcloud-2.10.0/tests/unit/deprecation/test_domain.py new/hcloud-2.11.1/tests/unit/deprecation/test_domain.py --- old/hcloud-2.10.0/tests/unit/deprecation/test_domain.py 2025-11-07 14:42:42.000000000 +0100 +++ new/hcloud-2.11.1/tests/unit/deprecation/test_domain.py 2025-11-14 14:02:21.000000000 +0100 @@ -12,4 +12,4 @@ ], ) def test_eq(value): - assert value == value + assert value.__eq__(value) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hcloud-2.10.0/tests/unit/exp/test_zone.py new/hcloud-2.11.1/tests/unit/exp/test_zone.py --- old/hcloud-2.10.0/tests/unit/exp/test_zone.py 2025-11-07 14:42:42.000000000 +0100 +++ new/hcloud-2.11.1/tests/unit/exp/test_zone.py 2025-11-14 14:02:21.000000000 +0100 @@ -17,8 +17,8 @@ assert is_txt_record_quoted(value) == expected -manyA = "a" * 255 -someB = "b" * 10 +MANY_A = "a" * 255 +SOME_B = "b" * 10 @pytest.mark.parametrize( @@ -30,7 +30,7 @@ ("hello\nworld", '"hello\nworld"'), ('hello "world"', '"hello \\"world\\""'), ('hello "world', '"hello \\"world"'), - (manyA + someB, f'"{manyA}" "{someB}"'), + (MANY_A + SOME_B, f'"{MANY_A}" "{SOME_B}"'), ], ) def test_format_txt_record(value: str, expected: str): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hcloud-2.10.0/tests/unit/firewalls/test_domain.py new/hcloud-2.11.1/tests/unit/firewalls/test_domain.py --- old/hcloud-2.10.0/tests/unit/firewalls/test_domain.py 2025-11-07 14:42:42.000000000 +0100 +++ new/hcloud-2.11.1/tests/unit/firewalls/test_domain.py 2025-11-14 14:02:21.000000000 +0100 @@ -25,7 +25,7 @@ ], ) def test_eq(value): - assert value == value + assert value.__eq__(value) class TestFirewall: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hcloud-2.10.0/tests/unit/floating_ips/test_client.py new/hcloud-2.11.1/tests/unit/floating_ips/test_client.py --- old/hcloud-2.10.0/tests/unit/floating_ips/test_client.py 2025-11-07 14:42:42.000000000 +0100 +++ new/hcloud-2.11.1/tests/unit/floating_ips/test_client.py 2025-11-14 14:02:21.000000000 +0100 @@ -228,14 +228,10 @@ assert bound_floating_ip.description == "Web Frontend" assert action.id == 13 - @pytest.mark.parametrize( - "server", [Server(id=1), BoundServer(mock.MagicMock(), dict(id=1))] - ) def test_create_with_name( self, request_mock: mock.MagicMock, floating_ips_client: FloatingIPsClient, - server, floating_ip_create_response, ): request_mock.return_value = floating_ip_create_response diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hcloud-2.10.0/tests/unit/floating_ips/test_domain.py new/hcloud-2.11.1/tests/unit/floating_ips/test_domain.py --- old/hcloud-2.10.0/tests/unit/floating_ips/test_domain.py 2025-11-07 14:42:42.000000000 +0100 +++ new/hcloud-2.11.1/tests/unit/floating_ips/test_domain.py 2025-11-14 14:02:21.000000000 +0100 @@ -15,12 +15,12 @@ ], ) def test_eq(value): - assert value == value + assert value.__eq__(value) class TestFloatingIP: def test_created_is_datetime(self): - floatingIP = FloatingIP(id=1, created="2016-01-30T23:50+00:00") - assert floatingIP.created == datetime.datetime( + floating_ip = FloatingIP(id=1, created="2016-01-30T23:50+00:00") + assert floating_ip.created == datetime.datetime( 2016, 1, 30, 23, 50, tzinfo=timezone.utc ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hcloud-2.10.0/tests/unit/images/test_domain.py new/hcloud-2.11.1/tests/unit/images/test_domain.py --- old/hcloud-2.10.0/tests/unit/images/test_domain.py 2025-11-07 14:42:42.000000000 +0100 +++ new/hcloud-2.11.1/tests/unit/images/test_domain.py 2025-11-14 14:02:21.000000000 +0100 @@ -15,7 +15,7 @@ ], ) def test_eq(value): - assert value == value + assert value.__eq__(value) class TestImage: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hcloud-2.10.0/tests/unit/isos/test_domain.py new/hcloud-2.11.1/tests/unit/isos/test_domain.py --- old/hcloud-2.10.0/tests/unit/isos/test_domain.py 2025-11-07 14:42:42.000000000 +0100 +++ new/hcloud-2.11.1/tests/unit/isos/test_domain.py 2025-11-14 14:02:21.000000000 +0100 @@ -14,7 +14,7 @@ ], ) def test_eq(value): - assert value == value + assert value.__eq__(value) class TestIso: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hcloud-2.10.0/tests/unit/load_balancer_types/test_domain.py new/hcloud-2.11.1/tests/unit/load_balancer_types/test_domain.py --- old/hcloud-2.10.0/tests/unit/load_balancer_types/test_domain.py 2025-11-07 14:42:42.000000000 +0100 +++ new/hcloud-2.11.1/tests/unit/load_balancer_types/test_domain.py 2025-11-14 14:02:21.000000000 +0100 @@ -12,4 +12,4 @@ ], ) def test_eq(value): - assert value == value + assert value.__eq__(value) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hcloud-2.10.0/tests/unit/load_balancers/test_domain.py new/hcloud-2.11.1/tests/unit/load_balancers/test_domain.py --- old/hcloud-2.10.0/tests/unit/load_balancers/test_domain.py 2025-11-07 14:42:42.000000000 +0100 +++ new/hcloud-2.11.1/tests/unit/load_balancers/test_domain.py 2025-11-14 14:02:21.000000000 +0100 @@ -52,7 +52,7 @@ ], ) def test_eq(value): - assert value == value + assert value.__eq__(value) class TestLoadBalancers: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hcloud-2.10.0/tests/unit/locations/test_domain.py new/hcloud-2.11.1/tests/unit/locations/test_domain.py --- old/hcloud-2.10.0/tests/unit/locations/test_domain.py 2025-11-07 14:42:42.000000000 +0100 +++ new/hcloud-2.11.1/tests/unit/locations/test_domain.py 2025-11-14 14:02:21.000000000 +0100 @@ -12,4 +12,4 @@ ], ) def test_eq(value): - assert value == value + assert value.__eq__(value) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hcloud-2.10.0/tests/unit/networks/test_domain.py new/hcloud-2.11.1/tests/unit/networks/test_domain.py --- old/hcloud-2.10.0/tests/unit/networks/test_domain.py 2025-11-07 14:42:42.000000000 +0100 +++ new/hcloud-2.11.1/tests/unit/networks/test_domain.py 2025-11-14 14:02:21.000000000 +0100 @@ -17,7 +17,7 @@ ], ) def test_eq(value): - assert value == value + assert value.__eq__(value) class TestNetwork: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hcloud-2.10.0/tests/unit/placement_groups/test_client.py new/hcloud-2.11.1/tests/unit/placement_groups/test_client.py --- old/hcloud-2.10.0/tests/unit/placement_groups/test_client.py 2025-11-07 14:42:42.000000000 +0100 +++ new/hcloud-2.11.1/tests/unit/placement_groups/test_client.py 2025-11-14 14:02:21.000000000 +0100 @@ -68,9 +68,7 @@ request_mock.assert_called_with( method="GET", - url="/placement_groups/{placement_group_id}".format( - placement_group_id=placement_group_response["placement_group"]["id"] - ), + url="/placement_groups/897", ) assert placement_group._client is resource_client diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hcloud-2.10.0/tests/unit/placement_groups/test_domain.py new/hcloud-2.11.1/tests/unit/placement_groups/test_domain.py --- old/hcloud-2.10.0/tests/unit/placement_groups/test_domain.py 2025-11-07 14:42:42.000000000 +0100 +++ new/hcloud-2.11.1/tests/unit/placement_groups/test_domain.py 2025-11-14 14:02:21.000000000 +0100 @@ -15,7 +15,7 @@ ], ) def test_eq(value): - assert value == value + assert value.__eq__(value) class TestPlacementGroup: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hcloud-2.10.0/tests/unit/primary_ips/test_domain.py new/hcloud-2.11.1/tests/unit/primary_ips/test_domain.py --- old/hcloud-2.10.0/tests/unit/primary_ips/test_domain.py 2025-11-07 14:42:42.000000000 +0100 +++ new/hcloud-2.11.1/tests/unit/primary_ips/test_domain.py 2025-11-14 14:02:21.000000000 +0100 @@ -15,12 +15,12 @@ ], ) def test_eq(value): - assert value == value + assert value.__eq__(value) class TestPrimaryIP: def test_created_is_datetime(self): - primaryIP = PrimaryIP(id=1, created="2016-01-30T23:50+00:00") - assert primaryIP.created == datetime.datetime( + primary_ip = PrimaryIP(id=1, created="2016-01-30T23:50+00:00") + assert primary_ip.created == datetime.datetime( 2016, 1, 30, 23, 50, tzinfo=timezone.utc ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hcloud-2.10.0/tests/unit/server_types/test_domain.py new/hcloud-2.11.1/tests/unit/server_types/test_domain.py --- old/hcloud-2.10.0/tests/unit/server_types/test_domain.py 2025-11-07 14:42:42.000000000 +0100 +++ new/hcloud-2.11.1/tests/unit/server_types/test_domain.py 2025-11-14 14:02:21.000000000 +0100 @@ -12,4 +12,4 @@ ], ) def test_eq(value): - assert value == value + assert value.__eq__(value) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hcloud-2.10.0/tests/unit/servers/test_client.py new/hcloud-2.11.1/tests/unit/servers/test_client.py --- old/hcloud-2.10.0/tests/unit/servers/test_client.py 2025-11-07 14:42:42.000000000 +0100 +++ new/hcloud-2.11.1/tests/unit/servers/test_client.py 2025-11-14 14:02:21.000000000 +0100 @@ -68,6 +68,7 @@ def bound_model(self, resource_client: ServersClient): return BoundServer(resource_client, data=dict(id=14)) + # pylint: disable=too-many-statements def test_init(self, response_full_server): bound_server = BoundServer( client=mock.MagicMock(), data=response_full_server["server"] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hcloud-2.10.0/tests/unit/servers/test_domain.py new/hcloud-2.11.1/tests/unit/servers/test_domain.py --- old/hcloud-2.10.0/tests/unit/servers/test_domain.py 2025-11-07 14:42:42.000000000 +0100 +++ new/hcloud-2.11.1/tests/unit/servers/test_domain.py 2025-11-14 14:02:21.000000000 +0100 @@ -40,7 +40,7 @@ ], ) def test_eq(value): - assert value == value + assert value.__eq__(value) class TestServer: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hcloud-2.10.0/tests/unit/ssh_keys/test_domain.py new/hcloud-2.11.1/tests/unit/ssh_keys/test_domain.py --- old/hcloud-2.10.0/tests/unit/ssh_keys/test_domain.py 2025-11-07 14:42:42.000000000 +0100 +++ new/hcloud-2.11.1/tests/unit/ssh_keys/test_domain.py 2025-11-14 14:02:21.000000000 +0100 @@ -15,12 +15,12 @@ ], ) def test_eq(value): - assert value == value + assert value.__eq__(value) class TestSSHKey: def test_created_is_datetime(self): - sshKey = SSHKey(id=1, created="2016-01-30T23:50+00:00") - assert sshKey.created == datetime.datetime( + ssh_key = SSHKey(id=1, created="2016-01-30T23:50+00:00") + assert ssh_key.created == datetime.datetime( 2016, 1, 30, 23, 50, tzinfo=timezone.utc ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hcloud-2.10.0/tests/unit/volumes/test_domain.py new/hcloud-2.11.1/tests/unit/volumes/test_domain.py --- old/hcloud-2.10.0/tests/unit/volumes/test_domain.py 2025-11-07 14:42:42.000000000 +0100 +++ new/hcloud-2.11.1/tests/unit/volumes/test_domain.py 2025-11-14 14:02:21.000000000 +0100 @@ -15,7 +15,7 @@ ], ) def test_eq(value): - assert value == value + assert value.__eq__(value) class TestVolume: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hcloud-2.10.0/tests/unit/zones/test_client.py new/hcloud-2.11.1/tests/unit/zones/test_client.py --- old/hcloud-2.10.0/tests/unit/zones/test_client.py 2025-11-07 14:42:42.000000000 +0100 +++ new/hcloud-2.11.1/tests/unit/zones/test_client.py 2025-11-14 14:02:21.000000000 +0100 @@ -958,3 +958,25 @@ assert isinstance(o.zone, BoundZone) assert o.zone.id == 42 + + def test_reload( + self, + request_mock: mock.MagicMock, + resource_client: ZonesClient, + zone_rrset1, + ): + o = BoundZoneRRSet( + resource_client, + data={"id": "www/A", "zone": 42}, + complete=False, + ) + request_mock.return_value = {"rrset": zone_rrset1} + + o.reload() + + request_mock.assert_called_with( + method="GET", + url="/zones/42/rrsets/www/A", + ) + + assert o.labels is not None
