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