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) |