]> granicus.if.org Git - python/commitdiff
Issue #29192: Removed deprecated features in the http.cookies module.
authorSerhiy Storchaka <storchaka@gmail.com>
Fri, 13 Jan 2017 07:23:15 +0000 (09:23 +0200)
committerSerhiy Storchaka <storchaka@gmail.com>
Fri, 13 Jan 2017 07:23:15 +0000 (09:23 +0200)
Doc/library/http.cookies.rst
Doc/whatsnew/3.7.rst
Lib/http/cookies.py
Lib/test/test_http_cookies.py
Misc/NEWS

index 4b45d4bc388a2180cf5d3a8f49e901a42b7d4071..fb8317ad59e6f888c672fad3e6b65e81163cdddc 100644 (file)
@@ -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)
 
index c4814e270688dbbcb8fd55eb856fcd09995406c2..411f9167e7811e16fc06855810183fdc8f4ded9a 100644 (file)
@@ -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`.)
index be3b080aa3d7517028e1901d7c3986d31e862a00..7e0259ee32e46303455d1b73121a1f1032838871 100644 (file)
@@ -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):
index 2432e0bf53405708964070dfbe098b19d104ef8d..ca21476da62bb75d09c1fe05444fcc2a49695edb 100644 (file)
@@ -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"')
index 484ee8551759efb9999cd1b1e80c7ccbe816dcdb..21db4342de569f0498852773d83c3b3328d43ecc 100644 (file)
--- 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.