Python client for refget
Project description
Refget
User-facing documentation is hosted at refgenie.org/refget.
This repository includes:
/refget: TherefgetPython package, which provides a Python interface to both remote and local use of refget standards. It has clients and functions for both refget sequences and refget sequence collections (seqcol)./seqcolapi: Sequence collections API software, a FastAPI wrapper built on top of therefgetpackage. It provides a bare-bones Sequence Collections API service./deployment: Server configurations for demo instances and public deployed instances. There are also github workflows (in.github/workflows) that deploy the demo server instance from this repository./test_fastaand/test_api: Dummy data and a compliance test, to test external implementations of the Refget Sequence Collections API./frontend: a React seqcolapi front-end.
Testing
Local unit tests of refget package
pytestto testrefgetpackage, local unit tests
Development and deployment: Backend
Easy-peasy way
In a moment I'll show you how to do these steps individually, but if you're in a hurry, the easy way get a development API running for testing is to just use my very simple shell script like this (no data persistence, just loads demo data):
bash deployment/demo_up.sh
This will:
- populate env vars
- launch postgres container with docker
- run the refget service with uvicorn
- load up the demo data
- block the terminal until you press Ctrl+C, which will shut down all services.
Step-by-step process
Alternatively, if you want to run each step separately to see what's really going on, start here.
Setting up a database connection
First configure a database connection through environment variables. Choose one of these:
source deployment/local_demo/local_demo.env # local demo (see below to create the database using docker)
source deployment/seqcolapi.databio.org/production.env # connect to production database
If you're using the local_demo, then use docker to launch a local postgres database service like this:
docker run --rm --name refget-postgres -p 127.0.0.1:5432:5432 \
-e POSTGRES_PASSWORD \
-e POSTGRES_USER \
-e POSTGRES_DB \
-e POSTGRES_HOST \
postgres:17.0
If you need to load test data into your server, then you have to install gtars (with pip install gtars), a Python package for computing GA4GH digests. You can then load test data like this:
python data_loaders/load_demo_seqcols.py
or:
refget add-fasta -p test_fasta/test_fasta_metadata.csv -r test_fasta
Running the seqcolapi API backend
Run the demo seqcolapi service like this:
uvicorn seqcolapi.main:app --reload --port 8100
Running with docker
To build the docker file, first build the image from the root of this repository:
docker build -f deployment/dockerhub/Dockerfile -t databio/seqcolapi seqcolapi
To run in container:
source deployment/seqcolapi.databio.org/production.env
docker run --rm -p 8000:80 --name seqcolapi \
--env "POSTGRES_USER" \
--env "POSTGRES_DB" \
--env "POSTGRES_PASSWORD" \
--env "POSTGRES_HOST" \
databio/seqcolapi
Deploying container to dockerhub
Use the github action in this repo which deploys on release, or through manual dispatch.
Running the frontend
Once you have a backend running, you can run a frontend to interact with it
Local client with local server
cd frontend
npm i
VITE_API_BASE="http://localhost:8100" npm run dev
Local client with production server
cd frontend
npm i
VITE_API_BASE="https://seqcolapi.databio.org" npm run dev
Deploy to AWS ECS
- Test locally first, using 1. native test; 2. local docker test.
Deploying
- Ensure the refget package master branch is as you want it.
- Deploy the updated secqolapi app to dockerhub (using manual dispatch, or deploy on github release).
- Finally, deploy the instance with manual dispatch using the included GitHub action.
Developer notes
Models
The objects and attributes are represented as SQLModel objects in refget/models.py. To add a new attribute:
- create a new model. This will create a table for that model, etc.
- change the function that creates the objects, to populate the new attribute.
Example of loading reference fasta datasets:
refget add-fasta -p ref_fasta.csv -r $BRICKYARD/datasets_downloaded/pangenome_fasta/reference_fasta
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 refget-0.8.2.tar.gz.
File metadata
- Download URL: refget-0.8.2.tar.gz
- Upload date:
- Size: 27.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6612ece204a278d21b0109b07c30bd07647ca551a232f79fd0de127db3e2002f
|
|
| MD5 |
118a7996c63af7ceadf29ddb78e5b469
|
|
| BLAKE2b-256 |
c6d80a67da9435ca85b2e417e66a0f0f74757916d3956b14180aefea3f5c5ec9
|
Provenance
The following attestation bundles were made for refget-0.8.2.tar.gz:
Publisher:
python-publish.yml on refgenie/refget
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
refget-0.8.2.tar.gz -
Subject digest:
6612ece204a278d21b0109b07c30bd07647ca551a232f79fd0de127db3e2002f - Sigstore transparency entry: 188687123
- Sigstore integration time:
-
Permalink:
refgenie/refget@28f5e43919c56aaf4c8588bb172169762d58557b -
Branch / Tag:
refs/tags/v0.8.2 - Owner: https://github.com/refgenie
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@28f5e43919c56aaf4c8588bb172169762d58557b -
Trigger Event:
release
-
Statement type:
File details
Details for the file refget-0.8.2-py3-none-any.whl.
File metadata
- Download URL: refget-0.8.2-py3-none-any.whl
- Upload date:
- Size: 29.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a747a6835929e3fa77402d3effaef1f7c7645e9d26151818e97b50827643184c
|
|
| MD5 |
9e6dff677f688d7d22847ec80e37d6b1
|
|
| BLAKE2b-256 |
2849c53a00820fa7cb95212ea4d8dd948a72d5d1a91c1c8accefb087b5ec7b6d
|
Provenance
The following attestation bundles were made for refget-0.8.2-py3-none-any.whl:
Publisher:
python-publish.yml on refgenie/refget
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
refget-0.8.2-py3-none-any.whl -
Subject digest:
a747a6835929e3fa77402d3effaef1f7c7645e9d26151818e97b50827643184c - Sigstore transparency entry: 188687129
- Sigstore integration time:
-
Permalink:
refgenie/refget@28f5e43919c56aaf4c8588bb172169762d58557b -
Branch / Tag:
refs/tags/v0.8.2 - Owner: https://github.com/refgenie
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@28f5e43919c56aaf4c8588bb172169762d58557b -
Trigger Event:
release
-
Statement type: