Statistics
| Branch: | Tag: | Revision:

root / snf-cyclades-app / synnefo / api / versions.py @ ece5581b

History | View | Annotate | Download (3.9 kB)

1
# Copyright 2011 GRNET S.A. All rights reserved.
2
#
3
# Redistribution and use in source and binary forms, with or
4
# without modification, are permitted provided that the following
5
# conditions are met:
6
#
7
#   1. Redistributions of source code must retain the above
8
#      copyright notice, this list of conditions and the following
9
#      disclaimer.
10
#
11
#   2. Redistributions in binary form must reproduce the above
12
#      copyright notice, this list of conditions and the following
13
#      disclaimer in the documentation and/or other materials
14
#      provided with the distribution.
15
#
16
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27
# POSSIBILITY OF SUCH DAMAGE.
28
#
29
# The views and conclusions contained in the software and
30
# documentation are those of the authors and should not be
31
# interpreted as representing official policies, either expressed
32
# or implied, of GRNET S.A.
33

    
34
from logging import getLogger
35

    
36
from django.conf import settings
37
from django.http import HttpResponse
38
from django.template.loader import render_to_string
39
from django.utils import simplejson as json
40
from synnefo.cyclades_settings import COMPUTE_ROOT_URL
41

    
42
from snf_django.lib import api
43

    
44

    
45
log = getLogger('synnefo.api')
46

    
47

    
48
VERSION_2_0 = {
49
    "id" : "v2.0",
50
    "status" : "CURRENT",
51
    "updated" : "2011-01-21T11:33:21-06:00",
52
    "links": [
53
        {
54
            "rel" : "self",
55
            "href" : COMPUTE_ROOT_URL,
56
        },
57
    ],
58
}
59

    
60
VERSIONS = [VERSION_2_0]
61

    
62
MEDIA_TYPES = [
63
    {
64
        "base" : "application/xml",
65
        "type" : "application/vnd.openstack.compute.v2+xml"
66
    },
67
    {
68
        "base" : "application/json",
69
        "type" : "application/vnd.openstack.compute.v2+json"
70
    }
71
]
72

    
73
DESCRIBED_BY = [
74
    {
75
        "rel" : "describedby",
76
        "type" : "application/pdf",
77
        "href" : "http://docs.rackspacecloud.com/servers/api/v2/cs-devguide-20110125.pdf"
78
    },
79
    {
80
        "rel" : "describedby",
81
        "type" : "application/vnd.sun.wadl+xml",
82
        "href" : "http://docs.rackspacecloud.com/servers/api/v2/application.wadl"
83
    }
84
]
85

    
86

    
87
@api.api_method(http_method='GET', user_required=True, logger=log)
88
def versions_list(request):
89
    # Normal Response Codes: 200, 203
90
    # Error Response Codes: 400, 413, 500, 503
91

    
92
    if request.serialization == 'xml':
93
        data = render_to_string('versions_list.xml', {'versions': VERSIONS})
94
    else:
95
        data = json.dumps({'versions': VERSIONS})
96

    
97
    return HttpResponse(data)
98

    
99

    
100
@api.api_method('GET', user_required=True, logger=log)
101
def version_details(request, api_version):
102
    # Normal Response Codes: 200, 203
103
    # Error Response Codes: computeFault (400, 500),
104
    #                       serviceUnavailable (503),
105
    #                       unauthorized (401),
106
    #                       badRequest (400),
107
    #                       overLimit(413)
108

    
109
    log.debug('version_details %s', api_version)
110
    # We hardcode to v2.0 since it is the only one we support
111
    version = VERSION_2_0.copy()
112
    version['links'] = version['links'] + DESCRIBED_BY
113

    
114
    if request.serialization == 'xml':
115
        version['media_types'] = MEDIA_TYPES
116
        data = render_to_string('version_details.xml', {'version': version})
117
    else:
118
        version['media-types'] = MEDIA_TYPES
119
        data = json.dumps({'version': version})
120
    return HttpResponse(data)