addons-server/apps/api/urls.py

108 строки
3.6 KiB
Python
Исходник Обычный вид История

2010-04-17 02:44:34 +04:00
from django.conf import settings
2010-02-17 03:22:22 +03:00
from django.conf.urls.defaults import patterns, url, include
2010-08-27 21:07:16 +04:00
from piston.resource import Resource
2010-12-22 02:45:02 +03:00
from addons.urls import ADDON_ID
2010-09-14 21:08:54 +04:00
from api import authentication, handlers, views
2010-04-17 02:44:34 +04:00
API_CACHE_TIMEOUT = getattr(settings, 'API_CACHE_TIMEOUT', 500)
# Wrap class views in a lambda call so we get an fresh instance of the class
# for thread-safety.
def class_view(cls):
2010-04-17 02:44:34 +04:00
inner = lambda *args, **kw: cls()(*args, **kw)
return inner
2010-04-17 02:44:34 +04:00
2010-02-17 03:22:22 +03:00
2010-02-20 04:13:42 +03:00
# Regular expressions that we use in our urls.
2010-02-23 21:19:18 +03:00
type_regexp = '/(?P<addon_type>[^/]*)'
2010-02-20 04:13:42 +03:00
limit_regexp = '/(?P<limit>\d*)'
platform_regexp = '/(?P<platform>\w*)'
version_regexp = '/(?P<version>[^/]*)'
def build_urls(base, appendages):
"""
Many of our urls build off each other:
e.g.
/search/:query
/search/:query/:type
.
.
/search/:query/:type/:limit/:platform/:version
"""
urls = [base]
for i in range(len(appendages)):
2010-04-17 02:44:34 +04:00
urls.append(base + ''.join(appendages[:i + 1]))
2010-02-20 04:13:42 +03:00
return urls
2010-02-17 03:22:22 +03:00
base_search_regexp = r'search/(?P<query>[^/]+)'
2010-02-20 04:13:42 +03:00
appendages = [type_regexp, limit_regexp, platform_regexp, version_regexp]
search_regexps = build_urls(base_search_regexp, appendages)
base_list_regexp = r'list'
appendages.insert(0, '/(?P<list_type>[^/]+)')
list_regexps = build_urls(base_list_regexp, appendages)
2010-02-17 03:22:22 +03:00
api_patterns = patterns('',
# Addon_details
2010-12-22 02:45:02 +03:00
url('addon/%s$' % ADDON_ID, class_view(views.AddonDetailView),
2011-06-28 23:33:33 +04:00
name='api.addon_detail'),
url(r'^get_language_packs$', class_view(views.LanguageView),
name='api.language'),)
2010-02-17 03:22:22 +03:00
for regexp in search_regexps:
api_patterns += patterns('',
url(regexp + '/?$', class_view(views.SearchView), name='api.search'))
2010-02-17 03:22:22 +03:00
2010-02-20 04:13:42 +03:00
for regexp in list_regexps:
api_patterns += patterns('',
url(regexp + '/?$', class_view(views.ListView), name='api.list'))
2010-02-20 04:13:42 +03:00
2011-07-09 03:49:10 +04:00
ad = {'authentication': authentication.AMOOAuthAuthentication(two_legged=True)}
2010-08-27 21:07:16 +04:00
user_resource = Resource(handler=handlers.UserHandler, **ad)
2010-09-14 21:09:07 +04:00
addons_resource = Resource(handler=handlers.AddonsHandler, **ad)
version_resource = Resource(handler=handlers.VersionsHandler, **ad)
2011-07-09 03:49:10 +04:00
performance_resource = Resource(handler=handlers.PerformanceHandler, **ad)
app_resource = Resource(handler=handlers.PerformanceAppHandler, **ad)
os_resource = Resource(handler=handlers.PerformanceOSHandler, **ad)
performance_patterns = patterns('',
url(r'^$', performance_resource, name='api.performance'),
url(r'^(?P<id>\d+)$', performance_resource, name='api.performance'),
url(r'^app/$', app_resource, name='api.performance.app'),
url(r'^app/(?P<id>\d+)$', app_resource, name='api.performance.app'),
url(r'^os/$', os_resource, name='api.performance.os'),
url(r'^os/(?P<id>\d+)$', os_resource, name='api.performance.os'),
)
2010-08-27 21:07:16 +04:00
piston_patterns = patterns('',
url(r'^user/$', user_resource, name='api.user'),
2010-09-14 21:09:07 +04:00
url(r'^addons/$', addons_resource, name='api.addons'),
2010-12-22 02:45:02 +03:00
url(r'^addon/%s$' % ADDON_ID, addons_resource, name='api.addon'),
url(r'^addon/%s/versions$' % ADDON_ID, version_resource,
name='api.versions'),
2010-12-22 02:45:02 +03:00
url(r'^addon/%s/version/(?P<version_id>\d+)$' % ADDON_ID,
2010-10-05 02:05:46 +04:00
version_resource, name='api.version'),
url(r'^performance/', include(performance_patterns)),
2010-08-27 21:07:16 +04:00
)
urlpatterns = patterns('',
# Redirect api requests without versions
2010-02-20 04:13:42 +03:00
url('^((?:addon|search|list)/.*)$', views.redirect_view),
2010-02-17 03:22:22 +03:00
2010-08-27 21:07:16 +04:00
# Piston
url(r'^2/', include(piston_patterns)),
2010-02-17 03:22:22 +03:00
# Append api_version to the real api views
url(r'^(?P<api_version>\d+|\d+.\d+)/search/guid:(?P<guids>.*)',
views.guid_search),
2010-02-17 03:22:22 +03:00
url(r'^(?P<api_version>\d+|\d+.\d+)/', include(api_patterns)),
)