Statistics
| Branch: | Tag: | Revision:

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

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.http import HttpResponse
37
from django.template.loader import render_to_string
38
from django.utils import simplejson as json
39
from synnefo.cyclades_settings import COMPUTE_ROOT_URL
40

    
41
from snf_django.lib import api
42

    
43

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

    
46

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

    
59
VERSIONS = [VERSION_2_0]
60

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

    
72
DESCRIBED_BY = [
73
    {
74
        "rel": "describedby",
75
        "type": "application/pdf",
76
        "href": "http://docs.rackspacecloud.com/servers/api/v2/"
77
                "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/"
83
                "application.wadl"
84
    }
85
]
86

    
87

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

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

    
98
    return HttpResponse(data)
99

    
100

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

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

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