@functools.lru_cache(maxsize=512)
-def _compile_pattern(pat, sep, case_sensitive, recursive=True):
+def _compile_pattern(pat, seps, case_sensitive, recursive=True):
"""Compile given glob pattern to a re.Pattern object (observing case
sensitivity)."""
flags = re.NOFLAG if case_sensitive else re.IGNORECASE
- regex = translate(pat, recursive=recursive, include_hidden=True, seps=sep)
+ regex = translate(pat, recursive=recursive, include_hidden=True, seps=seps)
return re.compile(regex, flags=flags).match
# High-level methods
- def compile(self, pat):
- return _compile_pattern(pat, self.sep, self.case_sensitive, self.recursive)
+ def compile(self, pat, altsep=None):
+ seps = (self.sep, altsep) if altsep else self.sep
+ return _compile_pattern(pat, seps, self.case_sensitive, self.recursive)
def selector(self, parts):
"""Returns a function that selects from a given path, walking and
from glob import _PathGlobber, _no_recurse_symlinks
from pathlib import PurePath, Path
from pathlib._os import magic_open, ensure_distinct_paths, copy_file
-from typing import Protocol, runtime_checkable
+from typing import Optional, Protocol, runtime_checkable
def _explode_path(path):
"""
sep: str
+ altsep: Optional[str]
def split(self, path: str) -> tuple[str, str]: ...
def splitext(self, path: str) -> tuple[str, str]: ...
def normcase(self, path: str) -> str: ...
if case_sensitive is None:
case_sensitive = self.parser.normcase('Aa') == 'Aa'
globber = _PathGlobber(pattern.parser.sep, case_sensitive, recursive=True)
- match = globber.compile(str(pattern))
+ match = globber.compile(str(pattern), altsep=pattern.parser.altsep)
return match(str(self)) is not None