root / api / resource.py @ b9a77976
History | View | Annotate | Download (1.3 kB)
1 | 5c812d1b | Faidon Liambotis | # vim: ts=4 sts=4 et ai sw=4 fileencoding=utf-8
|
---|---|---|---|
2 | 5c812d1b | Faidon Liambotis | #
|
3 | 5c812d1b | Faidon Liambotis | # Copyright © 2010 Greek Research and Technology Network
|
4 | 5c812d1b | Faidon Liambotis | #
|
5 | 5c812d1b | Faidon Liambotis | |
6 | 5c812d1b | Faidon Liambotis | from piston.resource import Resource as BaseResource |
7 | 5c812d1b | Faidon Liambotis | from synnefo.helpers import parse_accept_header |
8 | 93efd593 | Faidon Liambotis | import synnefo.api.emitter # load our own Emitter |
9 | 5c812d1b | Faidon Liambotis | |
10 | 5c812d1b | Faidon Liambotis | class Resource(BaseResource): |
11 | 5c812d1b | Faidon Liambotis | def determine_emitter(self, request, *args, **kwargs): |
12 | 5c812d1b | Faidon Liambotis | """
|
13 | 5c812d1b | Faidon Liambotis | Override default emitter policy to account for Accept header
|
14 | 5c812d1b | Faidon Liambotis |
|
15 | 5c812d1b | Faidon Liambotis | emitter_format (.json or .xml suffix in URL) always takes precedence.
|
16 | 5c812d1b | Faidon Liambotis |
|
17 | 5c812d1b | Faidon Liambotis | After that, the Accept header is checked; if both JSON and XML are
|
18 | 5c812d1b | Faidon Liambotis | equally preferred, use JSON.
|
19 | 5c812d1b | Faidon Liambotis |
|
20 | 5c812d1b | Faidon Liambotis | If none of the two were provided, then use JSON as per the
|
21 | 5c812d1b | Faidon Liambotis | specification.
|
22 | 5c812d1b | Faidon Liambotis | """
|
23 | 5c812d1b | Faidon Liambotis | |
24 | 5c812d1b | Faidon Liambotis | em = request.GET.get('format', 'json') |
25 | 5c812d1b | Faidon Liambotis | if 'emitter_format' in kwargs and \ |
26 | 5c812d1b | Faidon Liambotis | kwargs["emitter_format"] is not None: |
27 | 5c812d1b | Faidon Liambotis | em = kwargs.pop('emitter_format')
|
28 | 5c812d1b | Faidon Liambotis | elif 'HTTP_ACCEPT' in request.META: |
29 | 5c812d1b | Faidon Liambotis | accepts = parse_accept_header(request.META['HTTP_ACCEPT'])
|
30 | 5c812d1b | Faidon Liambotis | for content_type, quality in accepts: |
31 | 5c812d1b | Faidon Liambotis | if content_type == 'application/json': |
32 | 5c812d1b | Faidon Liambotis | break
|
33 | 5c812d1b | Faidon Liambotis | elif content_type == 'application/xml': |
34 | 5c812d1b | Faidon Liambotis | em = request.GET.get('format', 'xml') |
35 | 5c812d1b | Faidon Liambotis | break
|
36 | 5c812d1b | Faidon Liambotis | |
37 | 5c812d1b | Faidon Liambotis | return em
|