Skip to main content

Access file paths from pyproject.toml

Project description

project-paths

Lint and Test codecov PyPI

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 true Path object. Use Path(project_root) to obtain a true Path 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 appropriate pyproject.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


Download files

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

Source Distribution

project-paths-1.1.1.tar.gz (7.0 kB view details)

Uploaded Source

Built Distribution

project_paths-1.1.1-py3-none-any.whl (6.9 kB view details)

Uploaded Python 3

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

Hashes for project-paths-1.1.1.tar.gz
Algorithm Hash digest
SHA256 b040f701fcdd550e7fa6ea85fa8a82ae047da755b4d639a1b278da7c959fdada
MD5 324a2dd38df05533fc8825af3a795f53
BLAKE2b-256 c70853040f2005ce8dd4229018b4026d3a0de0636d8745f32e67ace1e3a19998

See more details on using hashes here.

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

Hashes for project_paths-1.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 5e93b759772f47d79f86ad5482c55ef1cc9566de6a4108aab939b6e0e602cf2d
MD5 9fe281a9a6995eae66a3f79c7b51da09
BLAKE2b-256 3c23191bf70c5f2cdfedf4e23621ac5d6fd4761ccb74f3cae7ba751b9c3a4eda

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