[Python-ideas] pathlib suggestions

Stephen J. Turnbull turnbull.stephen.fw at u.tsukuba.ac.jp
Wed Jan 25 00:25:03 EST 2017


I'm just going to let fly with the +1s and -1s, don't take them too
seriously, they're basically impressionistic (I'm not a huge user of
pathlib yet).

Todd writes:

 > So although the names are tentative, perhaps there could be a "fullsuffix"
 > property to return the extensions as a single string,

-0      '.'.join(p.suffixes) vs. p.fullsuffix?  TOOWTDI says no.  I
        also don't really see the use case.  

 > a "nosuffix" extension to return the path without any extensions,

+1      (subject to name bikeshedding) .suffixes itself is kinda
        useless without this, and you shouldn't have to roll your own

Do you propose to return a Path or a str here?

 > and a "with_suffixes" method that replaces all the suffix and can
 > accept multiple arguments (which would then be joined to create the
 > extensions).

Do you propose to return a Path or a str here?  +1 for a Path, +0 for
a str.

 > Second, for methods like "rename" and "replace", it would be nice if there
 > was an "exist_ok" argument that defaults to "True" to allow for safe
 > renaming.

-1      I don't see how this is an improvement.  If it would raise if
        exist_ok == False, then

    try:
        p.rename(another_p, exist_ok=False)
    except ExistNotOKError:
        take_evasive_action(p)

doesn't seem like a big improvement over

    if p.exists():
        take_evasive_action(p)
    else:
        p.rename(another_p)

And if it doesn't raise, then the action just silently fails?

Name bikeshedding: IIRC, if an argument is essentially always going to
be one of a small number of literals, Guido strongly prefers a new
method (eg, rename_safely).

I will admit that the current API seems strange to me: on Unix,
.rename and .replace are apparently the same, and both unsafe?  I
would prefer

.rename         Unix semantics (deprecated)
.rename_safely  replacement for .rename, raises if exists
.replace        silently replace

Names to be bikeshedded per usual.

 > Third, it would be nice if there was a "uid" and "gid" method for getting
 > the numeric user and group IDs for a file,

+1

 > or alternatively a "numeric" argument for the "owner" and "group"
 > methods.

-1 (see "Guido prefers" above)

 > Fourth, for the "is_*" methods, it would be nice if there was a "strict"
 > argument that would raise an exception if the file or directory doesn't
 > exist.

-1 That seems weird in a library intended for the syntactic
manipulation of uninterpreted paths (even though this is a semantic
operation).  TOOWTDI and EIBTI, as well.  For backward compatibility,
strict would have to default to False.

 > the example for the "parts" property should probably show at least
 > one file with an extension,

+1

Steve




More information about the Python-ideas mailing list