Revision 99667854 snf-cyclades-app/synnefo/api/networks.py
b/snf-cyclades-app/synnefo/api/networks.py | ||
---|---|---|
40 | 40 |
from django.template.loader import render_to_string |
41 | 41 |
|
42 | 42 |
from snf_django.lib import api |
43 |
from snf_django.lib.api import utils |
|
43 | 44 |
|
44 | 45 |
from synnefo.api import util |
45 | 46 |
from synnefo.db.models import Network |
... | ... | |
53 | 54 |
'synnefo.api.networks', |
54 | 55 |
(r'^(?:/|.json|.xml)?$', 'demux'), |
55 | 56 |
(r'^/detail(?:.json|.xml)?$', 'list_networks', {'detail': True}), |
56 |
(r'^/(\w+)(?:/|.json|.xml)?$', 'network_demux')) |
|
57 |
(r'^/(\w+)(?:/|.json|.xml)?$', 'network_demux'), |
|
58 |
(r'^/(\w+)/action(?:/|.json|.xml)?$', 'network_action_demux'), |
|
59 |
) |
|
57 | 60 |
|
58 | 61 |
|
59 | 62 |
def demux(request): |
... | ... | |
81 | 84 |
'DELETE']) |
82 | 85 |
|
83 | 86 |
|
87 |
@api.api_method(http_method='POST', user_required=True, logger=log) |
|
88 |
def network_action_demux(request, network_id): |
|
89 |
req = utils.get_request_dict(request) |
|
90 |
network = util.get_network(network_id, request.user_uniq, for_update=True) |
|
91 |
action = req.keys()[0] |
|
92 |
try: |
|
93 |
f = NETWORK_ACTIONS[action] |
|
94 |
except KeyError: |
|
95 |
raise faults.BadRequest("Action %s not supported." % action) |
|
96 |
action_args = req[action] |
|
97 |
if not isinstance(action_args, dict): |
|
98 |
raise faults.BadRequest("Invalid argument.") |
|
99 |
|
|
100 |
return f(request, network, action_args) |
|
101 |
|
|
102 |
|
|
84 | 103 |
@api.api_method(http_method='GET', user_required=True, logger=log) |
85 | 104 |
def list_networks(request, detail=True): |
86 | 105 |
log.debug('list_networks detail=%s', detail) |
... | ... | |
196 | 215 |
return d |
197 | 216 |
|
198 | 217 |
|
218 |
@transaction.commit_on_success |
|
219 |
def reassign_network(request, network, args): |
|
220 |
project = args.get("project") |
|
221 |
if project is None: |
|
222 |
raise faults.BadRequest("Missing 'project' attribute.") |
|
223 |
networks.reassign(network, project) |
|
224 |
return HttpResponse(status=200) |
|
225 |
|
|
226 |
|
|
227 |
NETWORK_ACTIONS = { |
|
228 |
"reassign": reassign_network, |
|
229 |
} |
|
230 |
|
|
231 |
|
|
199 | 232 |
def render_network(request, networkdict, status=200): |
200 | 233 |
if request.serialization == 'xml': |
201 | 234 |
data = render_to_string('network.xml', {'network': networkdict}) |
Also available in: Unified diff