Python parser for ***plain specification files.
Reads a .plain module and its import / requires chain, resolves Liquid templates,
validates concepts and linked resources, and returns the marshalled specification tree
plus the ordered list of functionalities (FRIDs).
pip install plain-parserValidate a module and its requires chain from the command line (<file>: OK and exit 0 when valid; Error: … on stderr and exit 1 otherwise):
plain-parser check my_spec.plain [--template-dir DIR] [--config-name NAME]Modules and {% include %} templates are looked up in the .plain file's directory, then in --template-dir.
When --template-dir is not given, it is read from the template-dir key of config.yaml (or the file named by
--config-name), found next to the .plain file or in the working directory. Finding it in both is a usage error
(exit 2). The config file is read even when --template-dir is given, so a malformed one fails the run either way.
Other config keys are ignored.
Or from Python:
from plain_parser import plain_file_parser
module_name, plain_source_tree, required_modules = plain_file_parser("my_spec.plain", ["."])plain_source_tree is a dict keyed by section (definitions, implementation reqs,
test reqs, functional specs), each a list of {"markdown": ..., "linked_resources": [...]}
entries. plain_parser.plain_spec has helpers for walking functionalities
(get_frids, get_specifications_for_frid, collect_linked_resources).
uv venv --python 3.11 && source .venv/bin/activate
uv pip install -e ".[dev]"
pytest
black . --check && isort . --check-only && flake8 . && mypy srcMIT, see LICENSE.