Skip to main content

pathlib_revised is a enhanced version of pathlib

Project description

pathlib_revised

Expand the origin Python pathlib module:

  • work-a-round for Windows MAX_PATH limit, by adding \\?\ path prefix

  • add missing stuff, like: makedirs, utime, scandir etc.

There is also the class, called DirEntryPath that holds more cached information than os.DirEntry

  • python 3.4 or newer only

  • Beta state

Please, try, fork and contribute! ;)

Build Status on travis-ci.org

travis-ci.org/jedie/pathlib_revised

Build Status on appveyor.com

ci.appveyor.com/project/jedie/pathlib_revised

Coverage Status on coveralls.io

coveralls.io/r/jedie/pathlib_revised

Requirements Status on requires.io

requires.io/github/jedie/pathlib_revised/requirements/

Windows MAX_PATH

There is a limit in the Windows API: Path can’t be longer than 259 characters (called: “MAX_PATH”). The work-a-round is to add the prefix \\?\ to every absolute path, see:

The Path2() class has the additional property extended_path:

>>> from pathlib_revised import Path2
>>> p=Path2("c:\foo\bar")
>>> p.extended_path
'\\?\c:\foo\bar'

All existing methods of Path2() will internally use extended_path, so that the MAX_PATH limit is not longer a problem.

extended_path exist also under Posix-Systems, but it’s the same as path:

>>> p=Path2("/foo/bar")
>>> p.path
'/foo/bar'
>>> p.extended_path
'/foo/bar'

Additional methods

<pre> >>> Path2(“/”).listdir() [‘sbin’, ‘boot’, ‘tmp’, ‘sys’, ‘var’, ‘dev’, ‘usr’, ‘root’, ‘home’, …, ‘initrd.img’, ‘vmlinuz’] </pre> * shutil.**`copyfile() <https://docs.python.org/3/library/shutil.html#shutil.copyfile>`_**

<pre> >>> Path2(“a_file.txt”).copyfile(Path2(“a_file_copy.txt”)) </pre> * os.path.**`expanduser() <https://docs.python.org/3/library/os.path.html#os.path.expanduser>`_**

<pre> >>> p=Path2(“~”, “sub”, “dir”) >>> p PosixPath2(‘~/sub/dir’) >>> p.expanduser() PosixPath2(‘/home/username/sub/dir’) </pre> * os.**`link() <https://docs.python.org/3/library/os.html#os.link>`_**

<pre> >>> Path2(“source.txt”).link(Path2(“hardlinked.txt”)) </pre> * os.**`makedirs() <https://docs.python.org/3/library/os.html#os.makedirs>`_**

<pre> >>> Path2(“a”, “new”, “path”).makedirs() </pre> * os.**`utime() <https://docs.python.org/3/library/os.html#os.utime>`_**

<pre> >>> mtime = 111111111 # UTC: 1973-07-10 00:11:51 >>> atime = 222222222 # UTC: 1977-01-16 01:23:42

>>> p.Path2("dir/or/file")
>>> p.utime(times=(atime, mtime))
>>> stat = p.stat()
>>> stat.st_atime
222222222
>>> stat.st_mtime
111111111
</pre> * os.**`scandir() <https://docs.python.org/3/library/os.html#os.scandir()>`_**

<pre> >>> p=Path2(“/foo/bar”) >>> for dir_item in p.scandir(): … print(dir_item) … <PosixDirEntry: ‘filename’> <PosixDirEntry: ‘directory’> <PosixDirEntry: ‘…’> </pre> It’s a generator that yields os.**`DirEntry <https://docs.python.org/3/library/os.html#os.DirEntry>`_** instances. scandir is new in Python 3.5, but in Path2() is will fall-back to the external scandir module.

You miss a method? Please, fork, implement, add tests and send a pull request! ;)

misc

Path2() hat the .path property, that is normally new in Python 3.4.5 and 3.5.2 So you can use it with older Python Version, too.

DirEntryPath

The DirEntryPath holds more cached information:

instance**.dir_entry**

os.DirEntry() instance

instance**.path**

str or bytes of the path, from: os.DirEntry()**.path**

instance**.is_symlink

bool from os.DirEntry()**.is_symlink()**

instance**.is_file

bool from os.DirEntry()**.is_file(follow_symlinks=False)**

instance**.is_dir

bool from os.DirEntry()**.is_dir(follow_symlinks=False)**

instance**.stat

bool from os.DirEntry()**.stat(follow_symlinks=False)**

instance**.path_instance

Path2() instance

instance**.resolved_path

Path2() instance from .resolve() (If resolve errored: None)

instance**.resolve_error

The error Instance, if .resolve() failed.

Create a instance by feeding a os.DirEntry instance, e.g.:

>>> from pathlib_revised import Path2, DirEntryPath
>>> src_path = Path2("foo/")
>>> for dir_entry in src_path.scandir():
...     dir_entry_path = DirEntryPath(dir_entry)
...     print(dir_entry_path.pformat())
 *** <DirEntryPath foo/file1> :
path.......: 'foo/file1'
path instance..: PosixPath2('foo/file1')
resolved path..: PosixPath2('/home/bar/foo/file1')
resolve error..: None
different path.: True
is symlink.....: False
is file........: False
is dir.........: True
stat.size......: 38
 *** <DirEntryPath foo/BrokenSymlink.ext> :
path.......: 'foo/BrokenSymlink.ext'
path instance..: PosixPath2('foo/BrokenSymlink.ext')
resolved path..: None
resolve error..: FileNotFoundError(2, 'No such file or directory')
different path.: True
is symlink.....: True
is file........: False
is dir.........: False
stat.size......: 15
 *** <DirEntryPath foo/README.creole> :
path.......: 'foo/README.creole'
path instance..: PosixPath2('foo/README.creole')
resolved path..: PosixPath2('/home/bar/foo/README.creole')
resolve error..: None
different path.: True
is symlink.....: False
is file........: True
is dir.........: False
stat.size......: 4802

History

  • 08.02.2016 - v0.1.0

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pathlib_revised-0.1.0.tar.gz (13.1 kB view details)

Uploaded Source

Built Distributions

pathlib_revised-0.1.0-py3.4.egg (11.5 kB view details)

Uploaded Source

pathlib_revised-0.1.0-py3-none-any.whl (15.1 kB view details)

Uploaded Python 3

File details

Details for the file pathlib_revised-0.1.0.tar.gz.

File metadata

File hashes

Hashes for pathlib_revised-0.1.0.tar.gz
Algorithm Hash digest
SHA256 4c3528dbdd66cd1582242319648c921ff9552bec789c970ff1b628a66df8824c
MD5 43829dc4ee27171c4fc0ba89b8c00134
BLAKE2b-256 789e1fa9eb70f60e5808af185004ac98d417a5e52b979ff354f228fb4544a52f

See more details on using hashes here.

File details

Details for the file pathlib_revised-0.1.0-py3.4.egg.

File metadata

File hashes

Hashes for pathlib_revised-0.1.0-py3.4.egg
Algorithm Hash digest
SHA256 d38bedcd2077950043615929b021aae905b6163de66f678656bee2c8b8ea1215
MD5 5dc00a6d2b48927c97874d217facf410
BLAKE2b-256 20a231d98d5770f2f476722bc08ff2b37eb2429bc1a385e5dba7a9caacccb9d0

See more details on using hashes here.

File details

Details for the file pathlib_revised-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for pathlib_revised-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 fd59a14410b682c1d6ed0210ada131469b0a51363d4261008cbf595a67118cd9
MD5 e6a77b92fc97187a4c0258e32d70975f
BLAKE2b-256 6d85900c47c9ea8c0a9a972fcdbda859877cfa047157efdf566dc0300e84ac2b

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page