diff options
-rw-r--r-- | Doc/library/http.cookiejar.rst | 7 | ||||
-rw-r--r-- | Lib/http/cookiejar.py | 6 | ||||
-rw-r--r-- | Lib/test/test_http_cookiejar.py | 25 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Library/2019-02-19-19-53-46.bpo-36043.l867v0.rst | 1 |
4 files changed, 35 insertions, 4 deletions
diff --git a/Doc/library/http.cookiejar.rst b/Doc/library/http.cookiejar.rst index 4c8be29..a9d7321 100644 --- a/Doc/library/http.cookiejar.rst +++ b/Doc/library/http.cookiejar.rst @@ -71,6 +71,10 @@ The following classes are provided: :meth:`load` or :meth:`revert` method is called. Subclasses of this class are documented in section :ref:`file-cookie-jar-classes`. + .. versionchanged:: 3.8 + + The filename parameter supports a :term:`path-like object`. + .. class:: CookiePolicy() @@ -341,6 +345,9 @@ writing. compatible with the libwww-perl library's ``Set-Cookie3`` file format. This is convenient if you want to store cookies in a human-readable file. + .. versionchanged:: 3.8 + + The filename parameter supports a :term:`path-like object`. .. _cookie-policy-objects: diff --git a/Lib/http/cookiejar.py b/Lib/http/cookiejar.py index 0ba8200..befe765 100644 --- a/Lib/http/cookiejar.py +++ b/Lib/http/cookiejar.py @@ -28,6 +28,7 @@ http://wwwsearch.sf.net/): __all__ = ['Cookie', 'CookieJar', 'CookiePolicy', 'DefaultCookiePolicy', 'FileCookieJar', 'LWPCookieJar', 'LoadError', 'MozillaCookieJar'] +import os import copy import datetime import re @@ -1762,10 +1763,7 @@ class FileCookieJar(CookieJar): """ CookieJar.__init__(self, policy) if filename is not None: - try: - filename+"" - except: - raise ValueError("filename must be string-like") + filename = os.fspath(filename) self.filename = filename self.delayload = bool(delayload) diff --git a/Lib/test/test_http_cookiejar.py b/Lib/test/test_http_cookiejar.py index 8dbea33..170549c 100644 --- a/Lib/test/test_http_cookiejar.py +++ b/Lib/test/test_http_cookiejar.py @@ -6,6 +6,7 @@ import test.support import time import unittest import urllib.request +import pathlib from http.cookiejar import (time2isoz, http2time, iso2time, time2netscape, parse_ns_headers, join_header_words, split_header_words, Cookie, @@ -313,6 +314,30 @@ def _interact(cookiejar, url, set_cookie_hdrs, hdr_name): class FileCookieJarTests(unittest.TestCase): + def test_constructor_with_str(self): + filename = test.support.TESTFN + c = LWPCookieJar(filename) + self.assertEqual(c.filename, filename) + + def test_constructor_with_path_like(self): + filename = pathlib.Path(test.support.TESTFN) + c = LWPCookieJar(filename) + self.assertEqual(c.filename, os.fspath(filename)) + + def test_constructor_with_none(self): + c = LWPCookieJar(None) + self.assertIsNone(c.filename) + + def test_constructor_with_other_types(self): + class A: + pass + + for type_ in (int, float, A): + with self.subTest(filename=type_): + with self.assertRaises(TypeError): + instance = type_() + c = LWPCookieJar(filename=instance) + def test_lwp_valueless_cookie(self): # cookies with no value should be saved and loaded consistently filename = test.support.TESTFN diff --git a/Misc/NEWS.d/next/Library/2019-02-19-19-53-46.bpo-36043.l867v0.rst b/Misc/NEWS.d/next/Library/2019-02-19-19-53-46.bpo-36043.l867v0.rst new file mode 100644 index 0000000..f4911a0 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2019-02-19-19-53-46.bpo-36043.l867v0.rst @@ -0,0 +1 @@ +:class:`FileCookieJar` supports :term:`path-like object`. Contributed by Stéphane Wirtel |