diff --git a/ansibleworks/main/renderers.py b/ansibleworks/main/renderers.py new file mode 100644 index 0000000000..69abdcab9c --- /dev/null +++ b/ansibleworks/main/renderers.py @@ -0,0 +1,14 @@ +import rest_framework.renderers + +class BrowsableAPIRenderer(rest_framework.renderers.BrowsableAPIRenderer): + ''' + Customizations to the default browsable API renderer. + ''' + + def get_form(self, view, method, request): + '''Never show auto-generated form (only raw form).''' + obj = getattr(view, 'object', None) + if not self.show_form_for_method(view, method, request, obj): + return + if method in ('DELETE', 'OPTIONS'): + return True # Don't actually need to return a form diff --git a/ansibleworks/main/urls.py b/ansibleworks/main/urls.py index 7a01659775..99d4bd466c 100644 --- a/ansibleworks/main/urls.py +++ b/ansibleworks/main/urls.py @@ -1,8 +1,7 @@ # Copyright (c) 2013 AnsibleWorks, Inc. # All Rights Reserved. -from django.conf.urls import include, patterns, url as original_url -import ansibleworks.main.views as views +from django.conf.urls import include, patterns, url as original_url def url(regex, view, kwargs=None, name=None, prefix=''): # Set default name from view name (if a string). @@ -135,3 +134,47 @@ urlpatterns = patterns('ansibleworks.main.views', url(r'^$', 'api_root_view'), url(r'^v1/', include(v1_urls)), ) + +# Monkeypatch get_view_name and get_view_description in Django REST Framework +# 2.3.x to allow a custom view name or description to be defined on the view +# class, instead of always using __name__ and __doc__. Used to be possible in +# 2.2.x by defining get_name() and get_description() methods on a view. + +try: + import rest_framework.utils.formatting + from django.utils.safestring import mark_safe + + original_get_view_name = rest_framework.utils.formatting.get_view_name + def get_view_name(cls, suffix=None): + name = '' + # Support for get_name method on views compatible with 2.2.x. + if hasattr(cls, 'get_name') and callable(cls.get_name): + name = cls().get_name() + elif hasattr(cls, 'view_name'): + if callable(cls.view_name): + name = cls.view_name() + else: + name = cls.view_name + if name: + return ('%s %s' % (name, suffix)) if suffix else name + return original_get_view_name(cls, suffix=None) + rest_framework.utils.formatting.get_view_name = get_view_name + + original_get_view_description = rest_framework.utils.formatting.get_view_description + def get_view_description(cls, html=False): + # Support for get_description method on views compatible with 2.2.x. + if hasattr(cls, 'get_description') and callable(cls.get_description): + desc = cls().get_description(html=html) + elif hasattr(cls, 'view_description'): + if callable(cls.view_description): + view_desc = cls.view_description() + else: + view_desc = cls.view_description + cls = type(cls.__name__, (object,), {'__doc__': view_desc}) + desc = original_get_view_description(cls, html=html) + if html: + desc = '
{% trans 'REST API' %}
{% endblock %}
{% block userlinks %}
@@ -64,6 +111,11 @@ html body .str a {
{% endif %}
{% endblock %}
+{% block footer %}
+
+{% endblock %}
+
{% block script %}
{{ block.super }}
diff --git a/requirements/dev.txt b/requirements/dev.txt
index 1fb5e1f6ac..6c9fd24c3f 100644
--- a/requirements/dev.txt
+++ b/requirements/dev.txt
@@ -7,7 +7,7 @@ django-extensions
django-filter
django-jsonfield
django-taggit
-djangorestframework
+djangorestframework>=2.3.0,<2.4.0
Markdown
pexpect
python-dateutil
diff --git a/setup.py b/setup.py
index 8e0b494b93..ae5efa941c 100755
--- a/setup.py
+++ b/setup.py
@@ -30,28 +30,13 @@ setup(
'django-filter',
'django-jsonfield',
'django-taggit',
- 'djangorestframework',
+ 'djangorestframework>=2.3.0,<2.4.0',
'pexpect',
'python-dateutil',
'PyYAML',
- 'South',
+ 'South>=0.8,<2.0',
],
setup_requires=[],
- #tests_require=[
- # 'Django>=1.5',
- # 'django-celery',
- # 'django-extensions',
- # 'django-filter',
- # 'django-jsonfield',
- # 'django-taggit',
- # 'django-setuptest',
- # 'djangorestframework',
- # 'pexpect',
- # 'python-dateutil',
- # 'PyYAML',
- # 'South',
- #],
- #test_suite='test_suite.TestSuite',
classifiers=[
'Development Status :: 4 - Beta',
'Environment :: Web Environment',