Skip to main content

biodata-cache

License Code Style semantic-release: angular Interrogate Coverage Python

biodata-cache is a set of one-line functions that handle the entire process of caching and retrieving data (and metadata) from AIND data assets.

In the background, the cache repackages data/metadata into dataframes and stores them on S3 in versioned folders (data-asset-cache/bdc-v{version}/), or in memory for testing. Each release writes to its own versioned folder, so older versions of the website remain accessible while new versions are deployed. A top-level data-asset-cache/cache_versions.json index lists all available version folders.

Important: this package is not at 1.0. It is changing fast and breaking changes are still occurring, although rarely. To reduce the chance of impact on your code the cache tables are versioned. This does mean that if you want the latest version of the tables you need to keep biodata-cache up-to-date, but it also means your code won't immediately break when I change the way the tables work.

Installation

Note that you must set the backend to S3 or biodata-cache will automatically re-cache the tables locally in memory. This can take a LONG time.

pip install biodata-cache
export BIODATA_CACHE_BACKEND='S3'

Usage

Set backend

export BIODATA_CACHE_BACKEND='S3'

Options are 'S3', 'MEMORY'.

Fetch data

from biodata_cache import unique_project_names

project_names = unique_project_names()

Cache tables

Use get_cache_registry() to see all available cache tables and their metadata (descriptions, S3 paths, columns, etc.) for the installed version:

from biodata_cache import get_cache_registry

registry = get_cache_registry()

Use get_cache_versions() to list all available version folders across all deployed releases:

from biodata_cache import get_cache_versions

versions = get_cache_versions()

The per-version cache_registry.json lives at s3://allen-data-views/data-asset-cache/bdc-v{version}/cache_registry.json. The top-level index s3://allen-data-views/data-asset-cache/cache_versions.json lists all available version folders as a JSON array.

Hive-partitioned tables use key=value directory segments, enabling DuckDB queries like:

import duckdb
duckdb.query("""
    SELECT * FROM read_parquet(
        's3://allen-data-views/data-asset-cache/bdc-v0.27.3/qc/data.pqt',
        hive_partitioning=true,
        union_by_name=true
    )
""")

The raw_to_derived function is not a table stored in S3, instead it is used by passing an asset_name (or list of asset names) and a modality. The function returns the latest derived asset matching the requested pattern.

Cells across every asset

Three tables answer "what do we know about every single cell in every data asset?", joined on a stable cell_key:

Table Grain Partitioned by Holds
cell_index one row per cell — Identity and provenance: asset, subject, acquisition, modality, probe/plane, source unit/ROI id
cell_properties one row per cell asset_name CCF location, mean rate, QC, cell type, and other measurements — wide and deliberately sparse
cell_genes one row per genotyped cell subject_id Transcriptomic cluster labels and gene counts
import duckdb
from biodata_cache import cell_index, cell_properties

cells = cell_index()                                   # every cell, one small fetch
props = cell_properties(asset_name=cells["asset_name"].iloc[0])

Most cells have only a handful of properties and NULL for the rest; that is the expected shape. A sync run skips cell_properties partitions that already exist, so pass force_rewrite=True if you need existing partitions rebuilt. cell_key is a hash of (asset_name, container, cell_ref), so it is stable across cache rebuilds and safe to persist. cell_ref is the source NWB's own unit/ROI identifier, so any row can be traced back to its source.

Custom cache table

The custom function allows you to store and retrieve your own user-defined DataFrames in the cache by name. This requires write authentication to the active backend.

from biodata_cache import custom
import pandas as pd

df = pd.DataFrame({"col": [1, 2, 3]})
custom("my_data", df)

retrieved_df = custom("my_data")

Update all cache tables

The cache is rebuilt on Code Ocean by a set of per-table sync jobs wired into a Nextflow pipeline (asset_basics first, then the rest in parallel, then cell-by-everything). Each job is selected by the BIODATA_CACHE_SYNC_JOB environment variable and writes its own registry fragment as it completes. See PIPELINE.md for the job list, pipeline layout, and the version-bump/re-run procedure.

To run a single job (as a capsule does):

from biodata_cache.sync import run_sync_job
run_sync_job()  # reads BIODATA_CACHE_SYNC_JOB, or pass e.g. run_sync_job("qc")

To rebuild everything in one local process (not used by the pipeline):

from biodata_cache.sync import update_all_tables
update_all_tables()

Release files for biodata-cache 0.42.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for biodata-cache 0.42.0
File Size Uploaded
biodata_cache-0.42.0.tar.gz 227.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for biodata-cache 0.42.0
File Interpreter ABI Platform
biodata_cache-0.42.0-py3-none-any.whl Python 3 none any Details

Total release size: 476.2 kB

Release files / biodata_cache-0.42.0.tar.gz

Download URL biodata_cache-0.42.0.tar.gz
Size 227.7 kB
Tags Source
SHA-256 checksum
How to use checksums
56e8c740338bd08546f1b6b89e06612e9d9458d2c7df726627ccb22bdbf3ccb9
BLAKE2b-256 checksum
How to use checksums
d6796520f38c223c79e6ae27275f5ad97430a5cd419586edeb5cb7f2b9556781
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / biodata_cache-0.42.0-py3-none-any.whl

Download URL biodata_cache-0.42.0-py3-none-any.whl
Size 248.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
eca188322625f7dea7962f6293d1bab46f26cabc92797e99d99d86ee1e54e9ce
BLAKE2b-256 checksum
How to use checksums
ae97d9a6573c41e165806e86a05ee524a405beb09806710fc1b9a018ecd8fef7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release history Release notifications | RSS feed

0.42.9

2 release files

0.42.8

2 release files

0.42.7

2 release files

0.42.6

2 release files

0.42.5

2 release files

0.42.4

2 release files

0.42.3

2 release files

This release

0.42.0 This release

2 release files

0.41.0

2 release files

0.40.8

2 release files

0.40.7

2 release files

0.40.6

2 release files

0.40.5

2 release files

0.40.4

2 release files

0.40.3

2 release files

0.40.2

2 release files

0.40.1

2 release files

0.40.0

2 release files

0.39.9

2 release files

0.39.8

2 release files

0.39.7

2 release files

0.39.6

2 release files

0.39.5

2 release files

0.39.4

2 release files

0.39.3

2 release files

0.39.2

2 release files

0.39.1

2 release files

0.39.0

2 release files

0.38.1

2 release files

0.37.9

2 release files

0.37.8

2 release files

0.37.7

2 release files

0.37.6

2 release files

0.37.5

2 release files

0.37.4

2 release files

0.37.3

2 release files

0.37.2

2 release files

0.37.1

2 release files

0.37.0

2 release files

0.36.0

2 release files

0.35.0

2 release files

0.34.3

2 release files

0.34.2

2 release files

0.34.1

2 release files

0.34.0

2 release files

0.33.5

2 release files

0.33.4

2 release files

0.33.3

2 release files

0.33.2

2 release files

0.33.1

2 release files

0.33.0

2 release files

0.32.2

2 release files

0.32.1

2 release files

0.32.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page