Statistics
| Branch: | Tag: | Revision:

root / api / versions.py @ aa197ee4

History | View | Annotate | Download (2.6 kB)

1 d8e50a39 Giorgos Verigakis
#
2 d8e50a39 Giorgos Verigakis
# Copyright (c) 2010 Greek Research and Technology Network
3 d8e50a39 Giorgos Verigakis
#
4 d8e50a39 Giorgos Verigakis
5 d8e50a39 Giorgos Verigakis
from datetime import datetime
6 d8e50a39 Giorgos Verigakis
7 d8e50a39 Giorgos Verigakis
from django.conf import settings
8 d8e50a39 Giorgos Verigakis
from django.http import HttpResponse
9 d8e50a39 Giorgos Verigakis
from django.template.loader import render_to_string
10 d8e50a39 Giorgos Verigakis
from django.utils import simplejson as json
11 d8e50a39 Giorgos Verigakis
12 d8e50a39 Giorgos Verigakis
from synnefo.api.util import api_method, isoformat
13 d8e50a39 Giorgos Verigakis
14 d8e50a39 Giorgos Verigakis
15 d8e50a39 Giorgos Verigakis
VERSION_1_1 = {
16 d8e50a39 Giorgos Verigakis
    'id': 'v1.1',
17 d8e50a39 Giorgos Verigakis
    'status': 'CURRENT',
18 d8e50a39 Giorgos Verigakis
    'updated': '2011-04-01',
19 d8e50a39 Giorgos Verigakis
    'links': [
20 d8e50a39 Giorgos Verigakis
        {
21 d8e50a39 Giorgos Verigakis
            'rel': 'self',
22 d8e50a39 Giorgos Verigakis
            'href': settings.API_ROOT_URL,
23 d8e50a39 Giorgos Verigakis
        }
24 d8e50a39 Giorgos Verigakis
    ]
25 d8e50a39 Giorgos Verigakis
}
26 d8e50a39 Giorgos Verigakis
27 d8e50a39 Giorgos Verigakis
VERSIONS = [VERSION_1_1]
28 d8e50a39 Giorgos Verigakis
29 d8e50a39 Giorgos Verigakis
MEDIA_TYPES = [
30 d8e50a39 Giorgos Verigakis
    {'base': 'application/xml', 'type': 'application/vnd.openstack.compute-v1.1+xml'},
31 d8e50a39 Giorgos Verigakis
    {'base': 'application/json', 'type': 'application/vnd.openstack.compute-v1.1+json'}
32 d8e50a39 Giorgos Verigakis
]
33 d8e50a39 Giorgos Verigakis
34 c4c07cab Giorgos Verigakis
DESCRIBED_BY = [
35 c4c07cab Giorgos Verigakis
    {
36 c4c07cab Giorgos Verigakis
        'rel' : 'describedby',
37 c4c07cab Giorgos Verigakis
        'type' : 'application/pdf',
38 c4c07cab Giorgos Verigakis
        'href' : 'http://docs.rackspacecloud.com/servers/api/v1.1/cs-devguide-20110125.pdf'
39 c4c07cab Giorgos Verigakis
    },
40 c4c07cab Giorgos Verigakis
    {
41 c4c07cab Giorgos Verigakis
        'rel' : 'describedby',
42 c4c07cab Giorgos Verigakis
        'type' : 'application/vnd.sun.wadl+xml',
43 c4c07cab Giorgos Verigakis
        'href' : 'http://docs.rackspacecloud.com/servers/api/v1.1/application.wadl'
44 c4c07cab Giorgos Verigakis
    }
45 c4c07cab Giorgos Verigakis
]
46 d8e50a39 Giorgos Verigakis
47 d8e50a39 Giorgos Verigakis
@api_method('GET', atom_allowed=True)
48 d8e50a39 Giorgos Verigakis
def versions_list(request):
49 d8e50a39 Giorgos Verigakis
    # Normal Response Codes: 200, 203
50 d8e50a39 Giorgos Verigakis
    # Error Response Codes: 400, 413, 500, 503
51 aa197ee4 Vangelis Koukis
52 d8e50a39 Giorgos Verigakis
    if request.serialization == 'xml':
53 d8e50a39 Giorgos Verigakis
        data = render_to_string('versions_list.xml', {'versions': VERSIONS})
54 d8e50a39 Giorgos Verigakis
    elif request.serialization == 'atom':
55 d8e50a39 Giorgos Verigakis
        now = isoformat(datetime.now())
56 d8e50a39 Giorgos Verigakis
        data = render_to_string('versions_list.atom', {'now': now,'versions': VERSIONS})
57 d8e50a39 Giorgos Verigakis
    else:
58 d8e50a39 Giorgos Verigakis
        data = json.dumps({'versions': {'values': VERSIONS}})
59 aa197ee4 Vangelis Koukis
60 d8e50a39 Giorgos Verigakis
    return HttpResponse(data)
61 d8e50a39 Giorgos Verigakis
62 d8e50a39 Giorgos Verigakis
@api_method('GET', atom_allowed=True)
63 d8e50a39 Giorgos Verigakis
def version_details(request, api_version):
64 d8e50a39 Giorgos Verigakis
    # Normal Response Codes: 200, 203
65 d8e50a39 Giorgos Verigakis
    # Error Response Codes: computeFault (400, 500),
66 d8e50a39 Giorgos Verigakis
    #                       serviceUnavailable (503),
67 d8e50a39 Giorgos Verigakis
    #                       unauthorized (401),
68 d8e50a39 Giorgos Verigakis
    #                       badRequest (400),
69 d8e50a39 Giorgos Verigakis
    #                       overLimit(413)
70 d8e50a39 Giorgos Verigakis
71 d8e50a39 Giorgos Verigakis
    # We hardcode to v1.1 since it is the only one we support
72 d8e50a39 Giorgos Verigakis
    version = VERSION_1_1.copy()
73 c4c07cab Giorgos Verigakis
    version['links'] = version['links'] + DESCRIBED_BY
74 aa197ee4 Vangelis Koukis
75 d8e50a39 Giorgos Verigakis
    if request.serialization == 'xml':
76 d8e50a39 Giorgos Verigakis
        version['media_types'] = MEDIA_TYPES
77 d8e50a39 Giorgos Verigakis
        data = render_to_string('version_details.xml', {'version': version})
78 d8e50a39 Giorgos Verigakis
    elif request.serialization == 'atom':
79 d8e50a39 Giorgos Verigakis
        version['media_types'] = MEDIA_TYPES
80 d8e50a39 Giorgos Verigakis
        now = isoformat(datetime.now())
81 d8e50a39 Giorgos Verigakis
        data = render_to_string('version_details.atom', {'now': now,'version': version})
82 d8e50a39 Giorgos Verigakis
    else:
83 d8e50a39 Giorgos Verigakis
        version['media-types'] = MEDIA_TYPES
84 d8e50a39 Giorgos Verigakis
        data = json.dumps({'version': version})
85 d8e50a39 Giorgos Verigakis
    return HttpResponse(data)