Skip to content

bpo-36043: FileCookieJar supports os.PathLike #11945

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 10 commits into from
Mar 1, 2019
7 changes: 7 additions & 0 deletions Doc/library/http.cookiejar.rst
Original file line number Diff line number Diff line change
Expand Up @@ -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()

Expand Down Expand Up @@ -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:

Expand Down
6 changes: 2 additions & 4 deletions Lib/http/cookiejar.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
__all__ = ['Cookie', 'CookieJar', 'CookiePolicy', 'DefaultCookiePolicy',
'FileCookieJar', 'LWPCookieJar', 'LoadError', 'MozillaCookieJar']

import os
import copy
import datetime
import re
Expand Down Expand Up @@ -1762,10 +1763,7 @@ def __init__(self, filename=None, delayload=False, policy=None):
"""
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)

Expand Down
25 changes: 25 additions & 0 deletions Lib/test/test_http_cookiejar.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
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,
Expand Down Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
:class:`FileCookieJar` supports :term:`path-like object`. Contributed by Stéphane Wirtel