bpo-36043: FileCookieJar supports os.PathLike (GH-11945)

https://bugs.python.org/issue36043
This commit is contained in:
Stéphane Wirtel 2019-03-01 21:40:54 +01:00 committed by Miss Islington (bot)
parent bda918bf65
commit 4b219ce81e
4 changed files with 35 additions and 4 deletions

View File

@ -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:

View File

@ -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)

View File

@ -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

View File

@ -0,0 +1 @@
:class:`FileCookieJar` supports :term:`path-like object`. Contributed by Stéphane Wirtel