Statistics
| Branch: | Tag: | Revision:

root / api / flavors.py @ f533f224

History | View | Annotate | Download (2.1 kB)

1
#
2
# Copyright (c) 2010 Greek Research and Technology Network
3
#
4

    
5
from django.conf.urls.defaults import patterns
6
from django.http import HttpResponse
7
from django.template.loader import render_to_string
8
from django.utils import simplejson as json
9

    
10
from synnefo.api import util
11
from synnefo.db.models import Flavor
12

    
13

    
14
urlpatterns = patterns('synnefo.api.flavors',
15
    (r'^(?:/|.json|.xml)?$', 'list_flavors'),
16
    (r'^/detail(?:.json|.xml)?$', 'list_flavors', {'detail': True}),
17
    (r'^/(\d+)(?:.json|.xml)?$', 'get_flavor_details'),
18
)
19

    
20

    
21
def flavor_to_dict(flavor, detail=True):
22
    d = {'id': flavor.id, 'name': flavor.name}
23
    if detail:
24
        d['ram'] = flavor.ram
25
        d['disk'] = flavor.disk
26
        d['cpu'] = flavor.cpu
27
    return d
28

    
29

    
30
@util.api_method('GET')
31
def list_flavors(request, detail=False):
32
    # Normal Response Codes: 200, 203
33
    # Error Response Codes: computeFault (400, 500),
34
    #                       serviceUnavailable (503),
35
    #                       unauthorized (401),
36
    #                       badRequest (400),
37
    #                       overLimit (413)
38

    
39
    all_flavors = Flavor.objects.all()
40
    flavors = [flavor_to_dict(flavor, detail) for flavor in all_flavors]
41

    
42
    if request.serialization == 'xml':
43
        data = render_to_string('list_flavors.xml', {
44
            'flavors': flavors,
45
            'detail': detail})
46
    else:
47
        data = json.dumps({'flavors': {'values': flavors}})
48

    
49
    return HttpResponse(data, status=200)
50

    
51
@util.api_method('GET')
52
def get_flavor_details(request, flavor_id):
53
    # Normal Response Codes: 200, 203
54
    # Error Response Codes: computeFault (400, 500),
55
    #                       serviceUnavailable (503),
56
    #                       unauthorized (401),
57
    #                       badRequest (400),
58
    #                       itemNotFound (404),
59
    #                       overLimit (413)
60

    
61
    flavor = util.get_flavor(flavor_id)
62
    flavordict = flavor_to_dict(flavor, detail=True)
63

    
64
    if request.serialization == 'xml':
65
        data = render_to_string('flavor.xml', {'flavor': flavordict})
66
    else:
67
        data = json.dumps({'flavor': flavordict})
68

    
69
    return HttpResponse(data, status=200)