mirror of
https://github.com/python/cpython.git
synced 2025-07-10 04:45:36 +00:00
Issue #24120: Ignore PermissionError in pathlib.Path.[r]glob(). Ulrich Petri. (Merge 3.4->3.5)
This commit is contained in:
commit
d54377d2ca
4 changed files with 59 additions and 37 deletions
|
@ -499,12 +499,15 @@ class _PreciseSelector(_Selector):
|
|||
_Selector.__init__(self, child_parts)
|
||||
|
||||
def _select_from(self, parent_path, is_dir, exists, listdir):
|
||||
if not is_dir(parent_path):
|
||||
try:
|
||||
if not is_dir(parent_path):
|
||||
return
|
||||
path = parent_path._make_child_relpath(self.name)
|
||||
if exists(path):
|
||||
for p in self.successor._select_from(path, is_dir, exists, listdir):
|
||||
yield p
|
||||
except PermissionError:
|
||||
return
|
||||
path = parent_path._make_child_relpath(self.name)
|
||||
if exists(path):
|
||||
for p in self.successor._select_from(path, is_dir, exists, listdir):
|
||||
yield p
|
||||
|
||||
|
||||
class _WildcardSelector(_Selector):
|
||||
|
@ -514,15 +517,19 @@ class _WildcardSelector(_Selector):
|
|||
_Selector.__init__(self, child_parts)
|
||||
|
||||
def _select_from(self, parent_path, is_dir, exists, listdir):
|
||||
if not is_dir(parent_path):
|
||||
try:
|
||||
if not is_dir(parent_path):
|
||||
return
|
||||
cf = parent_path._flavour.casefold
|
||||
for name in listdir(parent_path):
|
||||
casefolded = cf(name)
|
||||
if self.pat.match(casefolded):
|
||||
path = parent_path._make_child_relpath(name)
|
||||
for p in self.successor._select_from(path, is_dir, exists, listdir):
|
||||
yield p
|
||||
except PermissionError:
|
||||
return
|
||||
cf = parent_path._flavour.casefold
|
||||
for name in listdir(parent_path):
|
||||
casefolded = cf(name)
|
||||
if self.pat.match(casefolded):
|
||||
path = parent_path._make_child_relpath(name)
|
||||
for p in self.successor._select_from(path, is_dir, exists, listdir):
|
||||
yield p
|
||||
|
||||
|
||||
|
||||
class _RecursiveWildcardSelector(_Selector):
|
||||
|
@ -539,19 +546,22 @@ class _RecursiveWildcardSelector(_Selector):
|
|||
yield p
|
||||
|
||||
def _select_from(self, parent_path, is_dir, exists, listdir):
|
||||
if not is_dir(parent_path):
|
||||
try:
|
||||
if not is_dir(parent_path):
|
||||
return
|
||||
with _cached(listdir) as listdir:
|
||||
yielded = set()
|
||||
try:
|
||||
successor_select = self.successor._select_from
|
||||
for starting_point in self._iterate_directories(parent_path, is_dir, listdir):
|
||||
for p in successor_select(starting_point, is_dir, exists, listdir):
|
||||
if p not in yielded:
|
||||
yield p
|
||||
yielded.add(p)
|
||||
finally:
|
||||
yielded.clear()
|
||||
except PermissionError:
|
||||
return
|
||||
with _cached(listdir) as listdir:
|
||||
yielded = set()
|
||||
try:
|
||||
successor_select = self.successor._select_from
|
||||
for starting_point in self._iterate_directories(parent_path, is_dir, listdir):
|
||||
for p in successor_select(starting_point, is_dir, exists, listdir):
|
||||
if p not in yielded:
|
||||
yield p
|
||||
yielded.add(p)
|
||||
finally:
|
||||
yielded.clear()
|
||||
|
||||
|
||||
#
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue