Revision c3e8f508

b/api/emitter.py
3 3
# Copyright © 2010 Greek Research and Technology Network
4 4
#
5 5

  
6
import re
7
from xml.dom import minidom
8
from django.conf.urls.defaults import url
6 9
from piston.emitters import Emitter, Mimer
7 10
from piston.resource import Resource as BaseResource
8
from xml.dom import minidom
9
import re
10 11

  
11 12
_accept_re = re.compile(r'([^\s;,]+)(?:[^,]*?;\s*q=(\d*(?:\.\d+)?))?')
12 13

  
......
47 48
        """
48 49

  
49 50
        em = request.GET.get('format', 'json')
50
        if 'emitter_format' in kwargs:
51
        if 'emitter_format' in kwargs and \
52
           kwargs["emitter_format"] is not None:
51 53
            em = kwargs.pop('emitter_format')
52 54
        elif 'HTTP_ACCEPT' in request.META:
53 55
            accepts = parse_accept_header(request.META['HTTP_ACCEPT'])
......
116 118

  
117 119
Emitter.register('xml', OSXMLEmitter, 'application/xml')
118 120
Mimer.register(lambda *a: None, ('application/xml',))
121

  
122
def url_with_format(regex, *args, **kwargs):
123
    """
124
    An extended url() that adds an .json/.xml suffix to the end to avoid DRY
125
    """
126
    if regex[-1] == '$' and regex[-2] != '\\':
127
        regex = regex[:-1]
128
    regex = regex + r'(\.(?P<emitter_format>json|xml))?$'
129
    return url(regex, *args, **kwargs)
b/api/urls.py
4 4
#
5 5

  
6 6
from django.conf.urls.defaults import *
7
from synnefo.api.emitter import Resource
7
from synnefo.api.emitter import Resource, url_with_format
8 8
from synnefo.api.handlers import *
9 9
from synnefo.api.authentication import TokenAuthentication
10 10
from synnefo.api.faults import fault
......
23 23
image_handler = Resource(ImageHandler, auth)
24 24
shared_ip_group_handler = Resource(SharedIPGroupHandler, auth)
25 25

  
26
def url_with_format(regex, *args, **kwargs):
27
    if regex[-1] == '$':
28
        regex = regex[:-1]
29
    regex = regex + r'(\.(?P<emitter_format>json|xml))?$'
30
    return url(regex, *args, **kwargs)
31

  
26 32
v10patterns = patterns('',
27
    url(r'^limits$', limit_handler),
28
    url(r'^servers$', server_handler),
29
    url(r'^servers/(?P<id>[^/]+)$', server_handler),
30
    url(r'^servers/(?P<id>[^/]+)/action$', server_actions_handler),
31
    url(r'^servers/(?P<id>[^/]+)/ips$', server_address_handler),
32
    url(r'^servers/(?P<id>[^/]+)/ips/private$', server_address_handler),
33
    url(r'^servers/(?P<id>[^/]+)/ips/public/(?P<address>[^/]+)$', server_address_handler),
34
    url(r'^servers/(?P<id>[^/]+)/backup_schedule', server_backup_handler),
35
    url(r'^flavors$', flavor_handler),
36
    url(r'^flavors/(?P<id>[^/]+)$', flavor_handler),
37
    url(r'^images$', image_handler),
38
    url(r'^images/(?P<id>[^/]+)$', image_handler),
39
    url(r'^shared_ip_groups$', shared_ip_group_handler),
40
    url(r'^shared_ip_groups/(?P<id>[^/]+)$', shared_ip_group_handler),
41
    (r'^.+', notFound), # catch-all
33
    url_with_format(r'^limits$', limit_handler),
34
    url_with_format(r'^servers$', server_handler),
35
    url_with_format(r'^servers/(?P<id>[^/]+)$', server_handler),
36
    url_with_format(r'^servers/(?P<id>[^/]+)/action$', server_actions_handler),
37
    url_with_format(r'^servers/(?P<id>[^/]+)/ips$', server_address_handler),
38
    url_with_format(r'^servers/(?P<id>[^/]+)/ips/private$', server_address_handler),
39
    url_with_format(r'^servers/(?P<id>[^/]+)/ips/public/(?P<address>[^/]+)$', server_address_handler),
40
    url_with_format(r'^servers/(?P<id>[^/]+)/backup_schedule', server_backup_handler),
41
    url_with_format(r'^flavors$', flavor_handler),
42
    url_with_format(r'^flavors/(?P<id>[^/]+)$', flavor_handler),
43
    url_with_format(r'^images$', image_handler),
44
    url_with_format(r'^images/(?P<id>[^/]+)$', image_handler),
45
    url_with_format(r'^shared_ip_groups$', shared_ip_group_handler),
46
    url_with_format(r'^shared_ip_groups/(?P<id>[^/]+)$', shared_ip_group_handler),
47
    url(r'^.+', notFound), # catch-all
42 48
)
43 49

  
44 50
version_handler = Resource(VersionHandler)
45 51

  
46 52
urlpatterns = patterns('',
47
    url(r'^(?P<number>[^/]+)/?$', version_handler),
53
    url_with_format(r'^(?P<number>[^/]+)/?$', version_handler),
48 54
    url(r'^$', version_handler),
49
    (r'^v1.0/', include(v10patterns)),
50
    (r'^.+', notFound), # catch-all
55
    url(r'^v1.0/', include(v10patterns)),
56
    url(r'^.+', notFound), # catch-all
51 57
)

Also available in: Unified diff