/higlass-server

Server component for HiGlass that manages and serves tiled data

Primary LanguagePythonMIT LicenseMIT

HiGlass Server

The HiGlass Server supports HiGlass and HiPiler by providing APIs for accessing and uploading tiles generated by Clodius.

demo api DOI

Note: that the HiGlass Server itself only provides an API, and does not serve any HTML.

Installation

Prerequirements:

  • Python >=v3.6

Docker

The easiest way to run HiGlass with HiGlass Server is with Docker. More information is available at higlass-docker or check out the Dockerfile.

This project also includes a Dockerfile in the docker-context directory that can be used to run a locally checked out copy of higlass-server as follows:

docker build -t higlass-server -f docker-context/Dockerfile .
docker run -d --cap-add SYS_ADMIN --device /dev/fuse --security-opt apparmor:unconfined --name higlass-server higlass-server

Manually

To install HiGlass Server manually follow the steps below. Note we strongly recommend to create a virtual environment using Virtualenvwrapper for example. Skip step 2 if you don't work with virtual environments.

git clone https://github.com/higlass/higlass-server && cd higlass-server

Manually with virtualenvwrapper

mkvirtualenv -a $(pwd) -p $(which python3) higlass-server && workon higlass-server
pip install --upgrade -r ./requirements.txt
python manage.py migrate
python manage.py runserver

Manually with conda

conda env create -f environment.yml
conda activate higlass-server
python manage.py migrate
python manage.py runserver

To enable the register_url api endpoint, HiGlass depends on a project called httpfs to cache external url files. Tests depend on this process running. Set it up as follows:

pip install simple-httpfs

mkdir -p media/http
mkdir -p media/https
simple-httpfs media/http
simple-httpfs media/https

Or simply use ./unit_tests.sh.


Uploading Files

Although there is an API endpoint for uploading files, but it is more direct to use a manage.py script:

COOLER=dixon2012-h1hesc-hindiii-allreps-filtered.1000kb.multires.cool
HITILE=wgEncodeCaltechRnaSeqHuvecR1x75dTh1014IlnaPlusSignalRep2.hitile

wget -P data/ https://s3.amazonaws.com/pkerp/public/$COOLER
wget -P data/ https://s3.amazonaws.com/pkerp/public/$HITILE

python manage.py ingest_tileset --filename data/$COOLER --filetype cooler --datatype matrix --uid cooler-demo
python manage.py ingest_tileset --filename data/$HITILE --filetype hitile --datatype vector --uid hitile-demo

We can now use the API to get information about a tileset, or to get the tile data itself:

curl http://localhost:8000/api/v1/tileset_info/?d=hitile-demo
curl http://localhost:8000/api/v1/tiles/?d=hitile-demo.0.0.0

Development

Start the server:

python manage.py runserver localhost:8001
// or
npm start

Test the server:

./test.sh
// or
npm test

Bump version of server:

bumpversion patch

Update source code:

./update.sh

Troubleshooting

pybbi installation fails on macOS: Check out nvictus/pybbi#2

macOS 10.15 dependencies

  • brew install hdf5
  • brew install libpng
  • brew install jpeg
  • FUSE for Mac

License

The code in this repository is provided under the MIT License.