Skip to main content

Globbing of virtual file systems.

Project description

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"}

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 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.

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

virtual_glob-0.1.0.tar.gz (9.3 kB view details)

Uploaded Source

Built Distribution

virtual_glob-0.1.0-py3-none-any.whl (6.1 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: virtual_glob-0.1.0.tar.gz
  • Upload date:
  • Size: 9.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-requests/2.28.1

File hashes

Hashes for virtual_glob-0.1.0.tar.gz
Algorithm Hash digest
SHA256 8d1996dcfe19d0b608f37932867cb4ccd5237bb3381eea000e999baec4a25963
MD5 db9457cc70539e706ab24d7d88e5963c
BLAKE2b-256 76ea9e6e2bb58455f95e8978fcd802646a9d2b961ca8a1db2367881efa50ce2b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for virtual_glob-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 0e72cb1c880c3bd27d15aede11a0ab2d4c47c3e932fd5808e3fb57b0d1197a2a
MD5 cdf261c3165f767087ca400816f008e2
BLAKE2b-256 c39cb80cc996e033d228ebad7f24bc510b23ea0f2fe90350685cd0c9009dd37f

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