mirror of
https://github.com/python/cpython.git
synced 2025-07-24 03:35:53 +00:00
GH-73991: Rework pathlib.Path.rmtree()
into delete()
(#122368)
Rename `pathlib.Path.rmtree()` to `delete()`, and add support for deleting non-directories. This simplifies the interface for users, and nicely complements the upcoming `move()` and `copy()` methods (which will also accept any type of file.)
This commit is contained in:
parent
b5e142ba7c
commit
98dba73010
7 changed files with 139 additions and 149 deletions
|
@ -3,6 +3,7 @@ import ntpath
|
|||
import operator
|
||||
import os
|
||||
import posixpath
|
||||
import shutil
|
||||
import sys
|
||||
from glob import _StringGlobber
|
||||
from itertools import chain
|
||||
|
@ -830,24 +831,34 @@ class Path(PathBase, PurePath):
|
|||
"""
|
||||
os.rmdir(self)
|
||||
|
||||
def rmtree(self, ignore_errors=False, on_error=None):
|
||||
def delete(self, ignore_errors=False, on_error=None):
|
||||
"""
|
||||
Recursively delete this directory tree.
|
||||
Delete this file or directory (including all sub-directories).
|
||||
|
||||
If *ignore_errors* is true, exceptions raised from scanning the tree
|
||||
and removing files and directories are ignored. Otherwise, if
|
||||
*on_error* is set, it will be called to handle the error. If neither
|
||||
*ignore_errors* nor *on_error* are set, exceptions are propagated to
|
||||
the caller.
|
||||
If *ignore_errors* is true, exceptions raised from scanning the
|
||||
filesystem and removing files and directories are ignored. Otherwise,
|
||||
if *on_error* is set, it will be called to handle the error. If
|
||||
neither *ignore_errors* nor *on_error* are set, exceptions are
|
||||
propagated to the caller.
|
||||
"""
|
||||
if on_error:
|
||||
def onexc(func, filename, err):
|
||||
err.filename = filename
|
||||
on_error(err)
|
||||
else:
|
||||
if self.is_dir(follow_symlinks=False):
|
||||
onexc = None
|
||||
import shutil
|
||||
shutil.rmtree(str(self), ignore_errors, onexc=onexc)
|
||||
if on_error:
|
||||
def onexc(func, filename, err):
|
||||
err.filename = filename
|
||||
on_error(err)
|
||||
shutil.rmtree(str(self), ignore_errors, onexc=onexc)
|
||||
else:
|
||||
try:
|
||||
self.unlink()
|
||||
except OSError as err:
|
||||
if not ignore_errors:
|
||||
if on_error:
|
||||
on_error(err)
|
||||
else:
|
||||
raise
|
||||
|
||||
delete.avoids_symlink_attacks = shutil.rmtree.avoids_symlink_attacks
|
||||
|
||||
def rename(self, target):
|
||||
"""
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue