On Sun, Nov 22, 2020 at 5:46 PM Chris Angelico <ros...@gmail.com> wrote:

> On Mon, Nov 23, 2020 at 6:54 AM Todd <toddr...@gmail.com> wrote:
> >
> > I know enhancements to pathlib gets brought up occasionally, but it
> doesn't look like anyone has been willing to take the initiative and see
> things through to completion.  I am willing to keep the ball rolling here
> and even implement these myself.  I have some suggestions and I would like
> to discuss them.  I don't think any of them are significant enough to
> require a pep.  These can be split it into independent threads if anyone
> prefers.
> >
>
> Keep 'em in one thread for now, but if any of them become too
> controversial, it's probably worth narrowing the scope and spinning
> off the debatable ones in their own threads.
>
> General principle, by the way: The operations that currently exist are
> the fundamental primitives, and you're asking for higher-level
> operations to be made available. That might be a good summary for the
> proposal. (For example, renaming one thing to another is a primitive,
> but copying a file generally means opening both names, reading and
> writing, and then closing.)


I think even that is debatable.  I would say "read_text", "read_bytes",
"write_text", and "write_bytes" are higher-level operations on top of
"open" in much the same way "copy" is.  "glob" and "rglob" are also
higher-level operations on top of iterdirs.

And as far as I can see that only really applies to "copy".  "user" and
"group" are really higher-level routines on top of the primitive "gid" and
"uid", and the rest are meant to be counterparts of operations that already
exist.


> A few specifics:
>
> > 1. copy
> >
> > The big one people keep bringing up that I strongly agree on is a "copy"
> method.  This is really the only common file manipulation task that
> currently isn't possible.  You can make files, read them, move them, delete
> them, create directories, even do less common operations like change owners
> or create symlinks or hard links.
> >
> > A common objection is that pathlib doesn't work on multiple paths.  But
> that isn't the case.  There are a ton of methods that do that, including:
> >
> >    * symlink_to
> >    * link_to
> >    * rename
> >    * replace
> >    * glob
> >    * rglob
> >    * iterdir
> >    * is_relative_to
> >    * relative_to
> >    * samefile
> >
> > I think this is really the only common file operation that someone would
> need to switch to a different module to do, and it seems pretty strange to
> me to be able to make symbolic or hard links to a file but not straight up
> copy one.
> >
>
> I don't think it's so very strange (see above about primitive vs high
> level), but it does seem a reasonable enhancement. (It'd need the same
> caveats as on shutil.copy.)
>

As I said, I don't think this is any less primitive than "read_text",
"read_bytes", "write_text", "write_bytes", "glob", or "rglob".


>
> > 2. recursive remove
> >
> > This could be a "recursive" option to "rmdir" or a "rmtree" method (I
> prefer the option).  The main reason for this is symmetry.  It is possible
> to create a tree of folders (using "mkdir(parents=True)"), but once you do
> that you cannot remove it again in a straightforward way.
> >
>
> Absolutely agree, but not for the same reason: pruning a branch off a
> directory tree is VERY easy to naively get wrong, and shutil.rmtree
> has a lot of code in it to protect itself.
>

Another good point.  The question is whether it should be its own method or
an argument.


> > 4. uid and gid
> >
> > You can get the owner and group name of a file (with the "owner" and
> "group" methods), but there is no easy way to get the corresponding number.
>
> That does seem a strange omission. If the other proposals get bogged
> down in controversy, spin this one off as its own thread, as I think
> it shouldn't be difficult to add it.
>

Sure.


> It might be worth looking at this as "making shutil support Path
> objects", and then have the Path objects grow methods that delegate to
> shutil. That'd avoid duplicating logic eg for rmtree and copyfile.
>

shutil already supports Path objects.  And yes, I was planning to delegate
the logic to existing functions there or in "os".
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/GNZ3OLNGJOUTRHX5C6NWVFVQ3254HRJU/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to