in optimum/intel/openvino/utils.py [0:0]
def _rmtree(cls, name, ignore_errors=True, repeated=False):
def _dont_follow_symlinks(func, path, *args):
# Pass follow_symlinks=False, unless not supported on this platform.
if func in os.supports_follow_symlinks:
func(path, *args, follow_symlinks=False)
elif os.name == "nt" or not os.path.islink(path):
func(path, *args)
def _resetperms(path):
try:
chflags = os.chflags
except AttributeError:
pass
else:
_dont_follow_symlinks(chflags, path, 0)
_dont_follow_symlinks(os.chmod, path, 0o700)
def onexc(func, path, exc):
if isinstance(exc, PermissionError):
if repeated and path == name:
if ignore_errors:
return
raise
try:
if path != name:
_resetperms(os.path.dirname(path))
_resetperms(path)
try:
os.unlink(path)
except IsADirectoryError:
cls._rmtree(path, ignore_errors=ignore_errors)
except PermissionError:
# The PermissionError handler was originally added for
# FreeBSD in directories, but it seems that it is raised
# on Windows too.
# bpo-43153: Calling _rmtree again may
# raise NotADirectoryError and mask the PermissionError.
# So we must re-raise the current PermissionError if
# path is not a directory.
if not os.path.isdir(path) or os.path.isjunction(path):
if ignore_errors:
return
raise
cls._rmtree(path, ignore_errors=ignore_errors, repeated=(path == name))
except FileNotFoundError:
pass
elif isinstance(exc, FileNotFoundError):
pass
else:
if not ignore_errors:
raise
_rmtree(name, onexc=onexc, ignore_errors=ignore_errors)