Subtrix
## Project overview
Subtrix is a substitution module for Python, providing powerful tools for text
manipulation through substitutions. The main interface is the `Mechanism` class,
which allows for standard substitution, term expansion, and variable
substitution.
Subtrix is part of the Solutions Brewer (SB) stack and is consumed by sibling
projects such as **GoaLT** (report rendering) and **Condor** (prompt
templating). It is designed to be:
- **Deterministic** — given the same template and data, output is byte-stable.
- **Composable** — the public API is a single class with a small surface.
- **Safe** — built-in security validation (max size, max recursion, dangerous
pattern deny-list).
- **Lightweight** — minimal dependencies, no template precompilation step.
See [ARCHITECTURE.md](ARCHITECTURE.md) for the full design and
[CLI.md](CLI.md) for the command-line interface.
## Features
- Provides a basic substitution mechanism
- Supports variable substitution
- Supports lists of variables to generate multiple documents from a single template
- Supports term expansion by using term looping substitution all combinations of a list of terms can be generated
- Provides Prefix and Suffix Support with controls for trailing suffix
## Installation
You can install Subtrix via pip:
```bash
pip install subtrix
```
Alternatively, clone the repository and install from source:
```bash
git clone https://github.com/solubrew/subtrix.git
cd subtrix
pip install -e .
```
### Requirements
- Python 3.<MIN_VERSION> or higher
- Dependencies: re, <EVAL_LIB> (automatically installed via pip where applicable)
## Quick Start
Import the module and use the Mechanism class for substitutions:
## Standard Patterns
### Substitution:
<[token]>: basic substitution
<~[token]~>: optional token substituion (is removed if unused in template render)
<[prefix.:token]>: token substitution with prefix
<[token:.suffix]>: token substitution with suffix
### Variable Substitution:
<(token)>: registerd variable lookup for things like TODAY, USER, etc.
<(prefix.:token)>: optional variable token substituion
<(token:.suffix)>: optional variable token substituion
### Looped Variable Substitution:
token: ['point0', 'point1']
<@[token]@>: [['point0'], ['point1'], ['point0', 'point1']
```python
from subtrix import Mechanism
# Initialize Mechanism
template = 'Hello, <[name]>!'
data = {'name': 'World'}
mech = Mechanism(template, data)
# Perform standard substitution
result = mech.run()
print(result) # Output: Hello, World!
```
## Usage
### Variable Substitution
Inject variables from various sources:
## Development
To set up a development environment and run the test suite locally:
```bash
# Clone and install in editable mode with dev extras
git clone https://github.com/solubrew/subtrix.git
cd subtrix
python -m pip install --upgrade pip
pip install -e ".[dev]"
pip install pytest pytest-asyncio
# Run the test suite
pytest tests/ -v
# Lint (matches CI)
ruff check subtrix/
# Confirm the package imports cleanly
python -c "import subtrix; print('Import OK:', subtrix.__name__)"
# Render a template from the CLI
python -m subtrix.cli subtrix "Hello <[name]>!" '{"name": "World"}'
```
Before opening a pull request, also run the compliance auditor to verify the
project is in a releasable state:
```bash
PYTHONPATH=...:$TASKAXN_PYTHONPATH python -m sasquatch.cli analyze \
-p . --agent m3rl1n --skip-pii-secrets
```
A score of **>= 90 %** is required to tag a release. See
[CI_CD.md](CI_CD.md) for the full pipeline description.
## Contributing
Contributions are welcome! Please follow these steps:
1. Fork the repository.
2. Create a feature branch (`git checkout -b feature/<FEATURE_NAME>`).
3. Commit your changes (`git commit -am 'Add some feature'`).
4. Push to the branch (`git push origin feature/<FEATURE_NAME>`).
5. Open a Pull Request.
See [CONTRIBUTING.md](CONTRIBUTING.md) for more details.
## License
This project is licensed under the MIT License - see the [LICENSE](LICENSE.rst) file for details.
## Acknowledgments
- Built with inspiration from open-source templating and substitution libraries.
- Thanks to contributors of underlying libraries like re, and Python's built-in eval.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
No source distribution files available for this release.See tutorial on generating distribution archives.
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 subtrix-0.0.1.post3-cp312-cp312-manylinux_2_39_x86_64.whl.
File metadata
- Download URL: subtrix-0.0.1.post3-cp312-cp312-manylinux_2_39_x86_64.whl
- Upload date:
- Size: 31.0 kB
- Tags: CPython 3.12, manylinux: glibc 2.39+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
08b4eeef7f9d20a2ad5d01d5118c9a5e5e1051d7b2d8d1552e5a4e898a7d19a3
|
|
| MD5 |
539c7576698fc2b4738f786916e044b2
|
|
| BLAKE2b-256 |
5b134a914250c6f048157743bd6ed4ec60dd2c91b65d9c72ad2acf0afca7c39e
|