Merge lp:~jtv/maas/extract-nodemacs-handlers into lp:~maas-committers/maas/trunk

Proposed by Jeroen T. Vermeulen
Status: Merged
Approved by: Jeroen T. Vermeulen
Approved revision: no longer in the source branch.
Merged at revision: 2748
Proposed branch: lp:~jtv/maas/extract-nodemacs-handlers
Merge into: lp:~maas-committers/maas/trunk
Prerequisite: lp:~jtv/maas/extract-version-handler
Diff against target: 226 lines (+104/-78)
3 files modified
src/maasserver/api/api.py (+1/-76)
src/maasserver/api/node_macs.py (+99/-0)
src/maasserver/urls_api.py (+4/-2)
To merge this branch: bzr merge lp:~jtv/maas/extract-nodemacs-handlers
Reviewer Review Type Date Requested Status
Jeroen T. Vermeulen (community) Approve
Review via email: mp+231190@code.launchpad.net

Commit message

Extract API handlers: NodeMacs.

Description of the change

For self-approval after cursory inspection.

Jeroen

To post a comment you must log in.
Revision history for this message
Jeroen T. Vermeulen (jtv) wrote :

Looks OK. Self-approving.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'src/maasserver/api/api.py'
2--- src/maasserver/api/api.py 2014-08-18 13:29:45 +0000
3+++ src/maasserver/api/api.py 2014-08-18 13:29:45 +0000
4@@ -14,8 +14,6 @@
5 "AnonNodesHandler",
6 "get_oauth_token",
7 "NodeHandler",
8- "NodeMacHandler",
9- "NodeMacsHandler",
10 "NodesHandler",
11 "store_node_power_parameters",
12 ]
13@@ -55,10 +53,7 @@
14 StaticIPAddressExhaustion,
15 Unauthorized,
16 )
17-from maasserver.fields import (
18- MAC_RE,
19- validate_mac,
20- )
21+from maasserver.fields import MAC_RE
22 from maasserver.forms import (
23 BulkNodeActionForm,
24 get_action_form,
25@@ -963,73 +958,3 @@
26 @classmethod
27 def resource_uri(cls, *args, **kwargs):
28 return ('nodes_handler', [])
29-
30-
31-class NodeMacsHandler(OperationsHandler):
32- """Manage MAC addresses for a given Node.
33-
34- This is where you manage the MAC addresses linked to a Node, including
35- associating a new MAC address with the Node.
36-
37- The Node is identified by its system_id.
38- """
39- api_doc_section_name = "Node MAC addresses"
40- update = delete = None
41-
42- def read(self, request, system_id):
43- """Read all MAC addresses related to a Node."""
44- node = Node.objects.get_node_or_404(
45- user=request.user, system_id=system_id, perm=NODE_PERMISSION.VIEW)
46-
47- return MACAddress.objects.filter(node=node).order_by('id')
48-
49- def create(self, request, system_id):
50- """Create a MAC address for a specified Node."""
51- node = Node.objects.get_node_or_404(
52- user=request.user, system_id=system_id, perm=NODE_PERMISSION.EDIT)
53- mac = node.add_mac_address(request.data.get('mac_address', None))
54- return mac
55-
56- @classmethod
57- def resource_uri(cls, *args, **kwargs):
58- return ('node_macs_handler', ['system_id'])
59-
60-
61-class NodeMacHandler(OperationsHandler):
62- """Manage a Node MAC address.
63-
64- The MAC address object is identified by the system_id for the Node it
65- is attached to, plus the MAC address itself.
66- """
67- api_doc_section_name = "Node MAC address"
68- create = update = None
69- fields = ('mac_address',)
70- model = MACAddress
71-
72- def read(self, request, system_id, mac_address):
73- """Read a MAC address related to a Node."""
74- node = Node.objects.get_node_or_404(
75- user=request.user, system_id=system_id, perm=NODE_PERMISSION.VIEW)
76-
77- validate_mac(mac_address)
78- return get_object_or_404(
79- MACAddress, node=node, mac_address=mac_address)
80-
81- def delete(self, request, system_id, mac_address):
82- """Delete a specific MAC address for the specified Node."""
83- validate_mac(mac_address)
84- node = Node.objects.get_node_or_404(
85- user=request.user, system_id=system_id, perm=NODE_PERMISSION.EDIT)
86-
87- mac = get_object_or_404(MACAddress, node=node, mac_address=mac_address)
88- mac.delete()
89- return rc.DELETED
90-
91- @classmethod
92- def resource_uri(cls, mac=None):
93- node_system_id = "system_id"
94- mac_address = "mac_address"
95- if mac is not None:
96- node_system_id = mac.node.system_id
97- mac_address = mac.mac_address
98- return ('node_mac_handler', [node_system_id, mac_address])
99
100=== added file 'src/maasserver/api/node_macs.py'
101--- src/maasserver/api/node_macs.py 1970-01-01 00:00:00 +0000
102+++ src/maasserver/api/node_macs.py 2014-08-18 13:29:45 +0000
103@@ -0,0 +1,99 @@
104+# Copyright 2014 Canonical Ltd. This software is licensed under the
105+# GNU Affero General Public License version 3 (see the file LICENSE).
106+
107+"""API handlers: `NodeMac`."""
108+
109+from __future__ import (
110+ absolute_import,
111+ print_function,
112+ unicode_literals,
113+ )
114+
115+str = None
116+
117+__metaclass__ = type
118+__all__ = [
119+ 'NodeMacHandler',
120+ 'NodeMacsHandler',
121+ ]
122+
123+
124+from django.shortcuts import get_object_or_404
125+from maasserver.api.support import OperationsHandler
126+from maasserver.enum import NODE_PERMISSION
127+from maasserver.fields import validate_mac
128+from maasserver.models import (
129+ MACAddress,
130+ Node,
131+ )
132+from piston.utils import rc
133+
134+
135+class NodeMacsHandler(OperationsHandler):
136+ """Manage MAC addresses for a given Node.
137+
138+ This is where you manage the MAC addresses linked to a Node, including
139+ associating a new MAC address with the Node.
140+
141+ The Node is identified by its system_id.
142+ """
143+ api_doc_section_name = "Node MAC addresses"
144+ update = delete = None
145+
146+ def read(self, request, system_id):
147+ """Read all MAC addresses related to a Node."""
148+ node = Node.objects.get_node_or_404(
149+ user=request.user, system_id=system_id, perm=NODE_PERMISSION.VIEW)
150+
151+ return MACAddress.objects.filter(node=node).order_by('id')
152+
153+ def create(self, request, system_id):
154+ """Create a MAC address for a specified Node."""
155+ node = Node.objects.get_node_or_404(
156+ user=request.user, system_id=system_id, perm=NODE_PERMISSION.EDIT)
157+ mac = node.add_mac_address(request.data.get('mac_address', None))
158+ return mac
159+
160+ @classmethod
161+ def resource_uri(cls, *args, **kwargs):
162+ return ('node_macs_handler', ['system_id'])
163+
164+
165+class NodeMacHandler(OperationsHandler):
166+ """Manage a Node MAC address.
167+
168+ The MAC address object is identified by the system_id for the Node it
169+ is attached to, plus the MAC address itself.
170+ """
171+ api_doc_section_name = "Node MAC address"
172+ create = update = None
173+ fields = ('mac_address',)
174+ model = MACAddress
175+
176+ def read(self, request, system_id, mac_address):
177+ """Read a MAC address related to a Node."""
178+ node = Node.objects.get_node_or_404(
179+ user=request.user, system_id=system_id, perm=NODE_PERMISSION.VIEW)
180+
181+ validate_mac(mac_address)
182+ return get_object_or_404(
183+ MACAddress, node=node, mac_address=mac_address)
184+
185+ def delete(self, request, system_id, mac_address):
186+ """Delete a specific MAC address for the specified Node."""
187+ validate_mac(mac_address)
188+ node = Node.objects.get_node_or_404(
189+ user=request.user, system_id=system_id, perm=NODE_PERMISSION.EDIT)
190+
191+ mac = get_object_or_404(MACAddress, node=node, mac_address=mac_address)
192+ mac.delete()
193+ return rc.DELETED
194+
195+ @classmethod
196+ def resource_uri(cls, mac=None):
197+ node_system_id = "system_id"
198+ mac_address = "mac_address"
199+ if mac is not None:
200+ node_system_id = mac.node.system_id
201+ mac_address = mac.mac_address
202+ return ('node_mac_handler', [node_system_id, mac_address])
203
204=== modified file 'src/maasserver/urls_api.py'
205--- src/maasserver/urls_api.py 2014-08-18 13:29:45 +0000
206+++ src/maasserver/urls_api.py 2014-08-18 13:29:45 +0000
207@@ -21,8 +21,6 @@
208 from maasserver.api.account import AccountHandler
209 from maasserver.api.api import (
210 NodeHandler,
211- NodeMacHandler,
212- NodeMacsHandler,
213 NodesHandler,
214 )
215 from maasserver.api.auth import api_auth
216@@ -69,6 +67,10 @@
217 NodeGroupHandler,
218 NodeGroupsHandler,
219 )
220+from maasserver.api.node_macs import (
221+ NodeMacHandler,
222+ NodeMacsHandler,
223+ )
224 from maasserver.api.pxeconfig import pxeconfig
225 from maasserver.api.ssh_keys import (
226 SSHKeyHandler,