Access file paths from pyproject.toml
Project description
project-paths
Access file paths from pyproject.toml
Thanks to @Madoshakalaka for the idea!
# pyproject.toml
[tool.project-paths]
readme = "README.md"
# app.py
from project_paths import paths
# paths.readme is a pathlib.Path object:
print(paths.readme.read_text())
Install
pip install project-paths
Usage
Does your application have a bunch of configurable file paths? Do you wish you just had one place to configure list them all?
Add paths to [tool.project-paths]
With this module, define your paths in your pyproject.toml
file under
the [tool.project-paths]
table:
[tool.project-paths]
docs = "path/to/my/docs"
settings = "path/to/my/settings.py"
config = "/opt/path/to/my/config
# Add as many paths as you want!
Anything string defined with [tool.project-paths]
will be made
available. Relative paths are relative to pyproject.toml
.
Access paths using project_paths.paths.<path name>
Now you can access all the paths listed in pyproject.toml
with
project_paths.paths
. Every path is returned as
a pathlib.Path
object:
from project_paths import paths
print(paths.docs.glob("*.md"))
assert paths.config.exists()
exec(paths.settings.read_text())
# Or anything you want!
Access your project root directory using project_root
You can access the project root directory (assumed to be the directory
that contains pyproject.toml
) using project_root
, which acts like
a pathlib.Path
object:
from project_paths import project_root
assert project_root.is_dir()
assert (project_root / "pyproject.toml").is_file()
print((project_root / "README.md").read_text())
Note:
project_root
is not a truePath
object. UsePath(project_root)
to obtain a truePath
object.
Caveats
Names in [tool.project-paths]
should be a valid Python identifier
and the names cannot have a leading underscore. If a name has
a leading underscore, a warning is issued and the name is inaccessible:
[tool.project-paths]
# BAD: paths that start with a '_' cannot be used
_my_path = "path/to/wherever"
# GOOD: path is a valid Python identifier!
my_path = "path/to/wherever"
Errors
All intentional errors inherit from project_paths.ProjectPathError
.
PyProjectNotFoundError
Raised when project_paths
cannot find an appropriate pyproject.toml
for the caller. This can happen if the caller simply does not have
a pyproject.toml
file, or when it's not possible to determine the
caller's filename.
NOTE: if accessing paths from the interactive console,
project_paths
will find the appropriatepyproject.toml
relative to the current working directory!
ConfigurationNotFoundError
Raised when project_paths
cannot find the [tool.project-paths]
table
within the pyproject.toml
file. Perhaps there is a typo or perhaps the
project_paths
inferred the incorrect module path.
License
2021 © Eddie Antonio Santos. MIT Licensed.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file project-paths-1.1.1.tar.gz
.
File metadata
- Download URL: project-paths-1.1.1.tar.gz
- Upload date:
- Size: 7.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.1.4 CPython/3.9.1 Darwin/19.6.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | b040f701fcdd550e7fa6ea85fa8a82ae047da755b4d639a1b278da7c959fdada |
|
MD5 | 324a2dd38df05533fc8825af3a795f53 |
|
BLAKE2b-256 | c70853040f2005ce8dd4229018b4026d3a0de0636d8745f32e67ace1e3a19998 |
File details
Details for the file project_paths-1.1.1-py3-none-any.whl
.
File metadata
- Download URL: project_paths-1.1.1-py3-none-any.whl
- Upload date:
- Size: 6.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.1.4 CPython/3.9.1 Darwin/19.6.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5e93b759772f47d79f86ad5482c55ef1cc9566de6a4108aab939b6e0e602cf2d |
|
MD5 | 9fe281a9a6995eae66a3f79c7b51da09 |
|
BLAKE2b-256 | 3c23191bf70c5f2cdfedf4e23621ac5d6fd4761ccb74f3cae7ba751b9c3a4eda |