Add your description here
Project description
pyprojectr
pyprojectr is a Python library designed to parse and model pyproject.toml files. It provides a type-safe way to interact with the metadata of your Python projects.
Features
- Type-Safe Modeling: Full support for the standard
[project]and[build-system]tables. - Flexible Parsing: Handles both simple and complex field formats (e.g.,
readmeas a string or a table). - Naming Conventions: Automatically maps TOML hyphenated keys (e.g.,
requires-python) to Pythonic underscored attributes (e.g.,requires_python). - Extensible: Easily extendable to support additional
[tool]sections.
Installation
You can install pyprojectr using pip:
pip install pyprojectr
Or using uv:
uv add pyprojectr
Usage
Loading a pyproject.toml file
from pathlib import Path
from pyprojectr.pyproject import from_file
# Load pyproject.toml from the current directory
pyproj = from_file(Path("pyproject.toml"))
print(f"Project Name: {pyproj.project.name}")
print(f"Version: {pyproj.project.version}")
print(f"Dependencies: {pyproj.project.dependencies}")
# Access tool-specific configuration
if pyproj.tool and pyproj.tool.pytest:
print(f"Pytest Options: {pyproj.tool.pytest.addopts}")
Creating Models Programmatically
from pyprojectr import PyProject, Author
project = PyProject(
name="my-awesome-project",
version="0.1.0",
authors=[Author(name="Jane Doe", email="jane@example.com")]
)
print(project.name)
Extending with Custom Tools
You can easily define your own data classes for custom tool configurations by inheriting from BaseModel. pyprojectr will automatically handle the conversion between TOML's hyphenated keys and your Python attributes.
import attrs
from pyprojectr.core import BaseModel
@attrs.define(frozen=True)
class MyCustomTool(BaseModel):
api_key: str
max_retries: int = 3
enable_logging: bool = True
# Example data that might come from a [tool.my-custom-tool] section in pyproject.toml
tool_data = {
"api-key": "secret-token",
"max-retries": 5,
"enable-logging": False
}
# Use from_data to create an instance with automatic key mapping
my_tool = MyCustomTool.from_data(tool_data)
print(my_tool.api_key) # Output: secret-token
# Use to_data to unstructure the instance back to a dictionary with hyphenated keys
unstructured = my_tool.to_data()
print(unstructured["api-key"]) # Output: secret-token
Controlling Attribute Renaming
By default, pyprojectr converts all underscored attributes to hyphenated keys. You can disable this behavior for specific fields or entire classes:
Disable for a specific field:
import attrs
from pyprojectr import BaseModel
@attrs.define(frozen=True)
class MyTool(BaseModel):
# This will look for 'api_key' instead of 'api-key' in TOML
api_key: str = attrs.field(metadata={"pyprojectr_no_rename": True})
Disable for an entire class:
import attrs
from pyprojectr import BaseModel
@attrs.define(frozen=True)
class MyTool(BaseModel):
__pyprojectr_no_rename__ = True
# Both will look for underscored names in TOML
api_key: str
max_retries: int
Development
pyprojectr uses uv for dependency management and tox for testing across multiple Python versions.
Setting up for development
- Clone the repository.
- Install dependencies:
uv sync - Run tests:
tox
Quality Assurance
- Linting:
ruffis used for linting and formatting. - Testing:
pytestis used for unit testing with coverage reporting.
License
This project is licensed under the Apache-2.0 License.
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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pyprojectr-0.1.2.tar.gz.
File metadata
- Download URL: pyprojectr-0.1.2.tar.gz
- Upload date:
- Size: 12.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bf531ef40745bb430f225990f8247c3857c6c60d26054b1fb9d5c9703d363161
|
|
| MD5 |
5d15a1df8f509713d4b8b94e84da3116
|
|
| BLAKE2b-256 |
b1628c6e967dfcdb8251e8ab5c6682c490bcf28b48c1c66fcfe9bc16a2bcbf52
|
File details
Details for the file pyprojectr-0.1.2-py3-none-any.whl.
File metadata
- Download URL: pyprojectr-0.1.2-py3-none-any.whl
- Upload date:
- Size: 6.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
48da88c372111a5d5eb43dc16d478cf540194bec8462ed14f6519ea36ea51304
|
|
| MD5 |
375d726b627727fcf88e4b0ccecacdba
|
|
| BLAKE2b-256 |
8c28def1eaaf016388c91b9417e3de947b55914e9a56ca1d3f21aa85a29e3800
|