Statistics
| Branch: | Tag: | Revision:

root / snf-quotaholder-app / quotaholder_django / quotaholder_app / views.py @ 3f4d77bb

History | View | Annotate | Download (2.7 kB)

1 3e5941c1 Giorgos Korfiatis
# Copyright 2012 GRNET S.A. All rights reserved.
2 3e5941c1 Giorgos Korfiatis
#
3 3e5941c1 Giorgos Korfiatis
# Redistribution and use in source and binary forms, with or
4 3e5941c1 Giorgos Korfiatis
# without modification, are permitted provided that the following
5 3e5941c1 Giorgos Korfiatis
# conditions are met:
6 3e5941c1 Giorgos Korfiatis
#
7 3e5941c1 Giorgos Korfiatis
#   1. Redistributions of source code must retain the above
8 3e5941c1 Giorgos Korfiatis
#      copyright notice, this list of conditions and the following
9 3e5941c1 Giorgos Korfiatis
#      disclaimer.
10 3e5941c1 Giorgos Korfiatis
#
11 3e5941c1 Giorgos Korfiatis
#   2. Redistributions in binary form must reproduce the above
12 3e5941c1 Giorgos Korfiatis
#      copyright notice, this list of conditions and the following
13 3e5941c1 Giorgos Korfiatis
#      disclaimer in the documentation and/or other materials
14 3e5941c1 Giorgos Korfiatis
#      provided with the distribution.
15 3e5941c1 Giorgos Korfiatis
#
16 3e5941c1 Giorgos Korfiatis
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17 3e5941c1 Giorgos Korfiatis
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 3e5941c1 Giorgos Korfiatis
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19 3e5941c1 Giorgos Korfiatis
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20 3e5941c1 Giorgos Korfiatis
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 3e5941c1 Giorgos Korfiatis
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 3e5941c1 Giorgos Korfiatis
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23 3e5941c1 Giorgos Korfiatis
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24 3e5941c1 Giorgos Korfiatis
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 3e5941c1 Giorgos Korfiatis
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26 3e5941c1 Giorgos Korfiatis
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 3e5941c1 Giorgos Korfiatis
# POSSIBILITY OF SUCH DAMAGE.
28 3e5941c1 Giorgos Korfiatis
#
29 3e5941c1 Giorgos Korfiatis
# The views and conclusions contained in the software and
30 3e5941c1 Giorgos Korfiatis
# documentation are those of the authors and should not be
31 3e5941c1 Giorgos Korfiatis
# interpreted as representing official policies, either expressed
32 3e5941c1 Giorgos Korfiatis
# or implied, of GRNET S.A.
33 3e5941c1 Giorgos Korfiatis
34 9f1a1bd0 Georgios D. Tsoukalas
35 9f1a1bd0 Georgios D. Tsoukalas
from django.http import HttpResponse
36 9f1a1bd0 Georgios D. Tsoukalas
from django.db import transaction 
37 f54beeea Giorgos Korfiatis
from synnefo.lib.commissioning import CallError, get_callpoint
38 9f1a1bd0 Georgios D. Tsoukalas
39 833abd3c Giorgos Korfiatis
from .callpoint import API_Callpoint
40 833abd3c Giorgos Korfiatis
41 9f1a1bd0 Georgios D. Tsoukalas
import json
42 eafa5b06 Georgios D. Tsoukalas
from traceback import format_exc
43 9f1a1bd0 Georgios D. Tsoukalas
44 3f4d77bb Georgios D. Tsoukalas
try:
45 3f4d77bb Georgios D. Tsoukalas
    from django.views.decorators.csrf import csrf_exempt
46 3f4d77bb Georgios D. Tsoukalas
except ImportError:
47 3f4d77bb Georgios D. Tsoukalas
    def csrf_exempt(func):
48 3f4d77bb Georgios D. Tsoukalas
        return func
49 3f4d77bb Georgios D. Tsoukalas
50 9f1a1bd0 Georgios D. Tsoukalas
def _get_body(request):
51 9f1a1bd0 Georgios D. Tsoukalas
    body = request.raw_post_data
52 9f1a1bd0 Georgios D. Tsoukalas
    if body is None:
53 9f1a1bd0 Georgios D. Tsoukalas
        body = request.GET.get('body', None)
54 9f1a1bd0 Georgios D. Tsoukalas
    return body
55 9f1a1bd0 Georgios D. Tsoukalas
56 833abd3c Giorgos Korfiatis
callpoints = {('quotaholder', 'v'): API_Callpoint()}
57 9f1a1bd0 Georgios D. Tsoukalas
58 9f1a1bd0 Georgios D. Tsoukalas
@transaction.commit_on_success
59 3f4d77bb Georgios D. Tsoukalas
@csrf_exempt
60 e16cf080 Georgios D. Tsoukalas
def view(request, appname='quotaholder', version=None, callname=None):
61 9f1a1bd0 Georgios D. Tsoukalas
    if (appname, version) not in callpoints:
62 833abd3c Giorgos Korfiatis
        return HttpResponse(status=404)
63 9f1a1bd0 Georgios D. Tsoukalas
64 9f1a1bd0 Georgios D. Tsoukalas
    callpoint = callpoints[(appname, version)]
65 9f1a1bd0 Georgios D. Tsoukalas
    body = _get_body(request)
66 9f1a1bd0 Georgios D. Tsoukalas
    try:
67 9f1a1bd0 Georgios D. Tsoukalas
        body = callpoint.make_call_from_json(callname, body)
68 9f1a1bd0 Georgios D. Tsoukalas
        status = 200
69 eafa5b06 Georgios D. Tsoukalas
    except Exception, e:
70 eafa5b06 Georgios D. Tsoukalas
        status = 450
71 eafa5b06 Georgios D. Tsoukalas
        if not isinstance(e, CallError):
72 eafa5b06 Georgios D. Tsoukalas
            e.args += (''.join(format_exc()),)
73 eafa5b06 Georgios D. Tsoukalas
            e = CallError.from_exception(e)
74 eafa5b06 Georgios D. Tsoukalas
            status = 500
75 eafa5b06 Georgios D. Tsoukalas
76 c3a709ad root
        body = json.dumps(e.to_dict())
77 9f1a1bd0 Georgios D. Tsoukalas
78 9f1a1bd0 Georgios D. Tsoukalas
    return HttpResponse(status=status, content=body)