GH-116380: Move pathlib globbing implementation into pathlib._glob (#118562)

Moving this code under the `pathlib` package makes it quite a lot easier
to backport in the `pathlib-abc` PyPI package. It was a bit foolish of me
to add it to `glob` in the first place.

Also add `translate()` to `__all__` in `glob`. This function is new in
3.13, so there's no NEWS needed.
This commit is contained in:
Barney Gale 2024-05-03 21:29:25 +01:00 committed by GitHub
parent 37d0950022
commit a40f557d7b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 314 additions and 309 deletions

View file

@ -12,11 +12,12 @@ resemble pathlib's PurePath and Path respectively.
"""
import functools
import glob
import operator
from errno import ENOENT, ENOTDIR, EBADF, ELOOP, EINVAL
from stat import S_ISDIR, S_ISLNK, S_ISREG, S_ISSOCK, S_ISBLK, S_ISCHR, S_ISFIFO
from . import _glob
#
# Internals
#
@ -43,7 +44,7 @@ def _is_case_sensitive(parser):
return parser.normcase('Aa') == 'Aa'
class Globber(glob._Globber):
class Globber(_glob.Globber):
lstat = operator.methodcaller('lstat')
add_slash = operator.methodcaller('joinpath', '')
@ -692,7 +693,7 @@ class PathBase(PurePathBase):
# know the case sensitivity of the underlying filesystem, so we
# must use scandir() for everything, including non-wildcard parts.
case_pedantic = True
recursive = True if recurse_symlinks else glob._no_recurse_symlinks
recursive = True if recurse_symlinks else _glob.no_recurse_symlinks
globber = self._globber(self.parser.sep, case_sensitive, case_pedantic, recursive)
return globber.selector(parts)