Skip to content

Commit

Permalink
Resolves #3 adding gene expr correlation with str length in crc suppo…
Browse files Browse the repository at this point in the history
…rt + docker-compose + alembic migrations (optional)
  • Loading branch information
slmjy committed Sep 30, 2023
1 parent 57984d7 commit 2f1d819
Show file tree
Hide file tree
Showing 27 changed files with 16,539 additions and 38 deletions.
29 changes: 29 additions & 0 deletions .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
// For format details, see https://aka.ms/devcontainer.json. For config options, see the
// README at: https:/devcontainers/templates/tree/main/src/docker-existing-dockerfile
{
"name": "Existing Dockerfile",
"build": {
// Sets the run context to one level up instead of the .devcontainer folder.
"context": "..",
// Update the 'dockerFile' property if you aren't using the standard 'Dockerfile' filename.
"dockerfile": "../Dockerfile"
},
"features": {
"ghcr.io/devcontainers/features/python:1": {}
}

// Features to add to the dev container. More info: https://containers.dev/features.
// "features": {},

// Use 'forwardPorts' to make a list of ports inside the container available locally.
// "forwardPorts": [],

// Uncomment the next line to run commands after the container is created.
// "postCreateCommand": "cat /etc/os-release",

// Configure tool-specific properties.
// "customizations": {},

// Uncomment to connect as an existing user other than the container default. More info: https://aka.ms/dev-containers-non-root.
// "remoteUser": "devcontainer"
}
28 changes: 28 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
**/__pycache__
**/.venv
**/.classpath
**/.dockerignore
**/.env
**/.git
**/.gitignore
**/.project
**/.settings
**/.toolstarget
**/.vs
**/.vscode
**/*.*proj.user
**/*.dbmdl
**/*.jfm
**/bin
**/charts
**/docker-compose*
**/compose*
**/Dockerfile*
**/node_modules
**/npm-debug.log
**/obj
**/secrets.dev.yaml
**/values.dev.yaml
**/db/
LICENSE
README.md
7 changes: 7 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Rename this file to .env and docker compose wil automatically use envornment variables fro it
DATABASE_URL=postgresql://webstr:webstr@webstr_db:5432/webstr
# DATABASE_URL=sqlite:///db/debug.sqlite
PYTHONPATH="./"
WEBSTR_DATABASE_DATA=True
WEBSTR_DEVELOPMENT=False
WEBSTR_SOURCE_MOUNT_PATH=/temp/src #/usr/src/strs
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,8 @@

strAPI/local_queries.ipynb
data/repeats
db/docker_data/
.venv/
db/debug.db

*/migrations/versions0/*
46 changes: 46 additions & 0 deletions .vscode/launch.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
{
"configurations": [
{
"name": "Python: main",
"type": "python",
"request": "launch",
"program": "strAPI/main.py",
"cwd": "${workspaceFolder}",
"console": "integratedTerminal",
"justMyCode": true,
"env": {
// "PYTHONPATH": "${workspaceFolder}/strAPI/"
}
},
{
"name": "Docker: Python - Fastapi",
"type": "docker",
"request": "launch",
"preLaunchTask": "docker-run: debug",
"python": {
"pathMappings": [
{
"localRoot": "${workspaceFolder}",
"remoteRoot": "/usr/src/strs"
}
],
"projectType": "fastapi"
},
},
{
"name": "Python: Remote Attach 5000",
"type": "python",
"request": "attach",
"connect": {
"host": "0.0.0.0",
"port": 5000
},
"pathMappings": [
{
"localRoot": "${workspaceFolder}",
"remoteRoot": "/usr/src/app"
}
]
}
]
}
43 changes: 43 additions & 0 deletions .vscode/tasks.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
{
"version": "2.0.0",
"tasks": [
{
"type": "docker-build",
"label": "docker-build",
"platform": "python",
"dockerBuild": {
"tag": "webstrapi:latest",
"dockerfile": "${workspaceFolder}/Dockerfile",
"context": "${workspaceFolder}",
"pull": true,
}
},
{
"type": "docker-run",
"label": "docker-run: debug",
"dependsOn": [
"docker-build"
],
"dockerRun": {
"env": {
"DATABASE_URL": "sqlite:///db/debug.db",
"WEBSTR_DATABAS_UPGRADE": "True"
},
"mounts": [
"source=${workspaceFolder},target=/app,type=bind,consistency=cached"
],
},
"python": {
"args": [
"strAPI.main:app",
"--host",
"0.0.0.0",
"--port",
"5000",
"--reload"
],
"module": "uvicorn",
}
}
]
}
25 changes: 20 additions & 5 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,18 +1,33 @@
FROM python:3.8-slim-buster
FROM python:3.8-slim-buster as base
LABEL maintainer="merenlin -- follow me on medium https://medium.com/@merenlin"

RUN apt-get update && apt-get install -y python3-dev build-essential
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1

RUN mkdir -p /usr/src/strs
WORKDIR /usr/src/strs

COPY requirements.txt .
RUN pip3 install -r requirements.txt

RUN apt-get update && \
apt-get install -y gcc python3-dev build-essential && \
python -m pip install -r requirements.txt --no-cache-dir && \
apt-get remove -y gcc python3-dev build-essential && \
apt-get clean && rm -rf /var/lib/apt/lists/*

ENV DATABASE_URL=sqlite:///db/debug.db

FROM base as prod
LABEL maintainer="merenlin -- follow me on medium https://medium.com/@merenlin"

RUN adduser -u 1000 --disabled-password --gecos "" appuser && chown -R appuser /usr/src/strs
USER appuser

COPY . .

EXPOSE 5000
ARG PORT=5000
EXPOSE $PORT

CMD uvicorn strAPI.main:app --host=0.0.0.0 --port=${PORT:-5000}
CMD bash entrypoint.sh


10 changes: 10 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -76,3 +76,13 @@ Explore "database_setup" directory for different utilities to import data into t
* If you would like **to import a new reference panel** we recommend making a csv corresponding to the repeats table structure and importing it directly to SQL to save time. Alternatively see ` insert_repeats.py ` and
` import_data_ensembltrs.py ` utilities that we made for repeats data coming in different formats. Feel free to contact us for more details if you would like to make your own reference STR panel.



## DOCKER COMPOSE

### How to run a debug container with database (for testing of migrations for example)

```
docker compose up -d webstr_debug
docker exec -it webstr_debug bash
```
110 changes: 110 additions & 0 deletions alembic.ini
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
# A generic, single database configuration.

[alembic]
# path to migration scripts
script_location = database_setup/migrations

# template used to generate migration file names; The default value is %%(rev)s_%%(slug)s
# Uncomment the line below if you want the files to be prepended with date and time
# see https://alembic.sqlalchemy.org/en/latest/tutorial.html#editing-the-ini-file
# for all available tokens
file_template = %%(year)d_%%(month).2d_%%(day).2d_%%(hour).2d%%(minute).2d-%%(rev)s_%%(slug)s

# sys.path path, will be prepended to sys.path if present.
# defaults to the current working directory.
prepend_sys_path = .

# timezone to use when rendering the date within the migration file
# as well as the filename.
# If specified, requires the python-dateutil library that can be
# installed by adding `alembic[tz]` to the pip requirements
# string value is passed to dateutil.tz.gettz()
# leave blank for localtime
# timezone =

# max length of characters to apply to the
# "slug" field
# truncate_slug_length = 40

# set to 'true' to run the environment during
# the 'revision' command, regardless of autogenerate
# revision_environment = false

# set to 'true' to allow .pyc and .pyo files without
# a source .py file to be detected as revisions in the
# versions/ directory
# sourceless = false

# version location specification; This defaults
# to migrations/versions. When using multiple version
# directories, initial revisions must be specified with --version-path.
# The path separator used here should be the separator specified by "version_path_separator" below.
# version_locations = %(here)s/bar:%(here)s/bat:migrations/versions

# version path separator; As mentioned above, this is the character used to split
# version_locations. The default within new alembic.ini files is "os", which uses os.pathsep.
# If this key is omitted entirely, it falls back to the legacy behavior of splitting on spaces and/or commas.
# Valid values for version_path_separator are:
#
# version_path_separator = :
# version_path_separator = ;
# version_path_separator = space
version_path_separator = os # Use os.pathsep. Default configuration used for new projects.

# set to 'true' to search source files recursively
# in each "version_locations" directory
# new in Alembic version 1.10
# recursive_version_locations = false

# the output encoding used when revision files
# are written from script.py.mako
# output_encoding = utf-8

sqlalchemy.url = sqlite:///db/debug.sqlite


[post_write_hooks]
# post_write_hooks defines scripts or Python functions that are run
# on newly generated revision scripts. See the documentation for further
# detail and examples

# format using "black" - use the console_scripts runner, against the "black" entrypoint
# hooks = black
# black.type = console_scripts
# black.entrypoint = black
# black.options = -l 79 REVISION_SCRIPT_FILENAME

# Logging configuration
[loggers]
keys = root,sqlalchemy,alembic

[handlers]
keys = console

[formatters]
keys = generic

[logger_root]
level = WARN
handlers = console
qualname =

[logger_sqlalchemy]
level = WARN
handlers =
qualname = sqlalchemy.engine

[logger_alembic]
level = INFO
handlers =
qualname = alembic

[handler_console]
class = StreamHandler
args = (sys.stderr,)
level = NOTSET
formatter = generic

[formatter_generic]
format = %(levelname)-5.5s [%(name)s] %(message)s
datefmt = %H:%M:%S
Loading

0 comments on commit 2f1d819

Please sign in to comment.