trailrunner1.4.0
Published
Run things on paths
pip install trailrunner
Package Downloads
Authors
Requires Python
>=3.7
Dependencies
- pathspec>=0.8.1
- attribution==1.6.2 ; extra == "dev"
- black==22.3.0 ; extra == "dev"
- click==8.1.3 ; extra == "dev"
- coverage==6.5 ; extra == "dev"
- flit==3.7.1 ; extra == "dev"
- flake8==4.0.1 ; extra == "dev"
- flake8-bugbear==23.2.13 ; extra == "dev"
- mypy==1.1.1 ; extra == "dev"
- rich==13.3.2 ; extra == "dev"
- ufmt==2.0.1 ; extra == "dev"
- usort==1.0.5 ; extra == "dev"
- sphinx==6.1.3 ; extra == "docs"
- sphinx-mdinclude==0.5.3 ; extra == "docs"
trailrunner
Walk paths and run things
trailrunner is a simple library for walking paths on the filesystem, and executing
functions for each file found. trailrunner obeys project level .gitignore files,
and runs functions on a process pool for increased performance. trailrunner is designed
for use by linting, formatting, and other developer tools that need to find and operate
on all files in project in a predictable fashion with a minimal API:
walk() takes a single Path, and generates a list of significant files in that tree:
>>> from trailrunner import walk
>>> sorted(walk(Path("trailrunner")))
[
    PosixPath('trailrunner/__init__.py'),
    PosixPath('trailrunner/__version__.py'),
    PosixPath('trailrunner/core.py'),
    PosixPath('trailrunner/tests/__init__.py'),
    PosixPath('trailrunner/tests/__main__.py'),
    PosixPath('trailrunner/tests/core.py'),
]
run() takes a list of Path objects and a function, and runs that function once
for each path given. It runs these functions on a process pool, and returns a mapping
of paths to results:
>>> from trailrunner import run
>>> paths = [Path('trailrunner/core.py'), Path('trailrunner/tests/core.py')]
>>> run(paths, str)
{
    PosixPath('trailrunner/core.py'): 'trailrunner/core.py',
    PosixPath('trailrunner/tests/core.py'): 'trailrunner/tests/core.py',
}
walk_and_run() does exactly what you would expect:
>>> from trailrunner import walk_and_run
>>> walk_and_run([Path('trailrunner/tests')], str)
{
    PosixPath('trailrunner/tests/__init__.py'): 'trailrunner/tests/__init__.py',
    PosixPath('trailrunner/tests/__main__.py'): 'trailrunner/tests/__main__.py',
    PosixPath('trailrunner/tests/core.py'): 'trailrunner/tests/core.py',
}
Install
trailrunner requires Python 3.6 or newer. You can install it from PyPI:
$ pip install trailrunner
License
trailrunner is copyright Amethyst Reese, and licensed under
the MIT license.  I am providing code in this repository to you under an open
source license.  This is my personal repository; the license you receive to
my code is from me and not from my employer. See the LICENSE file for details.