@@ -65,9 +65,6 @@ def casefold(self, s):
6565 def casefold_parts (self , parts ):
6666 return [p .lower () for p in parts ]
6767
68- def compile_pattern (self , pattern ):
69- return re .compile (fnmatch .translate (pattern ), re .IGNORECASE ).fullmatch
70-
7168
7269class _PosixFlavour (_Flavour ):
7370 has_drv = False
@@ -80,9 +77,6 @@ def casefold(self, s):
8077 def casefold_parts (self , parts ):
8178 return parts
8279
83- def compile_pattern (self , pattern ):
84- return re .compile (fnmatch .translate (pattern )).fullmatch
85-
8680
8781_windows_flavour = _WindowsFlavour ()
8882_posix_flavour = _PosixFlavour ()
@@ -179,7 +173,7 @@ def group(self, path):
179173# Globbing helpers
180174#
181175
182- def _make_selector (pattern_parts , flavour ):
176+ def _make_selector (pattern_parts , case_insensitive ):
183177 pat = pattern_parts [0 ]
184178 child_parts = pattern_parts [1 :]
185179 if pat == '**' :
@@ -190,7 +184,7 @@ def _make_selector(pattern_parts, flavour):
190184 cls = _WildcardSelector
191185 else :
192186 cls = _PreciseSelector
193- return cls (pat , child_parts , flavour )
187+ return cls (pat , child_parts , case_insensitive )
194188
195189if hasattr (functools , "lru_cache" ):
196190 _make_selector = functools .lru_cache ()(_make_selector )
@@ -200,10 +194,10 @@ class _Selector:
200194 """A selector matches a specific glob pattern part against the children
201195 of a given path."""
202196
203- def __init__ (self , child_parts , flavour ):
197+ def __init__ (self , child_parts , case_insensitive ):
204198 self .child_parts = child_parts
205199 if child_parts :
206- self .successor = _make_selector (child_parts , flavour )
200+ self .successor = _make_selector (child_parts , case_insensitive )
207201 self .dironly = True
208202 else :
209203 self .successor = _TerminatingSelector ()
@@ -229,9 +223,9 @@ def _select_from(self, parent_path, is_dir, exists, scandir):
229223
230224class _PreciseSelector (_Selector ):
231225
232- def __init__ (self , name , child_parts , flavour ):
226+ def __init__ (self , name , child_parts , case_insensitive ):
233227 self .name = name
234- _Selector .__init__ (self , child_parts , flavour )
228+ _Selector .__init__ (self , child_parts , case_insensitive )
235229
236230 def _select_from (self , parent_path , is_dir , exists , scandir ):
237231 try :
@@ -245,9 +239,10 @@ def _select_from(self, parent_path, is_dir, exists, scandir):
245239
246240class _WildcardSelector (_Selector ):
247241
248- def __init__ (self , pat , child_parts , flavour ):
249- self .match = flavour .compile_pattern (pat )
250- _Selector .__init__ (self , child_parts , flavour )
242+ def __init__ (self , pat , child_parts , case_insensitive ):
243+ flags = re .IGNORECASE if case_insensitive else 0
244+ self .match = re .compile (fnmatch .translate (pat ), flags = flags ).fullmatch
245+ _Selector .__init__ (self , child_parts , case_insensitive )
251246
252247 def _select_from (self , parent_path , is_dir , exists , scandir ):
253248 try :
@@ -276,8 +271,8 @@ def _select_from(self, parent_path, is_dir, exists, scandir):
276271
277272class _RecursiveWildcardSelector (_Selector ):
278273
279- def __init__ (self , pat , child_parts , flavour ):
280- _Selector .__init__ (self , child_parts , flavour )
274+ def __init__ (self , pat , child_parts , case_insensitive ):
275+ _Selector .__init__ (self , child_parts , case_insensitive )
281276
282277 def _iterate_directories (self , parent_path , is_dir , scandir ):
283278 yield parent_path
@@ -793,6 +788,7 @@ class PurePosixPath(PurePath):
793788 """
794789 _flavour = _posix_flavour
795790 _pathmod = posixpath
791+ _case_insensitive = False
796792 __slots__ = ()
797793
798794 @classmethod
@@ -832,6 +828,7 @@ class PureWindowsPath(PurePath):
832828 """
833829 _flavour = _windows_flavour
834830 _pathmod = ntpath
831+ _case_insensitive = True
835832 _drive_letters = set ('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' )
836833 _ext_namespace_prefix = '\\ \\ ?\\ '
837834 _reserved_names = (
@@ -1016,7 +1013,7 @@ def glob(self, pattern):
10161013 drv , root , pattern_parts = self ._parse_parts ((pattern ,))
10171014 if drv or root :
10181015 raise NotImplementedError ("Non-relative patterns are unsupported" )
1019- selector = _make_selector (tuple (pattern_parts ), self ._flavour )
1016+ selector = _make_selector (tuple (pattern_parts ), self ._case_insensitive )
10201017 for p in selector .select_from (self ):
10211018 yield p
10221019
@@ -1029,7 +1026,8 @@ def rglob(self, pattern):
10291026 drv , root , pattern_parts = self ._parse_parts ((pattern ,))
10301027 if drv or root :
10311028 raise NotImplementedError ("Non-relative patterns are unsupported" )
1032- selector = _make_selector (("**" ,) + tuple (pattern_parts ), self ._flavour )
1029+ selector = _make_selector (("**" ,) + tuple (pattern_parts ),
1030+ self ._case_insensitive )
10331031 for p in selector .select_from (self ):
10341032 yield p
10351033
0 commit comments