Penny for your thoughts on those questions, Brett? Protocols are new to me. I see importlib.abc.Traversable is a Protocol, and I'm giving PEP 544 a read now.
I reckon only stat(), open() and iterdir() would be essential for users to implement. On Wed, 9 Feb 2022 at 19:02, Brett Cannon <br...@python.org> wrote: > One thing to discuss (and which has been brought up on the PR), is whether > this should be an ABC to force people to explicitly raise > `NotImplementedError`? > > The next question is whether any of this should be a (very wide) protocol > instead of an ABC? > > On Wed, Feb 9, 2022 at 7:05 AM Barney Gale <barney.g...@gmail.com> wrote: > >> Over the last couple of years I've been tidying up the pathlib internals, >> with a view towards adding an AbstractPath class to the hierarchy. Users >> would be able to subclass AbstractPath to implement other kinds of >> filesystems: s3, google cloud storage, pandas, ftp, git, zip and tar files, >> etc. By implementing some abstract methods (stat(), iterdir(), open(), etc) >> they'd benefit from a number of derived methods (is_dir(), glob(), >> read_text(), etc). There's already a healthy ecosystem of PyPI packages >> attempting this, but there's presently no officially-supported route. >> >> I've now submitted a PR that adds an initial underscore-prefixed >> implementation of this class: >> https://github.com/python/cpython/pull/31085. The implementation is >> simple: wherever Path calls functions in os, io, pwd, etc, AbstractPath >> instead raises NotImplementedError. The Path class becomes an >> implementation of AbstractPath. >> >> These methods directly raise NotImplementedError: cwd(), stat(), >> iterdir(), readlink(), resolve(), expanduser(), owner(), group(), open(), >> touch(), mkdir(), symlink_to(), hardlink_to(), rename(), replace(), >> chmod(), unlink(), rmdir() >> >> These methods call through to the above methods: absolute(), lstat(), >> exists(), is_dir(), is_file(), is_mount(), is_symlink(), is_block_device(), >> is_char_device(), is_fifo(), is_socket(), home(), samefile(), scandir(), >> glob(), rglob(), read_bytes(), read_text(), write_bytes(), write_text(), >> lchmod(), link_to() >> >> Some methods aren't applicable to some kinds of filesystems, e.g. zip >> files don't support symlinks, working directories or home directories. In >> these cases I think it's reasonable to raise NotImplementedError. Indeed, >> pathlib.Path methods already raise NotImplementedError when certain local >> filesystem features aren't available (readlink(), group(), etc). >> >> If any readers of this list have previously tried to extend pathlib to >> other domains, or are otherwise interested in pathlib development, please >> could you let me know what you think of the proposed API? >> >> Many thanks >> _______________________________________________ >> Python-Dev mailing list -- python-dev@python.org >> To unsubscribe send an email to python-dev-le...@python.org >> https://mail.python.org/mailman3/lists/python-dev.python.org/ >> Message archived at >> https://mail.python.org/archives/list/python-dev@python.org/message/JB7QGDNI2CNXFX7LQQ2X2WPOZ7DWVNQL/ >> Code of Conduct: http://python.org/psf/codeofconduct/ >> >
_______________________________________________ Python-Dev mailing list -- python-dev@python.org To unsubscribe send an email to python-dev-le...@python.org https://mail.python.org/mailman3/lists/python-dev.python.org/ Message archived at https://mail.python.org/archives/list/python-dev@python.org/message/FMAN7TQA7LU4PYWW7NKA54ZWNWC6ARMU/ Code of Conduct: http://python.org/psf/codeofconduct/