Statistics
| Branch: | Tag: | Revision:

root / api / flavors.py @ aa197ee4

History | View | Annotate | Download (2.1 kB)

1 c36934a7 Giorgos Verigakis
#
2 c36934a7 Giorgos Verigakis
# Copyright (c) 2010 Greek Research and Technology Network
3 c36934a7 Giorgos Verigakis
#
4 c36934a7 Giorgos Verigakis
5 d8e50a39 Giorgos Verigakis
from django.conf.urls.defaults import patterns
6 c36934a7 Giorgos Verigakis
from django.http import HttpResponse
7 c36934a7 Giorgos Verigakis
from django.template.loader import render_to_string
8 29a59bc1 Giorgos Verigakis
from django.utils import simplejson as json
9 c36934a7 Giorgos Verigakis
10 529178b1 Giorgos Verigakis
from synnefo.api.util import get_flavor, api_method
11 d8e50a39 Giorgos Verigakis
from synnefo.db.models import Flavor
12 d8e50a39 Giorgos Verigakis
13 c36934a7 Giorgos Verigakis
14 c36934a7 Giorgos Verigakis
urlpatterns = patterns('synnefo.api.flavors',
15 c36934a7 Giorgos Verigakis
    (r'^(?:/|.json|.xml)?$', 'list_flavors'),
16 c36934a7 Giorgos Verigakis
    (r'^/detail(?:.json|.xml)?$', 'list_flavors', {'detail': True}),
17 c36934a7 Giorgos Verigakis
    (r'^/(\d+)(?:.json|.xml)?$', 'get_flavor_details'),
18 c36934a7 Giorgos Verigakis
)
19 c36934a7 Giorgos Verigakis
20 c36934a7 Giorgos Verigakis
21 c36934a7 Giorgos Verigakis
def flavor_to_dict(flavor, detail=True):
22 c36934a7 Giorgos Verigakis
    d = {'id': flavor.id, 'name': flavor.name}
23 c36934a7 Giorgos Verigakis
    if detail:
24 c36934a7 Giorgos Verigakis
        d['ram'] = flavor.ram
25 c36934a7 Giorgos Verigakis
        d['disk'] = flavor.disk
26 f1641e4d Markos Gogoulos
        d['cpu'] = flavor.cpu
27 c36934a7 Giorgos Verigakis
    return d
28 c36934a7 Giorgos Verigakis
29 c36934a7 Giorgos Verigakis
30 c36934a7 Giorgos Verigakis
@api_method('GET')
31 c36934a7 Giorgos Verigakis
def list_flavors(request, detail=False):
32 c36934a7 Giorgos Verigakis
    # Normal Response Codes: 200, 203
33 c36934a7 Giorgos Verigakis
    # Error Response Codes: computeFault (400, 500),
34 c36934a7 Giorgos Verigakis
    #                       serviceUnavailable (503),
35 c36934a7 Giorgos Verigakis
    #                       unauthorized (401),
36 c36934a7 Giorgos Verigakis
    #                       badRequest (400),
37 c36934a7 Giorgos Verigakis
    #                       overLimit (413)
38 aa197ee4 Vangelis Koukis
39 c36934a7 Giorgos Verigakis
    all_flavors = Flavor.objects.all()
40 c36934a7 Giorgos Verigakis
    flavors = [flavor_to_dict(flavor, detail) for flavor in all_flavors]
41 aa197ee4 Vangelis Koukis
42 d8e50a39 Giorgos Verigakis
    if request.serialization == 'xml':
43 c36934a7 Giorgos Verigakis
        data = render_to_string('list_flavors.xml', {'flavors': flavors, 'detail': detail})
44 c36934a7 Giorgos Verigakis
    else:
45 c36934a7 Giorgos Verigakis
        data = json.dumps({'flavors': {'values': flavors}})
46 aa197ee4 Vangelis Koukis
47 d8e50a39 Giorgos Verigakis
    return HttpResponse(data, status=200)
48 c36934a7 Giorgos Verigakis
49 c36934a7 Giorgos Verigakis
@api_method('GET')
50 c36934a7 Giorgos Verigakis
def get_flavor_details(request, flavor_id):
51 c36934a7 Giorgos Verigakis
    # Normal Response Codes: 200, 203
52 c36934a7 Giorgos Verigakis
    # Error Response Codes: computeFault (400, 500),
53 c36934a7 Giorgos Verigakis
    #                       serviceUnavailable (503),
54 c36934a7 Giorgos Verigakis
    #                       unauthorized (401),
55 c36934a7 Giorgos Verigakis
    #                       badRequest (400),
56 c36934a7 Giorgos Verigakis
    #                       itemNotFound (404),
57 c36934a7 Giorgos Verigakis
    #                       overLimit (413)
58 aa197ee4 Vangelis Koukis
59 529178b1 Giorgos Verigakis
    flavor = get_flavor(flavor_id)
60 529178b1 Giorgos Verigakis
    flavordict = flavor_to_dict(flavor, detail=True)
61 aa197ee4 Vangelis Koukis
62 d8e50a39 Giorgos Verigakis
    if request.serialization == 'xml':
63 529178b1 Giorgos Verigakis
        data = render_to_string('flavor.xml', {'flavor': flavordict})
64 c36934a7 Giorgos Verigakis
    else:
65 529178b1 Giorgos Verigakis
        data = json.dumps({'flavor': flavordict})
66 aa197ee4 Vangelis Koukis
67 c36934a7 Giorgos Verigakis
    return HttpResponse(data, status=200)