Statistics
| Branch: | Tag: | Revision:

root / api / flavors.py @ 2627cd84

History | View | Annotate | Download (2.3 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.faults import ItemNotFound
11
from synnefo.api.util import get_user, get_request_dict, api_method
12
from synnefo.db.models import Flavor
13

    
14

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

    
21

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

    
30

    
31
@api_method('GET')
32
def list_flavors(request, detail=False):
33
    # Normal Response Codes: 200, 203
34
    # Error Response Codes: computeFault (400, 500),
35
    #                       serviceUnavailable (503),
36
    #                       unauthorized (401),
37
    #                       badRequest (400),
38
    #                       overLimit (413)
39
    
40
    all_flavors = Flavor.objects.all()
41
    flavors = [flavor_to_dict(flavor, detail) for flavor in all_flavors]
42
    
43
    if request.serialization == 'xml':
44
        data = render_to_string('list_flavors.xml', {'flavors': flavors, 'detail': detail})
45
    else:
46
        data = json.dumps({'flavors': {'values': flavors}})
47
    
48
    return HttpResponse(data, status=200)
49

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

    
60
    try:
61
        falvor_id = int(flavor_id)
62
        flavor = flavor_to_dict(Flavor.objects.get(id=flavor_id))
63
    except Flavor.DoesNotExist:
64
        raise ItemNotFound
65
    
66
    if request.serialization == 'xml':
67
        data = render_to_string('flavor.xml', {'flavor': flavor})
68
    else:
69
        data = json.dumps({'flavor': flavor})
70
    
71
    return HttpResponse(data, status=200)