From d86a901affd0ec7a0b229cf561838827808e6315 Mon Sep 17 00:00:00 2001 From: Luis San Pablo Date: Mon, 7 Dec 2015 21:45:44 -0600 Subject: [PATCH 01/15] Removed Settings raise attribute error --- rest_framework/settings.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/rest_framework/settings.py b/rest_framework/settings.py index adf737126..188c130c0 100644 --- a/rest_framework/settings.py +++ b/rest_framework/settings.py @@ -177,7 +177,7 @@ class APISettings(object): """ def __init__(self, user_settings=None, defaults=None, import_strings=None): if user_settings: - self._user_settings = user_settings + self._user_settings = self.__check_user_settings(user_settings) self.defaults = defaults or DEFAULTS self.import_strings = import_strings or IMPORT_STRINGS @@ -206,6 +206,14 @@ class APISettings(object): setattr(self, attr, val) return val + def __check_user_settings(self, user_settings): + DEPRECEATED_SETTINGS = ( + "PAGINATE_BY", "PAGINATE_BY_PARAM", "MAX_PAGINATE_BY_SET",) + SETTINGS_DOC = "http://www.django-rest-framework.org/api-guide/settings/" + for setting in DEPRECEATED_SETTINGS: + if setting in user_settings: + raise AttributeError("The '%s' setting has been removed. Please refer to '%s' for available settings." % setting, SETTINGS_DOC) + api_settings = APISettings(None, DEFAULTS, IMPORT_STRINGS) From 13c66b9dfecf657ace26d6b46c005981ca6f23e0 Mon Sep 17 00:00:00 2001 From: Luis San Pablo Date: Mon, 7 Dec 2015 21:53:33 -0600 Subject: [PATCH 02/15] Return error --- rest_framework/settings.py | 1 + 1 file changed, 1 insertion(+) diff --git a/rest_framework/settings.py b/rest_framework/settings.py index 188c130c0..bc579b15f 100644 --- a/rest_framework/settings.py +++ b/rest_framework/settings.py @@ -213,6 +213,7 @@ class APISettings(object): for setting in DEPRECEATED_SETTINGS: if setting in user_settings: raise AttributeError("The '%s' setting has been removed. Please refer to '%s' for available settings." % setting, SETTINGS_DOC) + return user_settings api_settings = APISettings(None, DEFAULTS, IMPORT_STRINGS) From 03c7f149ac0162a78892593d33b5866a1a9b72df Mon Sep 17 00:00:00 2001 From: Luis San Pablo Date: Mon, 7 Dec 2015 22:17:33 -0600 Subject: [PATCH 03/15] Test case for settings check --- tests/test_settings.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/tests/test_settings.py b/tests/test_settings.py index cc8d0d51f..5240a3f9b 100644 --- a/tests/test_settings.py +++ b/tests/test_settings.py @@ -18,6 +18,16 @@ class TestSettings(TestCase): with self.assertRaises(ImportError): settings.DEFAULT_RENDERER_CLASSES + def test_loud_error_raised_on_removed_setting(self): + """ + Make sure user is alerted with an error when a removed setting + is set. + """ + with self.asserRaise(AttributeError): + APISettings({ + 'MAX_PAGINATE_BY': 100 + }) + class TestSettingTypes(TestCase): def test_settings_consistently_coerced_to_list(self): From 4e5c57ab469c94a588312046a8f115b00331eb6b Mon Sep 17 00:00:00 2001 From: Luis San Pablo Date: Mon, 7 Dec 2015 22:19:58 -0600 Subject: [PATCH 04/15] type on test case --- tests/test_settings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_settings.py b/tests/test_settings.py index 5240a3f9b..518ba0429 100644 --- a/tests/test_settings.py +++ b/tests/test_settings.py @@ -23,7 +23,7 @@ class TestSettings(TestCase): Make sure user is alerted with an error when a removed setting is set. """ - with self.asserRaise(AttributeError): + with self.assertRaise(AttributeError): APISettings({ 'MAX_PAGINATE_BY': 100 }) From 1b3e4332e8765dae1b5dc41faa68cc392079fa00 Mon Sep 17 00:00:00 2001 From: Luis San Pablo Date: Mon, 7 Dec 2015 22:24:22 -0600 Subject: [PATCH 05/15] --ammend --- tests/test_settings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_settings.py b/tests/test_settings.py index 518ba0429..977780164 100644 --- a/tests/test_settings.py +++ b/tests/test_settings.py @@ -23,7 +23,7 @@ class TestSettings(TestCase): Make sure user is alerted with an error when a removed setting is set. """ - with self.assertRaise(AttributeError): + with self.assertRaises(AttributeError): APISettings({ 'MAX_PAGINATE_BY': 100 }) From 9db4c2ae8aa48e0624facf5740c6741c1ce2f136 Mon Sep 17 00:00:00 2001 From: Luis San Pablo Date: Mon, 7 Dec 2015 22:24:22 -0600 Subject: [PATCH 06/15] --ammend --- tests/test_settings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_settings.py b/tests/test_settings.py index 518ba0429..977780164 100644 --- a/tests/test_settings.py +++ b/tests/test_settings.py @@ -23,7 +23,7 @@ class TestSettings(TestCase): Make sure user is alerted with an error when a removed setting is set. """ - with self.assertRaise(AttributeError): + with self.assertRaises(AttributeError): APISettings({ 'MAX_PAGINATE_BY': 100 }) From 5117dad2cafa2691dbdaf4da398775891e368155 Mon Sep 17 00:00:00 2001 From: Luis San Pablo Date: Mon, 7 Dec 2015 22:32:23 -0600 Subject: [PATCH 07/15] removed setting typo --- rest_framework/settings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rest_framework/settings.py b/rest_framework/settings.py index bc579b15f..80c818d11 100644 --- a/rest_framework/settings.py +++ b/rest_framework/settings.py @@ -208,7 +208,7 @@ class APISettings(object): def __check_user_settings(self, user_settings): DEPRECEATED_SETTINGS = ( - "PAGINATE_BY", "PAGINATE_BY_PARAM", "MAX_PAGINATE_BY_SET",) + "PAGINATE_BY", "PAGINATE_BY_PARAM", "MAX_PAGINATE_BY",) SETTINGS_DOC = "http://www.django-rest-framework.org/api-guide/settings/" for setting in DEPRECEATED_SETTINGS: if setting in user_settings: From 0f85165b69d8a6db67d3644771c08788a12f68d4 Mon Sep 17 00:00:00 2001 From: Luis San Pablo Date: Mon, 7 Dec 2015 22:36:02 -0600 Subject: [PATCH 08/15] Fixed num args for % --- rest_framework/settings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rest_framework/settings.py b/rest_framework/settings.py index 80c818d11..49c654f67 100644 --- a/rest_framework/settings.py +++ b/rest_framework/settings.py @@ -212,7 +212,7 @@ class APISettings(object): SETTINGS_DOC = "http://www.django-rest-framework.org/api-guide/settings/" for setting in DEPRECEATED_SETTINGS: if setting in user_settings: - raise AttributeError("The '%s' setting has been removed. Please refer to '%s' for available settings." % setting, SETTINGS_DOC) + raise AttributeError("The '%s' setting has been removed. Please refer to '%s' for available settings." % (setting, SETTINGS_DOC)) return user_settings From 60c4fe10b1af61fdc859ab8ec969ae5915efdb66 Mon Sep 17 00:00:00 2001 From: Luis San Pablo Date: Mon, 7 Dec 2015 23:19:24 -0600 Subject: [PATCH 09/15] Refactor Constants --- rest_framework/settings.py | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/rest_framework/settings.py b/rest_framework/settings.py index 49c654f67..4690850a6 100644 --- a/rest_framework/settings.py +++ b/rest_framework/settings.py @@ -135,6 +135,19 @@ IMPORT_STRINGS = ( ) +SETTINGS_DOC = "http://www.django-rest-framework.org/api-guide/settings/" + + +# List of settings that have been depreceated +DEPRECEATED_SETTINGS = () + + +# List of settings that have been removed +REMOVED_SETTINGS = ( + "PAGINATE_BY", "PAGINATE_BY_PARAM", "MAX_PAGINATE_BY", +) + + def perform_import(val, setting_name): """ If the given setting is a string import notation, @@ -207,10 +220,7 @@ class APISettings(object): return val def __check_user_settings(self, user_settings): - DEPRECEATED_SETTINGS = ( - "PAGINATE_BY", "PAGINATE_BY_PARAM", "MAX_PAGINATE_BY",) - SETTINGS_DOC = "http://www.django-rest-framework.org/api-guide/settings/" - for setting in DEPRECEATED_SETTINGS: + for setting in REMOVED_SETTINGS: if setting in user_settings: raise AttributeError("The '%s' setting has been removed. Please refer to '%s' for available settings." % (setting, SETTINGS_DOC)) return user_settings From 5802dc0f982e17164abce4f6283c61fcf7fc04b2 Mon Sep 17 00:00:00 2001 From: Luis San Pablo Date: Mon, 7 Dec 2015 23:19:24 -0600 Subject: [PATCH 10/15] Initial, fixes #3644 --- rest_framework/settings.py | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/rest_framework/settings.py b/rest_framework/settings.py index 49c654f67..4690850a6 100644 --- a/rest_framework/settings.py +++ b/rest_framework/settings.py @@ -135,6 +135,19 @@ IMPORT_STRINGS = ( ) +SETTINGS_DOC = "http://www.django-rest-framework.org/api-guide/settings/" + + +# List of settings that have been depreceated +DEPRECEATED_SETTINGS = () + + +# List of settings that have been removed +REMOVED_SETTINGS = ( + "PAGINATE_BY", "PAGINATE_BY_PARAM", "MAX_PAGINATE_BY", +) + + def perform_import(val, setting_name): """ If the given setting is a string import notation, @@ -207,10 +220,7 @@ class APISettings(object): return val def __check_user_settings(self, user_settings): - DEPRECEATED_SETTINGS = ( - "PAGINATE_BY", "PAGINATE_BY_PARAM", "MAX_PAGINATE_BY",) - SETTINGS_DOC = "http://www.django-rest-framework.org/api-guide/settings/" - for setting in DEPRECEATED_SETTINGS: + for setting in REMOVED_SETTINGS: if setting in user_settings: raise AttributeError("The '%s' setting has been removed. Please refer to '%s' for available settings." % (setting, SETTINGS_DOC)) return user_settings From a615e37277f783bb27392549813e597741a70461 Mon Sep 17 00:00:00 2001 From: Luis San Pablo Date: Mon, 7 Dec 2015 23:30:45 -0600 Subject: [PATCH 11/15] Removed depreceated constant --- rest_framework/settings.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/rest_framework/settings.py b/rest_framework/settings.py index 4690850a6..ecaa4b527 100644 --- a/rest_framework/settings.py +++ b/rest_framework/settings.py @@ -138,10 +138,6 @@ IMPORT_STRINGS = ( SETTINGS_DOC = "http://www.django-rest-framework.org/api-guide/settings/" -# List of settings that have been depreceated -DEPRECEATED_SETTINGS = () - - # List of settings that have been removed REMOVED_SETTINGS = ( "PAGINATE_BY", "PAGINATE_BY_PARAM", "MAX_PAGINATE_BY", From fbd89d6b7e03d1502e1a86202d2c34c7433716c4 Mon Sep 17 00:00:00 2001 From: Luis San Pablo Date: Sat, 12 Dec 2015 02:02:53 -0600 Subject: [PATCH 12/15] Moved SETTINGS_DOC --- rest_framework/settings.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/rest_framework/settings.py b/rest_framework/settings.py index ecaa4b527..c7b5de9f0 100644 --- a/rest_framework/settings.py +++ b/rest_framework/settings.py @@ -135,9 +135,6 @@ IMPORT_STRINGS = ( ) -SETTINGS_DOC = "http://www.django-rest-framework.org/api-guide/settings/" - - # List of settings that have been removed REMOVED_SETTINGS = ( "PAGINATE_BY", "PAGINATE_BY_PARAM", "MAX_PAGINATE_BY", @@ -216,6 +213,7 @@ class APISettings(object): return val def __check_user_settings(self, user_settings): + SETTINGS_DOC = "http://www.django-rest-framework.org/api-guide/settings/" for setting in REMOVED_SETTINGS: if setting in user_settings: raise AttributeError("The '%s' setting has been removed. Please refer to '%s' for available settings." % (setting, SETTINGS_DOC)) From dab6bf4b1a40b74abcf88099dfecbc419fbde391 Mon Sep 17 00:00:00 2001 From: Luis San Pablo Date: Wed, 16 Dec 2015 18:32:32 -0600 Subject: [PATCH 13/15] Changed error to warning message --- rest_framework/settings.py | 3 ++- tests/test_settings.py | 7 +++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/rest_framework/settings.py b/rest_framework/settings.py index c7b5de9f0..08a776cf4 100644 --- a/rest_framework/settings.py +++ b/rest_framework/settings.py @@ -17,6 +17,7 @@ This module provides the `api_setting` object, that is used to access REST framework settings, checking for user settings first, then falling back to the defaults. """ +import warnings from __future__ import unicode_literals from django.conf import settings @@ -216,7 +217,7 @@ class APISettings(object): SETTINGS_DOC = "http://www.django-rest-framework.org/api-guide/settings/" for setting in REMOVED_SETTINGS: if setting in user_settings: - raise AttributeError("The '%s' setting has been removed. Please refer to '%s' for available settings." % (setting, SETTINGS_DOC)) + warnings.warn("The '%s' setting has been removed. Please refer to '%s' for available settings." % (setting, SETTINGS_DOC), DeprecationWarning) return user_settings diff --git a/tests/test_settings.py b/tests/test_settings.py index 977780164..007586ff2 100644 --- a/tests/test_settings.py +++ b/tests/test_settings.py @@ -18,15 +18,18 @@ class TestSettings(TestCase): with self.assertRaises(ImportError): settings.DEFAULT_RENDERER_CLASSES - def test_loud_error_raised_on_removed_setting(self): + def test_warning_raised_on_removed_setting(self): """ Make sure user is alerted with an error when a removed setting is set. """ - with self.assertRaises(AttributeError): + with warnings.catch_warnings(record=True) as w: + warnings.simplefilter("always") APISettings({ 'MAX_PAGINATE_BY': 100 }) + self.assertEqual(len(w), 1) + self.assertTrue(issubclass(w[-1].category, DeprecationWarning)) class TestSettingTypes(TestCase): From 62e2a9706f1848603bb67bba8ed1c8886fe51585 Mon Sep 17 00:00:00 2001 From: Luis San Pablo Date: Wed, 16 Dec 2015 18:37:50 -0600 Subject: [PATCH 14/15] Fixed import order settings --- rest_framework/settings.py | 2 +- tests/test_settings.py | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/rest_framework/settings.py b/rest_framework/settings.py index 08a776cf4..af4aaa73c 100644 --- a/rest_framework/settings.py +++ b/rest_framework/settings.py @@ -17,8 +17,8 @@ This module provides the `api_setting` object, that is used to access REST framework settings, checking for user settings first, then falling back to the defaults. """ -import warnings from __future__ import unicode_literals +import warnings from django.conf import settings from django.test.signals import setting_changed diff --git a/tests/test_settings.py b/tests/test_settings.py index 007586ff2..b9953c8e2 100644 --- a/tests/test_settings.py +++ b/tests/test_settings.py @@ -1,4 +1,5 @@ from __future__ import unicode_literals +import warnings from django.test import TestCase From c389aeb051a5b2b75160480ae09aec99385b531f Mon Sep 17 00:00:00 2001 From: Luis San Pablo Date: Wed, 16 Dec 2015 18:46:23 -0600 Subject: [PATCH 15/15] Lint import ordring --- rest_framework/settings.py | 1 + tests/test_settings.py | 1 + 2 files changed, 2 insertions(+) diff --git a/rest_framework/settings.py b/rest_framework/settings.py index af4aaa73c..9679cad59 100644 --- a/rest_framework/settings.py +++ b/rest_framework/settings.py @@ -18,6 +18,7 @@ REST framework settings, checking for user settings first, then falling back to the defaults. """ from __future__ import unicode_literals + import warnings from django.conf import settings diff --git a/tests/test_settings.py b/tests/test_settings.py index b9953c8e2..658c61997 100644 --- a/tests/test_settings.py +++ b/tests/test_settings.py @@ -1,4 +1,5 @@ from __future__ import unicode_literals + import warnings from django.test import TestCase