Skip to content

Python API

Everything the CLI does is also available programmatically.

Imports

from refbox.config      import load_config, iter_targets, RESOURCE_NAMES
from refbox.download    import download_targets
from refbox.build       import build_targets, publish_targets
from refbox.test        import test_targets
from refbox             import file_build as fb        # single-file builders
from refbox.ingest      import ingest_directory        # directory ingest
from refbox.report      import build_report            # Markdown status report
from refbox.sqlite_index import (                      # full RBrowser Index (.rba)
    build_sqlite_index, search, inspect, open_readonly, normalize)
from refbox.lite_index  import (                       # lite index (.rbi)
    build_lite_index, search as lite_search, open_readonly as lite_open, inspect as lite_inspect)

Registry pipeline

# Equivalent to: refbox pull --assembly GRCh38
build_targets(species=["Homo_sapiens"], assembly=["GRCh38"], auto_download=True)
test_targets(species=["Homo_sapiens"], assembly=["GRCh38"])
publish_targets(species=["Homo_sapiens"], assembly=["GRCh38"])

Single-file builders

from pathlib import Path
from refbox import file_build as fb

fb.build_fa(Path("genome.fa"))                                   # → genome.fa.gz + .fai + .gzi
fb.build_gxf(Path("annot.gtf"))                                  # → annot.sorted.gtf.gz + .tbi
fb.build_bed(Path("peaks.bed"), assembly="GRCh38")              # → sorted + tabix + bigBed
fb.build_rmsk(Path("rmsk.txt.gz"))                              # → repeats.sorted.{bed,gtf}.gz
fb.build_transcriptome(Path("genome.fa"), Path("annot.gtf"))   # → transcriptome.fa.gz

Build & query a full index (.rba)

from refbox.sqlite_index import build_sqlite_index, open_readonly, search

db = build_sqlite_index("gencode.v45.annotation.gtf.gz", "idx.rba",
                        source_name="GENCODE", genome="hg38", force=True)
con = open_readonly(db)
for hit in search(con, "TP53", limit=10):
    print(hit["matched_field"], hit["gene_name"], hit["transcript_id"])

build_sqlite_index signature:

build_sqlite_index(
    input_path, output=None, *,
    source_name="", species="", genome="", annotation_version="",
    synonyms=None,          # HGNC-style TSV path
    rnacentral=None,        # RNAcentral genome-coordinates GFF3 path
    fuzzy_scope="names",    # or "all"
    force=False, verbose=False,
) -> Path

Build & query a lite index (.rbi)

from refbox.lite_index import build_lite_index, open_readonly, search

db = build_lite_index("gencode.v45.annotation.gtf.gz", "idx.rbi",
                      source_name="GENCODE", genome="hg38",
                      enable_gram3=True, force=True)
con = open_readonly(db)
mode, results = search(con, "TP53", limit=10)   # NOTE: returns (mode, results)
for hit in results:
    print(hit["gene_name"], hit["chrom"], hit["start"], hit["end"])

build_lite_index signature:

build_lite_index(
    input_path, output=None, *,
    source_name="", species="", genome="", annotation_version="",
    enable_gram3=False, force=False, verbose=False,
) -> Path

Reference search implementation

The browser-side search should mirror the tiered ranking in refbox.sqlite_index.search() (for .rba, returns a list of hits) and refbox.lite_index.search() (for .rbi, returns a (mode, results) tuple) — these Python functions are the reference implementations.