Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Efficient copying via shutil #227

Open
four43 opened this issue Jun 25, 2024 · 4 comments
Open

Efficient copying via shutil #227

four43 opened this issue Jun 25, 2024 · 4 comments
Labels
enhancement 🚀 New feature or request

Comments

@four43
Copy link

four43 commented Jun 25, 2024

This is a great extension of pathlib who's core describes file system directories and objects. We are looking to efficiently download and upload data from various backends. shutil.copytree and shutil.copy2, which it leans on, are a nice way to copy between Path objects. Is there fanciness in there that's causing these to not work? copytree blew up on a UPath S3 remote path as the destination and seemed just copy things locally after it stringified the path...

Are these nice methods just calling str([path]) and breaking all the nice things? Are there any related helper methods for copying and moving provided?

Thanks a lot!

Related: #175

EDIT: Uh oh, I'm seeing a lot of legacy os.path style stuff in the source: https://github.com/python/cpython/blob/main/Lib/shutil.py#L432

@ap--
Copy link
Collaborator

ap-- commented Jul 9, 2024

Hi @four43

Sorry for the delayed response. A shutil like interface would be a great addition.
Last time I checked the implementations in the stdlib were implicitly assuming local paths.
With current efforts of establishing other PathLike implementations I could imagine that might change.


@barneygale are there plans to make shutil.copytree, shutil.rmtree, etc... compatible with PathBase subclasses or maybe are they already?


In the meantime we could sketch out a upath.shutil api compatible submodule and take advantage of https://filesystem-spec.readthedocs.io/en/latest/api.html#fsspec.generic.rsync in the implementation.

Cheers,
Andreas 😃

@ap-- ap-- added the enhancement 🚀 New feature or request label Jul 9, 2024
@barneygale
Copy link

@barneygale are there plans to make shutil.copytree, shutil.rmtree, etc... compatible with PathBase subclasses or maybe are they already?

Yes! I'm working on adding copy(), copytree(), rmtree() and move(): python/cpython#73991

copy() and copytree() have already arrived: https://docs.python.org/3.14/library/pathlib.html#copying-renaming-and-deleting

@ap--
Copy link
Collaborator

ap-- commented Jul 9, 2024

Wonderful! So we can support this natively once it lands in pathlib-abc ☺️ Thanks @barneygale

@four43 I recommend subscribing to #193 to be notified when I find the time to work on moving to PathBase

@four43
Copy link
Author

four43 commented Jul 9, 2024

You guys are legends. Thank you so much for all the effort and work. Subbed to that issue and looking forward to it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement 🚀 New feature or request
Projects
None yet
Development

No branches or pull requests

3 participants