diff --git a/.dockerignore b/.dockerignore index ed0835d..ad9d537 100644 --- a/.dockerignore +++ b/.dockerignore @@ -3,6 +3,7 @@ */.* !src/ +!requirements.txt !requirements/ !entrypoint.sh !pyproject.toml diff --git a/.drone.yml b/.drone.yml index d598350..97a1517 100644 --- a/.drone.yml +++ b/.drone.yml @@ -7,7 +7,6 @@ steps: - name: docker image: plugins/docker environment: - DJANGO_ENV: production BUILD: "${DRONE_COMMIT_SHA}" settings: repo: docker.data.coop/membersystem @@ -17,7 +16,6 @@ steps: password: from_secret: DOCKER_PASSWORD build_args_from_env: - - DJANGO_ENV - BUILD tags: - "${DRONE_BUILD_NUMBER}" diff --git a/.env.example b/.env.example index 777e8f3..9da2eda 100644 --- a/.env.example +++ b/.env.example @@ -6,4 +6,3 @@ DATABASE_URL=postgres://postgres:postgres@postgres:5432/postgres # Use something along the the following if you are not using docker # DATABASE_URL=postgres://postgres:postgres@localhost:5432/datacoop_membersystem DEBUG=True -DJANGO_ENV=development diff --git a/Dockerfile b/Dockerfile index cc600b1..fe342b7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -7,18 +7,18 @@ ENV PYTHONFAULTHANDLER=1 \ PIP_NO_CACHE_DIR=off \ PIP_DISABLE_PIP_VERSION_CHECK=on \ PIP_DEFAULT_TIMEOUT=100 -ARG DJANGO_ENV ARG BUILD ENV BUILD ${BUILD} +ARG REQUIREMENTS_FILE=requirements.txt WORKDIR /app RUN groupadd -g 1000 www && useradd -u 1000 -ms /bin/bash -g www www COPY --chown=www:www . . -RUN mkdir /app/src/static \ - && chown www:www /app/src/static \ - && apt-get update \ - && apt-get install -y \ +RUN mkdir /app/src/static && \ + chown www:www /app/src/static && \ + apt-get update && \ + apt-get install -y \ binutils \ libpq-dev \ build-essential \ @@ -29,9 +29,9 @@ RUN mkdir /app/src/static \ libgdk-pixbuf2.0-0 \ libffi-dev \ shared-mime-info \ - gettext \ - && pip install . \ - && django-admin compilemessages + gettext && \ + pip install --no-cache-dir -r $REQUIREMENTS_FILE && \ + django-admin compilemessages ENTRYPOINT ["./entrypoint.sh"] diff --git a/Makefile b/Makefile index 7fc23eb..a577606 100644 --- a/Makefile +++ b/Makefile @@ -1,27 +1,12 @@ DOCKER_COMPOSE = COMPOSE_DOCKER_CLI_BUILD=1 DOCKER_BUILDKIT=1 docker compose DOCKER_RUN = ${DOCKER_COMPOSE} run -u `id -u` DOCKER_BUILD = DOCKER_BUILDKIT=1 docker build -DOCKER_CONTAINER_NAME = backend MANAGE_EXEC = python /app/src/manage.py -MANAGE_COMMAND = ${DOCKER_RUN} ${DOCKER_CONTAINER_NAME} ${MANAGE_EXEC} - -init: setup_venv pre_commit_install migrate +MANAGE_COMMAND = ${DOCKER_RUN} app ${MANAGE_EXEC} run: ${DOCKER_COMPOSE} up -setup_venv: - rm -rf venv - python3.11 -m venv venv; - venv/bin/python -m pip install wheel setuptools; - venv/bin/python -m pip install pre-commit boto3 pip-tools; - -pre_commit_install: - venv/bin/pre-commit install - -pre_commit_run_all: - venv/bin/pre-commit run --all-files - makemigrations: ${MANAGE_COMMAND} makemigrations ${ARGS} @@ -36,23 +21,3 @@ shell: manage_command: ${MANAGE_COMMAND} ${ARGS} - -add_dependency: - ${DOCKER_RUN} ${DOCKER_CONTAINER_NAME} poetry add --lock ${DEPENDENCY} - -add_dev_dependency: - ${DOCKER_RUN} ${DOCKER_CONTAINER_NAME} poetry add -D --lock ${DEPENDENCY} - -poetry_lock: - ${DOCKER_RUN} ${DOCKER_CONTAINER_NAME} poetry lock --no-update - -poetry_command: - ${DOCKER_RUN} ${DOCKER_CONTAINER_NAME} poetry ${COMMAND} - -build_dev_docker_image: compile_requirements - ${DOCKER_COMPOSE} build ${DOCKER_CONTAINER_NAME} - -compile_requirements: - ./venv/bin/pip-compile --output-file requirements/base.txt requirements/base.in - ./venv/bin/pip-compile --output-file requirements/test.txt requirements/test.in - ./venv/bin/pip-compile --output-file requirements/dev.txt requirements/dev.in diff --git a/README.md b/README.md index 9aed72b..2c8d5d3 100644 --- a/README.md +++ b/README.md @@ -1,71 +1,74 @@ -# member.data.coop +# data.coop member system -## Development +## Development setup -### Setup environment +There are two ways to setup the development environment. -Copy over the .env.example file to .env and adjust DATABASE_URL accordingly +- Using the Docker Compose setup provided in this repository. +- Using [hatch](https://hatch.pypa.io/) in your host OS. - $ cp .env.example .env -### Docker +### Using Docker Compose + +Working with the Docker Compose setup is made easy with the `Makefile` provided in the repository. #### Requirements - Docker -- Docker compose -- pre-commit (preferred for contributions) +- docker compose plugin #### Setup -Given that the requirements above are installed, it should be as easy as: +1. Setup .env file - $ make migrate +An example .env file is provided in the repository. You can copy it to .env file using the following command: -This will setup the database. Next run: +```bash +cp .env.example .env +``` - $ make run +The default values in the .env file are suitable for the docker-compose setup. -This will build the docker image and start the member system on http://localhost:8000. +2. Migrate -You can create a superuser by running: +```bash +make migrate +``` - $ make createsuperuser +3. Run the development server -Make migrations: +```bash +make run +``` - $ make makemigrations +### Using hatch -Make messages: +#### Requirements - $ make makemessages +- Python 3.12 or higher +- [hatch](https://hatch.pypa.io/) (Recommended way to install is using `pipx install hatch`) +- A running PostgreSQL server -Running tests: +#### Setup - $ make test +1. Setup .env file -### Non-docker +An example .env file is provided in the repository. You can copy it to .env file using the following command: -Create a venv +```bash +cp .env.example .env +``` - $ python3 -m venv venv +Edit the .env file and set the values for the environment variables, especially the database variables. -Activate the venv +2. Run migrate - $ source venv/bin/activate +```bash +hatch run dev:migrate +``` -Install requirements +3. Run the development server - $ pip install -r requirements/dev.txt - -Run migrations - - $ ./src/manage.py migrate - -Create a superuser - - $ ./src/manage.py createsuperuser - -Run the server - - $ ./src/manage.py runserver +```bash +hatch run dev:server +``` diff --git a/devenv.lock b/devenv.lock deleted file mode 100644 index 0b577e6..0000000 --- a/devenv.lock +++ /dev/null @@ -1,241 +0,0 @@ -{ - "nodes": { - "devenv": { - "locked": { - "dir": "src/modules", - "lastModified": 1707004164, - "narHash": "sha256-9Hr8onWtvLk5A8vCEkaE9kxA0D7PR62povFokM1oL5Q=", - "owner": "cachix", - "repo": "devenv", - "rev": "0e68853bb27981a4ffd7a7225b59ed84f7180fc7", - "type": "github" - }, - "original": { - "dir": "src/modules", - "owner": "cachix", - "repo": "devenv", - "type": "github" - } - }, - "flake-compat": { - "flake": false, - "locked": { - "lastModified": 1696426674, - "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", - "owner": "edolstra", - "repo": "flake-compat", - "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", - "type": "github" - }, - "original": { - "owner": "edolstra", - "repo": "flake-compat", - "type": "github" - } - }, - "flake-compat_2": { - "flake": false, - "locked": { - "lastModified": 1696426674, - "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", - "owner": "edolstra", - "repo": "flake-compat", - "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", - "type": "github" - }, - "original": { - "owner": "edolstra", - "repo": "flake-compat", - "type": "github" - } - }, - "flake-utils": { - "inputs": { - "systems": "systems" - }, - "locked": { - "lastModified": 1705309234, - "narHash": "sha256-uNRRNRKmJyCRC/8y1RqBkqWBLM034y4qN7EprSdmgyA=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "1ef2e671c3b0c19053962c07dbda38332dcebf26", - "type": "github" - }, - "original": { - "id": "flake-utils", - "type": "indirect" - } - }, - "flake-utils_2": { - "inputs": { - "systems": "systems_2" - }, - "locked": { - "lastModified": 1701680307, - "narHash": "sha256-kAuep2h5ajznlPMD9rnQyffWG8EM/C73lejGofXvdM8=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "4022d587cbbfd70fe950c1e2083a02621806a725", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "flake-utils", - "type": "github" - } - }, - "gitignore": { - "inputs": { - "nixpkgs": [ - "pre-commit-hooks", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1703887061, - "narHash": "sha256-gGPa9qWNc6eCXT/+Z5/zMkyYOuRZqeFZBDbopNZQkuY=", - "owner": "hercules-ci", - "repo": "gitignore.nix", - "rev": "43e1aa1308018f37118e34d3a9cb4f5e75dc11d5", - "type": "github" - }, - "original": { - "owner": "hercules-ci", - "repo": "gitignore.nix", - "type": "github" - } - }, - "nixpkgs": { - "locked": { - "lastModified": 1707451808, - "narHash": "sha256-UwDBUNHNRsYKFJzyTMVMTF5qS4xeJlWoeyJf+6vvamU=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "442d407992384ed9c0e6d352de75b69079904e4e", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixpkgs-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs-python": { - "inputs": { - "flake-compat": "flake-compat", - "flake-utils": "flake-utils", - "nixpkgs": "nixpkgs_2" - }, - "locked": { - "lastModified": 1707114737, - "narHash": "sha256-ZXqv2epXAjDjfWbYn+yy4VOmW+C7SuUBoiZkkDoSqA4=", - "owner": "cachix", - "repo": "nixpkgs-python", - "rev": "f34ed02276bc08fe1c91c1bf0ef3589d68028878", - "type": "github" - }, - "original": { - "owner": "cachix", - "repo": "nixpkgs-python", - "type": "github" - } - }, - "nixpkgs-stable": { - "locked": { - "lastModified": 1704874635, - "narHash": "sha256-YWuCrtsty5vVZvu+7BchAxmcYzTMfolSPP5io8+WYCg=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "3dc440faeee9e889fe2d1b4d25ad0f430d449356", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixos-23.11", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_2": { - "locked": { - "lastModified": 1707347730, - "narHash": "sha256-0etC/exQIaqC9vliKhc3eZE2Mm2wgLa0tj93ZF/egvM=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "6832d0d99649db3d65a0e15fa51471537b2c56a6", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixos-23.11", - "repo": "nixpkgs", - "type": "github" - } - }, - "pre-commit-hooks": { - "inputs": { - "flake-compat": "flake-compat_2", - "flake-utils": "flake-utils_2", - "gitignore": "gitignore", - "nixpkgs": [ - "nixpkgs" - ], - "nixpkgs-stable": "nixpkgs-stable" - }, - "locked": { - "lastModified": 1707297608, - "narHash": "sha256-ADjo/5VySGlvtCW3qR+vdFF4xM9kJFlRDqcC9ZGI8EA=", - "owner": "cachix", - "repo": "pre-commit-hooks.nix", - "rev": "0db2e67ee49910adfa13010e7f012149660af7f0", - "type": "github" - }, - "original": { - "owner": "cachix", - "repo": "pre-commit-hooks.nix", - "type": "github" - } - }, - "root": { - "inputs": { - "devenv": "devenv", - "nixpkgs": "nixpkgs", - "nixpkgs-python": "nixpkgs-python", - "pre-commit-hooks": "pre-commit-hooks" - } - }, - "systems": { - "locked": { - "lastModified": 1681028828, - "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", - "owner": "nix-systems", - "repo": "default", - "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", - "type": "github" - }, - "original": { - "owner": "nix-systems", - "repo": "default", - "type": "github" - } - }, - "systems_2": { - "locked": { - "lastModified": 1681028828, - "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", - "owner": "nix-systems", - "repo": "default", - "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", - "type": "github" - }, - "original": { - "owner": "nix-systems", - "repo": "default", - "type": "github" - } - } - }, - "root": "root", - "version": 7 -} diff --git a/devenv.nix b/devenv.nix deleted file mode 100644 index be720b2..0000000 --- a/devenv.nix +++ /dev/null @@ -1,19 +0,0 @@ -{ pkgs, ... }: - -{ - languages.python.enable = true; - languages.python.version = "3.12"; - - services.postgres = { - enable = true; - package = pkgs.postgresql_15; - initialDatabases = [ {"name" = "postgres";} ]; - listen_addresses = "localhost"; - initialScript = "create user postgres with password 'postgres' superuser;"; - }; - - processes = { - app.exec = "while ! pg_isready -d postgres -h localhost -U postgres 2>/dev/null; do sleep 1; done; hatch run server"; - }; - -} diff --git a/devenv.yaml b/devenv.yaml deleted file mode 100644 index a32e623..0000000 --- a/devenv.yaml +++ /dev/null @@ -1,5 +0,0 @@ -inputs: - nixpkgs: - url: github:NixOS/nixpkgs/nixpkgs-unstable - nixpkgs-python: - url: github:cachix/nixpkgs-python diff --git a/docker-compose.yml b/docker-compose.yml index 6872ac9..9bd0957 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,11 +1,10 @@ -version: '3.7' - +--- services: - - backend: - image: data_coop_membersystem:dev + app: build: context: . + args: + - REQUIREMENTS_FILE=requirements/requirements-dev.txt command: python /app/src/manage.py runserver 0.0.0.0:8000 tty: true ports: @@ -28,3 +27,4 @@ services: volumes: postgres_data: +... diff --git a/pyproject.toml b/pyproject.toml index 5346347..86868a7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -29,7 +29,14 @@ version = "0.0.1" [tool.hatch.build.targets.wheel] packages = ["src"] +[tool.hatch.env] +requires = ["hatch-pip-compile"] + [tool.hatch.envs.default] +type = "pip-compile" + +[tool.hatch.envs.dev] +type = "pip-compile" dependencies = [ "coverage[toml]==7.3.0", "pytest==7.2.2", @@ -45,7 +52,7 @@ dependencies = [ [[tool.hatch.envs.tests.matrix]] python = ["3.12"] -django = ["4.2", "5.0"] +django = ["5.0"] [tool.hatch.envs.tests.overrides] matrix.django.dependencies = [ @@ -55,7 +62,7 @@ matrix.python.dependencies = [ { value = "typing_extensions==4.5.0", if = ["3.10"]}, ] -[tool.hatch.envs.default.scripts] +[tool.hatch.envs.dev.scripts] cov = "pytest --cov-report=term-missing --cov-config=pyproject.toml --cov=src --cov=tests --cov=append {args}" no-cov = "cov --no-cov {args}" typecheck = "mypy --config-file=pyproject.toml ." diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..10e1abe --- /dev/null +++ b/requirements.txt @@ -0,0 +1,103 @@ +# +# This file is autogenerated by hatch-pip-compile with Python 3.12 +# +# - django-allauth==0.63.3 +# - django-money==3.4.1 +# - django-oauth-toolkit==2.4.0 +# - django-registries==0.0.3 +# - django-view-decorator==0.0.4 +# - django-zen-queries==2.1.0 +# - django==5.0.6 +# - environs[django]==11.0.0 +# - psycopg[binary]==3.1.19 +# - uvicorn==0.30.0 +# - whitenoise==6.6.0 +# + +asgiref==3.8.1 + # via django +babel==2.15.0 + # via py-moneyed +certifi==2024.7.4 + # via requests +cffi==1.16.0 + # via cryptography +charset-normalizer==3.3.2 + # via requests +click==8.1.7 + # via uvicorn +cryptography==42.0.8 + # via jwcrypto +dj-database-url==2.2.0 + # via environs +dj-email-url==1.0.6 + # via environs +django==5.0.6 + # via + # hatch.envs.default + # dj-database-url + # django-allauth + # django-money + # django-oauth-toolkit + # django-registries + # django-view-decorator + # django-zen-queries +django-allauth==0.63.3 + # via hatch.envs.default +django-cache-url==3.4.5 + # via environs +django-money==3.4.1 + # via hatch.envs.default +django-oauth-toolkit==2.4.0 + # via hatch.envs.default +django-registries==0.0.3 + # via hatch.envs.default +django-view-decorator==0.0.4 + # via hatch.envs.default +django-zen-queries==2.1.0 + # via hatch.envs.default +environs==11.0.0 + # via hatch.envs.default +h11==0.14.0 + # via uvicorn +idna==3.7 + # via requests +jwcrypto==1.5.6 + # via django-oauth-toolkit +marshmallow==3.21.3 + # via environs +oauthlib==3.2.2 + # via django-oauth-toolkit +packaging==24.1 + # via marshmallow +psycopg==3.1.19 + # via hatch.envs.default +psycopg-binary==3.1.19 + # via psycopg +py-moneyed==3.0 + # via django-money +pycparser==2.22 + # via cffi +python-dotenv==1.0.1 + # via environs +pytz==2024.1 + # via django-oauth-toolkit +requests==2.32.3 + # via django-oauth-toolkit +sqlparse==0.5.0 + # via django +typing-extensions==4.12.2 + # via + # dj-database-url + # jwcrypto + # psycopg + # py-moneyed +urllib3==2.2.2 + # via requests +uvicorn==0.30.0 + # via hatch.envs.default +whitenoise==6.6.0 + # via hatch.envs.default + +# The following packages are considered to be unsafe in a requirements file: +# setuptools diff --git a/requirements/base.in b/requirements/base.in deleted file mode 100644 index 93b7645..0000000 --- a/requirements/base.in +++ /dev/null @@ -1,8 +0,0 @@ -Django==5.0.1 -django-money==3.4.1 -django-allauth==0.60.0 -psycopg[binary]==3.1.16 -environs[django]==10.0.0 -uvicorn==0.25.0 -whitenoise==6.6.0 -django-zen-queries==2.1.0 diff --git a/requirements/base.txt b/requirements/base.txt deleted file mode 100644 index 4d4f8f1..0000000 --- a/requirements/base.txt +++ /dev/null @@ -1,101 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.11 -# by the following command: -# -# pip-compile --output-file=requirements/base.txt pyproject.toml -# -asgiref==3.7.2 - # via django -babel==2.14.0 - # via py-moneyed -certifi==2023.11.17 - # via requests -cffi==1.16.0 - # via cryptography -charset-normalizer==3.3.2 - # via requests -click==8.1.7 - # via uvicorn -cryptography==41.0.7 - # via pyjwt -defusedxml==0.7.1 - # via python3-openid -dj-database-url==2.1.0 - # via environs -dj-email-url==1.0.6 - # via environs -django==5.0.1 - # via - # dj-database-url - # django-allauth - # django-money - # django-registries - # django-view-decorator - # django-zen-queries - # membersystem (pyproject.toml) -django-allauth==0.60.0 - # via membersystem (pyproject.toml) -django-cache-url==3.4.5 - # via environs -django-money==3.4.1 - # via membersystem (pyproject.toml) -django-registries==0.0.3 - # via membersystem (pyproject.toml) -django-view-decorator==0.0.4 - # via membersystem (pyproject.toml) -django-zen-queries==2.1.0 - # via membersystem (pyproject.toml) -environs[django]==10.0.0 - # via - # environs - # membersystem (pyproject.toml) -h11==0.14.0 - # via uvicorn -idna==3.6 - # via requests -marshmallow==3.20.1 - # via environs -oauthlib==3.2.2 - # via requests-oauthlib -packaging==23.2 - # via marshmallow -psycopg[binary]==3.1.16 - # via - # membersystem (pyproject.toml) - # psycopg -psycopg-binary==3.1.16 - # via psycopg -py-moneyed==3.0 - # via django-money -pycparser==2.21 - # via cffi -pyjwt[crypto]==2.8.0 - # via - # django-allauth - # pyjwt -python-dotenv==1.0.0 - # via environs -python3-openid==3.2.0 - # via django-allauth -requests==2.31.0 - # via - # django-allauth - # requests-oauthlib -requests-oauthlib==1.3.1 - # via django-allauth -sqlparse==0.4.4 - # via django -typing-extensions==4.9.0 - # via - # dj-database-url - # psycopg - # py-moneyed -urllib3==2.1.0 - # via requests -uvicorn==0.25.0 - # via membersystem (pyproject.toml) -whitenoise==6.6.0 - # via membersystem (pyproject.toml) - -# The following packages are considered to be unsafe in a requirements file: -# setuptools diff --git a/requirements/dev.in b/requirements/dev.in deleted file mode 100644 index 74eb1bb..0000000 --- a/requirements/dev.in +++ /dev/null @@ -1,8 +0,0 @@ --r test.txt - -django-browser-reload==1.12.1 -django-debug-toolbar==4.2.0 -django-extensions==3.2.3 -django-stubs==4.2.7 -ipython==8.19.0 -mypy==1.8.0 diff --git a/requirements/dev.txt b/requirements/dev.txt deleted file mode 100644 index 8899b9f..0000000 --- a/requirements/dev.txt +++ /dev/null @@ -1,213 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.11 -# by the following command: -# -# pip-compile --output-file=requirements/dev.txt requirements/dev.in -# -asgiref==3.7.2 - # via - # -r requirements/test.txt - # django - # django-browser-reload -asttokens==2.4.1 - # via stack-data -babel==2.14.0 - # via - # -r requirements/test.txt - # py-moneyed -certifi==2023.11.17 - # via - # -r requirements/test.txt - # requests -cffi==1.16.0 - # via - # -r requirements/test.txt - # cryptography -charset-normalizer==3.3.2 - # via - # -r requirements/test.txt - # requests -click==8.1.7 - # via - # -r requirements/test.txt - # uvicorn -coverage==7.4.0 - # via -r requirements/test.txt -cryptography==41.0.7 - # via - # -r requirements/test.txt - # pyjwt -decorator==5.1.1 - # via ipython -defusedxml==0.7.1 - # via - # -r requirements/test.txt - # python3-openid -dj-database-url==2.1.0 - # via - # -r requirements/test.txt - # environs -dj-email-url==1.0.6 - # via - # -r requirements/test.txt - # environs -django==5.0.1 - # via - # -r requirements/test.txt - # dj-database-url - # django-allauth - # django-browser-reload - # django-debug-toolbar - # django-extensions - # django-money - # django-stubs - # django-stubs-ext - # django-zen-queries -django-allauth==0.60.0 - # via -r requirements/test.txt -django-browser-reload==1.12.1 - # via -r requirements/dev.in -django-cache-url==3.4.5 - # via - # -r requirements/test.txt - # environs -django-debug-toolbar==4.2.0 - # via -r requirements/dev.in -django-extensions==3.2.3 - # via -r requirements/dev.in -django-money==3.4.1 - # via -r requirements/test.txt -django-stubs==4.2.7 - # via -r requirements/dev.in -django-stubs-ext==4.2.7 - # via django-stubs -django-zen-queries==2.1.0 - # via -r requirements/test.txt -environs[django]==10.0.0 - # via -r requirements/test.txt -executing==2.0.1 - # via stack-data -h11==0.14.0 - # via - # -r requirements/test.txt - # uvicorn -idna==3.6 - # via - # -r requirements/test.txt - # requests -ipython==8.19.0 - # via -r requirements/dev.in -jedi==0.19.1 - # via ipython -lxml==5.0.1 - # via - # -r requirements/test.txt - # unittest-xml-reporting -marshmallow==3.20.1 - # via - # -r requirements/test.txt - # environs -matplotlib-inline==0.1.6 - # via ipython -mypy==1.8.0 - # via -r requirements/dev.in -mypy-extensions==1.0.0 - # via mypy -oauthlib==3.2.2 - # via - # -r requirements/test.txt - # requests-oauthlib -packaging==23.2 - # via - # -r requirements/test.txt - # marshmallow -parso==0.8.3 - # via jedi -pexpect==4.9.0 - # via ipython -prompt-toolkit==3.0.43 - # via ipython -psycopg[binary]==3.1.16 - # via -r requirements/test.txt -psycopg-binary==3.1.16 - # via - # -r requirements/test.txt - # psycopg -ptyprocess==0.7.0 - # via pexpect -pure-eval==0.2.2 - # via stack-data -py-moneyed==3.0 - # via - # -r requirements/test.txt - # django-money -pycparser==2.21 - # via - # -r requirements/test.txt - # cffi -pygments==2.17.2 - # via ipython -pyjwt[crypto]==2.8.0 - # via - # -r requirements/test.txt - # django-allauth -python-dotenv==1.0.0 - # via - # -r requirements/test.txt - # environs -python3-openid==3.2.0 - # via - # -r requirements/test.txt - # django-allauth -requests==2.31.0 - # via - # -r requirements/test.txt - # django-allauth - # requests-oauthlib -requests-oauthlib==1.3.1 - # via - # -r requirements/test.txt - # django-allauth -six==1.16.0 - # via asttokens -sqlparse==0.4.4 - # via - # -r requirements/test.txt - # django - # django-debug-toolbar -stack-data==0.6.3 - # via ipython -tblib==3.0.0 - # via -r requirements/test.txt -traitlets==5.14.1 - # via - # ipython - # matplotlib-inline -types-pytz==2023.3.1.1 - # via django-stubs -types-pyyaml==6.0.12.12 - # via django-stubs -typing-extensions==4.9.0 - # via - # -r requirements/test.txt - # dj-database-url - # django-stubs - # django-stubs-ext - # mypy - # psycopg - # py-moneyed -unittest-xml-reporting==3.2.0 - # via -r requirements/test.txt -urllib3==2.1.0 - # via - # -r requirements/test.txt - # requests -uvicorn==0.25.0 - # via -r requirements/test.txt -wcwidth==0.2.13 - # via prompt-toolkit -whitenoise==6.6.0 - # via -r requirements/test.txt - -# The following packages are considered to be unsafe in a requirements file: -# setuptools diff --git a/requirements/requirements-dev.txt b/requirements/requirements-dev.txt new file mode 100644 index 0000000..6a888fd --- /dev/null +++ b/requirements/requirements-dev.txt @@ -0,0 +1,183 @@ +# +# This file is autogenerated by hatch-pip-compile with Python 3.12 +# +# - coverage[toml]==7.3.0 +# - pytest==7.2.2 +# - pytest-cov +# - pytest-django==4.5.2 +# - mypy==1.1.1 +# - django-stubs==1.16.0 +# - pip-tools==7.3.0 +# - django-debug-toolbar==4.2.0 +# - django-browser-reload==1.7.0 +# - model-bakery==1.17.0 +# - django-allauth==0.63.3 +# - django-money==3.4.1 +# - django-oauth-toolkit==2.4.0 +# - django-registries==0.0.3 +# - django-view-decorator==0.0.4 +# - django-zen-queries==2.1.0 +# - django==5.0.6 +# - environs[django]==11.0.0 +# - psycopg[binary]==3.1.19 +# - uvicorn==0.30.0 +# - whitenoise==6.6.0 +# + +asgiref==3.8.1 + # via django +attrs==23.2.0 + # via pytest +babel==2.15.0 + # via py-moneyed +build==1.2.1 + # via pip-tools +certifi==2024.7.4 + # via requests +cffi==1.16.0 + # via cryptography +charset-normalizer==3.3.2 + # via requests +click==8.1.7 + # via + # pip-tools + # uvicorn +coverage==7.3.0 + # via + # hatch.envs.dev + # coverage + # pytest-cov +cryptography==42.0.8 + # via jwcrypto +dj-database-url==2.2.0 + # via environs +dj-email-url==1.0.6 + # via environs +django==5.0.6 + # via + # hatch.envs.dev + # dj-database-url + # django-allauth + # django-browser-reload + # django-debug-toolbar + # django-money + # django-oauth-toolkit + # django-registries + # django-stubs + # django-stubs-ext + # django-view-decorator + # django-zen-queries + # model-bakery +django-allauth==0.63.3 + # via hatch.envs.dev +django-browser-reload==1.7.0 + # via hatch.envs.dev +django-cache-url==3.4.5 + # via environs +django-debug-toolbar==4.2.0 + # via hatch.envs.dev +django-money==3.4.1 + # via hatch.envs.dev +django-oauth-toolkit==2.4.0 + # via hatch.envs.dev +django-registries==0.0.3 + # via hatch.envs.dev +django-stubs==1.16.0 + # via hatch.envs.dev +django-stubs-ext==5.0.2 + # via django-stubs +django-view-decorator==0.0.4 + # via hatch.envs.dev +django-zen-queries==2.1.0 + # via hatch.envs.dev +environs==11.0.0 + # via + # hatch.envs.dev + # environs +h11==0.14.0 + # via uvicorn +idna==3.7 + # via requests +iniconfig==2.0.0 + # via pytest +jwcrypto==1.5.6 + # via django-oauth-toolkit +marshmallow==3.21.3 + # via environs +model-bakery==1.17.0 + # via hatch.envs.dev +mypy==1.1.1 + # via + # hatch.envs.dev + # django-stubs +mypy-extensions==1.0.0 + # via mypy +oauthlib==3.2.2 + # via django-oauth-toolkit +packaging==24.1 + # via + # build + # marshmallow + # pytest +pip-tools==7.3.0 + # via hatch.envs.dev +pluggy==1.5.0 + # via pytest +psycopg==3.1.19 + # via + # hatch.envs.dev + # psycopg +psycopg-binary==3.1.19 + # via psycopg +py-moneyed==3.0 + # via django-money +pycparser==2.22 + # via cffi +pyproject-hooks==1.1.0 + # via build +pytest==7.2.2 + # via + # hatch.envs.dev + # pytest-cov + # pytest-django +pytest-cov==5.0.0 + # via hatch.envs.dev +pytest-django==4.5.2 + # via hatch.envs.dev +python-dotenv==1.0.1 + # via environs +pytz==2024.1 + # via django-oauth-toolkit +requests==2.32.3 + # via django-oauth-toolkit +sqlparse==0.5.0 + # via + # django + # django-debug-toolbar +tomli==2.0.1 + # via django-stubs +types-pytz==2024.1.0.20240417 + # via django-stubs +types-pyyaml==6.0.12.20240311 + # via django-stubs +typing-extensions==4.12.2 + # via + # dj-database-url + # django-stubs + # django-stubs-ext + # jwcrypto + # mypy + # psycopg + # py-moneyed +urllib3==2.2.2 + # via requests +uvicorn==0.30.0 + # via hatch.envs.dev +wheel==0.43.0 + # via pip-tools +whitenoise==6.6.0 + # via hatch.envs.dev + +# The following packages are considered to be unsafe in a requirements file: +# pip +# setuptools diff --git a/requirements/test.in b/requirements/test.in deleted file mode 100644 index 2151178..0000000 --- a/requirements/test.in +++ /dev/null @@ -1,5 +0,0 @@ --r base.txt - -coverage==7.4.0 -tblib==3.0.0 -unittest-xml-reporting==3.2.0 diff --git a/requirements/test.txt b/requirements/test.txt deleted file mode 100644 index 63ad70a..0000000 --- a/requirements/test.txt +++ /dev/null @@ -1,149 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.11 -# by the following command: -# -# pip-compile --output-file=requirements/test.txt requirements/test.in -# -asgiref==3.7.2 - # via - # -r requirements/base.txt - # django -babel==2.14.0 - # via - # -r requirements/base.txt - # py-moneyed -certifi==2023.11.17 - # via - # -r requirements/base.txt - # requests -cffi==1.16.0 - # via - # -r requirements/base.txt - # cryptography -charset-normalizer==3.3.2 - # via - # -r requirements/base.txt - # requests -click==8.1.7 - # via - # -r requirements/base.txt - # uvicorn -coverage==7.4.0 - # via -r requirements/test.in -cryptography==41.0.7 - # via - # -r requirements/base.txt - # pyjwt -defusedxml==0.7.1 - # via - # -r requirements/base.txt - # python3-openid -dj-database-url==2.1.0 - # via - # -r requirements/base.txt - # environs -dj-email-url==1.0.6 - # via - # -r requirements/base.txt - # environs -django==5.0.1 - # via - # -r requirements/base.txt - # dj-database-url - # django-allauth - # django-money - # django-zen-queries -django-allauth==0.60.0 - # via -r requirements/base.txt -django-cache-url==3.4.5 - # via - # -r requirements/base.txt - # environs -django-money==3.4.1 - # via -r requirements/base.txt -django-zen-queries==2.1.0 - # via -r requirements/base.txt -environs[django]==10.0.0 - # via -r requirements/base.txt -h11==0.14.0 - # via - # -r requirements/base.txt - # uvicorn -idna==3.6 - # via - # -r requirements/base.txt - # requests -lxml==5.0.1 - # via unittest-xml-reporting -marshmallow==3.20.1 - # via - # -r requirements/base.txt - # environs -oauthlib==3.2.2 - # via - # -r requirements/base.txt - # requests-oauthlib -packaging==23.2 - # via - # -r requirements/base.txt - # marshmallow -psycopg[binary]==3.1.16 - # via -r requirements/base.txt -psycopg-binary==3.1.16 - # via - # -r requirements/base.txt - # psycopg -py-moneyed==3.0 - # via - # -r requirements/base.txt - # django-money -pycparser==2.21 - # via - # -r requirements/base.txt - # cffi -pyjwt[crypto]==2.8.0 - # via - # -r requirements/base.txt - # django-allauth -python-dotenv==1.0.0 - # via - # -r requirements/base.txt - # environs -python3-openid==3.2.0 - # via - # -r requirements/base.txt - # django-allauth -requests==2.31.0 - # via - # -r requirements/base.txt - # django-allauth - # requests-oauthlib -requests-oauthlib==1.3.1 - # via - # -r requirements/base.txt - # django-allauth -sqlparse==0.4.4 - # via - # -r requirements/base.txt - # django -tblib==3.0.0 - # via -r requirements/test.in -typing-extensions==4.9.0 - # via - # -r requirements/base.txt - # dj-database-url - # psycopg - # py-moneyed -unittest-xml-reporting==3.2.0 - # via -r requirements/test.in -urllib3==2.1.0 - # via - # -r requirements/base.txt - # requests -uvicorn==0.25.0 - # via -r requirements/base.txt -whitenoise==6.6.0 - # via -r requirements/base.txt - -# The following packages are considered to be unsafe in a requirements file: -# setuptools