Skip to content

Commit c3a0a3d

Browse files
committed
Add dynamic property "id_or_name" to BaseDomain
1 parent 0852b21 commit c3a0a3d

3 files changed

Lines changed: 20 additions & 28 deletions

File tree

hcloud/core/domain.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,12 @@
11
# -*- coding: utf-8 -*-
22
class BaseDomain(object):
33
__slots__ = ()
4+
5+
@property
6+
def id_or_name(self):
7+
if self.id is not None:
8+
return self.id
9+
elif self.name is not None:
10+
return self.name
11+
else:
12+
raise ValueError("id or name must be set")

hcloud/servers/client.py

Lines changed: 10 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -257,18 +257,11 @@ def reset_password(self, server):
257257

258258
def change_type(self, server, server_type, upgrade_disk):
259259
# type: (servers.domain.Server, BoundServerType, bool) -> actions.domainAction
260-
if server_type.id is not None:
261-
data = {
262-
"server_type": server_type.id
263-
}
264-
elif server_type.name is not None:
265-
data = {
266-
"server_type": server_type.name
267-
}
268-
else:
269-
raise ValueError("missing server type")
270260

271-
data.update({"upgrade_disk": upgrade_disk})
261+
data = {
262+
"server_type": server_type.id_or_name,
263+
"upgrade_disk": upgrade_disk
264+
}
272265
response = self._client.request(url="/servers/{server_id}/actions/change_type".format(server_id=server.id), method="POST", json=data)
273266
return BoundAction(self._client.actions, response['action'])
274267

@@ -307,15 +300,10 @@ def create_image(self, server, description=None, type=None, labels=None):
307300

308301
def rebuild(self, server, image):
309302
# type: (servers.domain.Server, Image) -> actions.domainAction
310-
if image.id is None:
311-
data = {
312-
"image": image.name
313-
}
314-
else:
315-
data = {
316-
"image": image.id
317-
}
318303

304+
data = {
305+
"image": image.id_or_name
306+
}
319307
response = self._client.request(url="/servers/{server_id}/actions/rebuild".format(server_id=server.id), method="POST", json=data)
320308
return BoundAction(self._client.actions, response['action'])
321309

@@ -331,14 +319,9 @@ def disable_backup(self, server):
331319

332320
def attach_iso(self, server, iso):
333321
# type: (servers.domain.Server, Iso) -> actions.domainAction
334-
if iso.id is None:
335-
data = {
336-
"iso": iso.name
337-
}
338-
else:
339-
data = {
340-
"iso": iso.id
341-
}
322+
data = {
323+
"iso": iso.id_or_name
324+
}
342325
response = self._client.request(url="/servers/{server_id}/actions/attach_iso".format(server_id=server.id), method="POST", json=data)
343326
return BoundAction(self._client.actions, response['action'])
344327

tests/unit/servers/test_client.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -459,7 +459,7 @@ def test_change_type_with_server_type_id(self, servers_client, server, generic_a
459459
def test_change_type_with_blank_server_type(self, servers_client, server):
460460
with pytest.raises(ValueError) as e:
461461
servers_client.change_type(server, ServerType(), upgrade_disk=True)
462-
assert str(e.value) == "missing server type"
462+
assert str(e.value) == "id or name must be set"
463463
servers_client._client.request.assert_not_called()
464464

465465
@pytest.mark.parametrize("server", [Server(id=1), BoundServer(mock.MagicMock(), dict(id=1))])

0 commit comments

Comments
 (0)