From c8bcc0ba0ab6be3084f45a01f14340f184fc5239 Mon Sep 17 00:00:00 2001 From: Ruslan Samoylov Date: Sun, 19 Apr 2020 00:27:48 +0300 Subject: [PATCH] :heavy_plus_sign: Use Poetry for package management (#144) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * use poetry insted of Pipfile * fix python black version * set prepare.sh as executable * revert postgres 11 * use multi-build stage in docker * fix poetry path * :fire: Remove uneeded changes * :wrench: Move and update Poetry file * :see_no_evil: Update gitignore * :whale: Update Dockerfiles to use Poetry * :whale: Update Dockerfiles with Poetry * :wrench: Add SERVER_NAME required by Celery worker * :whale: Update Poetry install to avoid env conflicts * :heavy_plus_sign: Add Pytest to Poetry dependencies Co-authored-by: Sebastián Ramírez --- scripts/discard-dev-files.sh | 2 +- .../backend/.gitignore | 1 + .../backend/app/Pipfile | 39 ------------------ .../backend/app/pyproject.toml | 40 +++++++++++++++++++ .../backend/backend.dockerfile | 13 +++++- .../backend/celeryworker.dockerfile | 12 +++++- .../backend/tests.dockerfile | 12 +++++- .../docker-compose.shared.env.yml | 1 + 8 files changed, 76 insertions(+), 44 deletions(-) delete mode 100644 {{cookiecutter.project_slug}}/backend/app/Pipfile create mode 100644 {{cookiecutter.project_slug}}/backend/app/pyproject.toml diff --git a/scripts/discard-dev-files.sh b/scripts/discard-dev-files.sh index b516cee..21d444e 100644 --- a/scripts/discard-dev-files.sh +++ b/scripts/discard-dev-files.sh @@ -1,5 +1,5 @@ rm -rf \{\{cookiecutter.project_slug\}\}/.git -rm -rf \{\{cookiecutter.project_slug\}\}/backend/app/Pipfile.lock +rm -rf \{\{cookiecutter.project_slug\}\}/backend/app/poetry.lock rm -rf \{\{cookiecutter.project_slug\}\}/frontend/node_modules rm -rf \{\{cookiecutter.project_slug\}\}/frontend/dist git checkout \{\{cookiecutter.project_slug\}\}/README.md diff --git a/{{cookiecutter.project_slug}}/backend/.gitignore b/{{cookiecutter.project_slug}}/backend/.gitignore index bee8a64..529e8d5 100644 --- a/{{cookiecutter.project_slug}}/backend/.gitignore +++ b/{{cookiecutter.project_slug}}/backend/.gitignore @@ -1 +1,2 @@ __pycache__ +app.egg-info diff --git a/{{cookiecutter.project_slug}}/backend/app/Pipfile b/{{cookiecutter.project_slug}}/backend/app/Pipfile deleted file mode 100644 index 23090ed..0000000 --- a/{{cookiecutter.project_slug}}/backend/app/Pipfile +++ /dev/null @@ -1,39 +0,0 @@ -[[source]] -name = "pypi" -url = "https://pypi.org/simple" -verify_ssl = true - -[dev-packages] -mypy = "*" -black = "*" -jupyter = "*" -isort = "*" -autoflake = "*" -flake8 = "*" -pytest = "*" -vulture = "*" - -[packages] -fastapi = "*" -uvicorn = "*" -pyjwt = "*" -python-multipart = "*" -email-validator = "*" -requests = "*" -celery = "*" -passlib = {extras = ["bcrypt"],version = "*"} -tenacity = "*" -pydantic = "*" -emails = "*" -raven = "*" -gunicorn = "*" -jinja2 = "*" -psycopg2-binary = "*" -alembic = "*" -sqlalchemy = "*" - -[requires] -python_version = "3.6" - -[pipenv] -allow_prereleases = true diff --git a/{{cookiecutter.project_slug}}/backend/app/pyproject.toml b/{{cookiecutter.project_slug}}/backend/app/pyproject.toml new file mode 100644 index 0000000..33c46fb --- /dev/null +++ b/{{cookiecutter.project_slug}}/backend/app/pyproject.toml @@ -0,0 +1,40 @@ +[tool.poetry] +name = "app" +version = "0.1.0" +description = "" +authors = ["Admin "] + +[tool.poetry.dependencies] +python = "^3.7" +uvicorn = "^0.11.3" +fastapi = "^0.54.1" +pyjwt = "^1.7.1" +python-multipart = "^0.0.5" +email-validator = "^1.0.5" +requests = "^2.23.0" +celery = "^4.4.2" +passlib = {extras = ["bcrypt"], version = "^1.7.2"} +tenacity = "^6.1.0" +pydantic = "^1.4" +emails = "^0.5.15" +raven = "^6.10.0" +gunicorn = "^20.0.4" +jinja2 = "^2.11.2" +psycopg2-binary = "^2.8.5" +alembic = "^1.4.2" +sqlalchemy = "^1.3.16" +pytest = "^5.4.1" + +[tool.poetry.dev-dependencies] +mypy = "^0.770" +black = "^19.10b0" +isort = "^4.3.21" +autoflake = "^1.3.1" +flake8 = "^3.7.9" +pytest = "^5.4.1" +jupyter = "^1.0.0" +vulture = "^1.4" + +[build-system] +requires = ["poetry>=0.12"] +build-backend = "poetry.masonry.api" diff --git a/{{cookiecutter.project_slug}}/backend/backend.dockerfile b/{{cookiecutter.project_slug}}/backend/backend.dockerfile index 5c93fd1..6108868 100644 --- a/{{cookiecutter.project_slug}}/backend/backend.dockerfile +++ b/{{cookiecutter.project_slug}}/backend/backend.dockerfile @@ -1,6 +1,16 @@ FROM tiangolo/uvicorn-gunicorn-fastapi:python3.7 -RUN pip install celery~=4.3 passlib[bcrypt] tenacity requests emails "fastapi>=0.47.0" "uvicorn>=0.11.1" gunicorn pyjwt python-multipart email-validator jinja2 psycopg2-binary alembic SQLAlchemy +WORKDIR /app/ + +# Install Poetry +RUN curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | POETRY_HOME=/opt/poetry python && \ + cd /usr/local/bin && \ + ln -s /opt/poetry/bin/poetry && \ + poetry config virtualenvs.create false + +# Copy poetry.lock* in case it doesn't exist in the repo +COPY ./app/pyproject.toml ./app/poetry.lock* /app/ +RUN poetry install --no-dev --no-root # For development, Jupyter remote kernel, Hydrogen # Using inside the container: @@ -10,7 +20,6 @@ RUN bash -c "if [ $env == 'dev' ] ; then pip install jupyterlab ; fi" EXPOSE 8888 COPY ./app /app -WORKDIR /app/ ENV PYTHONPATH=/app diff --git a/{{cookiecutter.project_slug}}/backend/celeryworker.dockerfile b/{{cookiecutter.project_slug}}/backend/celeryworker.dockerfile index 11f2851..6de9b7e 100644 --- a/{{cookiecutter.project_slug}}/backend/celeryworker.dockerfile +++ b/{{cookiecutter.project_slug}}/backend/celeryworker.dockerfile @@ -1,6 +1,16 @@ FROM python:3.7 -RUN pip install raven celery~=4.3 passlib[bcrypt] tenacity requests "fastapi>=0.47.0" emails pyjwt email-validator jinja2 psycopg2-binary alembic SQLAlchemy +WORKDIR /app/ + +# Install Poetry +RUN curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | POETRY_HOME=/opt/poetry python && \ + cd /usr/local/bin && \ + ln -s /opt/poetry/bin/poetry && \ + poetry config virtualenvs.create false + +# Copy poetry.lock* in case it doesn't exist in the repo +COPY ./app/pyproject.toml ./app/poetry.lock* /app/ +RUN poetry install --no-dev --no-root # For development, Jupyter remote kernel, Hydrogen # Using inside the container: diff --git a/{{cookiecutter.project_slug}}/backend/tests.dockerfile b/{{cookiecutter.project_slug}}/backend/tests.dockerfile index d6e264a..46c6661 100644 --- a/{{cookiecutter.project_slug}}/backend/tests.dockerfile +++ b/{{cookiecutter.project_slug}}/backend/tests.dockerfile @@ -1,6 +1,16 @@ FROM python:3.7 -RUN pip install requests pytest tenacity passlib[bcrypt] "fastapi>=0.47.0" email-validator psycopg2-binary SQLAlchemy +WORKDIR /app/ + +# Install Poetry +RUN curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | POETRY_HOME=/opt/poetry python && \ + cd /usr/local/bin && \ + ln -s /opt/poetry/bin/poetry && \ + poetry config virtualenvs.create false + +# Copy poetry.lock* in case it doesn't exist in the repo +COPY ./app/pyproject.toml ./app/poetry.lock* /app/ +RUN poetry install --no-dev --no-root # For development, Jupyter remote kernel, Hydrogen # Using inside the container: diff --git a/{{cookiecutter.project_slug}}/docker-compose.shared.env.yml b/{{cookiecutter.project_slug}}/docker-compose.shared.env.yml index ca5d475..41d6de9 100644 --- a/{{cookiecutter.project_slug}}/docker-compose.shared.env.yml +++ b/{{cookiecutter.project_slug}}/docker-compose.shared.env.yml @@ -17,4 +17,5 @@ services: - env-postgres.env - env-backend.env environment: + - SERVER_NAME=${DOMAIN} - SERVER_HOST=https://${DOMAIN}