summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2017-01-13 09:23:15 +0200
committerSerhiy Storchaka <storchaka@gmail.com>2017-01-13 09:23:15 +0200
commit86f7fe2081eae28a74be681453a59c243f9632cf (patch)
treea3df90dc9b2700b912010efb85a43a19de5c8a37
parent1e97cd7fb5d5776bf8bbf76bb4586d0b86833d45 (diff)
downloadcpython-86f7fe2081eae28a74be681453a59c243f9632cf.tar.gz
Issue #29192: Removed deprecated features in the http.cookies module.
-rw-r--r--Doc/library/http.cookies.rst18
-rw-r--r--Doc/whatsnew/3.7.rst7
-rw-r--r--Lib/http/cookies.py30
-rw-r--r--Lib/test/test_http_cookies.py22
-rw-r--r--Misc/NEWS2
5 files changed, 22 insertions, 57 deletions
diff --git a/Doc/library/http.cookies.rst b/Doc/library/http.cookies.rst
index 4b45d4bc38..fb8317ad59 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 c4814e2706..411f9167e7 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 <positional-only_parameter>`.
(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 be3b080aa3..7e0259ee32 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 2432e0bf53..ca21476da6 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 484ee85517..21db4342de 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.