Database for OpenCloning, a web application to generate molecular cloning strategies in json format, and share them with others.
Project description
opencloning-db
opencloning-db is the database/API companion package for the OpenCloning backend. It provides the app and local data workflows used for OpenCloning database features.
Run locally
From the repository root:
# Install or update workspace dependencies
uv sync
# If you are using mac, you may have to stop any local Postgres instances running on port 5432
brew services stop postgresql
# Start local Postgres with dev/test/e2e databases
docker compose -f docker/docker-compose.postgres.yml up -d postgres
# Load required local runtime config
source .env.dev
# Apply schema migrations (creates tables on an empty database)
uv run opencloning-cli db migrate
# Optional: load the deterministic demo/test baseline
OPENCLONING_TESTING=1 uv run opencloning-cli db seed
# Run both the cloning and the database API - this what the OpenCloningDB frontend expects
uv run uvicorn opencloning_db.combined:app --reload --reload-exclude='.venv'
# Run the opencloning-db API (only database, not cloning. This is not used when running with the frontend)
uv run uvicorn opencloning_db.api:app --reload --reload-exclude='.venv'
That will serve the cloning API at http://127.0.0.1:8000/cloning and the database API at http://127.0.0.1:8001/db. That's what the OpenCloningDB frontend expects.
When the cloning app is served through opencloning_db.combined, the entire /cloning mount is protected by the same bearer-token authentication used by the db API.
Database migrations (Alembic)
Schema changes are defined in opencloning_db.models and applied with Alembic in this package (alembic/, alembic.ini). Edit the models first, generate or adjust the revision under alembic/versions/, then run migrations against each database.
Alembic reads the database URL from OPENCLONING_DB_URL (same as the app; load .env.dev for local work). Revision history is stored in the database table alembic_version, not in git.
From the repository root, pass the config file explicitly (or cd packages/opencloning-db and omit -c):
ALEMBIC_CFG=packages/opencloning-db/alembic.ini
# Use -c "$ALEMBIC_CFG" (quoted). Do not put -c inside the variable: zsh does not
# split $ALEMBIC on spaces, so `ALEMBIC="-c …"; alembic $ALEMBIC` breaks.
Autogenerate a migration
With Postgres running and .env.dev loaded:
source .env.dev
ALEMBIC_CFG=packages/opencloning-db/alembic.ini
# Optional: see which revision the database is at
uv run alembic -c "$ALEMBIC_CFG" current
# 1. Change src/opencloning_db/models.py first (desired end state).
# 2. Generate a revision by diffing models against the live database:
uv run alembic -c "$ALEMBIC_CFG" revision --autogenerate -m "short description of the change"
# 3. Open the new file under packages/opencloning-db/alembic/versions/ and review it.
# Autogenerate can miss or mis-handle partial indexes, renames, and data backfills.
The database you point at must reflect the previous migration state (run alembic upgrade head first, or use a fresh DB). If the schema already matches your models but alembic_version is empty, stamp instead of upgrading (see below).
Run migrations
source .env.dev
ALEMBIC_CFG=packages/opencloning-db/alembic.ini
# Apply all pending revisions (CLI wrapper or Alembic directly)
uv run opencloning-cli db migrate
# uv run alembic -c "$ALEMBIC_CFG" upgrade head
# Confirm
uv run alembic -c "$ALEMBIC_CFG" current
To migrate a different database (for example the test DB), set OPENCLONING_DB_URL to that database before running Alembic.
Schema already up to date? If the live database already has the objects a migration would add (for example after a manual change or an older deploy), upgrade may fail with “already exists”. Mark the database as migrated without running SQL:
uv run alembic -c "$ALEMBIC_CFG" stamp head
Use stamp only when you are sure the live schema matches the migration chain at head.
Useful commands
| Command | Purpose |
|---|---|
uv run alembic -c "$ALEMBIC_CFG" history |
List revisions |
uv run alembic -c "$ALEMBIC_CFG" downgrade -1 |
Revert the last revision |
uv run alembic -c "$ALEMBIC_CFG" upgrade head --sql |
Print SQL without executing (offline preview) |
Running tests locally
From the repository root:
# Install or update workspace dependencies
uv sync
# Run the tests
uv run pytest packages/opencloning-db/tests -v -ks
Frontend testing
Frontend testing using the database requires reseeding after tests that modify the database. You can do this by calling the /__test/reset-db endpoint with the X-Test-Reset-Token header set to RESET-TOKEN. That endpoint is only available if the OPENCLONING_TESTING environment variable is set to 1, and it delegates to the guarded opencloning-cli db seed command.
Building and running the Docker image
The Dockerfile is shared with the cloning app, and the build arg APP_TARGET determines which app to build. So you can build the image by running:
docker build -f docker/opencloning.Dockerfile --build-arg APP_TARGET=db -t manulera/opencloning-db-backend .
# or
docker buildx build -f docker/opencloning.Dockerfile --build-arg APP_TARGET=db -t manulera/opencloning-db-backend:prod --platform linux/amd64,linux/arm64 .
Then run it for development:
# Run the containers (Postgres + db API)
docker compose \
-f docker/docker-compose.postgres.yml \
-f docker/docker-compose.opencloning-db.yml \
up -d
Database backup worker
To create backups, you can use this dockerfile for a worker.
To build it:
docker build -f docker/postgres-aws-cli.Dockerfile -t manulera/postgres-aws-cli .
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file opencloning_db-1.9.2.tar.gz.
File metadata
- Download URL: opencloning_db-1.9.2.tar.gz
- Upload date:
- Size: 269.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2cac983ae0d957d043e2f85fb97ec52703d681e15534df71e0c05e0132075ffb
|
|
| MD5 |
54c234d0cbc7d8a85004baf3e0621820
|
|
| BLAKE2b-256 |
de8ac11ae0625d4d842d2d5e20413567a1d84230e74b9cd1bc724e0617c3e101
|
Provenance
The following attestation bundles were made for opencloning_db-1.9.2.tar.gz:
Publisher:
release-please.yml on OpenCloning/OpenCloning_backend
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
opencloning_db-1.9.2.tar.gz -
Subject digest:
2cac983ae0d957d043e2f85fb97ec52703d681e15534df71e0c05e0132075ffb - Sigstore transparency entry: 1768040185
- Sigstore integration time:
-
Permalink:
OpenCloning/OpenCloning_backend@146f5773d42afde3dfd14f28cc4dd5a66c5e26f1 -
Branch / Tag:
refs/heads/master - Owner: https://github.com/OpenCloning
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release-please.yml@146f5773d42afde3dfd14f28cc4dd5a66c5e26f1 -
Trigger Event:
push
-
Statement type:
File details
Details for the file opencloning_db-1.9.2-py3-none-any.whl.
File metadata
- Download URL: opencloning_db-1.9.2-py3-none-any.whl
- Upload date:
- Size: 247.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
31b2ffdd4be345d07d5d15da923bf02a3f448a6110dda1bdbad0a129b8aeda98
|
|
| MD5 |
24508b65c13693587b2cd0abafb1d26a
|
|
| BLAKE2b-256 |
f4e9fd38bacef1dcd9355c61f3202edac43a472b138a81a5d657416e91c87a71
|
Provenance
The following attestation bundles were made for opencloning_db-1.9.2-py3-none-any.whl:
Publisher:
release-please.yml on OpenCloning/OpenCloning_backend
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
opencloning_db-1.9.2-py3-none-any.whl -
Subject digest:
31b2ffdd4be345d07d5d15da923bf02a3f448a6110dda1bdbad0a129b8aeda98 - Sigstore transparency entry: 1768040318
- Sigstore integration time:
-
Permalink:
OpenCloning/OpenCloning_backend@146f5773d42afde3dfd14f28cc4dd5a66c5e26f1 -
Branch / Tag:
refs/heads/master - Owner: https://github.com/OpenCloning
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release-please.yml@146f5773d42afde3dfd14f28cc4dd5a66c5e26f1 -
Trigger Event:
push
-
Statement type: