refua-schema
refua-schema is a portfolio-centric object model for the Refua ecosystem.
It starts with Portfolio, nests Disease, then Rationale, then Drug, and
reuses canonical scientific and workflow objects from sibling Refua packages
instead of redefining parallel versions.
What it provides
- A top-level object hierarchy for discovery portfolios:
Portfolio -> Disease -> Rationale -> Drug. - Reuse of core
refuaentities such asProtein,SmallMolecule,Binder,Complex,DNA, andRNA. - Reuse of downstream workflow objects from:
refua-clinicalforSimulationConfigandTrialSimulationResultrefua-preclinicalforPreclinicalStudySpecrefua-regulatoryfor bundle and provenance records
- Domain metadata objects that fit drug discovery naturally:
Evidence,Biomarker,Assay,Modality,AdmetProfile, andClinicalTrial. - JSON/YAML round-tripping for portfolios that preserve nested Refua object types.
Install
cd refua-schema
pip install -e .
With development tooling:
poetry install -E dev
With optional SQLModel persistence support:
poetry install -E sqlmodel
With both:
poetry install -E dev -E sqlmodel
Quickstart
from pathlib import Path
from refua import Complex, Protein, SmallMolecule
from refua_clinical.models import default_simulation_config
from refua_preclinical.models import default_study_spec
from refua_schema import (
AdmetProfile,
Assay,
Disease,
Drug,
Modality,
Portfolio,
Rationale,
)
egfr = Protein(sequence="LEEKKGNYVVTDHAFV...", ids="A")
lead = SmallMolecule.from_smiles("CCOc1ccc(NC(=O)N2CCN(C)CC2)cc1", name="lead-1")
binding_model = Complex([egfr, lead], name="egfr-lead-1")
trial = default_simulation_config()
trial.trial_id = "egfr-phase2"
trial.indication = "Non-small cell lung cancer"
tox = default_study_spec()
tox.study_id = "egfr-28d-tox"
tox.indication = "Oncology"
portfolio = Portfolio(portfolio_id="solid-tumors", name="Solid Tumor Portfolio")
portfolio.add_disease(
Disease(
disease_id="nsclc",
name="Non-small cell lung cancer",
rationales=[
Rationale(
rationale_id="egfr-driver",
title="EGFR oncogenic signaling",
hypothesis="EGFR-driven tumors remain vulnerable to selective kinase blockade.",
proteins=[egfr],
refua_objects=[binding_model],
drugs=[
Drug(
drug_id="lead-1",
name="Lead 1",
modality=Modality(name="oral small molecule", kind="small_molecule", route="oral"),
mechanism_of_action="Selective EGFR inhibition",
structures=[lead],
admet_profiles=[
AdmetProfile(
profile_id="lead-1-admet",
source="txgemma",
smiles="CCOc1ccc(NC(=O)N2CCN(C)CC2)cc1",
summary_scores={"admet_score": 0.72, "safety_score": 0.68},
endpoint_scores={"score_hERG": 0.61, "score_DILI": 0.70},
)
],
assays=[
Assay(
assay_id="egfr-biochem",
name="EGFR biochemical potency",
assay_type="biochemical",
endpoint="IC50",
result_value=14.2,
unit="nM",
)
],
preclinical_studies=[tox],
clinical_trials=[],
)
],
)
],
)
)
portfolio.save(Path("artifacts/portfolio.yaml"))
round_tripped = Portfolio.load(Path("artifacts/portfolio.yaml"))
assert round_tripped.diseases[0].rationales[0].drugs[0].name == "Lead 1"
SQLModel persistence
refua-schema includes an optional SQLModel adapter in
refua_schema.sqlmodel_support. It is intentionally thin:
- The canonical source of truth remains the
PortfolioPydantic model. - SQL storage keeps one full serialized portfolio payload.
- Lightweight index tables for diseases, rationales, and drugs make the hierarchy queryable without reproducing the entire schema as ORM columns.
Example:
from pathlib import Path
from refua_schema import Disease, Drug, Portfolio, Rationale
from refua_schema.sqlmodel_support import PortfolioStore
portfolio = Portfolio(
portfolio_id="pf-sql",
name="SQL Portfolio",
diseases=[
Disease(
disease_id="dis-sql",
name="SQL Disease",
rationales=[
Rationale(
rationale_id="rat-sql",
title="SQL Rationale",
hypothesis="Persist canonical portfolio payloads with a thin relational index.",
drugs=[
Drug.from_smiles(
drug_id="drug-sql",
name="SQL Drug",
smiles="CCO",
)
],
)
],
)
],
)
store = PortfolioStore.sqlite(Path("artifacts/portfolio.sqlite"))
store.create_schema()
store.save(portfolio)
reloaded = store.load("pf-sql")
assert reloaded.to_dict() == portfolio.to_dict()
assert len(store.list_drugs(portfolio_id="pf-sql")) == 1
Validation
- All core schema models use Pydantic validation with field descriptions.
- Assignment validation stays enabled after object creation.
- The package round-trips JSON/YAML payloads while preserving canonical nested Refua object types where supported by the serializer.
Release checks
Typical first-release verification flow:
poetry check
poetry install -E dev -E sqlmodel
poetry run ruff check src tests
poetry run pytest
poetry build
Design notes
Protein,SmallMolecule, and other structural entities stay inrefua.- Clinical simulation config/results stay in
refua-clinical. - Preclinical study specs stay in
refua-preclinical. - Audit and provenance records stay in
refua-regulatory. refua-schemaowns the portfolio-level composition layer that links them together.- Optional SQL persistence stays in
refua_schema.sqlmodel_supportso the core schema does not take a hard dependency on SQLModel.
Metadata
Release files for refua-schema 0.7.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| refua_schema-0.7.3.tar.gz | 26.3 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| refua_schema-0.7.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 48.5 kB
Release files / refua_schema-0.7.3.tar.gz
| Download URL | refua_schema-0.7.3.tar.gz |
|---|---|
| Size | 26.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
139817beda68c741fa562e0c3ec4caf3fe2c92beb89adfc56671e9a5e8fd2d89
|
|
BLAKE2b-256 checksum How to use checksums |
0867724e85db1c3bb8ef9c3a88a9d9def99bd26d5a7d3229009c657f567c08bb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/2.4.0 CPython/3.14.4 Darwin/25.4.0
|
Release files / refua_schema-0.7.3-py3-none-any.whl
| Download URL | refua_schema-0.7.3-py3-none-any.whl |
|---|---|
| Size | 22.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
7a8e5b8bc3449424de29bcbd352e3cdfb47bd7fea2dbee6bbca72c695e584dba
|
|
BLAKE2b-256 checksum How to use checksums |
292548370e698e54a370c4f43fe24f75865be6e7964191270571ef6fbf78c739
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/2.4.0 CPython/3.14.4 Darwin/25.4.0
|
Security for refua-schema 0.7.3
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.