virtual-glob
Globbing of remote/virtual file systems.
Motivation
Globbing is a common operation in many programs, but it is not always required to use the local file system, as is the case for glob.glob or pathlib.Path.glob.
This package provides a way to glob over remote/virtual file systems.
Apart from python-glob2, which is unmaintained, I could not find another Python packages that provided this functionality, so I made my own!
Usage
Install the package:
pip install virtual-glob
Use the glob function, which can take a pathlib.Path instance, the provided InMemoryPath class, or any other class that implements the VirtualPath below:
from virtual_glob import glob, InMemoryPath
fs = InMemoryPath.from_list(["a/b/c/my1.txt", "e/f/g/my2.txt", "x/y/z/other.txt"])
matches = {p.path for p in glob(fs, "**/my[0-9].txt")}
assert matches == {"a/b/c/my1.txt", "e/f/g/my2.txt"}
glob also accepts the keyword arguments:
follow_symlinks: whether to follow symbolic links when iterating directories (default:False)depth_first: whether to iterate directories in depth-first order, or breadth-first (default:True)
See the tests for more examples.
Virtual file systems
The file system must be accessible via a single class, directly mimicking pathlib.Path, with the following protocol:
class VirtualPath(Protocol):
@property
def name(self) -> str:
"""Return the name of this path."""
def is_dir(self) -> bool:
"""Return True if this path is a directory."""
def is_symlink(self) -> bool:
"""Return True if this path is a symbolic link."""
def iterdir(self: PathType) -> Iterable[PathType]:
"""Iterate over the contents of this directory."""
def joinpath(self: PathType, *parts: str) -> PathType:
"""Join this path with the given parts."""
def exists(self) -> bool:
"""Return True if this path exists."""
Rules
- Patterns must be in POSIX format, i.e.
/is the path separator. - Patterns must be relative, i.e. they must not start with
/. - Patterns are case-sensitive.
- Patterns with a trailing
/only match directories. **matches zero or more directories, it must be the only thing in a path segment.*matches zero or more characters, except/.?matches exactly one character, except/.[...]matches one character in the set, except/.[!...]matches one character not in the set, except/.
Design
Make as few calls to the underlying file system as possible, particularly for iterdir.
For example, looking to "short-circuit" when a pattern contains no "magic" characters.
Metadata
Release files for virtual_glob 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| virtual_glob-0.2.0.tar.gz | 10.8 kB | Without provenance | Details for virtual_glob-0.2.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| virtual_glob-0.2.0-py3-none-any.whl | Python 3 | none | any | Details for virtual_glob-0.2.0-py3-none-any.whl |
Total release size: 17.5 kB
Release files / virtual_glob-0.2.0.tar.gz
| Download URL | virtual_glob-0.2.0.tar.gz |
|---|---|
| Size | 10.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1681cae20882de9591c663b82d156019db96cb53c180c664853ca15a9707bdd2
|
|
BLAKE2b-256 checksum How to use checksums |
5240790d9784e99965f4c389240a7929d54d5b72487a3d595992d0e905a62ee5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
python-requests/2.28.1
|
Release files / virtual_glob-0.2.0-py3-none-any.whl
| Download URL | virtual_glob-0.2.0-py3-none-any.whl |
|---|---|
| Size | 6.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
09e51d39c44f3f2422493f978ff77a9b8520771624933b4adc9d54d4cf70af32
|
|
BLAKE2b-256 checksum How to use checksums |
18a5ff3e499220e37681c083ee86335ec1f56a880c9f6f4b1e06e295c8d6f999
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
python-requests/2.28.1
|
Security for virtual_glob 0.2.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.