Handle access errors scanning directories

Trying to read a directory that is visible but not accessible, or a
symlink to a file in a directory that is not accessible will raise a
PermissionError. Output these and then continue.

If os.scandir() raises an exception then the finally block accesses
"scanner" before it is assigned, raising an UnboundLocalError.
environments/review-docs-devel-1399dq/deployments/6607
Simon Arlott 2020-06-21 10:13:55 +01:00
rodzic fc9c2b4a1d
commit 88a72ea14d
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: DF001BFD83E75990
2 zmienionych plików z 21 dodań i 8 usunięć

Wyświetl plik

@ -3,6 +3,7 @@ import datetime
import itertools
import os
import queue
import sys
import threading
import time
import urllib.parse
@ -29,16 +30,27 @@ def crawl_dir(dir, extensions, recursive=True, ignored=[]):
return
try:
scanner = os.scandir(dir)
except Exception as e:
m = "Error while reading {}: {} {}\n".format(dir, e.__class__.__name__, e)
sys.stderr.write(m)
return
try:
for entry in scanner:
if entry.is_file():
for e in extensions:
if entry.name.lower().endswith(".{}".format(e.lower())):
if entry.path not in ignored:
yield entry.path
elif recursive and entry.is_dir():
yield from crawl_dir(
entry.path, extensions, recursive=recursive, ignored=ignored
try:
if entry.is_file():
for e in extensions:
if entry.name.lower().endswith(".{}".format(e.lower())):
if entry.path not in ignored:
yield entry.path
elif recursive and entry.is_dir():
yield from crawl_dir(
entry.path, extensions, recursive=recursive, ignored=ignored
)
except Exception as e:
m = "Error while reading {}: {} {}\n".format(
entry.name, e.__class__.__name__, e
)
sys.stderr.write(m)
finally:
if hasattr(scanner, "close"):
scanner.close()

Wyświetl plik

@ -0,0 +1 @@
Handle access errors scanning directories when importing files