aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/Lib/pathlib/_abc.py
diff options
context:
space:
mode:
authorBarney Gale <barney.gale@gmail.com>2025-02-16 17:08:55 +0000
committerGitHub <noreply@github.com>2025-02-16 17:08:55 +0000
commit655fc8a0fce3396fc1af3f7bc8f5c94ca8ec377d (patch)
treecca13f8aaa5987446356c5f2a48134f425e7ad01 /Lib/pathlib/_abc.py
parente7f00cd14f6a0c0dee6e733ac3e2c5d92e0809bb (diff)
downloadcpython-655fc8a0fce3396fc1af3f7bc8f5c94ca8ec377d.tar.gz
cpython-655fc8a0fce3396fc1af3f7bc8f5c94ca8ec377d.zip
pathlib ABCs: remove caching of path parser case sensitivity (#130194)
Remove the caching `_is_case_sensitive()` function. The cache used to speed up `PurePath.[full_]match()` and `Path.[r]glob()`, but that's no longer the case - these methods use `self.parser is posixpath` to determine case sensitivity. This makes the `pathlib._abc` module a little easier to backport to Python 3.8, where `functools.cache()` is unavailable.
Diffstat (limited to 'Lib/pathlib/_abc.py')
-rw-r--r--Lib/pathlib/_abc.py15
1 files changed, 4 insertions, 11 deletions
diff --git a/Lib/pathlib/_abc.py b/Lib/pathlib/_abc.py
index a9de8d6eb3c..501f8520590 100644
--- a/Lib/pathlib/_abc.py
+++ b/Lib/pathlib/_abc.py
@@ -11,18 +11,12 @@ Three base classes are defined here -- JoinablePath, ReadablePath and
WritablePath.
"""
-import functools
from abc import ABC, abstractmethod
from glob import _PathGlobber, _no_recurse_symlinks
from pathlib import PurePath, Path
from pathlib._os import magic_open, CopyReader, CopyWriter
-@functools.cache
-def _is_case_sensitive(parser):
- return parser.normcase('Aa') == 'Aa'
-
-
def _explode_path(path):
"""
Split the path into a 2-tuple (anchor, parts), where *anchor* is the
@@ -201,7 +195,7 @@ class JoinablePath(ABC):
if not isinstance(pattern, JoinablePath):
pattern = self.with_segments(pattern)
if case_sensitive is None:
- case_sensitive = _is_case_sensitive(self.parser)
+ case_sensitive = self.parser.normcase('Aa') == 'Aa'
globber = _PathGlobber(pattern.parser.sep, case_sensitive, recursive=True)
match = globber.compile(str(pattern))
return match(str(self)) is not None
@@ -297,13 +291,12 @@ class ReadablePath(JoinablePath):
anchor, parts = _explode_path(pattern)
if anchor:
raise NotImplementedError("Non-relative patterns are unsupported")
+ case_sensitive_default = self.parser.normcase('Aa') == 'Aa'
if case_sensitive is None:
- case_sensitive = _is_case_sensitive(self.parser)
- case_pedantic = False
- elif case_sensitive == _is_case_sensitive(self.parser):
+ case_sensitive = case_sensitive_default
case_pedantic = False
else:
- case_pedantic = True
+ case_pedantic = case_sensitive_default != case_sensitive
recursive = True if recurse_symlinks else _no_recurse_symlinks
globber = _PathGlobber(self.parser.sep, case_sensitive, case_pedantic, recursive)
select = globber.selector(parts)