pmmanifest
Generate PlayMolecule v2 app manifests — standard JSON Schema (inputSchema)
plus an RJSF uiSchema — directly from a typed Python function signature, and
preview the resulting GUI locally. The successor to func2argparse's
manifest-generation role (the argparse path is dropped; apps run via
inputs.json).
Why
One typed signature is the single source of truth: it drives the manifest
(what the GUI renders), runtime validation/coercion, and the Python API.
Standard JSON Schema means an off-the-shelf renderer (RJSF) handles nested
objects, arrays-of-objects, enums and oneOf — no bespoke widgets.
Authoring (signature-first)
Apps stay plain annotated functions — no BaseModel per function. Plain
pathlib.Path is auto-substituted with the path-role type, so most apps need
no rewrite. Presentation rides along in Annotated[T, UI(...)].
from pathlib import Path
from typing import Annotated, Literal
from pmmanifest import UI, func_to_manifest, build_app_manifest
def systembuilder(
outdir: Path,
structure: Annotated[Path | None, UI(widget="file")] = None,
forcefield: Annotated[Literal["GAFF2", "openff-2.3.0"], UI(group="Force field")] = "GAFF2",
):
"""SystemBuilder builds systems for MD simulation."""
entry = func_to_manifest(systembuilder, function="myapp.app.systembuilder")
manifest = build_app_manifest("systembuilder", [entry])
Preview the GUI
pmmanifest serve myapp.app:systembuilder # live RJSF form at http://127.0.0.1:8000
pmmanifest emit myapp.app:systembuilder # print the v2 manifest JSON
Docstring fallback (existing functions work unchanged)
Annotations are optional. If a parameter has no Field(description=...) / UI(...),
pmmanifest reads the function's numpydoc Parameters section (func2argparse style) for the
description, choices= (→ enum/dropdown), and gui_options= (→ groups, labels, hidden,
legacy columns). The annotation always wins when present. Labels follow the PlayMolecule
rule: the description's first sentence if ≤4 words, else a prettified field name.
def systembuilder(outdir: Path, forcefield: str = "GAFF2"):
"""SystemBuilder builds systems for MD simulation.
Parameters
----------
outdir : Path
Output directory to store results
forcefield : str, choices=("GAFF2", "openff-2.3.0"), gui_options={"group": "Force field"}
Force field. Used for non-canonical residue parameterization.
"""
...
# -> outdir labeled "Output directory" (+tooltip), forcefield a "Force field"-group dropdown.
Flexible path types
A path argument is always a string on the wire and may be a local path or a
remote URI (slpm://, app://, bck://). PMPath is a permissive tagged
string ({"type":"string","format":"path"}), never pathlib.Path (which would
corrupt slpm://x to slpm:/x). File-staging keys off format:"path".
Shared dialect contract
detect_dialect, iter_path_values, set_in are the v1/v2 coexistence helpers
intended for the execution backends to import (so the contract can't drift).
detect_dialect works on a full envelope or a bare function dict (autodiscovers
from keys: inputSchema ⇒ v2, params ⇒ v1).
Release files for acellera-pmmanifest 0.1.5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| acellera_pmmanifest-0.1.5.tar.gz | 22.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| acellera_pmmanifest-0.1.5-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 45.5 kB
Release files / acellera_pmmanifest-0.1.5.tar.gz
| Download URL | acellera_pmmanifest-0.1.5.tar.gz |
|---|---|
| Size | 22.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
9dc1b088d5471d3c2a961028a57ef544d4cbc73bd9d14e793ddd83bf5ff7c405
|
|
BLAKE2b-256 checksum How to use checksums |
444bf69dd25f6df485cc2600a893273aad11d91f39aa6f67899bf02459ced25e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / acellera_pmmanifest-0.1.5-py3-none-any.whl
| Download URL | acellera_pmmanifest-0.1.5-py3-none-any.whl |
|---|---|
| Size | 23.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
783f0784a7be90b452303728deaf4a7296e1b012cb8a54c4bb156944391dc563
|
|
BLAKE2b-256 checksum How to use checksums |
ecb5d8d2e205926668ccab1af5be52acfde52fc148d54ec0fe3ce1170d2fee42
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|