diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..36398ba --- /dev/null +++ b/.dockerignore @@ -0,0 +1,82 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ +*.egg-info/ +.installed.cfg +*.egg +dist/ +build/ +*.whl +.venv + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ + +# Translations +*.mo +*.pot + +# Flask stuff: +instance/ +.webassets-cache + +# PyBuilder +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +.python-version + +# Environments +.env +.envrc +*.env + +# VS Code +.vscode/ + +# Pycharm +.idea/ + +# Docker +Dockerfile +docker-compose.yml +.dockerignore diff --git a/.gitignore b/.gitignore index 5b2f916..f07c062 100644 --- a/.gitignore +++ b/.gitignore @@ -84,6 +84,7 @@ celerybeat-schedule # virtualenv venv/ ENV/ +.venv/ # Spyder project settings .spyderproject diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..a799ed7 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,17 @@ +FROM python:3.11 + +RUN addgroup --system app && adduser --system --ingroup app app +WORKDIR /home/app +RUN chown app:app -R /home/app + +COPY requirements.txt . +RUN pip install --no-cache-dir -r requirements.txt + +COPY data data +COPY gnomad_sumstats_explorer gnomad_sumstats_explorer + +EXPOSE 8000 + +USER app +ENV PYTHONPATH="." +CMD [ "shiny", "run", "--host", "0.0.0.0", "--port", "8000", "gnomad_sumstats_explorer/app.py" ] diff --git a/cloudbuild.yaml b/cloudbuild.yaml new file mode 100644 index 0000000..60500a5 --- /dev/null +++ b/cloudbuild.yaml @@ -0,0 +1,12 @@ +steps: + - name: 'gcr.io/cloud-builders/docker' + args: + [ + 'build', + '-t', + 'us-docker.pkg.dev/$PROJECT_ID/gnomad/gnomad-sumstats-explorer:$SHORT_SHA', + '.', + ] + +images: + - 'us-docker.pkg.dev/$PROJECT_ID/gnomad/gnomad-sumstats-explorer:$SHORT_SHA' diff --git a/requirements-dev.in b/requirements-dev.in index 61dbe68..9e0e093 100644 --- a/requirements-dev.in +++ b/requirements-dev.in @@ -1,6 +1,10 @@ # Used to create the requirements-dev.txt file # Note: `pip-compile requirements-dev.in` needs to be run before changes in requirements-dev.in are reflected in # requirements-dev.txt, which is used for GitHub Actions + +# Constrain to the requirements.txt file to reduce conflicts. When updating, first compile requirements.txt, then +# requirements-dev.txt +-c requirements.txt black==24.4.2 # This should be kept in sync with the version in .pre-commit-config.yaml isort==5.12.0 # This should be kept in sync with the version in .pre-commit-config.yaml autopep8==2.0.2 # This should be kept in sync with the version in .pre-commit-config.yaml diff --git a/requirements-dev.txt b/requirements-dev.txt index 8807c05..5fdbf88 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -13,7 +13,9 @@ black==24.4.2 cfgv==3.4.0 # via pre-commit click==8.1.7 - # via black + # via + # -c requirements.txt + # black dill==0.3.8 # via pylint distlib==0.3.8 @@ -32,12 +34,15 @@ mypy-extensions==1.0.0 # via black nodeenv==1.9.1 # via pre-commit -packaging==24.1 - # via black +packaging==24.2 + # via + # -c requirements.txt + # black pathspec==0.12.1 # via black -platformdirs==4.2.2 +platformdirs==4.3.6 # via + # -c requirements.txt # black # pylint # virtualenv diff --git a/requirements.in b/requirements.in new file mode 100644 index 0000000..5ab4296 --- /dev/null +++ b/requirements.in @@ -0,0 +1,6 @@ +faicons +shiny +shinywidgets +seaborn +pandas +plotly diff --git a/requirements.txt b/requirements.txt index 5ab4296..6db0422 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,6 +1,167 @@ -faicons -shiny -shinywidgets -seaborn -pandas -plotly +# +# This file is autogenerated by pip-compile with Python 3.11 +# by the following command: +# +# pip-compile requirements.in +# +anyio==4.6.2.post1 + # via + # starlette + # watchfiles +appdirs==1.4.4 + # via shiny +asgiref==3.8.1 + # via shiny +asttokens==2.4.1 + # via stack-data +click==8.1.7 + # via + # shiny + # uvicorn +comm==0.2.2 + # via ipywidgets +contourpy==1.3.0 + # via matplotlib +cycler==0.12.1 + # via matplotlib +decorator==5.1.1 + # via ipython +executing==2.1.0 + # via stack-data +faicons==0.2.2 + # via -r requirements.in +fonttools==4.54.1 + # via matplotlib +h11==0.14.0 + # via uvicorn +htmltools==0.6.0 + # via + # faicons + # shiny +idna==3.10 + # via anyio +ipython==8.18.0 + # via ipywidgets +ipywidgets==8.1.5 + # via shinywidgets +jedi==0.19.1 + # via ipython +jupyter-core==5.7.2 + # via shinywidgets +jupyterlab-widgets==3.0.13 + # via ipywidgets +kiwisolver==1.4.7 + # via matplotlib +linkify-it-py==2.0.3 + # via shiny +markdown-it-py==3.0.0 + # via + # mdit-py-plugins + # shiny +matplotlib==3.9.2 + # via seaborn +matplotlib-inline==0.1.7 + # via ipython +mdit-py-plugins==0.4.2 + # via shiny +mdurl==0.1.2 + # via markdown-it-py +narwhals==1.13.3 + # via shiny +numpy==2.1.3 + # via + # contourpy + # matplotlib + # pandas + # seaborn +orjson==3.10.11 + # via shiny +packaging==24.2 + # via + # htmltools + # matplotlib + # plotly + # shiny +pandas==2.2.3 + # via + # -r requirements.in + # seaborn +parso==0.8.4 + # via jedi +pexpect==4.9.0 + # via ipython +pillow==11.0.0 + # via matplotlib +platformdirs==4.3.6 + # via jupyter-core +plotly==5.24.1 + # via -r requirements.in +prompt-toolkit==3.0.36 + # via + # ipython + # questionary + # shiny +ptyprocess==0.7.0 + # via pexpect +pure-eval==0.2.3 + # via stack-data +pygments==2.18.0 + # via ipython +pyparsing==3.2.0 + # via matplotlib +python-dateutil==2.9.0.post0 + # via + # matplotlib + # pandas + # shinywidgets +python-multipart==0.0.17 + # via shiny +pytz==2024.2 + # via pandas +questionary==2.0.1 + # via shiny +seaborn==0.13.2 + # via -r requirements.in +shiny==1.2.0 + # via + # -r requirements.in + # shinywidgets +shinywidgets==0.3.4 + # via -r requirements.in +six==1.16.0 + # via + # asttokens + # python-dateutil +sniffio==1.3.1 + # via anyio +stack-data==0.6.3 + # via ipython +starlette==0.41.2 + # via shiny +tenacity==9.0.0 + # via plotly +traitlets==5.14.3 + # via + # comm + # ipython + # ipywidgets + # jupyter-core + # matplotlib-inline +typing-extensions==4.12.2 + # via + # htmltools + # shiny +tzdata==2024.2 + # via pandas +uc-micro-py==1.0.3 + # via linkify-it-py +uvicorn==0.32.0 + # via shiny +watchfiles==0.24.0 + # via shiny +wcwidth==0.2.13 + # via prompt-toolkit +websockets==13.1 + # via shiny +widgetsnbextension==4.0.13 + # via ipywidgets