On Sun, Nov 22, 2020 at 3:27 PM Abdulla Al Kathiri <
alkathiri.abdu...@gmail.com> wrote:

> On Nov 22, 2020, at 11:53 PM, 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.
>
> 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.
>
> 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.
>
> 3. newLine for write_text
>
> This is the only relevant option that "Path.open" has but
> "Path.write_text" doesn't, and is a serious omission when dealing with
> multiple operating systems.
>
> 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.
>
> 5. Stem with no suffixes
>
> The stem property only takes off the last suffix, but even in the example
> given ('my/library.tar.gz') it isn't really useful because the suffix has
> two parts ('.tar' and '.gz').  I suggest another property, probably called 
> "rootstem"
> or "basestem", that takes off all the suffixes, using the same logic as
> the "suffixes" property.  This is another symmetry issue: it is possible to
> extract all the suffixes, but not remove them.
>
> 6. with_suffixes
>
> Equivalent to with_suffix, but replacing all suffixes.  Again, this is a
> symmetry issue.  It is hard to manipulate all the suffixes right now, as
> the example show.  You can add them or extract them, but not change them
> without doing several steps.
>
> 7. exist_ok for is_* methods
>
> Currently all the is_* methods (such as is_file) return False if the file
> doesn't exist or if it is a broken symlink.  This can be dangerous, since
> it is not trivially easy to tell if you are dealing with the wrong type of
> file vs. a missing file.  And it isn't obvious behavior just from the
> method name.  I suggest adding an "exist_ok" argument to all of these, with
> the default being "True" for backwards-compatibility.  This argument name
> is already in use elsewhere in pathlib.  If this is False and the file is
> not present, a "FileNotFoundError" is raised.
>
>
> _______________________________________________
> 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/YEN7UA67INEUGG44R3RWAF2JFHAXZC77/
> Code of Conduct: http://python.org/psf/codeofconduct/
>
> I really like these ideas. Effectively, we can use pathlib.Path without
> ever needing to import shutil. We would like also copyfile from shutil if
> we are only interested copying the file data. How about adding append_text
> and append_bytes with newLine similar to what you suggested?
>

There have been proposals to make pathlib provide ALL file-related
operations, but that is not this proposal.  shutil would still provide a
lot of more advanced functionality.  So I think just one operation, copying
the file in the least destructive manner possible (probably equivalent to
copy2).

I wouldn't use "append_text" or "append_bytes" since you can use "open" for
something like that.

Sincerely,
Todd

On Sun, Nov 22, 2020 at 3:27 PM Abdulla Al Kathiri <
alkathiri.abdu...@gmail.com> wrote:

> I really like these ideas. Effectively, we can use pathlib.Path without
> ever needing to import shutil. We would like also copyfile from shutil if
> we are only interested copying the file data. How about adding append_text
> and append_bytes with newLine similar to what you suggested?
>
> On Nov 22, 2020, at 11:53 PM, 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.
>
> 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.
>
> 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.
>
> 3. newLine for write_text
>
> This is the only relevant option that "Path.open" has but
> "Path.write_text" doesn't, and is a serious omission when dealing with
> multiple operating systems.
>
> 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.
>
> 5. Stem with no suffixes
>
> The stem property only takes off the last suffix, but even in the example
> given ('my/library.tar.gz') it isn't really useful because the suffix has
> two parts ('.tar' and '.gz').  I suggest another property, probably called 
> "rootstem"
> or "basestem", that takes off all the suffixes, using the same logic as
> the "suffixes" property.  This is another symmetry issue: it is possible to
> extract all the suffixes, but not remove them.
>
> 6. with_suffixes
>
> Equivalent to with_suffix, but replacing all suffixes.  Again, this is a
> symmetry issue.  It is hard to manipulate all the suffixes right now, as
> the example show.  You can add them or extract them, but not change them
> without doing several steps.
>
> 7. exist_ok for is_* methods
>
> Currently all the is_* methods (such as is_file) return False if the file
> doesn't exist or if it is a broken symlink.  This can be dangerous, since
> it is not trivially easy to tell if you are dealing with the wrong type of
> file vs. a missing file.  And it isn't obvious behavior just from the
> method name.  I suggest adding an "exist_ok" argument to all of these, with
> the default being "True" for backwards-compatibility.  This argument name
> is already in use elsewhere in pathlib.  If this is False and the file is
> not present, a "FileNotFoundError" is raised.
>
>
> _______________________________________________
> 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/YEN7UA67INEUGG44R3RWAF2JFHAXZC77/
> Code of Conduct: http://python.org/psf/codeofconduct/
>
>
>
_______________________________________________
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/PGML2G2DLCX4XKULOAGCUJCZYF7PGQRX/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to