Skip to content

Commit 3c428cf

Browse files
author
Elias Nygren
committed
update docstrings, remove redundant code
1 parent a227608 commit 3c428cf

File tree

4 files changed

+77
-47
lines changed

4 files changed

+77
-47
lines changed
Lines changed: 44 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,68 @@
11
from ..ip_address import IP_address
22

3-
43
class IPManager():
54
"""
65
Functions for managing IP-addresses. Intended to be used as a mixin for CloudManager.
76
"""
87

9-
def get_IP(self, UUID):
10-
res = self.get_request("/ip_address/" + UUID)
11-
IP = IP_address._create_ip_address_obj( res["ip_address"], cloud_manager=self )
12-
return IP
8+
def get_IP(self, address):
9+
"""
10+
Get an IP_address object with the IP address (string) from the API.
11+
e.g manager.get_IP("80.69.175.210")
12+
"""
13+
res = self.get_request("/ip_address/" + address)
14+
return IP_address( cloud_manager=self, **res["ip_address"] )
1315

1416
def get_IPs(self):
17+
"""
18+
Get all IP_address objects from the API.
19+
"""
1520
res = self.get_request("/ip_address")
1621
IPs = IP_address._create_ip_address_objs( res["ip_addresses"], cloud_manager=self )
1722
return IPs
1823

19-
def attach_IP(self, server_UUID):
20-
body = dict()
21-
body["ip_address"] = {
22-
"server" : server_UUID
24+
def attach_IP(self, server):
25+
"""
26+
Attach a new (random) IP_address to the given server (object or UUID)
27+
"""
28+
29+
if not isinstance(server, str):
30+
server = server.uuid
31+
32+
body = {
33+
"ip_address": {
34+
"server": server
35+
}
2336
}
2437

2538
res = self.request("POST", "/ip_address", body)
26-
IP = IP_address._create_ip_address_obj( res["ip_address"], cloud_manager=self )
27-
return IP
39+
return IP_address( cloud_manager=self, **res["ip_address"] )
2840

2941
def modify_IP(self, IP_addr, ptr_record):
30-
body = dict()
31-
body["ip_address"] = {
32-
"ptr_record": ptr_record
42+
"""
43+
Modify an IP address' ptr-record (Reverse DNS).
44+
Accepts an IP_address instance (object) or its address (string).
45+
"""
46+
47+
if not isinstance(IP_addr, str):
48+
IP_addr = IP_addr.address
49+
50+
body = {
51+
"ip_address": {
52+
"ptr_record": ptr_record
53+
}
3354
}
3455

3556
res = self.request("PUT", "/ip_address/" + IP_addr, body)
36-
IP = IP_address._create_ip_address_obj( res["ip_address"], cloud_manager=self )
37-
return IP
57+
return IP_address( cloud_manager=self, **res["ip_address"] )
3858

3959
def release_IP(self, IP_addr):
40-
return self.request("DELETE", "/ip_address/" + IP_addr)
60+
"""
61+
Destroy an IP_address. Returns an empty object.
62+
Accepts an IP_address instance (object) or its address (string).
63+
"""
64+
if not isinstance(IP_addr, str):
65+
IP_addr = IP_addr.address
66+
67+
return self.request( "DELETE", "/ip_address/" + IP_addr )
4168

upcloud/cloud_manager/server_mixin.py

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ def get_servers(self, populate=False):
1717
Populate = False (default) => 1 API request, returns unpopulated Server instances.
1818
Populate = True => Does 1 + n API requests (n = # of servers), returns populated Server instances.
1919
"""
20-
servers = self.__fetch_servers()
20+
21+
servers = self.get_request("/server")["servers"]["server"]
2122

2223
server_list = list()
2324
for server in servers:
@@ -120,16 +121,11 @@ def delete_server(self, UUID):
120121
"""
121122
DELETE '/server/UUID'. Permanently destroys the virtual machine.
122123
DOES NOT remove the storage disks.
124+
125+
Returns an empty object.
123126
"""
124127
return self.request("DELETE", "/server/" + UUID)
125128

126-
def __fetch_servers(self):
127-
"""
128-
Returns '/servers' data in Python dict.
129-
"""
130-
data = self.get_request("/server")
131-
return data["servers"]["server"]
132-
133129

134130
def get_server_data(self, UUID):
135131
"""

upcloud/ip_address.py

Lines changed: 29 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,18 @@
11
from .base import BaseAPI
22

33
class IP_address(BaseAPI):
4+
"""
5+
Object representation of the IP-address.
6+
7+
Attributes:
8+
access -- "public" or "private"
9+
address -- the actual IP_address (string)
10+
ptr_record -- the reverse DNS name (string)
11+
server -- the UUID of the server this IP is attached to (string)
12+
13+
The only updateable field is the ptr_record.
14+
ptr_record and server are present only if /server/uuid endpoint was used.
15+
"""
416

517
def __init__(self, access, address, cloud_manager, ptr_record=None, server=None):
618
"""
@@ -10,25 +22,15 @@ def __init__(self, access, address, cloud_manager, ptr_record=None, server=None)
1022
self._cloud_manager = cloud_manager
1123
self.__reset(access, address, ptr_record, server)
1224

13-
@property
14-
def address(self):
15-
return self._address
16-
17-
@property
18-
def access(self):
19-
return self._access
20-
21-
@property
22-
def server_uuid(self):
23-
return self._server_uuid
24-
25-
2625
def __reset(self, access, address, ptr_record=None, server=None):
2726
"""
2827
Reset after repopulating from API.
2928
"""
29+
# Always present
3030
self._access = access
3131
self._address = address
32+
33+
# Present when populated from /server/uuid endpoint
3234
self._server_uuid = server
3335
self.ptr = ptr_record
3436

@@ -49,14 +51,21 @@ def destroy(self):
4951
def __str__(self):
5052
return "IP-address: " + self.address
5153

54+
@property
55+
def address(self):
56+
return self._address
57+
58+
@property
59+
def access(self):
60+
return self._access
61+
62+
@property
63+
def server_uuid(self):
64+
return self._server_uuid
65+
5266
@staticmethod
5367
def _create_ip_address_objs(IP_addrs, cloud_manager):
54-
IP_addrs = IP_addrs["ip_address"]
5568
IP_objs = list()
56-
for IP_addr in IP_addrs:
69+
for IP_addr in IP_addrs["ip_address"]:
5770
IP_objs.append( IP_address(cloud_manager = cloud_manager, **IP_addr) )
58-
return IP_objs
59-
60-
@staticmethod
61-
def _create_ip_address_obj(IP_addr, cloud_manager):
62-
return IP_address(cloud_manager = cloud_manager, **IP_addr)
71+
return IP_objs

upcloud/tools.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
11

2-
3-
42
def assignIfExists(opts, default=None, **kwargs):
53
"""
64
Helper for assigning object attributes from API responses.

0 commit comments

Comments
 (0)