From cc283378d65e8294895eead78815f8cda15653f5 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Fri, 13 Jan 2017 09:23:15 +0200 Subject: Issue #29192: Removed deprecated features in the http.cookies module. --- Doc/library/http.cookies.rst | 18 +++++------------- Doc/whatsnew/3.7.rst | 7 +++++++ Lib/http/cookies.py | 30 +----------------------------- Lib/test/test_http_cookies.py | 22 +++++++--------------- Misc/NEWS | 2 ++ 5 files changed, 22 insertions(+), 57 deletions(-) diff --git a/Doc/library/http.cookies.rst b/Doc/library/http.cookies.rst index 4b45d4b..fb8317a 100644 --- a/Doc/library/http.cookies.rst +++ b/Doc/library/http.cookies.rst @@ -148,39 +148,31 @@ Morsel Objects :meth:`~Morsel.__eq__` now takes :attr:`~Morsel.key` and :attr:`~Morsel.value` into account. + .. versionchanged:: 3.7 + Attributes :attr:`~Morsel.key`, :attr:`~Morsel.value` and + :attr:`~Morsel.coded_value` are read-only. Use :meth:`~Morsel.set` for + setting them. + .. attribute:: Morsel.value The value of the cookie. - .. deprecated:: 3.5 - assigning to ``value``; use :meth:`~Morsel.set` instead. - .. attribute:: Morsel.coded_value The encoded value of the cookie --- this is what should be sent. - .. deprecated:: 3.5 - assigning to ``coded_value``; use :meth:`~Morsel.set` instead. - .. attribute:: Morsel.key The name of the cookie. - .. deprecated:: 3.5 - assigning to ``key``; use :meth:`~Morsel.set` instead. - .. method:: Morsel.set(key, value, coded_value) Set the *key*, *value* and *coded_value* attributes. - .. deprecated:: 3.5 - The undocumented *LegalChars* parameter is ignored and will be removed in - a future version. - .. method:: Morsel.isReservedKey(K) diff --git a/Doc/whatsnew/3.7.rst b/Doc/whatsnew/3.7.rst index c4814e2..411f916 100644 --- a/Doc/whatsnew/3.7.rst +++ b/Doc/whatsnew/3.7.rst @@ -153,3 +153,10 @@ Changes in the Python API * A format string argument for :meth:`string.Formatter.format` is now :ref:`positional-only `. (Contributed by Serhiy Storchaka in :issue:`29193`.) + +* Attributes :attr:`~http.cookies.Morsel.key`, + :attr:`~http.cookies.Morsel.value` and + :attr:`~http.cookies.Morsel.coded_value` of class + :class:`http.cookies.Morsel` are now read-only. + Use the :meth:`~http.cookies.Morsel.set` method for setting them. + (Contributed by Serhiy Storchaka in :issue:`29192`.) diff --git a/Lib/http/cookies.py b/Lib/http/cookies.py index be3b080..7e0259e 100644 --- a/Lib/http/cookies.py +++ b/Lib/http/cookies.py @@ -138,12 +138,6 @@ _nulljoin = ''.join _semispacejoin = '; '.join _spacejoin = ' '.join -def _warn_deprecated_setter(setter): - import warnings - msg = ('The .%s setter is deprecated. The attribute will be read-only in ' - 'future releases. Please use the set() method instead.' % setter) - warnings.warn(msg, DeprecationWarning, stacklevel=3) - # # Define an exception visible to External modules # @@ -303,29 +297,14 @@ class Morsel(dict): def key(self): return self._key - @key.setter - def key(self, key): - _warn_deprecated_setter('key') - self._key = key - @property def value(self): return self._value - @value.setter - def value(self, value): - _warn_deprecated_setter('value') - self._value = value - @property def coded_value(self): return self._coded_value - @coded_value.setter - def coded_value(self, coded_value): - _warn_deprecated_setter('coded_value') - self._coded_value = coded_value - def __setitem__(self, K, V): K = K.lower() if not K in self._reserved: @@ -366,14 +345,7 @@ class Morsel(dict): def isReservedKey(self, K): return K.lower() in self._reserved - def set(self, key, val, coded_val, LegalChars=_LegalChars): - if LegalChars != _LegalChars: - import warnings - warnings.warn( - 'LegalChars parameter is deprecated, ignored and will ' - 'be removed in future versions.', DeprecationWarning, - stacklevel=2) - + def set(self, key, val, coded_val): if key.lower() in self._reserved: raise CookieError('Attempt to set a reserved key %r' % (key,)) if not _is_legal_key(key): diff --git a/Lib/test/test_http_cookies.py b/Lib/test/test_http_cookies.py index 2432e0b..ca21476 100644 --- a/Lib/test/test_http_cookies.py +++ b/Lib/test/test_http_cookies.py @@ -9,15 +9,6 @@ import warnings class CookieTests(unittest.TestCase): - def setUp(self): - self._warnings_manager = check_warnings() - self._warnings_manager.__enter__() - warnings.filterwarnings("ignore", ".* class is insecure.*", - DeprecationWarning) - - def tearDown(self): - self._warnings_manager.__exit__(None, None, None) - def test_basic(self): cases = [ {'data': 'chips=ahoy; vienna=finger', @@ -256,6 +247,9 @@ class MorselTests(unittest.TestCase): # Check output and js_output. M['path'] = '/foo' # Try a reserved key as well M.set(i, "%s_val" % i, "%s_coded_val" % i) + self.assertEqual(M.key, i) + self.assertEqual(M.value, "%s_val" % i) + self.assertEqual(M.coded_value, "%s_coded_val" % i) self.assertEqual( M.output(), "Set-Cookie: %s=%s; Path=/foo" % (i, "%s_coded_val" % i)) @@ -272,16 +266,14 @@ class MorselTests(unittest.TestCase): self.assertRaises(cookies.CookieError, M.set, i, '%s_value' % i, '%s_value' % i) - def test_deprecation(self): + def test_set_properties(self): morsel = cookies.Morsel() - with self.assertWarnsRegex(DeprecationWarning, r'\bkey\b'): + with self.assertRaises(AttributeError): morsel.key = '' - with self.assertWarnsRegex(DeprecationWarning, r'\bvalue\b'): + with self.assertRaises(AttributeError): morsel.value = '' - with self.assertWarnsRegex(DeprecationWarning, r'\bcoded_value\b'): + with self.assertRaises(AttributeError): morsel.coded_value = '' - with self.assertWarnsRegex(DeprecationWarning, r'\bLegalChars\b'): - morsel.set('key', 'value', 'coded_value', LegalChars='.*') def test_eq(self): base_case = ('key', 'value', '"value"') diff --git a/Misc/NEWS b/Misc/NEWS index 484ee85..21db434 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -212,6 +212,8 @@ Core and Builtins Library ------- +- Issue #29192: Removed deprecated features in the http.cookies module. + - Issue #29193: A format string argument for string.Formatter.format() is now positional-only. -- cgit v0.12