mirror of https://github.com/python/cpython
gh-57141: Make shallow argument to filecmp.dircmp keyword-only (#121767)
It is our general practice to make new optional parameters keyword-only, even if the existing parameters are all positional-or-keyword. Passing this parameter as positional would look confusing and could be error-prone if additional parameters are added in the future.
This commit is contained in:
parent
7982363b47
commit
50eec501fe
|
@ -70,7 +70,7 @@ The :mod:`filecmp` module defines the following functions:
|
||||||
The :class:`dircmp` class
|
The :class:`dircmp` class
|
||||||
-------------------------
|
-------------------------
|
||||||
|
|
||||||
.. class:: dircmp(a, b, ignore=None, hide=None, shallow=True)
|
.. class:: dircmp(a, b, ignore=None, hide=None, *, shallow=True)
|
||||||
|
|
||||||
Construct a new directory comparison object, to compare the directories *a*
|
Construct a new directory comparison object, to compare the directories *a*
|
||||||
and *b*. *ignore* is a list of names to ignore, and defaults to
|
and *b*. *ignore* is a list of names to ignore, and defaults to
|
||||||
|
|
|
@ -88,7 +88,7 @@ def _do_cmp(f1, f2):
|
||||||
class dircmp:
|
class dircmp:
|
||||||
"""A class that manages the comparison of 2 directories.
|
"""A class that manages the comparison of 2 directories.
|
||||||
|
|
||||||
dircmp(a, b, ignore=None, hide=None, shallow=True)
|
dircmp(a, b, ignore=None, hide=None, *, shallow=True)
|
||||||
A and B are directories.
|
A and B are directories.
|
||||||
IGNORE is a list of names to ignore,
|
IGNORE is a list of names to ignore,
|
||||||
defaults to DEFAULT_IGNORES.
|
defaults to DEFAULT_IGNORES.
|
||||||
|
@ -124,7 +124,7 @@ class dircmp:
|
||||||
in common_dirs.
|
in common_dirs.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, a, b, ignore=None, hide=None, shallow=True): # Initialize
|
def __init__(self, a, b, ignore=None, hide=None, *, shallow=True): # Initialize
|
||||||
self.left = a
|
self.left = a
|
||||||
self.right = b
|
self.right = b
|
||||||
if hide is None:
|
if hide is None:
|
||||||
|
@ -201,7 +201,7 @@ class dircmp:
|
||||||
a_x = os.path.join(self.left, x)
|
a_x = os.path.join(self.left, x)
|
||||||
b_x = os.path.join(self.right, x)
|
b_x = os.path.join(self.right, x)
|
||||||
self.subdirs[x] = self.__class__(a_x, b_x, self.ignore, self.hide,
|
self.subdirs[x] = self.__class__(a_x, b_x, self.ignore, self.hide,
|
||||||
self.shallow)
|
shallow=self.shallow)
|
||||||
|
|
||||||
def phase4_closure(self): # Recursively call phase4() on subdirectories
|
def phase4_closure(self): # Recursively call phase4() on subdirectories
|
||||||
self.phase4()
|
self.phase4()
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import filecmp
|
import filecmp
|
||||||
import os
|
import os
|
||||||
|
import re
|
||||||
import shutil
|
import shutil
|
||||||
import tempfile
|
import tempfile
|
||||||
import unittest
|
import unittest
|
||||||
|
@ -277,6 +278,17 @@ class DirCompareTestCase(unittest.TestCase):
|
||||||
]
|
]
|
||||||
self._assert_report(d.report, expected_report)
|
self._assert_report(d.report, expected_report)
|
||||||
|
|
||||||
|
def test_dircmp_shallow_is_keyword_only(self):
|
||||||
|
with self.assertRaisesRegex(
|
||||||
|
TypeError,
|
||||||
|
re.escape("dircmp.__init__() takes from 3 to 5 positional arguments but 6 were given"),
|
||||||
|
):
|
||||||
|
filecmp.dircmp(self.dir, self.dir_same, None, None, True)
|
||||||
|
self.assertIsInstance(
|
||||||
|
filecmp.dircmp(self.dir, self.dir_same, None, None, shallow=True),
|
||||||
|
filecmp.dircmp,
|
||||||
|
)
|
||||||
|
|
||||||
def test_dircmp_subdirs_type(self):
|
def test_dircmp_subdirs_type(self):
|
||||||
"""Check that dircmp.subdirs respects subclassing."""
|
"""Check that dircmp.subdirs respects subclassing."""
|
||||||
class MyDirCmp(filecmp.dircmp):
|
class MyDirCmp(filecmp.dircmp):
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
The *shallow* argument to :class:`filecmp.dircmp` (new in Python 3.13) is
|
||||||
|
now keyword-only.
|
Loading…
Reference in New Issue