this repo has no description
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

feat: switch to pipenv (#1591)

* add devcontainer config

Signed-off-by: Aakash Singh <mail@singhaakash.dev>

* add devcontainer config

Signed-off-by: Aakash Singh <mail@singhaakash.dev>

* switch to pipenv

* fix tests

* remove test workflow restriction

* fix concurrency issue

* update deploy workflow

* revert removed step

---------

Signed-off-by: Aakash Singh <mail@singhaakash.dev>

authored by

Aakash Singh and committed by
GitHub
b5e482c7 40a3e66f

+3052 -594
+3
.dockerignore
··· 1 1 .venv 2 2 .git 3 + htmlcov 4 + staticfiles 5 + .coverage
+1 -1
.envrc
··· 1 - source .venv/bin/activate; unset PS1 1 + layout pipenv 2 2 dotenv
+13 -3
.github/dependabot.yml
··· 5 5 6 6 version: 2 7 7 updates: 8 - - package-ecosystem: "pip" # See documentation for possible values 9 - directory: "/" # Location of package manifests 8 + - package-ecosystem: "pip" 9 + directory: "/" 10 10 schedule: 11 - interval: "Weekly" 11 + interval: "weekly" 12 + 13 + - package-ecosystem: "docker" 14 + directory: "/docker" 15 + schedule: 16 + interval: "weekly" 17 + 18 + - package-ecosystem: "github-actions" 19 + directory: "/" 20 + schedule: 21 + interval: "weekly"
+18 -127
.github/workflows/deployment.yaml
··· 9 9 paths-ignore: 10 10 - "docs/**" 11 11 12 + concurrency: 13 + group: ${{ github.ref }} 14 + cancel-in-progress: true 15 + 12 16 env: 13 17 IMAGE_NAME: care 14 18 AWS_DEFAULT_REGION: ap-south-1 ··· 24 28 CONTAINER_NAME_BACKEND: "care-backend" 25 29 CONTAINER_NAME_WORKER: "care-celery-worker" 26 30 CONTAINER_NAME_CRON: "care-celery-beat" 31 + 27 32 jobs: 28 33 test: 29 - if: github.repository == 'coronasafe/care' && (github.ref == 'refs/heads/production' || github.ref == 'refs/heads/master') 30 - runs-on: ubuntu-latest 31 - env: 32 - DATABASE_URL: postgres://postgres:postgres@localhost:5432/care 33 - name: Test 34 - services: 35 - db: 36 - image: postgres:latest 37 - env: 38 - POSTGRES_USER: postgres 39 - POSTGRES_PASSWORD: postgres 40 - POSTGRES_DB: care 41 - ports: 42 - - 5432:5432 43 - options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 44 - redis: 45 - image: redis:alpine 46 - ports: 47 - - 6379:6379 48 - localstack: 49 - image: localstack/localstack:latest 50 - env: 51 - AWS_DEFAULT_REGION: ap-south-1 52 - EDGE_PORT: 4566 53 - SERVICES: s3 54 - ports: 55 - - 4566:4566 56 - steps: 57 - - uses: actions/checkout@v3 58 - 59 - - name: Set up Docker Buildx 60 - uses: docker/setup-buildx-action@v2 61 - 62 - - name: Cache Docker layers 63 - uses: actions/cache@v2 64 - with: 65 - path: /tmp/.buildx-cache 66 - key: ${{ runner.os }}-buildx-${{ hashFiles('r*/base.txt', 'r*/production.txt', 'Dockerfile') }} 67 - restore-keys: | 68 - ${{ runner.os }}-buildx- 69 - 70 - - name: Test build 71 - uses: docker/build-push-action@v3 72 - with: 73 - context: . 74 - file: Dockerfile 75 - push: false 76 - cache-from: type=local,src=/tmp/.buildx-cache 77 - cache-to: type=local,mode=max,dest=/tmp/.buildx-cache-new 78 - 79 - - name: Cache pip 80 - uses: actions/cache@v2 81 - with: 82 - path: ~/.cache/pip 83 - key: ${{ runner.os }}-pip-${{ hashFiles('requirements/*.txt') }} 84 - restore-keys: | 85 - ${{ runner.os }}-pip- 86 - ${{ runner.os }}- 87 - 88 - - name: Install dependencies 89 - run: | 90 - sudo apt-get update 91 - sudo apt-get install binutils libproj-dev libjpeg-dev zlib1g-dev -y 92 - pip install --upgrade pip 93 - pip install -r requirements/local.txt 94 - 95 - - name: Configure environment 96 - run: | 97 - echo "JWKS_BASE64=$(python manage.py generate_jwks)" >> $GITHUB_ENV 98 - 99 - - name: Run celery worker for tests 100 - run: celery -A config.celery_app worker -B --loglevel=INFO --detach 101 - 102 - - name: Run Tests with coverage 103 - run: coverage run manage.py test --settings=config.settings.test 104 - 105 - - name: Generate coverage report 106 - run: | 107 - coverage combine || true 108 - coverage xml 109 - coverage report -m 110 - 111 - - name: Upload coverage report 112 - uses: codecov/codecov-action@v2 113 - 114 - - name: Move cache 115 - run: | 116 - rm -rf /tmp/.buildx-cache 117 - mv /tmp/.buildx-cache-new /tmp/.buildx-cache 34 + uses: ./.github/workflows/test-base.yml 118 35 119 36 build-staging: 120 37 needs: test ··· 122 39 if: github.ref == 'refs/heads/master' 123 40 runs-on: ubuntu-latest 124 41 steps: 125 - - uses: actions/checkout@v3 42 + - uses: actions/checkout@v4 126 43 127 44 - name: Docker meta 128 45 id: meta ··· 141 58 - name: Set up Docker Buildx 142 59 uses: docker/setup-buildx-action@v2 143 60 144 - - name: Cache Docker layers 145 - uses: actions/cache@v2 146 - with: 147 - path: /tmp/.buildx-cache 148 - key: ${{ runner.os }}-buildx-${{ hashFiles('r*/base.txt', 'r*/production.txt', 'Dockerfile') }} 149 - restore-keys: | 150 - ${{ runner.os }}-buildx- 151 - 152 61 - name: Login to DockerHub 153 62 uses: docker/login-action@v2 154 63 with: ··· 166 75 uses: docker/build-push-action@v3 167 76 with: 168 77 context: . 169 - file: Dockerfile 78 + file: docker/prod.Dockerfile 170 79 push: true 171 80 tags: ${{ steps.meta.outputs.tags }} 172 - cache-from: type=local,src=/tmp/.buildx-cache 173 - cache-to: type=local,mode=max,dest=/tmp/.buildx-cache-new 174 - 175 - - name: Move cache 176 - run: | 177 - rm -rf /tmp/.buildx-cache 178 - mv /tmp/.buildx-cache-new /tmp/.buildx-cache 81 + cache-from: type=gha,scope=cached-stage 82 + cache-to: type=gha,scope=cached-stage,mode=max 179 83 180 84 build-production: 181 85 needs: test ··· 183 87 if: github.ref == 'refs/heads/production' 184 88 runs-on: ubuntu-latest 185 89 steps: 186 - - uses: actions/checkout@v3 90 + - uses: actions/checkout@v4 91 + 92 + - name: Set up Docker Buildx 93 + uses: docker/setup-buildx-action@v2 187 94 188 95 - name: Docker meta 189 96 id: meta ··· 200 107 flavor: | 201 108 latest=false 202 109 203 - - name: Set up Docker Buildx 204 - uses: docker/setup-buildx-action@v2 205 - 206 - - name: Cache Docker layers 207 - uses: actions/cache@v2 208 - with: 209 - path: /tmp/.buildx-cache 210 - key: ${{ runner.os }}-buildx-${{ hashFiles('r*/base.txt', 'r*/production.txt', 'Dockerfile') }} 211 - restore-keys: | 212 - ${{ runner.os }}-buildx- 213 - 214 110 - name: Login to DockerHub 215 111 uses: docker/login-action@v2 216 112 with: ··· 228 124 uses: docker/build-push-action@v3 229 125 with: 230 126 context: . 231 - file: Dockerfile 127 + file: docker/prod.Dockerfile 232 128 push: true 233 129 tags: ${{ steps.meta.outputs.tags }} 234 - cache-from: type=local,src=/tmp/.buildx-cache 235 - cache-to: type=local,mode=max,dest=/tmp/.buildx-cache-new 236 - 237 - - name: Move cache 238 - run: | 239 - rm -rf /tmp/.buildx-cache 240 - mv /tmp/.buildx-cache-new /tmp/.buildx-cache 130 + cache-from: type=gha,scope=cached-stage 131 + cache-to: type=gha,scope=cached-stage,mode=max 241 132 242 133 deploy-staging-egov: 243 134 needs: build-staging ··· 248 139 url: https://careapi.ohc.network 249 140 steps: 250 141 - name: Checkout 251 - uses: actions/checkout@v3 142 + uses: actions/checkout@v4 252 143 253 144 - name: Configure AWS credentials 254 145 uses: aws-actions/configure-aws-credentials@v1
+7 -2
.github/workflows/docs.yml
··· 24 24 - uses: actions/setup-python@v3 25 25 with: 26 26 python-version: "3.11" 27 + cache: 'pipenv' 28 + cache-dependency-path: | 29 + Pipfile.lock 30 + 31 + - name: Install pipenv 32 + run: curl https://raw.githubusercontent.com/pypa/pipenv/master/get-pipenv.py | python 27 33 28 34 - name: Install dependencies 29 - run: | 30 - pip install -r requirements/docs.txt 35 + run: pipenv sync --categories "docs" 31 36 32 37 - name: Build docs 33 38 run: |
+36
.github/workflows/test-base.yml
··· 1 + name: Test 2 + 3 + on: 4 + workflow_call: 5 + 6 + jobs: 7 + test: 8 + runs-on: ubuntu-latest 9 + steps: 10 + - uses: actions/checkout@v4 11 + 12 + - name: Set up Docker Buildx 13 + id: buildx 14 + uses: docker/setup-buildx-action@v2 15 + 16 + - name: Bake docker images 17 + uses: docker/bake-action@v3.1.0 18 + with: 19 + load: true 20 + builder: ${{ steps.buildx.outputs.name }} 21 + set: | 22 + *.cache-from=type=gha,scope=cached-stage 23 + *.cache-to=type=gha,scope=cached-stage,mode=max 24 + files: docker-compose.yaml,docker-compose.local.yaml 25 + 26 + - name: Start services 27 + run: docker compose -f docker-compose.yaml -f docker-compose.local.yaml up -d --no-build 28 + 29 + - name: Check migrations 30 + run: make checkmigration 31 + 32 + - name: Run tests 33 + run: make test-coverage 34 + 35 + - name: Upload coverage report 36 + uses: codecov/codecov-action@v3
+6 -71
.github/workflows/tests.yml
··· 1 - name: Test 1 + name: Test Pull Request 2 2 3 3 on: 4 4 pull_request: 5 5 6 + concurrency: 7 + group: ${{ github.ref }} 8 + cancel-in-progress: true 9 + 6 10 jobs: 7 11 test: 8 - if: github.repository == 'coronasafe/care' 9 - runs-on: ubuntu-latest 10 - env: 11 - DATABASE_URL: postgres://postgres:postgres@localhost:5432/care 12 - services: 13 - db: 14 - image: postgres:latest 15 - env: 16 - POSTGRES_USER: postgres 17 - POSTGRES_PASSWORD: postgres 18 - POSTGRES_DB: care 19 - ports: 20 - - 5432:5432 21 - options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 22 - redis: 23 - image: redis:alpine 24 - ports: 25 - - 6379:6379 26 - localstack: 27 - image: localstack/localstack:latest 28 - env: 29 - AWS_DEFAULT_REGION: ap-south-1 30 - EDGE_PORT: 4566 31 - SERVICES: s3 32 - ports: 33 - - 4566:4566 34 - steps: 35 - - uses: actions/checkout@v3 36 - 37 - - name: Set up Python 3.x 38 - uses: actions/setup-python@v3 39 - with: 40 - python-version: "3.11" 41 - cache: "pip" 42 - 43 - - name: Cache pip 44 - uses: actions/cache@v2 45 - with: 46 - path: ~/.cache/pip 47 - key: ${{ runner.os }}-pip-${{ hashFiles('requirements/*.txt') }} 48 - restore-keys: | 49 - ${{ runner.os }}-pip- 50 - ${{ runner.os }}- 51 - 52 - - name: Install system packages 53 - run: | 54 - sudo apt-get update 55 - sudo apt-get install binutils libproj-dev libjpeg-dev zlib1g-dev -y 56 - 57 - - name: Install CI dependencies 58 - run: | 59 - pip install --upgrade pip 60 - pip install -r requirements/local.txt 61 - 62 - - name: Check for missing migrations 63 - run: | 64 - python manage.py makemigrations --check --dry-run --noinput 65 - 66 - - name: Configure environment 67 - run: | 68 - echo "JWKS_BASE64=$(python manage.py generate_jwks)" >> $GITHUB_ENV 69 - 70 - - name: Run Tests with coverage 71 - run: coverage run manage.py test --settings=config.settings.test --parallel=$(nproc) 72 - 73 - - name: Generate coverage report 74 - run: | 75 - coverage combine || true 76 - coverage xml 77 - coverage report -m 12 + uses: ./.github/workflows/test-base.yml
-1
.gitignore
··· 324 324 [Ii]nclude 325 325 [Ll]ib 326 326 [Ll]ib64 327 - [Ss]cripts 328 327 pyvenv.cfg 329 328 pip-selfcheck.json 330 329 .env
+9 -4
CONTRIBUTING.md
··· 9 9 10 10 ### Setting up the development environment 11 11 12 + Install dependencies 13 + 14 + ```bash 15 + pipenv sync --categories "packages dev-packages docs" 16 + ``` 17 + 12 18 Install pre-commit hooks 13 19 14 20 ```bash 15 - pip install -U pre-commit 16 21 pre-commit install 17 22 ``` 18 23 ··· 52 57 # activate the virtualenv 53 58 source .venv/bin/activate 54 59 # install dependencies 55 - pip install -r requirements/local.txt 60 + pipenv sync --categories "packages dev-packages docs" 56 61 # to read from .env file 57 62 export DJANGO_READ_DOT_ENV_FILE=true 58 63 # run migrations ··· 66 71 export PATH=$PATH:/Applications/Postgres.app/Contents/Versions/14/bin 67 72 ``` 68 73 69 - If you're pip install is failing on Pillow Consider installing these dependencies: 74 + If you're pipenv install is failing on Pillow Consider installing these dependencies: 70 75 ```bash 71 76 brew install libjpeg libtiff little-cms2 openjpeg webp freetype harfbuzz fribidi 72 77 ``` ··· 120 125 python manage.py test 121 126 ``` 122 127 123 - # 128 + # 124 129 125 130 **Join us on Slack for more information**
-75
Dockerfile
··· 1 - ARG PYTHON_VERSION=3.11-slim-bullseye 2 - 3 - 4 - # define an alias for the specfic python version used in this file. 5 - FROM python:${PYTHON_VERSION} as python 6 - 7 - # Python build stage 8 - FROM python as python-build-stage 9 - 10 - ARG BUILD_ENVIRONMENT=production 11 - 12 - # Install apt packages 13 - RUN apt-get update && apt-get install --no-install-recommends -y \ 14 - # dependencies for building Python packages 15 - build-essential libjpeg-dev zlib1g-dev \ 16 - # psycopg dependencies 17 - libpq-dev 18 - 19 - # Requirements are installed here to ensure they will be cached. 20 - COPY ./requirements . 21 - 22 - # Create Python Dependency and Sub-Dependency Wheels. 23 - RUN pip wheel --wheel-dir /usr/src/app/wheels \ 24 - -r ${BUILD_ENVIRONMENT}.txt 25 - 26 - 27 - 28 - # Python 'run' stage 29 - FROM python as python-run-stage 30 - 31 - ARG BUILD_ENVIRONMENT=production 32 - ARG APP_HOME=/app 33 - 34 - ENV PYTHONUNBUFFERED 1 35 - ENV PYTHONDONTWRITEBYTECODE 1 36 - ENV BUILD_ENV ${BUILD_ENVIRONMENT} 37 - 38 - WORKDIR ${APP_HOME} 39 - 40 - RUN addgroup --system django \ 41 - && adduser --system --ingroup django django 42 - 43 - # Install required system dependencies 44 - RUN apt-get update && apt-get install --no-install-recommends -y \ 45 - # psycopg dependencies 46 - libpq-dev \ 47 - # Translations dependencies 48 - gettext \ 49 - # Misc 50 - wget gnupg chromium \ 51 - # cleaning up unused files 52 - && apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ 53 - && rm -rf /var/lib/apt/lists/* 54 - 55 - # All absolute dir copies ignore workdir instruction. All relative dir copies are wrt to the workdir instruction 56 - # copy python dependency wheels from python-build-stage 57 - COPY --from=python-build-stage /usr/src/app/wheels /wheels/ 58 - 59 - # use wheels to install python dependencies 60 - RUN pip install --no-cache-dir --no-index --find-links=/wheels/ /wheels/* \ 61 - && rm -rf /wheels/ 62 - 63 - COPY --chown=django:django ./start /start 64 - RUN sed -i 's/\r$//g' /start 65 - RUN chmod +x /start 66 - 67 - # copy application code to WORKDIR 68 - COPY --chown=django:django . ${APP_HOME} 69 - 70 - # make django owner of the WORKDIR directory as well. 71 - RUN chown django:django ${APP_HOME} 72 - 73 - USER django 74 - 75 - EXPOSE 9000
+12 -5
Makefile
··· 10 10 $(error "command docker is not available, please install Docker") 11 11 endif 12 12 13 + install: 14 + pipenv install --categories "packages dev-packeges docs" 15 + 13 16 re-build: 14 17 docker compose -f docker-compose.yaml -f $(docker_config_file) build --no-cache 15 18 ··· 28 31 logs: 29 32 docker compose -f docker-compose.yaml -f $(docker_config_file) logs 30 33 34 + checkmigration: up 35 + docker compose exec backend bash -c "python manage.py makemigrations --check --dry-run" 36 + 31 37 makemigrations: up 32 - docker exec care bash -c "python manage.py makemigrations" 38 + docker compose exec backend bash -c "python manage.py makemigrations" 33 39 34 40 test: up 35 - docker exec care bash -c "python manage.py test --keepdb --parallel=$(nproc)" 41 + docker compose exec backend bash -c "python manage.py test --keepdb --parallel" 36 42 37 - test_coverage: up 38 - docker exec care bash -c "coverage run manage.py test --settings=config.settings.test --keepdb --parallel=$(nproc)" 39 - docker exec care bash -c "coverage combine || true; coverage report" 43 + test-coverage: up 44 + docker compose exec backend bash -c "coverage run manage.py test --settings=config.settings.test --keepdb --parallel" 45 + docker compose exec backend bash -c "coverage combine || true; coverage xml" 46 + docker compose cp backend:/app/coverage.xml coverage.xml
+76
Pipfile
··· 1 + [[source]] 2 + url = "https://pypi.org/simple" 3 + verify_ssl = true 4 + name = "pypi" 5 + 6 + [packages] 7 + argon2-cffi = "*" 8 + authlib = "==1.2.*" 9 + boto3 = "*" 10 + celery = "==5.*" 11 + "fhir.resources" = "==6.5.0" 12 + django = "==4.2.*" 13 + django-environ = "*" 14 + django-cors-headers = "==4.*" 15 + django-filter = "==23.*" 16 + django-hardcopy = "==0.1.4" 17 + django-maintenance-mode = "==0.18.0" 18 + django-model-utils = "==4.3.*" 19 + django-multiselectfield = "==0.1.12" 20 + django-queryset-csv = "==1.1.0" 21 + django-ratelimit = "==4.0.0" 22 + django-redis = "==5.*" 23 + django-rest-passwordreset = "==1.3.0" 24 + django-simple-history = "==3.3.0" 25 + djangoql = "==0.17.*" 26 + djangorestframework = "==3.14.*" 27 + djangorestframework-simplejwt = "==5.*" 28 + dry-rest-permissions = "==0.1.10" 29 + drf-nested-routers = "==0.93.*" 30 + drf-spectacular = "*" 31 + healthy-django = ">=0.1.0" 32 + jsonschema = "==4.*" 33 + jwcrypto = "==1.5.0" 34 + littletable = "==2.*" 35 + pillow = "*" 36 + psycopg = "*" 37 + pycryptodome = "==3.*" 38 + pydantic = "==1.*" # fix for fhir.resources < 7.0.2 39 + pyjwt = "==2.*" 40 + python-slugify = "*" 41 + pywebpush = "==1.14.0" 42 + redis = {extras = ["hiredis"] } 43 + requests = "*" 44 + whitenoise = "*" 45 + gunicorn = "*" 46 + newrelic = "*" 47 + sentry-sdk = "*" 48 + 49 + [dev-packages] 50 + black = "*" 51 + boto3-stubs = {extras = ["s3", "boto3"], version = "*"} 52 + coverage = "*" 53 + debugpy = "*" 54 + django-coverage-plugin = "*" 55 + django-debug-toolbar = "*" 56 + django-extensions = "*" 57 + django-silk = "*" 58 + django-stubs = "*" 59 + djangorestframework-stubs = "*" 60 + factory-boy = "*" 61 + flake8 = "*" 62 + isort = "*" 63 + mypy = "*" 64 + pre-commit = "*" 65 + tblib = "*" 66 + watchdog = "*" 67 + werkzeug = "*" 68 + freezegun = "*" 69 + ipython = "*" 70 + 71 + [docs] 72 + furo = "*" 73 + sphinx = "*" 74 + 75 + [requires] 76 + python_version = "3.11"
+2640
Pipfile.lock
··· 1 + { 2 + "_meta": { 3 + "hash": { 4 + "sha256": "cdfb7c6170ee10e7508edc7759af9aafc7f88fe1136e3f73a14fad827ec9c70f" 5 + }, 6 + "pipfile-spec": 6, 7 + "requires": { 8 + "python_version": "3.11" 9 + }, 10 + "sources": [ 11 + { 12 + "name": "pypi", 13 + "url": "https://pypi.org/simple", 14 + "verify_ssl": true 15 + } 16 + ] 17 + }, 18 + "default": { 19 + "amqp": { 20 + "hashes": [ 21 + "sha256:2c1b13fecc0893e946c65cbd5f36427861cffa4ea2201d8f6fca22e2a373b5e2", 22 + "sha256:6f0956d2c23d8fa6e7691934d8c3930eadb44972cbbd1a7ae3a520f735d43359" 23 + ], 24 + "markers": "python_version >= '3.6'", 25 + "version": "==5.1.1" 26 + }, 27 + "argon2-cffi": { 28 + "hashes": [ 29 + "sha256:879c3e79a2729ce768ebb7d36d4609e3a78a4ca2ec3a9f12286ca057e3d0db08", 30 + "sha256:c670642b78ba29641818ab2e68bd4e6a78ba53b7eff7b4c3815ae16abf91c7ea" 31 + ], 32 + "index": "pypi", 33 + "markers": "python_version >= '3.7'", 34 + "version": "==23.1.0" 35 + }, 36 + "argon2-cffi-bindings": { 37 + "hashes": [ 38 + "sha256:20ef543a89dee4db46a1a6e206cd015360e5a75822f76df533845c3cbaf72670", 39 + "sha256:2c3e3cc67fdb7d82c4718f19b4e7a87123caf8a93fde7e23cf66ac0337d3cb3f", 40 + "sha256:3b9ef65804859d335dc6b31582cad2c5166f0c3e7975f324d9ffaa34ee7e6583", 41 + "sha256:3e385d1c39c520c08b53d63300c3ecc28622f076f4c2b0e6d7e796e9f6502194", 42 + "sha256:58ed19212051f49a523abb1dbe954337dc82d947fb6e5a0da60f7c8471a8476c", 43 + "sha256:5e00316dabdaea0b2dd82d141cc66889ced0cdcbfa599e8b471cf22c620c329a", 44 + "sha256:603ca0aba86b1349b147cab91ae970c63118a0f30444d4bc80355937c950c082", 45 + "sha256:6a22ad9800121b71099d0fb0a65323810a15f2e292f2ba450810a7316e128ee5", 46 + "sha256:8cd69c07dd875537a824deec19f978e0f2078fdda07fd5c42ac29668dda5f40f", 47 + "sha256:93f9bf70084f97245ba10ee36575f0c3f1e7d7724d67d8e5b08e61787c320ed7", 48 + "sha256:9524464572e12979364b7d600abf96181d3541da11e23ddf565a32e70bd4dc0d", 49 + "sha256:b2ef1c30440dbbcba7a5dc3e319408b59676e2e039e2ae11a8775ecf482b192f", 50 + "sha256:b746dba803a79238e925d9046a63aa26bf86ab2a2fe74ce6b009a1c3f5c8f2ae", 51 + "sha256:bb89ceffa6c791807d1305ceb77dbfacc5aa499891d2c55661c6459651fc39e3", 52 + "sha256:bd46088725ef7f58b5a1ef7ca06647ebaf0eb4baff7d1d0d177c6cc8744abd86", 53 + "sha256:ccb949252cb2ab3a08c02024acb77cfb179492d5701c7cbdbfd776124d4d2367", 54 + "sha256:d4966ef5848d820776f5f562a7d45fdd70c2f330c961d0d745b784034bd9f48d", 55 + "sha256:e415e3f62c8d124ee16018e491a009937f8cf7ebf5eb430ffc5de21b900dad93", 56 + "sha256:ed2937d286e2ad0cc79a7087d3c272832865f779430e0cc2b4f3718d3159b0cb", 57 + "sha256:f1152ac548bd5b8bcecfb0b0371f082037e47128653df2e8ba6e914d384f3c3e", 58 + "sha256:f9f8b450ed0547e3d473fdc8612083fd08dd2120d6ac8f73828df9b7d45bb351" 59 + ], 60 + "markers": "python_version >= '3.6'", 61 + "version": "==21.2.0" 62 + }, 63 + "asgiref": { 64 + "hashes": [ 65 + "sha256:89b2ef2247e3b562a16eef663bc0e2e703ec6468e2fa8a5cd61cd449786d4f6e", 66 + "sha256:9e0ce3aa93a819ba5b45120216b23878cf6e8525eb3848653452b4192b92afed" 67 + ], 68 + "markers": "python_version >= '3.7'", 69 + "version": "==3.7.2" 70 + }, 71 + "attrs": { 72 + "hashes": [ 73 + "sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04", 74 + "sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015" 75 + ], 76 + "markers": "python_version >= '3.7'", 77 + "version": "==23.1.0" 78 + }, 79 + "authlib": { 80 + "hashes": [ 81 + "sha256:421f7c6b468d907ca2d9afede256f068f87e34d23dd221c07d13d4c234726afb", 82 + "sha256:c88984ea00149a90e3537c964327da930779afa4564e354edfd98410bea01911" 83 + ], 84 + "index": "pypi", 85 + "version": "==1.2.1" 86 + }, 87 + "billiard": { 88 + "hashes": [ 89 + "sha256:0f50d6be051c6b2b75bfbc8bfd85af195c5739c281d3f5b86a5640c65563614a", 90 + "sha256:1ad2eeae8e28053d729ba3373d34d9d6e210f6e4d8bf0a9c64f92bd053f1edf5" 91 + ], 92 + "markers": "python_version >= '3.7'", 93 + "version": "==4.1.0" 94 + }, 95 + "boto3": { 96 + "hashes": [ 97 + "sha256:c53c92dfe22489ba31e918c2e7b59ff43e2e778bd3d3559e62351a739382bb5c", 98 + "sha256:eea3b07e0f28c9f92bccab972af24a3b0dd951c69d93da75227b8ecd3e18f6c4" 99 + ], 100 + "index": "pypi", 101 + "markers": "python_version >= '3.7'", 102 + "version": "==1.28.44" 103 + }, 104 + "botocore": { 105 + "hashes": [ 106 + "sha256:83d61c1ca781e6ede19fcc4d5dd73004eee3825a2b220f0d7727e32069209d98", 107 + "sha256:84f90919fecb4a4f417fd10145c8a87ff2c4b14d6381cd34d9babf02110b3315" 108 + ], 109 + "markers": "python_version >= '3.7'", 110 + "version": "==1.31.44" 111 + }, 112 + "celery": { 113 + "hashes": [ 114 + "sha256:1e6ed40af72695464ce98ca2c201ad0ef8fd192246f6c9eac8bba343b980ad34", 115 + "sha256:9023df6a8962da79eb30c0c84d5f4863d9793a466354cc931d7f72423996de28" 116 + ], 117 + "index": "pypi", 118 + "markers": "python_version >= '3.8'", 119 + "version": "==5.3.4" 120 + }, 121 + "certifi": { 122 + "hashes": [ 123 + "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082", 124 + "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9" 125 + ], 126 + "markers": "python_version >= '3.6'", 127 + "version": "==2023.7.22" 128 + }, 129 + "cffi": { 130 + "hashes": [ 131 + "sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5", 132 + "sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef", 133 + "sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104", 134 + "sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426", 135 + "sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405", 136 + "sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375", 137 + "sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a", 138 + "sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e", 139 + "sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc", 140 + "sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf", 141 + "sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185", 142 + "sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497", 143 + "sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3", 144 + "sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35", 145 + "sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c", 146 + "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83", 147 + "sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21", 148 + "sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca", 149 + "sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984", 150 + "sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac", 151 + "sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd", 152 + "sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee", 153 + "sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a", 154 + "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2", 155 + "sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192", 156 + "sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7", 157 + "sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585", 158 + "sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f", 159 + "sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e", 160 + "sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27", 161 + "sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b", 162 + "sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e", 163 + "sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e", 164 + "sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d", 165 + "sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c", 166 + "sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415", 167 + "sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82", 168 + "sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02", 169 + "sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314", 170 + "sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325", 171 + "sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c", 172 + "sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3", 173 + "sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914", 174 + "sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045", 175 + "sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d", 176 + "sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9", 177 + "sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5", 178 + "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2", 179 + "sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c", 180 + "sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3", 181 + "sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2", 182 + "sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8", 183 + "sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d", 184 + "sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d", 185 + "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9", 186 + "sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162", 187 + "sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76", 188 + "sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4", 189 + "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e", 190 + "sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9", 191 + "sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6", 192 + "sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b", 193 + "sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01", 194 + "sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0" 195 + ], 196 + "version": "==1.15.1" 197 + }, 198 + "charset-normalizer": { 199 + "hashes": [ 200 + "sha256:04e57ab9fbf9607b77f7d057974694b4f6b142da9ed4a199859d9d4d5c63fe96", 201 + "sha256:09393e1b2a9461950b1c9a45d5fd251dc7c6f228acab64da1c9c0165d9c7765c", 202 + "sha256:0b87549028f680ca955556e3bd57013ab47474c3124dc069faa0b6545b6c9710", 203 + "sha256:1000fba1057b92a65daec275aec30586c3de2401ccdcd41f8a5c1e2c87078706", 204 + "sha256:1249cbbf3d3b04902ff081ffbb33ce3377fa6e4c7356f759f3cd076cc138d020", 205 + "sha256:1920d4ff15ce893210c1f0c0e9d19bfbecb7983c76b33f046c13a8ffbd570252", 206 + "sha256:193cbc708ea3aca45e7221ae58f0fd63f933753a9bfb498a3b474878f12caaad", 207 + "sha256:1a100c6d595a7f316f1b6f01d20815d916e75ff98c27a01ae817439ea7726329", 208 + "sha256:1f30b48dd7fa1474554b0b0f3fdfdd4c13b5c737a3c6284d3cdc424ec0ffff3a", 209 + "sha256:203f0c8871d5a7987be20c72442488a0b8cfd0f43b7973771640fc593f56321f", 210 + "sha256:246de67b99b6851627d945db38147d1b209a899311b1305dd84916f2b88526c6", 211 + "sha256:2dee8e57f052ef5353cf608e0b4c871aee320dd1b87d351c28764fc0ca55f9f4", 212 + "sha256:2efb1bd13885392adfda4614c33d3b68dee4921fd0ac1d3988f8cbb7d589e72a", 213 + "sha256:2f4ac36d8e2b4cc1aa71df3dd84ff8efbe3bfb97ac41242fbcfc053c67434f46", 214 + "sha256:3170c9399da12c9dc66366e9d14da8bf7147e1e9d9ea566067bbce7bb74bd9c2", 215 + "sha256:3b1613dd5aee995ec6d4c69f00378bbd07614702a315a2cf6c1d21461fe17c23", 216 + "sha256:3bb3d25a8e6c0aedd251753a79ae98a093c7e7b471faa3aa9a93a81431987ace", 217 + "sha256:3bb7fda7260735efe66d5107fb7e6af6a7c04c7fce9b2514e04b7a74b06bf5dd", 218 + "sha256:41b25eaa7d15909cf3ac4c96088c1f266a9a93ec44f87f1d13d4a0e86c81b982", 219 + "sha256:45de3f87179c1823e6d9e32156fb14c1927fcc9aba21433f088fdfb555b77c10", 220 + "sha256:46fb8c61d794b78ec7134a715a3e564aafc8f6b5e338417cb19fe9f57a5a9bf2", 221 + "sha256:48021783bdf96e3d6de03a6e39a1171ed5bd7e8bb93fc84cc649d11490f87cea", 222 + "sha256:4957669ef390f0e6719db3613ab3a7631e68424604a7b448f079bee145da6e09", 223 + "sha256:5e86d77b090dbddbe78867a0275cb4df08ea195e660f1f7f13435a4649e954e5", 224 + "sha256:6339d047dab2780cc6220f46306628e04d9750f02f983ddb37439ca47ced7149", 225 + "sha256:681eb3d7e02e3c3655d1b16059fbfb605ac464c834a0c629048a30fad2b27489", 226 + "sha256:6c409c0deba34f147f77efaa67b8e4bb83d2f11c8806405f76397ae5b8c0d1c9", 227 + "sha256:7095f6fbfaa55defb6b733cfeb14efaae7a29f0b59d8cf213be4e7ca0b857b80", 228 + "sha256:70c610f6cbe4b9fce272c407dd9d07e33e6bf7b4aa1b7ffb6f6ded8e634e3592", 229 + "sha256:72814c01533f51d68702802d74f77ea026b5ec52793c791e2da806a3844a46c3", 230 + "sha256:7a4826ad2bd6b07ca615c74ab91f32f6c96d08f6fcc3902ceeedaec8cdc3bcd6", 231 + "sha256:7c70087bfee18a42b4040bb9ec1ca15a08242cf5867c58726530bdf3945672ed", 232 + "sha256:855eafa5d5a2034b4621c74925d89c5efef61418570e5ef9b37717d9c796419c", 233 + "sha256:8700f06d0ce6f128de3ccdbc1acaea1ee264d2caa9ca05daaf492fde7c2a7200", 234 + "sha256:89f1b185a01fe560bc8ae5f619e924407efca2191b56ce749ec84982fc59a32a", 235 + "sha256:8b2c760cfc7042b27ebdb4a43a4453bd829a5742503599144d54a032c5dc7e9e", 236 + "sha256:8c2f5e83493748286002f9369f3e6607c565a6a90425a3a1fef5ae32a36d749d", 237 + "sha256:8e098148dd37b4ce3baca71fb394c81dc5d9c7728c95df695d2dca218edf40e6", 238 + "sha256:94aea8eff76ee6d1cdacb07dd2123a68283cb5569e0250feab1240058f53b623", 239 + "sha256:95eb302ff792e12aba9a8b8f8474ab229a83c103d74a750ec0bd1c1eea32e669", 240 + "sha256:9bd9b3b31adcb054116447ea22caa61a285d92e94d710aa5ec97992ff5eb7cf3", 241 + "sha256:9e608aafdb55eb9f255034709e20d5a83b6d60c054df0802fa9c9883d0a937aa", 242 + "sha256:a103b3a7069b62f5d4890ae1b8f0597618f628b286b03d4bc9195230b154bfa9", 243 + "sha256:a386ebe437176aab38c041de1260cd3ea459c6ce5263594399880bbc398225b2", 244 + "sha256:a38856a971c602f98472050165cea2cdc97709240373041b69030be15047691f", 245 + "sha256:a401b4598e5d3f4a9a811f3daf42ee2291790c7f9d74b18d75d6e21dda98a1a1", 246 + "sha256:a7647ebdfb9682b7bb97e2a5e7cb6ae735b1c25008a70b906aecca294ee96cf4", 247 + "sha256:aaf63899c94de41fe3cf934601b0f7ccb6b428c6e4eeb80da72c58eab077b19a", 248 + "sha256:b0dac0ff919ba34d4df1b6131f59ce95b08b9065233446be7e459f95554c0dc8", 249 + "sha256:baacc6aee0b2ef6f3d308e197b5d7a81c0e70b06beae1f1fcacffdbd124fe0e3", 250 + "sha256:bf420121d4c8dce6b889f0e8e4ec0ca34b7f40186203f06a946fa0276ba54029", 251 + "sha256:c04a46716adde8d927adb9457bbe39cf473e1e2c2f5d0a16ceb837e5d841ad4f", 252 + "sha256:c0b21078a4b56965e2b12f247467b234734491897e99c1d51cee628da9786959", 253 + "sha256:c1c76a1743432b4b60ab3358c937a3fe1341c828ae6194108a94c69028247f22", 254 + "sha256:c4983bf937209c57240cff65906b18bb35e64ae872da6a0db937d7b4af845dd7", 255 + "sha256:c4fb39a81950ec280984b3a44f5bd12819953dc5fa3a7e6fa7a80db5ee853952", 256 + "sha256:c57921cda3a80d0f2b8aec7e25c8aa14479ea92b5b51b6876d975d925a2ea346", 257 + "sha256:c8063cf17b19661471ecbdb3df1c84f24ad2e389e326ccaf89e3fb2484d8dd7e", 258 + "sha256:ccd16eb18a849fd8dcb23e23380e2f0a354e8daa0c984b8a732d9cfaba3a776d", 259 + "sha256:cd6dbe0238f7743d0efe563ab46294f54f9bc8f4b9bcf57c3c666cc5bc9d1299", 260 + "sha256:d62e51710986674142526ab9f78663ca2b0726066ae26b78b22e0f5e571238dd", 261 + "sha256:db901e2ac34c931d73054d9797383d0f8009991e723dab15109740a63e7f902a", 262 + "sha256:e03b8895a6990c9ab2cdcd0f2fe44088ca1c65ae592b8f795c3294af00a461c3", 263 + "sha256:e1c8a2f4c69e08e89632defbfabec2feb8a8d99edc9f89ce33c4b9e36ab63037", 264 + "sha256:e4b749b9cc6ee664a3300bb3a273c1ca8068c46be705b6c31cf5d276f8628a94", 265 + "sha256:e6a5bf2cba5ae1bb80b154ed68a3cfa2fa00fde979a7f50d6598d3e17d9ac20c", 266 + "sha256:e857a2232ba53ae940d3456f7533ce6ca98b81917d47adc3c7fd55dad8fab858", 267 + "sha256:ee4006268ed33370957f55bf2e6f4d263eaf4dc3cfc473d1d90baff6ed36ce4a", 268 + "sha256:eef9df1eefada2c09a5e7a40991b9fc6ac6ef20b1372abd48d2794a316dc0449", 269 + "sha256:f058f6963fd82eb143c692cecdc89e075fa0828db2e5b291070485390b2f1c9c", 270 + "sha256:f25c229a6ba38a35ae6e25ca1264621cc25d4d38dca2942a7fce0b67a4efe918", 271 + "sha256:f2a1d0fd4242bd8643ce6f98927cf9c04540af6efa92323e9d3124f57727bfc1", 272 + "sha256:f7560358a6811e52e9c4d142d497f1a6e10103d3a6881f18d04dbce3729c0e2c", 273 + "sha256:f779d3ad205f108d14e99bb3859aa7dd8e9c68874617c72354d7ecaec2a054ac", 274 + "sha256:f87f746ee241d30d6ed93969de31e5ffd09a2961a051e60ae6bddde9ec3583aa" 275 + ], 276 + "markers": "python_full_version >= '3.7.0'", 277 + "version": "==3.2.0" 278 + }, 279 + "click": { 280 + "hashes": [ 281 + "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28", 282 + "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de" 283 + ], 284 + "markers": "python_version >= '3.7'", 285 + "version": "==8.1.7" 286 + }, 287 + "click-didyoumean": { 288 + "hashes": [ 289 + "sha256:a0713dc7a1de3f06bc0df5a9567ad19ead2d3d5689b434768a6145bff77c0667", 290 + "sha256:f184f0d851d96b6d29297354ed981b7dd71df7ff500d82fa6d11f0856bee8035" 291 + ], 292 + "markers": "python_full_version >= '3.6.2' and python_full_version < '4.0.0'", 293 + "version": "==0.3.0" 294 + }, 295 + "click-plugins": { 296 + "hashes": [ 297 + "sha256:46ab999744a9d831159c3411bb0c79346d94a444df9a3a3742e9ed63645f264b", 298 + "sha256:5d262006d3222f5057fd81e1623d4443e41dcda5dc815c06b442aa3c02889fc8" 299 + ], 300 + "version": "==1.1.1" 301 + }, 302 + "click-repl": { 303 + "hashes": [ 304 + "sha256:17849c23dba3d667247dc4defe1757fff98694e90fe37474f3feebb69ced26a9", 305 + "sha256:fb7e06deb8da8de86180a33a9da97ac316751c094c6899382da7feeeeb51b812" 306 + ], 307 + "markers": "python_version >= '3.6'", 308 + "version": "==0.3.0" 309 + }, 310 + "cryptography": { 311 + "hashes": [ 312 + "sha256:0d09fb5356f975974dbcb595ad2d178305e5050656affb7890a1583f5e02a306", 313 + "sha256:23c2d778cf829f7d0ae180600b17e9fceea3c2ef8b31a99e3c694cbbf3a24b84", 314 + "sha256:3fb248989b6363906827284cd20cca63bb1a757e0a2864d4c1682a985e3dca47", 315 + "sha256:41d7aa7cdfded09b3d73a47f429c298e80796c8e825ddfadc84c8a7f12df212d", 316 + "sha256:42cb413e01a5d36da9929baa9d70ca90d90b969269e5a12d39c1e0d475010116", 317 + "sha256:4c2f0d35703d61002a2bbdcf15548ebb701cfdd83cdc12471d2bae80878a4207", 318 + "sha256:4fd871184321100fb400d759ad0cddddf284c4b696568204d281c902fc7b0d81", 319 + "sha256:5259cb659aa43005eb55a0e4ff2c825ca111a0da1814202c64d28a985d33b087", 320 + "sha256:57a51b89f954f216a81c9d057bf1a24e2f36e764a1ca9a501a6964eb4a6800dd", 321 + "sha256:652627a055cb52a84f8c448185922241dd5217443ca194d5739b44612c5e6507", 322 + "sha256:67e120e9a577c64fe1f611e53b30b3e69744e5910ff3b6e97e935aeb96005858", 323 + "sha256:6af1c6387c531cd364b72c28daa29232162010d952ceb7e5ca8e2827526aceae", 324 + "sha256:6d192741113ef5e30d89dcb5b956ef4e1578f304708701b8b73d38e3e1461f34", 325 + "sha256:7efe8041897fe7a50863e51b77789b657a133c75c3b094e51b5e4b5cec7bf906", 326 + "sha256:84537453d57f55a50a5b6835622ee405816999a7113267739a1b4581f83535bd", 327 + "sha256:8f09daa483aedea50d249ef98ed500569841d6498aa9c9f4b0531b9964658922", 328 + "sha256:95dd7f261bb76948b52a5330ba5202b91a26fbac13ad0e9fc8a3ac04752058c7", 329 + "sha256:a74fbcdb2a0d46fe00504f571a2a540532f4c188e6ccf26f1f178480117b33c4", 330 + "sha256:a983e441a00a9d57a4d7c91b3116a37ae602907a7618b882c8013b5762e80574", 331 + "sha256:ab8de0d091acbf778f74286f4989cf3d1528336af1b59f3e5d2ebca8b5fe49e1", 332 + "sha256:aeb57c421b34af8f9fe830e1955bf493a86a7996cc1338fe41b30047d16e962c", 333 + "sha256:ce785cf81a7bdade534297ef9e490ddff800d956625020ab2ec2780a556c313e", 334 + "sha256:d0d651aa754ef58d75cec6edfbd21259d93810b73f6ec246436a21b7841908de" 335 + ], 336 + "markers": "python_version >= '3.7'", 337 + "version": "==41.0.3" 338 + }, 339 + "deprecated": { 340 + "hashes": [ 341 + "sha256:6fac8b097794a90302bdbb17b9b815e732d3c4720583ff1b198499d78470466c", 342 + "sha256:e5323eb936458dccc2582dc6f9c322c852a775a27065ff2b0c4970b9d53d01b3" 343 + ], 344 + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", 345 + "version": "==1.2.14" 346 + }, 347 + "django": { 348 + "hashes": [ 349 + "sha256:5e5c1c9548ffb7796b4a8a4782e9a2e5a3df3615259fc1bfd3ebc73b646146c1", 350 + "sha256:b6b2b5cae821077f137dc4dade696a1c2aa292f892eca28fa8d7bfdf2608ddd4" 351 + ], 352 + "index": "pypi", 353 + "markers": "python_version >= '3.8'", 354 + "version": "==4.2.5" 355 + }, 356 + "django-cors-headers": { 357 + "hashes": [ 358 + "sha256:9ada212b0e2efd4a5e339360ffc869cb21ac5605e810afe69f7308e577ea5bde", 359 + "sha256:f9749c6410fe738278bc2b6ef17f05195bc7b251693c035752d8257026af024f" 360 + ], 361 + "index": "pypi", 362 + "markers": "python_version >= '3.8'", 363 + "version": "==4.2.0" 364 + }, 365 + "django-environ": { 366 + "hashes": [ 367 + "sha256:0ff95ab4344bfeff693836aa978e6840abef2e2f1145adff7735892711590c05", 368 + "sha256:f32a87aa0899894c27d4e1776fa6b477e8164ed7f6b3e410a62a6d72caaf64be" 369 + ], 370 + "index": "pypi", 371 + "markers": "python_version >= '3.6' and python_version < '4'", 372 + "version": "==0.11.2" 373 + }, 374 + "django-filter": { 375 + "hashes": [ 376 + "sha256:2fe15f78108475eda525692813205fa6f9e8c1caf1ae65daa5862d403c6dbf00", 377 + "sha256:d12d8e0fc6d3eb26641e553e5d53b191eb8cec611427d4bdce0becb1f7c172b5" 378 + ], 379 + "index": "pypi", 380 + "markers": "python_version >= '3.7'", 381 + "version": "==23.2" 382 + }, 383 + "django-hardcopy": { 384 + "hashes": [ 385 + "sha256:1ceda5fb262c9787fbd2554b4b92db9c8feebdd6da4ef6c1746e1aa8c8e55377", 386 + "sha256:8bf962245d95918bd5c4b4e1b809a3d029b19d4f331e1c7c5f65768fb8366ed8" 387 + ], 388 + "index": "pypi", 389 + "version": "==0.1.4" 390 + }, 391 + "django-maintenance-mode": { 392 + "hashes": [ 393 + "sha256:9fcc4db6c38f7170f5b8ea3d915406075fa7c6da86be58a117067057f706083d", 394 + "sha256:c4dd2098279154c6a1221a3631ddf070cad1633320074cc457376498fd78f476" 395 + ], 396 + "index": "pypi", 397 + "version": "==0.18.0" 398 + }, 399 + "django-model-utils": { 400 + "hashes": [ 401 + "sha256:2e2e4f13e4f14613134a9777db7ad4265f59a1d8f1384107bcaa3028fe3c87c1", 402 + "sha256:8c0b0177bab909a8635b602d960daa67e80607aa5469217857271a60726d7a4b" 403 + ], 404 + "index": "pypi", 405 + "markers": "python_version >= '3.7'", 406 + "version": "==4.3.1" 407 + }, 408 + "django-multiselectfield": { 409 + "hashes": [ 410 + "sha256:c270faa7f80588214c55f2d68cbddb2add525c2aa830c216b8a198de914eb470", 411 + "sha256:d0a4c71568fb2332c71478ffac9f8708e01314a35cf923dfd7a191343452f9f9" 412 + ], 413 + "index": "pypi", 414 + "version": "==0.1.12" 415 + }, 416 + "django-queryset-csv": { 417 + "hashes": [ 418 + "sha256:46b4fd55686d40c81d4ee725155bde73c9ffd201b7f87d9abfea3679cc7a4a86" 419 + ], 420 + "index": "pypi", 421 + "version": "==1.1.0" 422 + }, 423 + "django-ratelimit": { 424 + "hashes": [ 425 + "sha256:19cba9e8101277f28c7a974c54c997067341ab30175431d3739e8ffb63cdd2b2", 426 + "sha256:a610b5fd052c843a589084f6934bc6d827ec6242d5965110ebd436ca5a59ef39" 427 + ], 428 + "index": "pypi", 429 + "markers": "python_version >= '3.7'", 430 + "version": "==4.0.0" 431 + }, 432 + "django-redis": { 433 + "hashes": [ 434 + "sha256:2d8660d39f586c41c9907d5395693c477434141690fd7eca9d32376af00b0aac", 435 + "sha256:8bc5793ec06b28ea802aad85ec437e7646511d4e571e07ccad19cfed8b9ddd44" 436 + ], 437 + "index": "pypi", 438 + "markers": "python_version >= '3.6'", 439 + "version": "==5.3.0" 440 + }, 441 + "django-rest-passwordreset": { 442 + "hashes": [ 443 + "sha256:0d76eb8d0be9636f4404fd35e8a0842c968effeac1d141c55a45aef1ebce54c7", 444 + "sha256:f888fcb589c46e2f86f9686751de4cc1350c519aa3b120b993b1d675fd96fad6" 445 + ], 446 + "index": "pypi", 447 + "version": "==1.3.0" 448 + }, 449 + "django-simple-history": { 450 + "hashes": [ 451 + "sha256:2313d2d346f15a1e7a92adb3b6696b226f1cd0c1d920869ec40c4c4076614c41", 452 + "sha256:dc1f98e558a0a1e0b6371c3b8efb85f86e02a6db56e83d0ec198343b7408d00a" 453 + ], 454 + "index": "pypi", 455 + "markers": "python_version >= '3.7'", 456 + "version": "==3.3.0" 457 + }, 458 + "djangoql": { 459 + "hashes": [ 460 + "sha256:4f053d0128e28f412926e2da902735f4bdcbab5c08d43be4dfefd747fca2e96e" 461 + ], 462 + "index": "pypi", 463 + "version": "==0.17.1" 464 + }, 465 + "djangorestframework": { 466 + "hashes": [ 467 + "sha256:579a333e6256b09489cbe0a067e66abe55c6595d8926be6b99423786334350c8", 468 + "sha256:eb63f58c9f218e1a7d064d17a70751f528ed4e1d35547fdade9aaf4cd103fd08" 469 + ], 470 + "index": "pypi", 471 + "markers": "python_version >= '3.6'", 472 + "version": "==3.14.0" 473 + }, 474 + "djangorestframework-simplejwt": { 475 + "hashes": [ 476 + "sha256:631d7ae2ed4365d7196a35d3cc0f6d382f7bd3361fb24c894f8f92b4da5db27d", 477 + "sha256:8e4c5dfca8d11c0b8a66dfd8a4e3fc1c6aa7ea188d10907ff91c942f4b52ed66" 478 + ], 479 + "index": "pypi", 480 + "markers": "python_version >= '3.7'", 481 + "version": "==5.3.0" 482 + }, 483 + "dnspython": { 484 + "hashes": [ 485 + "sha256:57c6fbaaeaaf39c891292012060beb141791735dbb4004798328fc2c467402d8", 486 + "sha256:8dcfae8c7460a2f84b4072e26f1c9f4101ca20c071649cb7c34e8b6a93d58984" 487 + ], 488 + "markers": "python_version >= '3.8' and python_version < '4.0'", 489 + "version": "==2.4.2" 490 + }, 491 + "drf-nested-routers": { 492 + "hashes": [ 493 + "sha256:01aa556b8c08608bb74fb34f6ca065a5183f2cda4dc0478192cc17a2581d71b0", 494 + "sha256:996b77f3f4dfaf64569e7b8f04e3919945f90f95366838ca5b8bed9dd709d6c5" 495 + ], 496 + "index": "pypi", 497 + "markers": "python_version >= '3.5'", 498 + "version": "==0.93.4" 499 + }, 500 + "drf-spectacular": { 501 + "hashes": [ 502 + "sha256:8f5a8f87353d1bb8dcb3f3909b7109b2dcbe1d91f3e069409cf322963e140bd6", 503 + "sha256:afeccc6533dcdb4e78afbfcc49f3c5e9c369aeb62f965e4d1a43b165449c147a" 504 + ], 505 + "index": "pypi", 506 + "markers": "python_version >= '3.6'", 507 + "version": "==0.26.4" 508 + }, 509 + "dry-rest-permissions": { 510 + "hashes": [ 511 + "sha256:1f40461184063390e5b24e9c5602eb8cc8c3c2433c796f39a5332065bfbddd2b", 512 + "sha256:f3fe685760004ce182801602819b43ebfa922e587036f1f5a5c10ffcfa646039" 513 + ], 514 + "index": "pypi", 515 + "version": "==0.1.10" 516 + }, 517 + "email-validator": { 518 + "hashes": [ 519 + "sha256:1ff6e86044200c56ae23595695c54e9614f4a9551e0e393614f764860b3d7900", 520 + "sha256:2466ba57cda361fb7309fd3d5a225723c788ca4bbad32a0ebd5373b99730285c" 521 + ], 522 + "version": "==2.0.0.post2" 523 + }, 524 + "fhir.resources": { 525 + "hashes": [ 526 + "sha256:1d02ff2547e5b6323543c8ce9916e0c9e5536847b3b2171acb1f51a86efba16e", 527 + "sha256:515a6cb3eadc61597fec0cb273b1ff943f76f44d2c8efefa5218f001087a95d3" 528 + ], 529 + "index": "pypi", 530 + "markers": "python_version >= '3.6'", 531 + "version": "==6.5.0" 532 + }, 533 + "gunicorn": { 534 + "hashes": [ 535 + "sha256:3213aa5e8c24949e792bcacfc176fef362e7aac80b76c56f6b5122bf350722f0", 536 + "sha256:88ec8bff1d634f98e61b9f65bc4bf3cd918a90806c6f5c48bc5603849ec81033" 537 + ], 538 + "index": "pypi", 539 + "markers": "python_version >= '3.5'", 540 + "version": "==21.2.0" 541 + }, 542 + "healthy-django": { 543 + "hashes": [ 544 + "sha256:24738babb61124f042be8535d5a9e9c93ca0b574c932ff36f9f1c0d3019fe729", 545 + "sha256:fe58185479bcf21f078804ed5c4d9f7f830861d8701e66e7850f68323438e736" 546 + ], 547 + "index": "pypi", 548 + "version": "==0.1.0" 549 + }, 550 + "hiredis": { 551 + "hashes": [ 552 + "sha256:071c5814b850574036506a8118034f97c3cbf2fe9947ff45a27b07a48da56240", 553 + "sha256:08415ea74c1c29b9d6a4ca3dd0e810dc1af343c1d1d442e15ba133b11ab5be6a", 554 + "sha256:126623b03c31cb6ac3e0d138feb6fcc36dd43dd34fc7da7b7a0c38b5d75bc896", 555 + "sha256:14824e457e4f5cda685c3345d125da13949bcf3bb1c88eb5d248c8d2c3dee08f", 556 + "sha256:15c2a551f3b8a26f7940d6ee10b837810201754b8d7e6f6b1391655370882c5a", 557 + "sha256:17e938d9d3ee92e1adbff361706f1c36cc60eeb3e3eeca7a3a353eae344f4c91", 558 + "sha256:1cadb0ac7ba3babfd804e425946bec9717b320564a1390f163a54af9365a720a", 559 + "sha256:1d274d5c511dfc03f83f997d3238eaa9b6ee3f982640979f509373cced891e98", 560 + "sha256:20f509e3a1a20d6e5f5794fc37ceb21f70f409101fcfe7a8bde783894d51b369", 561 + "sha256:227c5b4bcb60f89008c275d596e4a7b6625a6b3c827b8a66ae582eace7051f71", 562 + "sha256:232d0a70519865741ba56e1dfefd160a580ae78c30a1517bad47b3cf95a3bc7d", 563 + "sha256:2443659c76b226267e2a04dbbb21bc2a3f91aa53bdc0c22964632753ae43a247", 564 + "sha256:2d7e459fe7313925f395148d36d9b7f4f8dac65be06e45d7af356b187cef65fc", 565 + "sha256:2fb9300959a0048138791f3d68359d61a788574ec9556bddf1fec07f2dbc5320", 566 + "sha256:334f2738700b20faa04a0d813366fb16ed17287430a6b50584161d5ad31ca6d7", 567 + "sha256:33a94d264e6e12a79d9bb8af333b01dc286b9f39c99072ab5fef94ce1f018e17", 568 + "sha256:33bc4721632ef9708fa44e5df0066053fccc8e65410a2c48573192517a533b48", 569 + "sha256:33ee3ea5cad3a8cb339352cd230b411eb437a2e75d7736c4899acab32056ccdb", 570 + "sha256:3753df5f873d473f055e1f8837bfad0bd3b277c86f3c9bf058c58f14204cd901", 571 + "sha256:3759f4789ae1913b7df278dfc9e8749205b7a106f888cd2903d19461e24a7697", 572 + "sha256:3b7fe075e91b9d9cff40eba4fb6a8eff74964d3979a39be9a9ef58b1b4cb3604", 573 + "sha256:3bf4b5bae472630c229518e4a814b1b68f10a3d9b00aeaec45f1a330f03a0251", 574 + "sha256:3f006c28c885deb99b670a5a66f367a175ab8955b0374029bad7111f5357dcd4", 575 + "sha256:3f5446068197b35a11ccc697720c41879c8657e2e761aaa8311783aac84cef20", 576 + "sha256:3fa6811a618653164f918b891a0fa07052bd71a799defa5c44d167cac5557b26", 577 + "sha256:46525fbd84523cac75af5bf524bc74aaac848beaf31b142d2df8a787d9b4bbc4", 578 + "sha256:477c34c4489666dc73cb5e89dafe2617c3e13da1298917f73d55aac4696bd793", 579 + "sha256:4b3e974ad15eb32b1f537730dea70b93a4c3db7b026de3ad2b59da49c6f7454d", 580 + "sha256:4c3b8be557e08b234774925622e196f0ee36fe4eab66cd19df934d3efd8f3743", 581 + "sha256:4e3e3e31423f888d396b1fc1f936936e52af868ac1ec17dd15e3eeba9dd4de24", 582 + "sha256:4e43e2b5acaad09cf48c032f7e4926392bb3a3f01854416cf6d82ebff94d5467", 583 + "sha256:4ed68a3b1ccb4313d2a42546fd7e7439ad4745918a48b6c9bcaa61e1e3e42634", 584 + "sha256:4f674e309cd055ee7a48304ceb8cf43265d859faf4d7d01d270ce45e976ae9d3", 585 + "sha256:50171f985e17970f87d5a29e16603d1e5b03bdbf5c2691a37e6c912942a6b657", 586 + "sha256:51341e70b467004dcbec3a6ce8c478d2d6241e0f6b01e4c56764afd5022e1e9d", 587 + "sha256:5a4bcef114fc071d5f52c386c47f35aae0a5b43673197b9288a15b584da8fa3a", 588 + "sha256:5a5c8019ff94988d56eb49b15de76fe83f6b42536d76edeb6565dbf7fe14b973", 589 + "sha256:5cda592405bbd29d53942e0389dc3fa77b49c362640210d7e94a10c14a677d4d", 590 + "sha256:5e6674a017629284ef373b50496d9fb1a89b85a20a7fa100ecd109484ec748e5", 591 + "sha256:5e7bb4dd524f50b71c20ef5a12bd61da9b463f8894b18a06130942fe31509881", 592 + "sha256:60c4e3c258eafaab21b174b17270a0cc093718d61cdbde8c03f85ec4bf835343", 593 + "sha256:61995eb826009d99ed8590747bc0da683a5f4fbb4faa8788166bf3810845cd5c", 594 + "sha256:61a72e4a523cdfc521762137559c08dfa360a3caef63620be58c699d1717dac1", 595 + "sha256:69536b821dd1bc78058a6e7541743f8d82bf2d981b91280b14c4daa6cdc7faba", 596 + "sha256:6ccdcb635dae85b006592f78e32d97f4bc7541cb27829d505f9c7fefcef48298", 597 + "sha256:6f88cafe46612b6fa68e6dea49e25bebf160598bba00101caa51cc8c1f18d597", 598 + "sha256:6f969edc851efe23010e0f53a64269f2629a9364135e9ec81c842e8b2277d0c1", 599 + "sha256:77924b0d32fd1f493d3df15d9609ddf9d94c31a364022a6bf6b525ce9da75bea", 600 + "sha256:7df645b6b7800e8b748c217fbd6a4ca8361bcb9a1ae6206cc02377833ec8a1aa", 601 + "sha256:7e17d04ea58ab8cf3f2dc52e875db16077c6357846006780086fff3189fb199d", 602 + "sha256:7f2b34a6444b8f9c1e9f84bd2c639388e5d14f128afd14a869dfb3d9af893aa2", 603 + "sha256:818dfd310aa1020a13cd08ee48e116dd8c3bb2e23b8161f8ac4df587dd5093d7", 604 + "sha256:89a258424158eb8b3ed9f65548d68998da334ef155d09488c5637723eb1cd697", 605 + "sha256:8eceffca3941775b646cd585cd19b275d382de43cc3327d22f7c75d7b003d481", 606 + "sha256:8f280ab4e043b089777b43b4227bdc2035f88da5072ab36588e0ccf77d45d058", 607 + "sha256:8f9dbe12f011a9b784f58faecc171d22465bb532c310bd588d769ba79a59ef5a", 608 + "sha256:9076ce8429785c85f824650735791738de7143f61f43ae9ed83e163c0ca0fa44", 609 + "sha256:95d2305fd2a7b179cacb48b10f618872fc565c175f9f62b854e8d1acac3e8a9e", 610 + "sha256:96d9ea6c8d4cbdeee2e0d43379ce2881e4af0454b00570677c59f33f2531cd38", 611 + "sha256:9944a2cac25ffe049a7e89f306e11b900640837d1ef38d9be0eaa4a4e2b73a52", 612 + "sha256:9a1a80a8fa767f2fdc3870316a54b84fe9fc09fa6ab6a2686783de6a228a4604", 613 + "sha256:9cd32326dfa6ce87edf754153b0105aca64486bebe93b9600ccff74fa0b224df", 614 + "sha256:9f4a65276f6ecdebe75f2a53f578fbc40e8d2860658420d5e0611c56bbf5054c", 615 + "sha256:a286ded34eb16501002e3713b3130c987366eee2ba0d58c33c72f27778e31676", 616 + "sha256:a2df98f5e071320c7d84e8bd07c0542acdd0a7519307fc31774d60e4b842ec4f", 617 + "sha256:a7205497d7276a81fe92951a29616ef96562ed2f91a02066f72b6f93cb34b40e", 618 + "sha256:aa17a3b22b3726d54d7af20394f65d4a1735a842a4e0f557dc67a90f6965c4bc", 619 + "sha256:af33f370be90b48bbaf0dab32decbdcc522b1fa95d109020a963282086518a8e", 620 + "sha256:b17baf702c6e5b4bb66e1281a3efbb1d749c9d06cdb92b665ad81e03118f78fc", 621 + "sha256:b4f3d06dc16671b88a13ae85d8ca92534c0b637d59e49f0558d040a691246422", 622 + "sha256:b9953d87418ac228f508d93898ab572775e4d3b0eeb886a1a7734553bcdaf291", 623 + "sha256:b9a7c987e161e3c58f992c63b7e26fea7fe0777f3b975799d23d65bbb8cb5899", 624 + "sha256:c6cb613148422c523945cdb8b6bed617856f2602fd8750e33773ede2616e55d5", 625 + "sha256:c9b9e5bde7030cae83aa900b5bd660decc65afd2db8c400f3c568c815a47ca2a", 626 + "sha256:cc36a9dded458d4e37492fe3e619c6c83caae794d26ad925adbce61d592f8428", 627 + "sha256:cd2614f17e261f72efc2f19f5e5ff2ee19e2296570c0dcf33409e22be30710de", 628 + "sha256:d115790f18daa99b5c11a506e48923b630ef712e9e4b40482af942c3d40638b8", 629 + "sha256:d194decd9608f11c777946f596f31d5aacad13972a0a87829ae1e6f2d26c1885", 630 + "sha256:d1a4ce40ba11da9382c14da31f4f9e88c18f7d294f523decd0fadfb81f51ad18", 631 + "sha256:d1be9e30e675f5bc1cb534633324578f6f0944a1bcffe53242cf632f554f83b6", 632 + "sha256:d20891e3f33803b26d54c77fd5745878497091e33f4bbbdd454cf6e71aee8890", 633 + "sha256:d27e560eefb57914d742a837f1da98d3b29cb22eff013c8023b7cf52ae6e051d", 634 + "sha256:dcb0569dd5bfe6004658cd0f229efa699a3169dcb4f77bd72e188adda302063d", 635 + "sha256:e62ec131816c6120eff40dffe43424e140264a15fa4ab88c301bd6a595913af3", 636 + "sha256:e75163773a309e56a9b58165cf5a50e0f84b755f6ff863b2c01a38918fe92daa", 637 + "sha256:ec58fb7c2062f835595c12f0f02dcda76d0eb0831423cc191d1e18c9276648de", 638 + "sha256:f1eadbcd3de55ac42310ff82550d3302cb4efcd4e17d76646a17b6e7004bb42b", 639 + "sha256:f2dcb8389fa3d453927b1299f46bdb38473c293c8269d5c777d33ea0e526b610", 640 + "sha256:ffaf841546905d90ff189de7397aa56413b1ce5e54547f17a98f0ebf3a3b0a3b" 641 + ], 642 + "version": "==2.2.3" 643 + }, 644 + "http-ece": { 645 + "hashes": [ 646 + "sha256:932ebc2fa7c216954c320a188ae9c1f04d01e67bec9cdce1bfbc912813b0b4f8" 647 + ], 648 + "version": "==1.1.0" 649 + }, 650 + "idna": { 651 + "hashes": [ 652 + "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4", 653 + "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2" 654 + ], 655 + "markers": "python_version >= '3.5'", 656 + "version": "==3.4" 657 + }, 658 + "inflection": { 659 + "hashes": [ 660 + "sha256:1a29730d366e996aaacffb2f1f1cb9593dc38e2ddd30c91250c6dde09ea9b417", 661 + "sha256:f38b2b640938a4f35ade69ac3d053042959b62a0f1076a5bbaa1b9526605a8a2" 662 + ], 663 + "markers": "python_version >= '3.5'", 664 + "version": "==0.5.1" 665 + }, 666 + "jmespath": { 667 + "hashes": [ 668 + "sha256:02e2e4cc71b5bcab88332eebf907519190dd9e6e82107fa7f83b1003a6252980", 669 + "sha256:90261b206d6defd58fdd5e85f478bf633a2901798906be2ad389150c5c60edbe" 670 + ], 671 + "markers": "python_version >= '3.7'", 672 + "version": "==1.0.1" 673 + }, 674 + "jsonschema": { 675 + "hashes": [ 676 + "sha256:043dc26a3845ff09d20e4420d6012a9c91c9aa8999fa184e7efcfeccb41e32cb", 677 + "sha256:6e1e7569ac13be8139b2dd2c21a55d350066ee3f80df06c608b398cdc6f30e8f" 678 + ], 679 + "index": "pypi", 680 + "markers": "python_version >= '3.8'", 681 + "version": "==4.19.0" 682 + }, 683 + "jsonschema-specifications": { 684 + "hashes": [ 685 + "sha256:05adf340b659828a004220a9613be00fa3f223f2b82002e273dee62fd50524b1", 686 + "sha256:c91a50404e88a1f6ba40636778e2ee08f6e24c5613fe4c53ac24578a5a7f72bb" 687 + ], 688 + "markers": "python_version >= '3.8'", 689 + "version": "==2023.7.1" 690 + }, 691 + "jwcrypto": { 692 + "hashes": [ 693 + "sha256:2c1dc51cf8e38ddf324795dfe9426dee9dd46caf47f535ccbc18781fba810b8d" 694 + ], 695 + "index": "pypi", 696 + "markers": "python_version >= '3.6'", 697 + "version": "==1.5.0" 698 + }, 699 + "kombu": { 700 + "hashes": [ 701 + "sha256:0ba213f630a2cb2772728aef56ac6883dc3a2f13435e10048f6e97d48506dbbd", 702 + "sha256:b753c9cfc9b1e976e637a7cbc1a65d446a22e45546cd996ea28f932082b7dc9e" 703 + ], 704 + "markers": "python_version >= '3.8'", 705 + "version": "==5.3.2" 706 + }, 707 + "littletable": { 708 + "hashes": [ 709 + "sha256:0e48d8bcdfaf6610f41e2d702a4d384e80af83fe737a2152e6a9b8d40c5a8998", 710 + "sha256:15671dd79c24102b247e9acda33b1eb5940c6905ef97a9997b222464e1a7f870" 711 + ], 712 + "index": "pypi", 713 + "markers": "python_version >= '3.9'", 714 + "version": "==2.2.3" 715 + }, 716 + "newrelic": { 717 + "hashes": [ 718 + "sha256:01afd53b9364f88196cc9ddf89197ed4d81a3d686cdb5533d0d1687a9947b9fc", 719 + "sha256:12e6ac951fc18cbfa05816bbcd96cfc73fdb9dbe12d987eef3bbe9c2e567e648", 720 + "sha256:34d0678ee76b85ed472e7811f5d88c3baf544c434daa5dbb8d88c5e878f780c8", 721 + "sha256:59add6162a581914ae5030983cf157c10d90553211a899a2ae066d72676b3fef", 722 + "sha256:6fbbd5f901cfb8f7b41bbd2ec4c8faad327db16f1cf0a2f8468e28a1d4d36a74", 723 + "sha256:86a77444373a29f193c6f2579016f517264434187d13e7997015f1ceced7e8f8", 724 + "sha256:88faf98576dc109a1f59fc97a195da9671da7221e5f81e870b502447e9c5ed38", 725 + "sha256:8e3bba9e3cc22bd1d11b0f22ace881b3d0110934c42a74eca6dd7541a387608b", 726 + "sha256:b54aac953e47257ed6fd67edf8970e5be752fb7f9541532358b5e240526ed734", 727 + "sha256:c09fa4810f88ae57578e7ff27cf355837b3732ae1e3a944221d998197a0b0c49", 728 + "sha256:cecb3dae175122bbb0bff9e1f1fb3b393aa3ec885b791d995d9fcdd1c318c57b", 729 + "sha256:d19025edaaf6067aa8f2deabbe989a61eccc4804a506aa3ce45be82e3bd12c7d", 730 + "sha256:d64ca93951464958d0e7d6c4056b435d7640e60ba3b79029dd66d01e37b7fd35", 731 + "sha256:db2db566f78b39d90667a8875b836b56a944899f03a600fdc48a5f468082f363", 732 + "sha256:ea01a47e358a537a2a4b9e8db3e8cd82c957ed96e79fe61f0a9b556444b947a2" 733 + ], 734 + "index": "pypi", 735 + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6'", 736 + "version": "==9.0.0" 737 + }, 738 + "packaging": { 739 + "hashes": [ 740 + "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61", 741 + "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f" 742 + ], 743 + "markers": "python_version >= '3.7'", 744 + "version": "==23.1" 745 + }, 746 + "pillow": { 747 + "hashes": [ 748 + "sha256:00e65f5e822decd501e374b0650146063fbb30a7264b4d2744bdd7b913e0cab5", 749 + "sha256:040586f7d37b34547153fa383f7f9aed68b738992380ac911447bb78f2abe530", 750 + "sha256:0b6eb5502f45a60a3f411c63187db83a3d3107887ad0d036c13ce836f8a36f1d", 751 + "sha256:1ce91b6ec08d866b14413d3f0bbdea7e24dfdc8e59f562bb77bc3fe60b6144ca", 752 + "sha256:1f62406a884ae75fb2f818694469519fb685cc7eaff05d3451a9ebe55c646891", 753 + "sha256:22c10cc517668d44b211717fd9775799ccec4124b9a7f7b3635fc5386e584992", 754 + "sha256:3400aae60685b06bb96f99a21e1ada7bc7a413d5f49bce739828ecd9391bb8f7", 755 + "sha256:349930d6e9c685c089284b013478d6f76e3a534e36ddfa912cde493f235372f3", 756 + "sha256:368ab3dfb5f49e312231b6f27b8820c823652b7cd29cfbd34090565a015e99ba", 757 + "sha256:38250a349b6b390ee6047a62c086d3817ac69022c127f8a5dc058c31ccef17f3", 758 + "sha256:3a684105f7c32488f7153905a4e3015a3b6c7182e106fe3c37fbb5ef3e6994c3", 759 + "sha256:3a82c40d706d9aa9734289740ce26460a11aeec2d9c79b7af87bb35f0073c12f", 760 + "sha256:3b08d4cc24f471b2c8ca24ec060abf4bebc6b144cb89cba638c720546b1cf538", 761 + "sha256:3ed64f9ca2f0a95411e88a4efbd7a29e5ce2cea36072c53dd9d26d9c76f753b3", 762 + "sha256:3f07ea8d2f827d7d2a49ecf1639ec02d75ffd1b88dcc5b3a61bbb37a8759ad8d", 763 + "sha256:520f2a520dc040512699f20fa1c363eed506e94248d71f85412b625026f6142c", 764 + "sha256:5c6e3df6bdd396749bafd45314871b3d0af81ff935b2d188385e970052091017", 765 + "sha256:608bfdee0d57cf297d32bcbb3c728dc1da0907519d1784962c5f0c68bb93e5a3", 766 + "sha256:685ac03cc4ed5ebc15ad5c23bc555d68a87777586d970c2c3e216619a5476223", 767 + "sha256:76de421f9c326da8f43d690110f0e79fe3ad1e54be811545d7d91898b4c8493e", 768 + "sha256:76edb0a1fa2b4745fb0c99fb9fb98f8b180a1bbceb8be49b087e0b21867e77d3", 769 + "sha256:7be600823e4c8631b74e4a0d38384c73f680e6105a7d3c6824fcf226c178c7e6", 770 + "sha256:81ff539a12457809666fef6624684c008e00ff6bf455b4b89fd00a140eecd640", 771 + "sha256:88af2003543cc40c80f6fca01411892ec52b11021b3dc22ec3bc9d5afd1c5334", 772 + "sha256:8c11160913e3dd06c8ffdb5f233a4f254cb449f4dfc0f8f4549eda9e542c93d1", 773 + "sha256:8f8182b523b2289f7c415f589118228d30ac8c355baa2f3194ced084dac2dbba", 774 + "sha256:9211e7ad69d7c9401cfc0e23d49b69ca65ddd898976d660a2fa5904e3d7a9baa", 775 + "sha256:92be919bbc9f7d09f7ae343c38f5bb21c973d2576c1d45600fce4b74bafa7ac0", 776 + "sha256:9c82b5b3e043c7af0d95792d0d20ccf68f61a1fec6b3530e718b688422727396", 777 + "sha256:9f7c16705f44e0504a3a2a14197c1f0b32a95731d251777dcb060aa83022cb2d", 778 + "sha256:9fb218c8a12e51d7ead2a7c9e101a04982237d4855716af2e9499306728fb485", 779 + "sha256:a74ba0c356aaa3bb8e3eb79606a87669e7ec6444be352870623025d75a14a2bf", 780 + "sha256:b4f69b3700201b80bb82c3a97d5e9254084f6dd5fb5b16fc1a7b974260f89f43", 781 + "sha256:bc2ec7c7b5d66b8ec9ce9f720dbb5fa4bace0f545acd34870eff4a369b44bf37", 782 + "sha256:c189af0545965fa8d3b9613cfdb0cd37f9d71349e0f7750e1fd704648d475ed2", 783 + "sha256:c1fbe7621c167ecaa38ad29643d77a9ce7311583761abf7836e1510c580bf3dd", 784 + "sha256:c7cf14a27b0d6adfaebb3ae4153f1e516df54e47e42dcc073d7b3d76111a8d86", 785 + "sha256:c9f72a021fbb792ce98306ffb0c348b3c9cb967dce0f12a49aa4c3d3fdefa967", 786 + "sha256:cd25d2a9d2b36fcb318882481367956d2cf91329f6892fe5d385c346c0649629", 787 + "sha256:ce543ed15570eedbb85df19b0a1a7314a9c8141a36ce089c0a894adbfccb4568", 788 + "sha256:ce7b031a6fc11365970e6a5686d7ba8c63e4c1cf1ea143811acbb524295eabed", 789 + "sha256:d35e3c8d9b1268cbf5d3670285feb3528f6680420eafe35cccc686b73c1e330f", 790 + "sha256:d50b6aec14bc737742ca96e85d6d0a5f9bfbded018264b3b70ff9d8c33485551", 791 + "sha256:d5d0dae4cfd56969d23d94dc8e89fb6a217be461c69090768227beb8ed28c0a3", 792 + "sha256:d5db32e2a6ccbb3d34d87c87b432959e0db29755727afb37290e10f6e8e62614", 793 + "sha256:d72e2ecc68a942e8cf9739619b7f408cc7b272b279b56b2c83c6123fcfa5cdff", 794 + "sha256:d737a602fbd82afd892ca746392401b634e278cb65d55c4b7a8f48e9ef8d008d", 795 + "sha256:d80cf684b541685fccdd84c485b31ce73fc5c9b5d7523bf1394ce134a60c6883", 796 + "sha256:db24668940f82321e746773a4bc617bfac06ec831e5c88b643f91f122a785684", 797 + "sha256:dbc02381779d412145331789b40cc7b11fdf449e5d94f6bc0b080db0a56ea3f0", 798 + "sha256:dffe31a7f47b603318c609f378ebcd57f1554a3a6a8effbc59c3c69f804296de", 799 + "sha256:edf4392b77bdc81f36e92d3a07a5cd072f90253197f4a52a55a8cec48a12483b", 800 + "sha256:efe8c0681042536e0d06c11f48cebe759707c9e9abf880ee213541c5b46c5bf3", 801 + "sha256:f31f9fdbfecb042d046f9d91270a0ba28368a723302786c0009ee9b9f1f60199", 802 + "sha256:f88a0b92277de8e3ca715a0d79d68dc82807457dae3ab8699c758f07c20b3c51", 803 + "sha256:faaf07ea35355b01a35cb442dd950d8f1bb5b040a7787791a535de13db15ed90" 804 + ], 805 + "index": "pypi", 806 + "markers": "python_version >= '3.8'", 807 + "version": "==10.0.0" 808 + }, 809 + "ply": { 810 + "hashes": [ 811 + "sha256:00c7c1aaa88358b9c765b6d3000c6eec0ba42abca5351b095321aef446081da3", 812 + "sha256:096f9b8350b65ebd2fd1346b12452efe5b9607f7482813ffca50c22722a807ce" 813 + ], 814 + "version": "==3.11" 815 + }, 816 + "prompt-toolkit": { 817 + "hashes": [ 818 + "sha256:04505ade687dc26dc4284b1ad19a83be2f2afe83e7a828ace0c72f3a1df72aac", 819 + "sha256:9dffbe1d8acf91e3de75f3b544e4842382fc06c6babe903ac9acb74dc6e08d88" 820 + ], 821 + "markers": "python_full_version >= '3.7.0'", 822 + "version": "==3.0.39" 823 + }, 824 + "psycopg": { 825 + "hashes": [ 826 + "sha256:15b25741494344c24066dc2479b0f383dd1b82fa5e75612fa4fa5bb30726e9b6", 827 + "sha256:8bbeddae5075c7890b2fa3e3553440376d3c5e28418335dee3c3656b06fa2b52" 828 + ], 829 + "index": "pypi", 830 + "markers": "python_version >= '3.7'", 831 + "version": "==3.1.10" 832 + }, 833 + "py-vapid": { 834 + "hashes": [ 835 + "sha256:0664ab7899742ef2b287397a4d461ef691ed0cc2f587205128d8cf617ffdb919" 836 + ], 837 + "version": "==1.9.0" 838 + }, 839 + "pycparser": { 840 + "hashes": [ 841 + "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9", 842 + "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206" 843 + ], 844 + "version": "==2.21" 845 + }, 846 + "pycryptodome": { 847 + "hashes": [ 848 + "sha256:01489bbdf709d993f3058e2996f8f40fee3f0ea4d995002e5968965fa2fe89fb", 849 + "sha256:10da29526a2a927c7d64b8f34592f461d92ae55fc97981aab5bbcde8cb465bb6", 850 + "sha256:12600268763e6fec3cefe4c2dcdf79bde08d0b6dc1813887e789e495cb9f3403", 851 + "sha256:157c9b5ba5e21b375f052ca78152dd309a09ed04703fd3721dce3ff8ecced148", 852 + "sha256:16bfd98dbe472c263ed2821284118d899c76968db1a6665ade0c46805e6b29a4", 853 + "sha256:363dd6f21f848301c2dcdeb3c8ae5f0dee2286a5e952a0f04954b82076f23825", 854 + "sha256:3811e31e1ac3069988f7a1c9ee7331b942e605dfc0f27330a9ea5997e965efb2", 855 + "sha256:422c89fd8df8a3bee09fb8d52aaa1e996120eafa565437392b781abec2a56e14", 856 + "sha256:4604816adebd4faf8810782f137f8426bf45fee97d8427fa8e1e49ea78a52e2c", 857 + "sha256:4944defabe2ace4803f99543445c27dd1edbe86d7d4edb87b256476a91e9ffa4", 858 + "sha256:51eae079ddb9c5f10376b4131be9589a6554f6fd84f7f655180937f611cd99a2", 859 + "sha256:53aee6be8b9b6da25ccd9028caf17dcdce3604f2c7862f5167777b707fbfb6cb", 860 + "sha256:62a1e8847fabb5213ccde38915563140a5b338f0d0a0d363f996b51e4a6165cf", 861 + "sha256:6f4b967bb11baea9128ec88c3d02f55a3e338361f5e4934f5240afcb667fdaec", 862 + "sha256:78d863476e6bad2a592645072cc489bb90320972115d8995bcfbee2f8b209918", 863 + "sha256:795bd1e4258a2c689c0b1f13ce9684fa0dd4c0e08680dcf597cf9516ed6bc0f3", 864 + "sha256:7a3d22c8ee63de22336679e021c7f2386f7fc465477d59675caa0e5706387944", 865 + "sha256:83c75952dcf4a4cebaa850fa257d7a860644c70a7cd54262c237c9f2be26f76e", 866 + "sha256:928078c530da78ff08e10eb6cada6e0dff386bf3d9fa9871b4bbc9fbc1efe024", 867 + "sha256:957b221d062d5752716923d14e0926f47670e95fead9d240fa4d4862214b9b2f", 868 + "sha256:9ad6f09f670c466aac94a40798e0e8d1ef2aa04589c29faa5b9b97566611d1d1", 869 + "sha256:9c8eda4f260072f7dbe42f473906c659dcbadd5ae6159dfb49af4da1293ae380", 870 + "sha256:b1d9701d10303eec8d0bd33fa54d44e67b8be74ab449052a8372f12a66f93fb9", 871 + "sha256:b6a610f8bfe67eab980d6236fdc73bfcdae23c9ed5548192bb2d530e8a92780e", 872 + "sha256:c9adee653fc882d98956e33ca2c1fb582e23a8af7ac82fee75bd6113c55a0413", 873 + "sha256:cb1be4d5af7f355e7d41d36d8eec156ef1382a88638e8032215c215b82a4b8ec", 874 + "sha256:d1497a8cd4728db0e0da3c304856cb37c0c4e3d0b36fcbabcc1600f18504fc54", 875 + "sha256:d20082bdac9218649f6abe0b885927be25a917e29ae0502eaf2b53f1233ce0c2", 876 + "sha256:e8ad74044e5f5d2456c11ed4cfd3e34b8d4898c0cb201c4038fe41458a82ea27", 877 + "sha256:f022a4fd2a5263a5c483a2bb165f9cb27f2be06f2f477113783efe3fe2ad887b", 878 + "sha256:f21efb8438971aa16924790e1c3dba3a33164eb4000106a55baaed522c261acf", 879 + "sha256:fc0a73f4db1e31d4a6d71b672a48f3af458f548059aa05e83022d5f61aac9c08" 880 + ], 881 + "index": "pypi", 882 + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", 883 + "version": "==3.18.0" 884 + }, 885 + "pydantic": { 886 + "hashes": [ 887 + "sha256:0fe8a415cea8f340e7a9af9c54fc71a649b43e8ca3cc732986116b3cb135d303", 888 + "sha256:1289c180abd4bd4555bb927c42ee42abc3aee02b0fb2d1223fb7c6e5bef87dbe", 889 + "sha256:1eb2085c13bce1612da8537b2d90f549c8cbb05c67e8f22854e201bde5d98a47", 890 + "sha256:2031de0967c279df0d8a1c72b4ffc411ecd06bac607a212892757db7462fc494", 891 + "sha256:2a7bac939fa326db1ab741c9d7f44c565a1d1e80908b3797f7f81a4f86bc8d33", 892 + "sha256:2d5a58feb9a39f481eda4d5ca220aa8b9d4f21a41274760b9bc66bfd72595b86", 893 + "sha256:2f9a6fab5f82ada41d56b0602606a5506aab165ca54e52bc4545028382ef1c5d", 894 + "sha256:2fcfb5296d7877af406ba1547dfde9943b1256d8928732267e2653c26938cd9c", 895 + "sha256:549a8e3d81df0a85226963611950b12d2d334f214436a19537b2efed61b7639a", 896 + "sha256:598da88dfa127b666852bef6d0d796573a8cf5009ffd62104094a4fe39599565", 897 + "sha256:5d1197e462e0364906cbc19681605cb7c036f2475c899b6f296104ad42b9f5fb", 898 + "sha256:69328e15cfda2c392da4e713443c7dbffa1505bc9d566e71e55abe14c97ddc62", 899 + "sha256:6a9dfa722316f4acf4460afdf5d41d5246a80e249c7ff475c43a3a1e9d75cf62", 900 + "sha256:6b30bcb8cbfccfcf02acb8f1a261143fab622831d9c0989707e0e659f77a18e0", 901 + "sha256:6c076be61cd0177a8433c0adcb03475baf4ee91edf5a4e550161ad57fc90f523", 902 + "sha256:771735dc43cf8383959dc9b90aa281f0b6092321ca98677c5fb6125a6f56d58d", 903 + "sha256:795e34e6cc065f8f498c89b894a3c6da294a936ee71e644e4bd44de048af1405", 904 + "sha256:87afda5539d5140cb8ba9e8b8c8865cb5b1463924d38490d73d3ccfd80896b3f", 905 + "sha256:8fb2aa3ab3728d950bcc885a2e9eff6c8fc40bc0b7bb434e555c215491bcf48b", 906 + "sha256:a1fcb59f2f355ec350073af41d927bf83a63b50e640f4dbaa01053a28b7a7718", 907 + "sha256:a5e7add47a5b5a40c49b3036d464e3c7802f8ae0d1e66035ea16aa5b7a3923ed", 908 + "sha256:a73f489aebd0c2121ed974054cb2759af8a9f747de120acd2c3394cf84176ccb", 909 + "sha256:ab26038b8375581dc832a63c948f261ae0aa21f1d34c1293469f135fa92972a5", 910 + "sha256:b0d191db0f92dfcb1dec210ca244fdae5cbe918c6050b342d619c09d31eea0cc", 911 + "sha256:b749a43aa51e32839c9d71dc67eb1e4221bb04af1033a32e3923d46f9effa942", 912 + "sha256:b7ccf02d7eb340b216ec33e53a3a629856afe1c6e0ef91d84a4e6f2fb2ca70fe", 913 + "sha256:ba5b2e6fe6ca2b7e013398bc7d7b170e21cce322d266ffcd57cca313e54fb246", 914 + "sha256:ba5c4a8552bff16c61882db58544116d021d0b31ee7c66958d14cf386a5b5350", 915 + "sha256:c79e6a11a07da7374f46970410b41d5e266f7f38f6a17a9c4823db80dadf4303", 916 + "sha256:ca48477862372ac3770969b9d75f1bf66131d386dba79506c46d75e6b48c1e09", 917 + "sha256:dea7adcc33d5d105896401a1f37d56b47d443a2b2605ff8a969a0ed5543f7e33", 918 + "sha256:e0a16d274b588767602b7646fa05af2782576a6cf1022f4ba74cbb4db66f6ca8", 919 + "sha256:e4129b528c6baa99a429f97ce733fff478ec955513630e61b49804b6cf9b224a", 920 + "sha256:e5f805d2d5d0a41633651a73fa4ecdd0b3d7a49de4ec3fadf062fe16501ddbf1", 921 + "sha256:ef6c96b2baa2100ec91a4b428f80d8f28a3c9e53568219b6c298c1125572ebc6", 922 + "sha256:fdbdd1d630195689f325c9ef1a12900524dceb503b00a987663ff4f58669b93d" 923 + ], 924 + "index": "pypi", 925 + "markers": "python_version >= '3.7'", 926 + "version": "==1.10.12" 927 + }, 928 + "pyjwt": { 929 + "hashes": [ 930 + "sha256:57e28d156e3d5c10088e0c68abb90bfac3df82b40a71bd0daa20c65ccd5c23de", 931 + "sha256:59127c392cc44c2da5bb3192169a91f429924e17aff6534d70fdc02ab3e04320" 932 + ], 933 + "index": "pypi", 934 + "markers": "python_version >= '3.7'", 935 + "version": "==2.8.0" 936 + }, 937 + "python-dateutil": { 938 + "hashes": [ 939 + "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86", 940 + "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9" 941 + ], 942 + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'", 943 + "version": "==2.8.2" 944 + }, 945 + "python-fsutil": { 946 + "hashes": [ 947 + "sha256:5f02ed7764cac27633b4aaaa9cf56af2245a64a6cc048866b6f02792a8c5bf86", 948 + "sha256:e0421440b5763d08129dcc469364105f3b434fc9736c3bc6ed181b1c623148ee" 949 + ], 950 + "version": "==0.10.0" 951 + }, 952 + "python-slugify": { 953 + "hashes": [ 954 + "sha256:70ca6ea68fe63ecc8fa4fcf00ae651fc8a5d02d93dcd12ae6d4fc7ca46c4d395", 955 + "sha256:ce0d46ddb668b3be82f4ed5e503dbc33dd815d83e2eb6824211310d3fb172a27" 956 + ], 957 + "index": "pypi", 958 + "markers": "python_version >= '3.7'", 959 + "version": "==8.0.1" 960 + }, 961 + "pytz": { 962 + "hashes": [ 963 + "sha256:7b4fddbeb94a1eba4b557da24f19fdf9db575192544270a9101d8509f9f43d7b", 964 + "sha256:ce42d816b81b68506614c11e8937d3aa9e41007ceb50bfdcb0749b921bf646c7" 965 + ], 966 + "version": "==2023.3.post1" 967 + }, 968 + "pywebpush": { 969 + "hashes": [ 970 + "sha256:6c36e1679268219e693ba940db2bf254c240ca02664de102b7269afc3c545731" 971 + ], 972 + "index": "pypi", 973 + "version": "==1.14.0" 974 + }, 975 + "pyyaml": { 976 + "hashes": [ 977 + "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5", 978 + "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc", 979 + "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df", 980 + "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741", 981 + "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206", 982 + "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27", 983 + "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595", 984 + "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62", 985 + "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98", 986 + "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696", 987 + "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290", 988 + "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9", 989 + "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d", 990 + "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6", 991 + "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867", 992 + "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47", 993 + "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486", 994 + "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6", 995 + "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3", 996 + "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007", 997 + "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938", 998 + "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0", 999 + "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c", 1000 + "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735", 1001 + "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d", 1002 + "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28", 1003 + "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4", 1004 + "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba", 1005 + "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8", 1006 + "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5", 1007 + "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd", 1008 + "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3", 1009 + "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0", 1010 + "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515", 1011 + "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c", 1012 + "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c", 1013 + "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924", 1014 + "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34", 1015 + "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43", 1016 + "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859", 1017 + "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673", 1018 + "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54", 1019 + "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a", 1020 + "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b", 1021 + "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab", 1022 + "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa", 1023 + "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c", 1024 + "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585", 1025 + "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d", 1026 + "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f" 1027 + ], 1028 + "markers": "python_version >= '3.6'", 1029 + "version": "==6.0.1" 1030 + }, 1031 + "redis": { 1032 + "extras": [ 1033 + "hiredis" 1034 + ], 1035 + "hashes": [ 1036 + "sha256:06570d0b2d84d46c21defc550afbaada381af82f5b83e5b3777600e05d8e2ed0", 1037 + "sha256:5cea6c0d335c9a7332a460ed8729ceabb4d0c489c7285b0a86dbbf8a017bd120" 1038 + ], 1039 + "markers": "python_version >= '3.7'", 1040 + "version": "==5.0.0" 1041 + }, 1042 + "referencing": { 1043 + "hashes": [ 1044 + "sha256:449b6669b6121a9e96a7f9e410b245d471e8d48964c67113ce9afe50c8dd7bdf", 1045 + "sha256:794ad8003c65938edcdbc027f1933215e0d0ccc0291e3ce20a4d87432b59efc0" 1046 + ], 1047 + "markers": "python_version >= '3.8'", 1048 + "version": "==0.30.2" 1049 + }, 1050 + "requests": { 1051 + "hashes": [ 1052 + "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f", 1053 + "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1" 1054 + ], 1055 + "index": "pypi", 1056 + "markers": "python_version >= '3.7'", 1057 + "version": "==2.31.0" 1058 + }, 1059 + "rpds-py": { 1060 + "hashes": [ 1061 + "sha256:00e97d43a36811b78fa9ad9d3329bf34f76a31e891a7031a2ac01450c9b168ab", 1062 + "sha256:013d6c784150d10236a74b4094a79d96a256b814457e388fc5a4ba9efe24c402", 1063 + "sha256:0188b580c490bccb031e9b67e9e8c695a3c44ac5e06218b152361eca847317c3", 1064 + "sha256:02945ae38fd78efc40900f509890de84cfd5ffe2cd2939eeb3a8800dc68b87cb", 1065 + "sha256:02b4a2e28eb24dac4ef43dda4f6a6f7766e355179b143f7d0c76a1c5488a307b", 1066 + "sha256:0527c97dcd8bb983822ee31d3760187083fd3ba18ac4dd22cf5347c89d5628f4", 1067 + "sha256:05a1382905026bdd560f806c8c7c16e0f3e3fb359ba8868203ca6e5799884968", 1068 + "sha256:0b309908b6ff5ffbf6394818cb73b5a2a74073acee2c57fe8719046389aeff0d", 1069 + "sha256:0fc625059b83695fbb4fc8b7a8b66fa94ff9c7b78c84fb9986cd53ff88a28d80", 1070 + "sha256:177c033e467a66a054dd3a9534167234a3d0b2e41445807b13b626e01da25d92", 1071 + "sha256:18909093944727e068ebfc92e2e6ed1c4fa44135507c1c0555213ce211c53214", 1072 + "sha256:1adb04e4b4e41bf30aaa77eeb169c1b9ba9e5010e2e6ce8d6c17e1446edc9b68", 1073 + "sha256:1ed3d5385d14be894e12a9033be989e012214a9811e7194849c94032ad69682a", 1074 + "sha256:203eb1532d51591d32e8dfafd60b5d31347ea7278c8da02b4b550287f6abe28b", 1075 + "sha256:213f9ef5c02ec2f883c1075d25a873149daadbaea50d18d622e9db55ec9849c2", 1076 + "sha256:2275f1a022e2383da5d2d101fe11ccdcbae799148c4b83260a4b9309fa3e1fc2", 1077 + "sha256:22e6de18f00583f06928cc8d0993104ecc62f7c6da6478db2255de89a30e45d1", 1078 + "sha256:289073f68452b96e70990085324be7223944c7409973d13ddfe0eea1c1b5663b", 1079 + "sha256:29ec8507664f94cc08457d98cfc41c3cdbddfa8952438e644177a29b04937876", 1080 + "sha256:2a55631b93e47956fbc97d69ba2054a8c6a4016f9a3064ec4e031f5f1030cb90", 1081 + "sha256:2a86d246a160d98d820ee7d02dc18c923c228de095be362e57b9fd8970b2c4a1", 1082 + "sha256:2bca97521ee786087f0c5ef318fef3eef0266a9c3deff88205523cf353af7394", 1083 + "sha256:2c8fc6c841ada60a86d29c9ebe2e8757c47eda6553f3596c560e59ca6e9b6fa1", 1084 + "sha256:2cd0c9fb5d40887500b4ed818770c68ab4fa6e0395d286f9704be6751b1b7d98", 1085 + "sha256:2d27d08056fcd61ff47a0cd8407eff4d3e816c82cb6b9c6f0ce9a0ad49225f81", 1086 + "sha256:2ffbf1b38c88d0466de542e91b08225d51782282512f8e2b11715126c41fda48", 1087 + "sha256:3fd503c27e7b7034128e30847ecdb4bff4ca5e60f29ad022a9f66ae8940d54ac", 1088 + "sha256:3ff1f585a0fdc1415bd733b804f33d386064a308672249b14828130dd43e7c31", 1089 + "sha256:41bd430b7b63aa802c02964e331ac0b177148fef5f807d2c90d05ce71a52b4d4", 1090 + "sha256:43e9b1531d6a898bdf086acb75c41265c7ec4331267d7619148d407efc72bd24", 1091 + "sha256:46af4a742b90c7460e94214f923452c2c1d050a9da1d2b8d4c70cbc045e692b7", 1092 + "sha256:46c4c550bf59ce05d6bff2c98053822549aaf9fbaf81103edea325e03350bca1", 1093 + "sha256:4969592e3cdeefa4cbb15a26cec102cbd4a1d6e5b695fac9fa026e19741138c8", 1094 + "sha256:4a0536ed2b9297c75104e1a3da330828ba1b2639fa53b38d396f98bf7e3c68df", 1095 + "sha256:4a96147791e49e84207dd1530109aa0e9eeaf1c8b7a59f150047fc0fcdf9bb64", 1096 + "sha256:4c7f9d70f99e1fbcbf57c75328b80e1c0a7f6cad43e75efa90a97221be5efe15", 1097 + "sha256:4e8474f7233fe1949ce4e03bea698a600c2d5d6b51dab6d6e6336dbe69acf23e", 1098 + "sha256:4f1b804cfad04f862d6a84af9d1ad941b06f671878f0f7ecad6c92007d423de6", 1099 + "sha256:529aab727f54a937085184e7436e1d0e19975cf10115eda12d37a683e4ee5342", 1100 + "sha256:5612b0b1de8d5114520094bd5fc3d04eb8af6f3e10d48ef05b7c8e77c1fd9545", 1101 + "sha256:56777c57246e048908b550af9b81b0ec9cf804fd47cb7502ccd93238bd6025c2", 1102 + "sha256:56ba7c1100ed079527f2b995bf5486a2e557e6d5b733c52e8947476338815b69", 1103 + "sha256:59d222086daa55421d599609b32d0ebe544e57654c4a0a1490c54a7ebaa67561", 1104 + "sha256:5aba767e64b494483ad60c4873bec78d16205a21f8247c99749bd990d9c846c2", 1105 + "sha256:5d5eaf988951f6ecb6854ca3300b87123599c711183c83da7ce39717a7cbdbce", 1106 + "sha256:73da69e1f612c3e682e34dcb971272d90d6f27b2c99acff444ca455a89978574", 1107 + "sha256:75c8766734ac0053e1d683567e65e85306c4ec62631b0591caeb287ac8f72e08", 1108 + "sha256:75eea40355a8690459c7291ce6c8ce39c27bd223675c7da6619f510c728feb97", 1109 + "sha256:80c3cf46511653f94dfe07c7c79ab105c4164d6e1dfcb35b7214fb9af53eaef4", 1110 + "sha256:8557c807388e6617161fe51b1a4747ea8d1133f2d2ad8e79583439abebe58fbd", 1111 + "sha256:89438e8885a186c69fe31f7ef98bb2bf29688c466c3caf9060f404c0be89ae80", 1112 + "sha256:899b03a3be785a7e1ff84b237da71f0efa2f021512f147dd34ffdf7aa82cb678", 1113 + "sha256:8de9b88f0cbac73cfed34220d13c57849e62a7099a714b929142425e926d223a", 1114 + "sha256:8f4d561f4728f825e3b793a53064b606ca0b6fc264f67d09e54af452aafc5b82", 1115 + "sha256:907b214da5d2fcff0b6ddb83de1333890ca92abaf4bbf8d9c61dc1b95c87fd6e", 1116 + "sha256:9118de88c16947eaf5b92f749e65b0501ea69e7c2be7bd6aefc12551622360e1", 1117 + "sha256:9568764e72d85cf7855ca78b48e07ed1be47bf230e2cea8dabda3c95f660b0ff", 1118 + "sha256:9c74cbee9e532dc34371127f7686d6953e5153a1f22beab7f953d95ee4a0fe09", 1119 + "sha256:9cdfd649011ce2d90cb0dd304c5aba1190fac0c266d19a9e2b96b81cfd150a09", 1120 + "sha256:9f00d54b18dd837f1431d66b076737deb7c29ce3ebb8412ceaf44d5e1954ac0c", 1121 + "sha256:a2f416cdfe92f5fbb77177f5f3f7830059d1582db05f2c7119bf80069d1ab69b", 1122 + "sha256:a4cb372e22e9c879bd9a9cc9b20b7c1fbf30a605ac953da45ecec05d8a6e1c77", 1123 + "sha256:a65de5c02884760a14a58304fb6303f9ddfc582e630f385daea871e1bdb18686", 1124 + "sha256:aa3b3a43dabc4cc57a7800f526cbe03f71c69121e21b863fdf497b59b462b163", 1125 + "sha256:ab0f7aabdbce4a202e013083eeab71afdb85efa405dc4a06fea98cde81204675", 1126 + "sha256:abe081453166e206e3a8c6d8ace57214c17b6d9477d7601ac14a365344dbc1f4", 1127 + "sha256:ae141c9017f8f473a6ee07a9425da021816a9f8c0683c2e5442f0ccf56b0fc62", 1128 + "sha256:af52078719209bef33e38131486fd784832dd8d1dc9b85f00a44f6e7437dd021", 1129 + "sha256:b00150a9a3fd0a8efaa90bc2696c105b04039d50763dd1c95a34c88c5966cb57", 1130 + "sha256:b2660000e1a113869c86eb5cc07f3343467490f3cd9d0299f81da9ddae7137b7", 1131 + "sha256:b3eb1a0d2b6d232d1bcdfc3fcc5f7b004ab3fbd9203011a3172f051d4527c0b6", 1132 + "sha256:b589d93a60e78fe55d5bc76ee8c2bf945dbdbb7cd16044c53e0307604e448de1", 1133 + "sha256:b8578fc6c8bdd0201327503720fa581000b4bd3934abbf07e2628d1ad3de157d", 1134 + "sha256:ba1b28e44f611f3f2b436bd8290050a61db4b59a8e24be4465f44897936b3824", 1135 + "sha256:bb44644371eaa29a3aba7b69b1862d0d56f073bb7585baa32e4271a71a91ee82", 1136 + "sha256:bcde80aefe7054fad6277762fb7e9d35c72ea479a485ae1bb14629c640987b30", 1137 + "sha256:bd1142d22fdb183a0fff66d79134bf644401437fed874f81066d314c67ee193c", 1138 + "sha256:bf77f9017fcfa1232f98598a637406e6c33982ccba8a5922339575c3e2b90ea5", 1139 + "sha256:c2772bb95062e3f9774140205cd65d8997e39620715486cf5f843cf4ad8f744c", 1140 + "sha256:c4ecc4e9a5d73a816cae36ee6b5d8b7a0c72013cae1e101406e832887c3dc2d8", 1141 + "sha256:c86231c66e4f422e7c13ea6200bb4048b3016c8bfd11b4fd0dabd04d2c8e3501", 1142 + "sha256:c8f6526df47953b07c45b95c4d1da6b9a0861c0e5da0271db96bb1d807825412", 1143 + "sha256:ccfb77f6dc8abffa6f1c7e3975ed9070a41ce5fcc11154d2bead8c1baa940f09", 1144 + "sha256:d9d7efaad48b859053b90dedd69bc92f2095084251e732e4c57ac9726bcb1e64", 1145 + "sha256:dd91a7d7a9ce7f4983097c91ce211f3e5569cc21caa16f2692298a07e396f82b", 1146 + "sha256:de4a2fd524993578fe093044f291b4b24aab134390030b3b9b5f87fd41ab7e75", 1147 + "sha256:df61f818edf7c8626bfa392f825860fb670b5f8336e238eb0ec7e2a5689cdded", 1148 + "sha256:e1147bc3d0dd1e549d991110d0a09557ec9f925dbc1ca62871fcdab2ec9d716b", 1149 + "sha256:e1954f4b239d1a92081647eecfd51cbfd08ea16eb743b8af1cd0113258feea14", 1150 + "sha256:e281b71922208e00886e4b7ffbfcf27874486364f177418ab676f102130e7ec9", 1151 + "sha256:e69737bd56006a86fd5a78b2b85447580a6138c930a75eb9ef39fe03d90782b1", 1152 + "sha256:e82b4a70cc67094f3f3fd77579702f48fcf1de7bdc67d79b8f1e24d089a6162c", 1153 + "sha256:e92e5817eb6bfed23aa5e45bfe30647b83602bdd6f9e25d63524d4e6258458b0", 1154 + "sha256:eaba0613c759ebf95988a84f766ca6b7432d55ce399194f95dde588ad1be0878", 1155 + "sha256:edd74b760a6bb950397e7a7bd2f38e6700f6525062650b1d77c6d851b82f02c2", 1156 + "sha256:f40abbcc0a7d9a8a80870af839d317e6932533f98682aabd977add6c53beeb23", 1157 + "sha256:fce7a8ee8d0f682c953c0188735d823f0fcb62779bf92cd6ba473a8e730e26ad" 1158 + ], 1159 + "markers": "python_version >= '3.8'", 1160 + "version": "==0.10.2" 1161 + }, 1162 + "s3transfer": { 1163 + "hashes": [ 1164 + "sha256:b014be3a8a2aab98cfe1abc7229cc5a9a0cf05eb9c1f2b86b230fd8df3f78084", 1165 + "sha256:cab66d3380cca3e70939ef2255d01cd8aece6a4907a9528740f668c4b0611861" 1166 + ], 1167 + "markers": "python_version >= '3.7'", 1168 + "version": "==0.6.2" 1169 + }, 1170 + "sentry-sdk": { 1171 + "hashes": [ 1172 + "sha256:2e53ad63f96bb9da6570ba2e755c267e529edcf58580a2c0d2a11ef26e1e678b", 1173 + "sha256:7dc873b87e1faf4d00614afd1058bfa1522942f33daef8a59f90de8ed75cd10c" 1174 + ], 1175 + "index": "pypi", 1176 + "version": "==1.30.0" 1177 + }, 1178 + "six": { 1179 + "hashes": [ 1180 + "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", 1181 + "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" 1182 + ], 1183 + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'", 1184 + "version": "==1.16.0" 1185 + }, 1186 + "sqlparse": { 1187 + "hashes": [ 1188 + "sha256:5430a4fe2ac7d0f93e66f1efc6e1338a41884b7ddf2a350cedd20ccc4d9d28f3", 1189 + "sha256:d446183e84b8349fa3061f0fe7f06ca94ba65b426946ffebe6e3e8295332420c" 1190 + ], 1191 + "markers": "python_version >= '3.5'", 1192 + "version": "==0.4.4" 1193 + }, 1194 + "text-unidecode": { 1195 + "hashes": [ 1196 + "sha256:1311f10e8b895935241623731c2ba64f4c455287888b18189350b67134a822e8", 1197 + "sha256:bad6603bb14d279193107714b288be206cac565dfa49aa5b105294dd5c4aab93" 1198 + ], 1199 + "version": "==1.3" 1200 + }, 1201 + "typing-extensions": { 1202 + "hashes": [ 1203 + "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36", 1204 + "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2" 1205 + ], 1206 + "markers": "python_version >= '3.7'", 1207 + "version": "==4.7.1" 1208 + }, 1209 + "tzdata": { 1210 + "hashes": [ 1211 + "sha256:11ef1e08e54acb0d4f95bdb1be05da659673de4acbd21bf9c69e94cc5e907a3a", 1212 + "sha256:7e65763eef3120314099b6939b5546db7adce1e7d6f2e179e3df563c70511eda" 1213 + ], 1214 + "markers": "python_version >= '2'", 1215 + "version": "==2023.3" 1216 + }, 1217 + "unicodecsv": { 1218 + "hashes": [ 1219 + "sha256:018c08037d48649a0412063ff4eda26eaa81eff1546dbffa51fa5293276ff7fc" 1220 + ], 1221 + "version": "==0.14.1" 1222 + }, 1223 + "uritemplate": { 1224 + "hashes": [ 1225 + "sha256:4346edfc5c3b79f694bccd6d6099a322bbeb628dbf2cd86eea55a456ce5124f0", 1226 + "sha256:830c08b8d99bdd312ea4ead05994a38e8936266f84b9a7878232db50b044e02e" 1227 + ], 1228 + "markers": "python_version >= '3.6'", 1229 + "version": "==4.1.1" 1230 + }, 1231 + "urllib3": { 1232 + "hashes": [ 1233 + "sha256:8d36afa7616d8ab714608411b4a3b13e58f463aee519024578e062e141dce20f", 1234 + "sha256:8f135f6502756bde6b2a9b28989df5fbe87c9970cecaa69041edcce7f0589b14" 1235 + ], 1236 + "markers": "python_version >= '3.6'", 1237 + "version": "==1.26.16" 1238 + }, 1239 + "vine": { 1240 + "hashes": [ 1241 + "sha256:4c9dceab6f76ed92105027c49c823800dd33cacce13bdedc5b914e3514b7fb30", 1242 + "sha256:7d3b1624a953da82ef63462013bbd271d3eb75751489f9807598e8f340bd637e" 1243 + ], 1244 + "markers": "python_version >= '3.6'", 1245 + "version": "==5.0.0" 1246 + }, 1247 + "wcwidth": { 1248 + "hashes": [ 1249 + "sha256:795b138f6875577cd91bba52baf9e445cd5118fd32723b460e30a0af30ea230e", 1250 + "sha256:a5220780a404dbe3353789870978e472cfe477761f06ee55077256e509b156d0" 1251 + ], 1252 + "version": "==0.2.6" 1253 + }, 1254 + "whitenoise": { 1255 + "hashes": [ 1256 + "sha256:15fe60546ac975b58e357ccaeb165a4ca2d0ab697e48450b8f0307ca368195a8", 1257 + "sha256:16468e9ad2189f09f4a8c635a9031cc9bb2cdbc8e5e53365407acf99f7ade9ec" 1258 + ], 1259 + "index": "pypi", 1260 + "markers": "python_version >= '3.7'", 1261 + "version": "==6.5.0" 1262 + }, 1263 + "wrapt": { 1264 + "hashes": [ 1265 + "sha256:02fce1852f755f44f95af51f69d22e45080102e9d00258053b79367d07af39c0", 1266 + "sha256:077ff0d1f9d9e4ce6476c1a924a3332452c1406e59d90a2cf24aeb29eeac9420", 1267 + "sha256:078e2a1a86544e644a68422f881c48b84fef6d18f8c7a957ffd3f2e0a74a0d4a", 1268 + "sha256:0970ddb69bba00670e58955f8019bec4a42d1785db3faa043c33d81de2bf843c", 1269 + "sha256:1286eb30261894e4c70d124d44b7fd07825340869945c79d05bda53a40caa079", 1270 + "sha256:21f6d9a0d5b3a207cdf7acf8e58d7d13d463e639f0c7e01d82cdb671e6cb7923", 1271 + "sha256:230ae493696a371f1dbffaad3dafbb742a4d27a0afd2b1aecebe52b740167e7f", 1272 + "sha256:26458da5653aa5b3d8dc8b24192f574a58984c749401f98fff994d41d3f08da1", 1273 + "sha256:2cf56d0e237280baed46f0b5316661da892565ff58309d4d2ed7dba763d984b8", 1274 + "sha256:2e51de54d4fb8fb50d6ee8327f9828306a959ae394d3e01a1ba8b2f937747d86", 1275 + "sha256:2fbfbca668dd15b744418265a9607baa970c347eefd0db6a518aaf0cfbd153c0", 1276 + "sha256:38adf7198f8f154502883242f9fe7333ab05a5b02de7d83aa2d88ea621f13364", 1277 + "sha256:3a8564f283394634a7a7054b7983e47dbf39c07712d7b177b37e03f2467a024e", 1278 + "sha256:3abbe948c3cbde2689370a262a8d04e32ec2dd4f27103669a45c6929bcdbfe7c", 1279 + "sha256:3bbe623731d03b186b3d6b0d6f51865bf598587c38d6f7b0be2e27414f7f214e", 1280 + "sha256:40737a081d7497efea35ab9304b829b857f21558acfc7b3272f908d33b0d9d4c", 1281 + "sha256:41d07d029dd4157ae27beab04d22b8e261eddfc6ecd64ff7000b10dc8b3a5727", 1282 + "sha256:46ed616d5fb42f98630ed70c3529541408166c22cdfd4540b88d5f21006b0eff", 1283 + "sha256:493d389a2b63c88ad56cdc35d0fa5752daac56ca755805b1b0c530f785767d5e", 1284 + "sha256:4ff0d20f2e670800d3ed2b220d40984162089a6e2c9646fdb09b85e6f9a8fc29", 1285 + "sha256:54accd4b8bc202966bafafd16e69da9d5640ff92389d33d28555c5fd4f25ccb7", 1286 + "sha256:56374914b132c702aa9aa9959c550004b8847148f95e1b824772d453ac204a72", 1287 + "sha256:578383d740457fa790fdf85e6d346fda1416a40549fe8db08e5e9bd281c6a475", 1288 + "sha256:58d7a75d731e8c63614222bcb21dd992b4ab01a399f1f09dd82af17bbfc2368a", 1289 + "sha256:5c5aa28df055697d7c37d2099a7bc09f559d5053c3349b1ad0c39000e611d317", 1290 + "sha256:5fc8e02f5984a55d2c653f5fea93531e9836abbd84342c1d1e17abc4a15084c2", 1291 + "sha256:63424c681923b9f3bfbc5e3205aafe790904053d42ddcc08542181a30a7a51bd", 1292 + "sha256:64b1df0f83706b4ef4cfb4fb0e4c2669100fd7ecacfb59e091fad300d4e04640", 1293 + "sha256:74934ebd71950e3db69960a7da29204f89624dde411afbfb3b4858c1409b1e98", 1294 + "sha256:75669d77bb2c071333417617a235324a1618dba66f82a750362eccbe5b61d248", 1295 + "sha256:75760a47c06b5974aa5e01949bf7e66d2af4d08cb8c1d6516af5e39595397f5e", 1296 + "sha256:76407ab327158c510f44ded207e2f76b657303e17cb7a572ffe2f5a8a48aa04d", 1297 + "sha256:76e9c727a874b4856d11a32fb0b389afc61ce8aaf281ada613713ddeadd1cfec", 1298 + "sha256:77d4c1b881076c3ba173484dfa53d3582c1c8ff1f914c6461ab70c8428b796c1", 1299 + "sha256:780c82a41dc493b62fc5884fb1d3a3b81106642c5c5c78d6a0d4cbe96d62ba7e", 1300 + "sha256:7dc0713bf81287a00516ef43137273b23ee414fe41a3c14be10dd95ed98a2df9", 1301 + "sha256:7eebcdbe3677e58dd4c0e03b4f2cfa346ed4049687d839adad68cc38bb559c92", 1302 + "sha256:896689fddba4f23ef7c718279e42f8834041a21342d95e56922e1c10c0cc7afb", 1303 + "sha256:96177eb5645b1c6985f5c11d03fc2dbda9ad24ec0f3a46dcce91445747e15094", 1304 + "sha256:96e25c8603a155559231c19c0349245eeb4ac0096fe3c1d0be5c47e075bd4f46", 1305 + "sha256:9d37ac69edc5614b90516807de32d08cb8e7b12260a285ee330955604ed9dd29", 1306 + "sha256:9ed6aa0726b9b60911f4aed8ec5b8dd7bf3491476015819f56473ffaef8959bd", 1307 + "sha256:a487f72a25904e2b4bbc0817ce7a8de94363bd7e79890510174da9d901c38705", 1308 + "sha256:a4cbb9ff5795cd66f0066bdf5947f170f5d63a9274f99bdbca02fd973adcf2a8", 1309 + "sha256:a74d56552ddbde46c246b5b89199cb3fd182f9c346c784e1a93e4dc3f5ec9975", 1310 + "sha256:a89ce3fd220ff144bd9d54da333ec0de0399b52c9ac3d2ce34b569cf1a5748fb", 1311 + "sha256:abd52a09d03adf9c763d706df707c343293d5d106aea53483e0ec8d9e310ad5e", 1312 + "sha256:abd8f36c99512755b8456047b7be10372fca271bf1467a1caa88db991e7c421b", 1313 + "sha256:af5bd9ccb188f6a5fdda9f1f09d9f4c86cc8a539bd48a0bfdc97723970348418", 1314 + "sha256:b02f21c1e2074943312d03d243ac4388319f2456576b2c6023041c4d57cd7019", 1315 + "sha256:b06fa97478a5f478fb05e1980980a7cdf2712015493b44d0c87606c1513ed5b1", 1316 + "sha256:b0724f05c396b0a4c36a3226c31648385deb6a65d8992644c12a4963c70326ba", 1317 + "sha256:b130fe77361d6771ecf5a219d8e0817d61b236b7d8b37cc045172e574ed219e6", 1318 + "sha256:b56d5519e470d3f2fe4aa7585f0632b060d532d0696c5bdfb5e8319e1d0f69a2", 1319 + "sha256:b67b819628e3b748fd3c2192c15fb951f549d0f47c0449af0764d7647302fda3", 1320 + "sha256:ba1711cda2d30634a7e452fc79eabcadaffedf241ff206db2ee93dd2c89a60e7", 1321 + "sha256:bbeccb1aa40ab88cd29e6c7d8585582c99548f55f9b2581dfc5ba68c59a85752", 1322 + "sha256:bd84395aab8e4d36263cd1b9308cd504f6cf713b7d6d3ce25ea55670baec5416", 1323 + "sha256:c99f4309f5145b93eca6e35ac1a988f0dc0a7ccf9ccdcd78d3c0adf57224e62f", 1324 + "sha256:ca1cccf838cd28d5a0883b342474c630ac48cac5df0ee6eacc9c7290f76b11c1", 1325 + "sha256:cd525e0e52a5ff16653a3fc9e3dd827981917d34996600bbc34c05d048ca35cc", 1326 + "sha256:cdb4f085756c96a3af04e6eca7f08b1345e94b53af8921b25c72f096e704e145", 1327 + "sha256:ce42618f67741d4697684e501ef02f29e758a123aa2d669e2d964ff734ee00ee", 1328 + "sha256:d06730c6aed78cee4126234cf2d071e01b44b915e725a6cb439a879ec9754a3a", 1329 + "sha256:d5fe3e099cf07d0fb5a1e23d399e5d4d1ca3e6dfcbe5c8570ccff3e9208274f7", 1330 + "sha256:d6bcbfc99f55655c3d93feb7ef3800bd5bbe963a755687cbf1f490a71fb7794b", 1331 + "sha256:d787272ed958a05b2c86311d3a4135d3c2aeea4fc655705f074130aa57d71653", 1332 + "sha256:e169e957c33576f47e21864cf3fc9ff47c223a4ebca8960079b8bd36cb014fd0", 1333 + "sha256:e20076a211cd6f9b44a6be58f7eeafa7ab5720eb796975d0c03f05b47d89eb90", 1334 + "sha256:e826aadda3cae59295b95343db8f3d965fb31059da7de01ee8d1c40a60398b29", 1335 + "sha256:eef4d64c650f33347c1f9266fa5ae001440b232ad9b98f1f43dfe7a79435c0a6", 1336 + "sha256:f2e69b3ed24544b0d3dbe2c5c0ba5153ce50dcebb576fdc4696d52aa22db6034", 1337 + "sha256:f87ec75864c37c4c6cb908d282e1969e79763e0d9becdfe9fe5473b7bb1e5f09", 1338 + "sha256:fbec11614dba0424ca72f4e8ba3c420dba07b4a7c206c8c8e4e73f2e98f4c559", 1339 + "sha256:fd69666217b62fa5d7c6aa88e507493a34dec4fa20c5bd925e4bc12fce586639" 1340 + ], 1341 + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", 1342 + "version": "==1.15.0" 1343 + } 1344 + }, 1345 + "develop": { 1346 + "appnope": { 1347 + "hashes": [ 1348 + "sha256:02bd91c4de869fbb1e1c50aafc4098827a7a54ab2f39d9dcba6c9547ed920e24", 1349 + "sha256:265a455292d0bd8a72453494fa24df5a11eb18373a60c7c0430889f22548605e" 1350 + ], 1351 + "markers": "sys_platform == 'darwin'", 1352 + "version": "==0.1.3" 1353 + }, 1354 + "asgiref": { 1355 + "hashes": [ 1356 + "sha256:89b2ef2247e3b562a16eef663bc0e2e703ec6468e2fa8a5cd61cd449786d4f6e", 1357 + "sha256:9e0ce3aa93a819ba5b45120216b23878cf6e8525eb3848653452b4192b92afed" 1358 + ], 1359 + "markers": "python_version >= '3.7'", 1360 + "version": "==3.7.2" 1361 + }, 1362 + "asttokens": { 1363 + "hashes": [ 1364 + "sha256:2e0171b991b2c959acc6c49318049236844a5da1d65ba2672c4880c1c894834e", 1365 + "sha256:cf8fc9e61a86461aa9fb161a14a0841a03c405fa829ac6b202670b3495d2ce69" 1366 + ], 1367 + "version": "==2.4.0" 1368 + }, 1369 + "autopep8": { 1370 + "hashes": [ 1371 + "sha256:067959ca4a07b24dbd5345efa8325f5f58da4298dab0dde0443d5ed765de80cb", 1372 + "sha256:2913064abd97b3419d1cc83ea71f042cb821f87e45b9c88cad5ad3c4ea87fe0c" 1373 + ], 1374 + "markers": "python_version >= '3.6'", 1375 + "version": "==2.0.4" 1376 + }, 1377 + "backcall": { 1378 + "hashes": [ 1379 + "sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e", 1380 + "sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255" 1381 + ], 1382 + "version": "==0.2.0" 1383 + }, 1384 + "black": { 1385 + "hashes": [ 1386 + "sha256:3511c8a7e22ce653f89ae90dfddaf94f3bb7e2587a245246572d3b9c92adf066", 1387 + "sha256:9366c1f898981f09eb8da076716c02fd021f5a0e63581c66501d68a2e4eab844" 1388 + ], 1389 + "index": "pypi", 1390 + "markers": "python_version >= '3.8'", 1391 + "version": "==23.9.0" 1392 + }, 1393 + "boto3": { 1394 + "hashes": [ 1395 + "sha256:c53c92dfe22489ba31e918c2e7b59ff43e2e778bd3d3559e62351a739382bb5c", 1396 + "sha256:eea3b07e0f28c9f92bccab972af24a3b0dd951c69d93da75227b8ecd3e18f6c4" 1397 + ], 1398 + "index": "pypi", 1399 + "markers": "python_version >= '3.7'", 1400 + "version": "==1.28.44" 1401 + }, 1402 + "boto3-stubs": { 1403 + "extras": [ 1404 + "boto3", 1405 + "s3" 1406 + ], 1407 + "hashes": [ 1408 + "sha256:927458c9b836949e473330bad3bb013a217977931fe633a39207deea89f7b82e", 1409 + "sha256:ec48585322cf7b417044dfe23b42499231886b41f612359f6877018a0d2fa37f" 1410 + ], 1411 + "markers": "python_version >= '3.7'", 1412 + "version": "==1.28.44" 1413 + }, 1414 + "botocore": { 1415 + "hashes": [ 1416 + "sha256:83d61c1ca781e6ede19fcc4d5dd73004eee3825a2b220f0d7727e32069209d98", 1417 + "sha256:84f90919fecb4a4f417fd10145c8a87ff2c4b14d6381cd34d9babf02110b3315" 1418 + ], 1419 + "markers": "python_version >= '3.7'", 1420 + "version": "==1.31.44" 1421 + }, 1422 + "botocore-stubs": { 1423 + "hashes": [ 1424 + "sha256:18ca8902e150d777d609485580bde7858a5b1078f4264cd21ac855c507cb970c", 1425 + "sha256:a1f9fe86d5b89e3e898466c803b8b8098a8f905535eb7043ff0946b564aebbca" 1426 + ], 1427 + "markers": "python_version >= '3.7' and python_version < '4.0'", 1428 + "version": "==1.31.44" 1429 + }, 1430 + "certifi": { 1431 + "hashes": [ 1432 + "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082", 1433 + "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9" 1434 + ], 1435 + "markers": "python_version >= '3.6'", 1436 + "version": "==2023.7.22" 1437 + }, 1438 + "cfgv": { 1439 + "hashes": [ 1440 + "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9", 1441 + "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560" 1442 + ], 1443 + "markers": "python_version >= '3.8'", 1444 + "version": "==3.4.0" 1445 + }, 1446 + "charset-normalizer": { 1447 + "hashes": [ 1448 + "sha256:04e57ab9fbf9607b77f7d057974694b4f6b142da9ed4a199859d9d4d5c63fe96", 1449 + "sha256:09393e1b2a9461950b1c9a45d5fd251dc7c6f228acab64da1c9c0165d9c7765c", 1450 + "sha256:0b87549028f680ca955556e3bd57013ab47474c3124dc069faa0b6545b6c9710", 1451 + "sha256:1000fba1057b92a65daec275aec30586c3de2401ccdcd41f8a5c1e2c87078706", 1452 + "sha256:1249cbbf3d3b04902ff081ffbb33ce3377fa6e4c7356f759f3cd076cc138d020", 1453 + "sha256:1920d4ff15ce893210c1f0c0e9d19bfbecb7983c76b33f046c13a8ffbd570252", 1454 + "sha256:193cbc708ea3aca45e7221ae58f0fd63f933753a9bfb498a3b474878f12caaad", 1455 + "sha256:1a100c6d595a7f316f1b6f01d20815d916e75ff98c27a01ae817439ea7726329", 1456 + "sha256:1f30b48dd7fa1474554b0b0f3fdfdd4c13b5c737a3c6284d3cdc424ec0ffff3a", 1457 + "sha256:203f0c8871d5a7987be20c72442488a0b8cfd0f43b7973771640fc593f56321f", 1458 + "sha256:246de67b99b6851627d945db38147d1b209a899311b1305dd84916f2b88526c6", 1459 + "sha256:2dee8e57f052ef5353cf608e0b4c871aee320dd1b87d351c28764fc0ca55f9f4", 1460 + "sha256:2efb1bd13885392adfda4614c33d3b68dee4921fd0ac1d3988f8cbb7d589e72a", 1461 + "sha256:2f4ac36d8e2b4cc1aa71df3dd84ff8efbe3bfb97ac41242fbcfc053c67434f46", 1462 + "sha256:3170c9399da12c9dc66366e9d14da8bf7147e1e9d9ea566067bbce7bb74bd9c2", 1463 + "sha256:3b1613dd5aee995ec6d4c69f00378bbd07614702a315a2cf6c1d21461fe17c23", 1464 + "sha256:3bb3d25a8e6c0aedd251753a79ae98a093c7e7b471faa3aa9a93a81431987ace", 1465 + "sha256:3bb7fda7260735efe66d5107fb7e6af6a7c04c7fce9b2514e04b7a74b06bf5dd", 1466 + "sha256:41b25eaa7d15909cf3ac4c96088c1f266a9a93ec44f87f1d13d4a0e86c81b982", 1467 + "sha256:45de3f87179c1823e6d9e32156fb14c1927fcc9aba21433f088fdfb555b77c10", 1468 + "sha256:46fb8c61d794b78ec7134a715a3e564aafc8f6b5e338417cb19fe9f57a5a9bf2", 1469 + "sha256:48021783bdf96e3d6de03a6e39a1171ed5bd7e8bb93fc84cc649d11490f87cea", 1470 + "sha256:4957669ef390f0e6719db3613ab3a7631e68424604a7b448f079bee145da6e09", 1471 + "sha256:5e86d77b090dbddbe78867a0275cb4df08ea195e660f1f7f13435a4649e954e5", 1472 + "sha256:6339d047dab2780cc6220f46306628e04d9750f02f983ddb37439ca47ced7149", 1473 + "sha256:681eb3d7e02e3c3655d1b16059fbfb605ac464c834a0c629048a30fad2b27489", 1474 + "sha256:6c409c0deba34f147f77efaa67b8e4bb83d2f11c8806405f76397ae5b8c0d1c9", 1475 + "sha256:7095f6fbfaa55defb6b733cfeb14efaae7a29f0b59d8cf213be4e7ca0b857b80", 1476 + "sha256:70c610f6cbe4b9fce272c407dd9d07e33e6bf7b4aa1b7ffb6f6ded8e634e3592", 1477 + "sha256:72814c01533f51d68702802d74f77ea026b5ec52793c791e2da806a3844a46c3", 1478 + "sha256:7a4826ad2bd6b07ca615c74ab91f32f6c96d08f6fcc3902ceeedaec8cdc3bcd6", 1479 + "sha256:7c70087bfee18a42b4040bb9ec1ca15a08242cf5867c58726530bdf3945672ed", 1480 + "sha256:855eafa5d5a2034b4621c74925d89c5efef61418570e5ef9b37717d9c796419c", 1481 + "sha256:8700f06d0ce6f128de3ccdbc1acaea1ee264d2caa9ca05daaf492fde7c2a7200", 1482 + "sha256:89f1b185a01fe560bc8ae5f619e924407efca2191b56ce749ec84982fc59a32a", 1483 + "sha256:8b2c760cfc7042b27ebdb4a43a4453bd829a5742503599144d54a032c5dc7e9e", 1484 + "sha256:8c2f5e83493748286002f9369f3e6607c565a6a90425a3a1fef5ae32a36d749d", 1485 + "sha256:8e098148dd37b4ce3baca71fb394c81dc5d9c7728c95df695d2dca218edf40e6", 1486 + "sha256:94aea8eff76ee6d1cdacb07dd2123a68283cb5569e0250feab1240058f53b623", 1487 + "sha256:95eb302ff792e12aba9a8b8f8474ab229a83c103d74a750ec0bd1c1eea32e669", 1488 + "sha256:9bd9b3b31adcb054116447ea22caa61a285d92e94d710aa5ec97992ff5eb7cf3", 1489 + "sha256:9e608aafdb55eb9f255034709e20d5a83b6d60c054df0802fa9c9883d0a937aa", 1490 + "sha256:a103b3a7069b62f5d4890ae1b8f0597618f628b286b03d4bc9195230b154bfa9", 1491 + "sha256:a386ebe437176aab38c041de1260cd3ea459c6ce5263594399880bbc398225b2", 1492 + "sha256:a38856a971c602f98472050165cea2cdc97709240373041b69030be15047691f", 1493 + "sha256:a401b4598e5d3f4a9a811f3daf42ee2291790c7f9d74b18d75d6e21dda98a1a1", 1494 + "sha256:a7647ebdfb9682b7bb97e2a5e7cb6ae735b1c25008a70b906aecca294ee96cf4", 1495 + "sha256:aaf63899c94de41fe3cf934601b0f7ccb6b428c6e4eeb80da72c58eab077b19a", 1496 + "sha256:b0dac0ff919ba34d4df1b6131f59ce95b08b9065233446be7e459f95554c0dc8", 1497 + "sha256:baacc6aee0b2ef6f3d308e197b5d7a81c0e70b06beae1f1fcacffdbd124fe0e3", 1498 + "sha256:bf420121d4c8dce6b889f0e8e4ec0ca34b7f40186203f06a946fa0276ba54029", 1499 + "sha256:c04a46716adde8d927adb9457bbe39cf473e1e2c2f5d0a16ceb837e5d841ad4f", 1500 + "sha256:c0b21078a4b56965e2b12f247467b234734491897e99c1d51cee628da9786959", 1501 + "sha256:c1c76a1743432b4b60ab3358c937a3fe1341c828ae6194108a94c69028247f22", 1502 + "sha256:c4983bf937209c57240cff65906b18bb35e64ae872da6a0db937d7b4af845dd7", 1503 + "sha256:c4fb39a81950ec280984b3a44f5bd12819953dc5fa3a7e6fa7a80db5ee853952", 1504 + "sha256:c57921cda3a80d0f2b8aec7e25c8aa14479ea92b5b51b6876d975d925a2ea346", 1505 + "sha256:c8063cf17b19661471ecbdb3df1c84f24ad2e389e326ccaf89e3fb2484d8dd7e", 1506 + "sha256:ccd16eb18a849fd8dcb23e23380e2f0a354e8daa0c984b8a732d9cfaba3a776d", 1507 + "sha256:cd6dbe0238f7743d0efe563ab46294f54f9bc8f4b9bcf57c3c666cc5bc9d1299", 1508 + "sha256:d62e51710986674142526ab9f78663ca2b0726066ae26b78b22e0f5e571238dd", 1509 + "sha256:db901e2ac34c931d73054d9797383d0f8009991e723dab15109740a63e7f902a", 1510 + "sha256:e03b8895a6990c9ab2cdcd0f2fe44088ca1c65ae592b8f795c3294af00a461c3", 1511 + "sha256:e1c8a2f4c69e08e89632defbfabec2feb8a8d99edc9f89ce33c4b9e36ab63037", 1512 + "sha256:e4b749b9cc6ee664a3300bb3a273c1ca8068c46be705b6c31cf5d276f8628a94", 1513 + "sha256:e6a5bf2cba5ae1bb80b154ed68a3cfa2fa00fde979a7f50d6598d3e17d9ac20c", 1514 + "sha256:e857a2232ba53ae940d3456f7533ce6ca98b81917d47adc3c7fd55dad8fab858", 1515 + "sha256:ee4006268ed33370957f55bf2e6f4d263eaf4dc3cfc473d1d90baff6ed36ce4a", 1516 + "sha256:eef9df1eefada2c09a5e7a40991b9fc6ac6ef20b1372abd48d2794a316dc0449", 1517 + "sha256:f058f6963fd82eb143c692cecdc89e075fa0828db2e5b291070485390b2f1c9c", 1518 + "sha256:f25c229a6ba38a35ae6e25ca1264621cc25d4d38dca2942a7fce0b67a4efe918", 1519 + "sha256:f2a1d0fd4242bd8643ce6f98927cf9c04540af6efa92323e9d3124f57727bfc1", 1520 + "sha256:f7560358a6811e52e9c4d142d497f1a6e10103d3a6881f18d04dbce3729c0e2c", 1521 + "sha256:f779d3ad205f108d14e99bb3859aa7dd8e9c68874617c72354d7ecaec2a054ac", 1522 + "sha256:f87f746ee241d30d6ed93969de31e5ffd09a2961a051e60ae6bddde9ec3583aa" 1523 + ], 1524 + "markers": "python_full_version >= '3.7.0'", 1525 + "version": "==3.2.0" 1526 + }, 1527 + "click": { 1528 + "hashes": [ 1529 + "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28", 1530 + "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de" 1531 + ], 1532 + "markers": "python_version >= '3.7'", 1533 + "version": "==8.1.7" 1534 + }, 1535 + "coverage": { 1536 + "hashes": [ 1537 + "sha256:025ded371f1ca280c035d91b43252adbb04d2aea4c7105252d3cbc227f03b375", 1538 + "sha256:04312b036580ec505f2b77cbbdfb15137d5efdfade09156961f5277149f5e344", 1539 + "sha256:0575c37e207bb9b98b6cf72fdaaa18ac909fb3d153083400c2d48e2e6d28bd8e", 1540 + "sha256:07d156269718670d00a3b06db2288b48527fc5f36859425ff7cec07c6b367745", 1541 + "sha256:1f111a7d85658ea52ffad7084088277135ec5f368457275fc57f11cebb15607f", 1542 + "sha256:220eb51f5fb38dfdb7e5d54284ca4d0cd70ddac047d750111a68ab1798945194", 1543 + "sha256:229c0dd2ccf956bf5aeede7e3131ca48b65beacde2029f0361b54bf93d36f45a", 1544 + "sha256:245c5a99254e83875c7fed8b8b2536f040997a9b76ac4c1da5bff398c06e860f", 1545 + "sha256:2829c65c8faaf55b868ed7af3c7477b76b1c6ebeee99a28f59a2cb5907a45760", 1546 + "sha256:4aba512a15a3e1e4fdbfed2f5392ec221434a614cc68100ca99dcad7af29f3f8", 1547 + "sha256:4c96dd7798d83b960afc6c1feb9e5af537fc4908852ef025600374ff1a017392", 1548 + "sha256:50dd1e2dd13dbbd856ffef69196781edff26c800a74f070d3b3e3389cab2600d", 1549 + "sha256:5289490dd1c3bb86de4730a92261ae66ea8d44b79ed3cc26464f4c2cde581fbc", 1550 + "sha256:53669b79f3d599da95a0afbef039ac0fadbb236532feb042c534fbb81b1a4e40", 1551 + "sha256:553d7094cb27db58ea91332e8b5681bac107e7242c23f7629ab1316ee73c4981", 1552 + "sha256:586649ada7cf139445da386ab6f8ef00e6172f11a939fc3b2b7e7c9082052fa0", 1553 + "sha256:5ae4c6da8b3d123500f9525b50bf0168023313963e0e2e814badf9000dd6ef92", 1554 + "sha256:5b4ee7080878077af0afa7238df1b967f00dc10763f6e1b66f5cced4abebb0a3", 1555 + "sha256:5d991e13ad2ed3aced177f524e4d670f304c8233edad3210e02c465351f785a0", 1556 + "sha256:614f1f98b84eb256e4f35e726bfe5ca82349f8dfa576faabf8a49ca09e630086", 1557 + "sha256:636a8ac0b044cfeccae76a36f3b18264edcc810a76a49884b96dd744613ec0b7", 1558 + "sha256:6407424621f40205bbe6325686417e5e552f6b2dba3535dd1f90afc88a61d465", 1559 + "sha256:6bc6f3f4692d806831c136c5acad5ccedd0262aa44c087c46b7101c77e139140", 1560 + "sha256:6cb7fe1581deb67b782c153136541e20901aa312ceedaf1467dcb35255787952", 1561 + "sha256:74bb470399dc1989b535cb41f5ca7ab2af561e40def22d7e188e0a445e7639e3", 1562 + "sha256:75c8f0df9dfd8ff745bccff75867d63ef336e57cc22b2908ee725cc552689ec8", 1563 + "sha256:770f143980cc16eb601ccfd571846e89a5fe4c03b4193f2e485268f224ab602f", 1564 + "sha256:7eb0b188f30e41ddd659a529e385470aa6782f3b412f860ce22b2491c89b8593", 1565 + "sha256:7eb3cd48d54b9bd0e73026dedce44773214064be93611deab0b6a43158c3d5a0", 1566 + "sha256:87d38444efffd5b056fcc026c1e8d862191881143c3aa80bb11fcf9dca9ae204", 1567 + "sha256:8a07b692129b8a14ad7a37941a3029c291254feb7a4237f245cfae2de78de037", 1568 + "sha256:966f10df9b2b2115da87f50f6a248e313c72a668248be1b9060ce935c871f276", 1569 + "sha256:a6191b3a6ad3e09b6cfd75b45c6aeeffe7e3b0ad46b268345d159b8df8d835f9", 1570 + "sha256:aab8e9464c00da5cb9c536150b7fbcd8850d376d1151741dd0d16dfe1ba4fd26", 1571 + "sha256:ac3c5b7e75acac31e490b7851595212ed951889918d398b7afa12736c85e13ce", 1572 + "sha256:ac9ad38204887349853d7c313f53a7b1c210ce138c73859e925bc4e5d8fc18e7", 1573 + "sha256:b9c0c19f70d30219113b18fe07e372b244fb2a773d4afde29d5a2f7930765136", 1574 + "sha256:c397c70cd20f6df7d2a52283857af622d5f23300c4ca8e5bd8c7a543825baa5a", 1575 + "sha256:c6601a60318f9c3945be6ea0f2a80571f4299b6801716f8a6e4846892737ebe4", 1576 + "sha256:c6f55d38818ca9596dc9019eae19a47410d5322408140d9a0076001a3dcb938c", 1577 + "sha256:ca70466ca3a17460e8fc9cea7123c8cbef5ada4be3140a1ef8f7b63f2f37108f", 1578 + "sha256:ca833941ec701fda15414be400c3259479bfde7ae6d806b69e63b3dc423b1832", 1579 + "sha256:cd0f7429ecfd1ff597389907045ff209c8fdb5b013d38cfa7c60728cb484b6e3", 1580 + "sha256:cd694e19c031733e446c8024dedd12a00cda87e1c10bd7b8539a87963685e969", 1581 + "sha256:cdd088c00c39a27cfa5329349cc763a48761fdc785879220d54eb785c8a38520", 1582 + "sha256:de30c1aa80f30af0f6b2058a91505ea6e36d6535d437520067f525f7df123887", 1583 + "sha256:defbbb51121189722420a208957e26e49809feafca6afeef325df66c39c4fdb3", 1584 + "sha256:f09195dda68d94a53123883de75bb97b0e35f5f6f9f3aa5bf6e496da718f0cb6", 1585 + "sha256:f12d8b11a54f32688b165fd1a788c408f927b0960984b899be7e4c190ae758f1", 1586 + "sha256:f1a317fdf5c122ad642db8a97964733ab7c3cf6009e1a8ae8821089993f175ff", 1587 + "sha256:f2781fd3cabc28278dc982a352f50c81c09a1a500cc2086dc4249853ea96b981", 1588 + "sha256:f4f456590eefb6e1b3c9ea6328c1e9fa0f1006e7481179d749b3376fc793478e" 1589 + ], 1590 + "index": "pypi", 1591 + "markers": "python_version >= '3.8'", 1592 + "version": "==7.3.1" 1593 + }, 1594 + "debugpy": { 1595 + "hashes": [ 1596 + "sha256:0e90314a078d4e3f009520c8387aba8f74c3034645daa7a332a3d1bb81335756", 1597 + "sha256:1285920a3f9a75f5d1acf59ab1b9da9ae6eb9a05884cd7674f95170c9cafa4de", 1598 + "sha256:1565fd904f9571c430adca597771255cff4f92171486fced6f765dcbdfc8ec8d", 1599 + "sha256:17ad9a681aca1704c55b9a5edcb495fa8f599e4655c9872b7f9cf3dc25890d48", 1600 + "sha256:18a69f8e142a716310dd0af6d7db08992aed99e2606108732efde101e7c65e2a", 1601 + "sha256:18bca8429d6632e2d3435055416d2d88f0309cc39709f4f6355c8d412cc61f24", 1602 + "sha256:2b0e489613bc066051439df04c56777ec184b957d6810cb65f235083aef7a0dc", 1603 + "sha256:538765a41198aa88cc089295b39c7322dd598f9ef1d52eaae12145c63bf9430a", 1604 + "sha256:6516f36a2e95b3be27f171f12b641e443863f4ad5255d0fdcea6ae0be29bb912", 1605 + "sha256:676911c710e85567b17172db934a71319ed9d995104610ce23fd74a07f66e6f6", 1606 + "sha256:7515a5ba5ee9bfe956685909c5f28734c1cecd4ee813523363acfe3ca824883a", 1607 + "sha256:7bf0b4bbd841b2397b6a8de15da9227f1164f6d43ceee971c50194eaed930a9d", 1608 + "sha256:9e9571d831ad3c75b5fb6f3efcb71c471cf2a74ba84af6ac1c79ce00683bed4b", 1609 + "sha256:a5036e918c6ba8fc4c4f1fd0207d81db634431a02f0dc2ba51b12fd793c8c9de", 1610 + "sha256:a6f43a681c5025db1f1c0568069d1d1bad306a02e7c36144912b26d9c90e4724", 1611 + "sha256:ad22e1095b9977af432465c1e09132ba176e18df3834b1efcab1a449346b350b", 1612 + "sha256:bc8da67ade39d9e75608cdb8601d07e63a4e85966e0572c981f14e2cf42bcdef", 1613 + "sha256:c7e8cf91f8f3f9b5fad844dd88427b85d398bda1e2a0cd65d5a21312fcbc0c6f", 1614 + "sha256:d5be95b3946a4d7b388e45068c7b75036ac5a610f41014aee6cafcd5506423ad", 1615 + "sha256:dc8a12ac8b97ef3d6973c6679a093138c7c9b03eb685f0e253269a195f651559", 1616 + "sha256:f625e427f21423e5874139db529e18cb2966bdfcc1cb87a195538c5b34d163d1", 1617 + "sha256:f6de2e6f24f62969e0f0ef682d78c98161c4dca29e9fb05df4d2989005005502" 1618 + ], 1619 + "index": "pypi", 1620 + "markers": "python_version >= '3.7'", 1621 + "version": "==1.7.0" 1622 + }, 1623 + "decorator": { 1624 + "hashes": [ 1625 + "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330", 1626 + "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186" 1627 + ], 1628 + "markers": "python_version >= '3.5'", 1629 + "version": "==5.1.1" 1630 + }, 1631 + "distlib": { 1632 + "hashes": [ 1633 + "sha256:2e24928bc811348f0feb63014e97aaae3037f2cf48712d51ae61df7fd6075057", 1634 + "sha256:9dafe54b34a028eafd95039d5e5d4851a13734540f1331060d31c9916e7147a8" 1635 + ], 1636 + "version": "==0.3.7" 1637 + }, 1638 + "django": { 1639 + "hashes": [ 1640 + "sha256:5e5c1c9548ffb7796b4a8a4782e9a2e5a3df3615259fc1bfd3ebc73b646146c1", 1641 + "sha256:b6b2b5cae821077f137dc4dade696a1c2aa292f892eca28fa8d7bfdf2608ddd4" 1642 + ], 1643 + "index": "pypi", 1644 + "markers": "python_version >= '3.8'", 1645 + "version": "==4.2.5" 1646 + }, 1647 + "django-coverage-plugin": { 1648 + "hashes": [ 1649 + "sha256:223d34bf92bebadcb8b7b89932480e41c7bd98b44a8156934488fbe7f4a71f99", 1650 + "sha256:eb0ea8ffdb0db11a02994fc99be6500550efb496c350d709f418ff3d8e553a67" 1651 + ], 1652 + "index": "pypi", 1653 + "version": "==3.1.0" 1654 + }, 1655 + "django-debug-toolbar": { 1656 + "hashes": [ 1657 + "sha256:af99128c06e8e794479e65ab62cc6c7d1e74e1c19beb44dcbf9bad7a9c017327", 1658 + "sha256:bc7fdaafafcdedefcc67a4a5ad9dac96efd6e41db15bc74d402a54a2ba4854dc" 1659 + ], 1660 + "index": "pypi", 1661 + "markers": "python_version >= '3.8'", 1662 + "version": "==4.2.0" 1663 + }, 1664 + "django-extensions": { 1665 + "hashes": [ 1666 + "sha256:44d27919d04e23b3f40231c4ab7af4e61ce832ef46d610cc650d53e68328410a", 1667 + "sha256:9600b7562f79a92cbf1fde6403c04fee314608fefbb595502e34383ae8203401" 1668 + ], 1669 + "index": "pypi", 1670 + "markers": "python_version >= '3.6'", 1671 + "version": "==3.2.3" 1672 + }, 1673 + "django-silk": { 1674 + "hashes": [ 1675 + "sha256:2f1fcaaf21192011147537fe1ca72dc9f552f32d7043ebd82aeeda370f194469", 1676 + "sha256:50552f06d9306d06517fbeab9a2c74856355e06304f03ed16b6dd353f7c77e7a" 1677 + ], 1678 + "index": "pypi", 1679 + "markers": "python_version >= '3.7'", 1680 + "version": "==5.0.3" 1681 + }, 1682 + "django-stubs": { 1683 + "hashes": [ 1684 + "sha256:7d4a132c381519815e865c27a89eca41bcbd06056832507224816a43d75c601c", 1685 + "sha256:834b60fd81510cce6b56c1c6c28bec3c504a418bc90ff7d0063fabe8ab9a7868" 1686 + ], 1687 + "index": "pypi", 1688 + "markers": "python_version >= '3.8'", 1689 + "version": "==4.2.4" 1690 + }, 1691 + "django-stubs-ext": { 1692 + "hashes": [ 1693 + "sha256:c69d1cc46f1c4c3b7894b685a5022c29b2a36c7cfb52e23762eaf357ebfc2c98", 1694 + "sha256:fdacc65a14d2d4b97334b58ff178a5853ec8c8c76cec406e417916ad67536ce4" 1695 + ], 1696 + "markers": "python_version >= '3.8'", 1697 + "version": "==4.2.2" 1698 + }, 1699 + "djangorestframework-stubs": { 1700 + "hashes": [ 1701 + "sha256:38f078cdf80228bd73e3ff5dcf00263f847da37c30d113e0fc8fda09f9dbc89a", 1702 + "sha256:4a9169253d2d46885a007c085d64e96efc8a78bd938c747e9ad0654725c4e7d0" 1703 + ], 1704 + "index": "pypi", 1705 + "markers": "python_version >= '3.8'", 1706 + "version": "==3.14.2" 1707 + }, 1708 + "executing": { 1709 + "hashes": [ 1710 + "sha256:0314a69e37426e3608aada02473b4161d4caf5a4b244d1d0c48072b8fee7bacc", 1711 + "sha256:19da64c18d2d851112f09c287f8d3dbbdf725ab0e569077efb6cdcbd3497c107" 1712 + ], 1713 + "version": "==1.2.0" 1714 + }, 1715 + "factory-boy": { 1716 + "hashes": [ 1717 + "sha256:a2cdbdb63228177aa4f1c52f4b6d83fab2b8623bf602c7dedd7eb83c0f69c04c", 1718 + "sha256:bc76d97d1a65bbd9842a6d722882098eb549ec8ee1081f9fb2e8ff29f0c300f1" 1719 + ], 1720 + "index": "pypi", 1721 + "markers": "python_version >= '3.7'", 1722 + "version": "==3.3.0" 1723 + }, 1724 + "faker": { 1725 + "hashes": [ 1726 + "sha256:7cf705758f6cc5dd31f628e323f306a6d881e9a8a103f1e32e5f30a4cad0974c", 1727 + "sha256:d79d5ea59f31e00fbb882546840a4adb2fd0bae99b103db1ba5869f176bc530b" 1728 + ], 1729 + "markers": "python_version >= '3.8'", 1730 + "version": "==19.6.0" 1731 + }, 1732 + "filelock": { 1733 + "hashes": [ 1734 + "sha256:0ecc1dd2ec4672a10c8550a8182f1bd0c0a5088470ecd5a125e45f49472fac3d", 1735 + "sha256:f067e40ccc40f2b48395a80fcbd4728262fab54e232e090a4063ab804179efeb" 1736 + ], 1737 + "markers": "python_version >= '3.8'", 1738 + "version": "==3.12.3" 1739 + }, 1740 + "flake8": { 1741 + "hashes": [ 1742 + "sha256:d5b3857f07c030bdb5bf41c7f53799571d75c4491748a3adcd47de929e34cd23", 1743 + "sha256:ffdfce58ea94c6580c77888a86506937f9a1a227dfcd15f245d694ae20a6b6e5" 1744 + ], 1745 + "index": "pypi", 1746 + "markers": "python_full_version >= '3.8.1'", 1747 + "version": "==6.1.0" 1748 + }, 1749 + "freezegun": { 1750 + "hashes": [ 1751 + "sha256:cd22d1ba06941384410cd967d8a99d5ae2442f57dfafeff2fda5de8dc5c05446", 1752 + "sha256:ea1b963b993cb9ea195adbd893a48d573fda951b0da64f60883d7e988b606c9f" 1753 + ], 1754 + "index": "pypi", 1755 + "markers": "python_version >= '3.6'", 1756 + "version": "==1.2.2" 1757 + }, 1758 + "gprof2dot": { 1759 + "hashes": [ 1760 + "sha256:45b4d298bd36608fccf9511c3fd88a773f7a1abc04d6cd39445b11ba43133ec5", 1761 + "sha256:f165b3851d3c52ee4915eb1bd6cca571e5759823c2cd0f71a79bda93c2dc85d6" 1762 + ], 1763 + "markers": "python_version >= '2.7'", 1764 + "version": "==2022.7.29" 1765 + }, 1766 + "identify": { 1767 + "hashes": [ 1768 + "sha256:287b75b04a0e22d727bc9a41f0d4f3c1bcada97490fa6eabb5b28f0e9097e733", 1769 + "sha256:fdb527b2dfe24602809b2201e033c2a113d7bdf716db3ca8e3243f735dcecaba" 1770 + ], 1771 + "markers": "python_version >= '3.8'", 1772 + "version": "==2.5.27" 1773 + }, 1774 + "idna": { 1775 + "hashes": [ 1776 + "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4", 1777 + "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2" 1778 + ], 1779 + "markers": "python_version >= '3.5'", 1780 + "version": "==3.4" 1781 + }, 1782 + "ipython": { 1783 + "hashes": [ 1784 + "sha256:2baeb5be6949eeebf532150f81746f8333e2ccce02de1c7eedde3f23ed5e9f1e", 1785 + "sha256:45a2c3a529296870a97b7de34eda4a31bee16bc7bf954e07d39abe49caf8f887" 1786 + ], 1787 + "index": "pypi", 1788 + "markers": "python_version >= '3.9'", 1789 + "version": "==8.15.0" 1790 + }, 1791 + "isort": { 1792 + "hashes": [ 1793 + "sha256:8bef7dde241278824a6d83f44a544709b065191b95b6e50894bdc722fcba0504", 1794 + "sha256:f84c2818376e66cf843d497486ea8fed8700b340f308f076c6fb1229dff318b6" 1795 + ], 1796 + "index": "pypi", 1797 + "markers": "python_full_version >= '3.8.0'", 1798 + "version": "==5.12.0" 1799 + }, 1800 + "jedi": { 1801 + "hashes": [ 1802 + "sha256:bcf9894f1753969cbac8022a8c2eaee06bfa3724e4192470aaffe7eb6272b0c4", 1803 + "sha256:cb8ce23fbccff0025e9386b5cf85e892f94c9b822378f8da49970471335ac64e" 1804 + ], 1805 + "markers": "python_version >= '3.6'", 1806 + "version": "==0.19.0" 1807 + }, 1808 + "jmespath": { 1809 + "hashes": [ 1810 + "sha256:02e2e4cc71b5bcab88332eebf907519190dd9e6e82107fa7f83b1003a6252980", 1811 + "sha256:90261b206d6defd58fdd5e85f478bf633a2901798906be2ad389150c5c60edbe" 1812 + ], 1813 + "markers": "python_version >= '3.7'", 1814 + "version": "==1.0.1" 1815 + }, 1816 + "markupsafe": { 1817 + "hashes": [ 1818 + "sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e", 1819 + "sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e", 1820 + "sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431", 1821 + "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686", 1822 + "sha256:14ff806850827afd6b07a5f32bd917fb7f45b046ba40c57abdb636674a8b559c", 1823 + "sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559", 1824 + "sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc", 1825 + "sha256:1b8dd8c3fd14349433c79fa8abeb573a55fc0fdd769133baac1f5e07abf54aeb", 1826 + "sha256:1f67c7038d560d92149c060157d623c542173016c4babc0c1913cca0564b9939", 1827 + "sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c", 1828 + "sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0", 1829 + "sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4", 1830 + "sha256:338ae27d6b8745585f87218a3f23f1512dbf52c26c28e322dbe54bcede54ccb9", 1831 + "sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575", 1832 + "sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba", 1833 + "sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d", 1834 + "sha256:47d4f1c5f80fc62fdd7777d0d40a2e9dda0a05883ab11374334f6c4de38adffd", 1835 + "sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3", 1836 + "sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00", 1837 + "sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155", 1838 + "sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac", 1839 + "sha256:65c1a9bcdadc6c28eecee2c119465aebff8f7a584dd719facdd9e825ec61ab52", 1840 + "sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f", 1841 + "sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8", 1842 + "sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b", 1843 + "sha256:715d3562f79d540f251b99ebd6d8baa547118974341db04f5ad06d5ea3eb8007", 1844 + "sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24", 1845 + "sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea", 1846 + "sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198", 1847 + "sha256:8758846a7e80910096950b67071243da3e5a20ed2546e6392603c096778d48e0", 1848 + "sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee", 1849 + "sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be", 1850 + "sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2", 1851 + "sha256:8f9293864fe09b8149f0cc42ce56e3f0e54de883a9de90cd427f191c346eb2e1", 1852 + "sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707", 1853 + "sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6", 1854 + "sha256:9aad3c1755095ce347e26488214ef77e0485a3c34a50c5a5e2471dff60b9dd9c", 1855 + "sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58", 1856 + "sha256:aa57bd9cf8ae831a362185ee444e15a93ecb2e344c8e52e4d721ea3ab6ef1823", 1857 + "sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779", 1858 + "sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636", 1859 + "sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c", 1860 + "sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad", 1861 + "sha256:b076b6226fb84157e3f7c971a47ff3a679d837cf338547532ab866c57930dbee", 1862 + "sha256:b7ff0f54cb4ff66dd38bebd335a38e2c22c41a8ee45aa608efc890ac3e3931bc", 1863 + "sha256:bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2", 1864 + "sha256:c011a4149cfbcf9f03994ec2edffcb8b1dc2d2aede7ca243746df97a5d41ce48", 1865 + "sha256:c9c804664ebe8f83a211cace637506669e7890fec1b4195b505c214e50dd4eb7", 1866 + "sha256:ca379055a47383d02a5400cb0d110cef0a776fc644cda797db0c5696cfd7e18e", 1867 + "sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b", 1868 + "sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa", 1869 + "sha256:ceb01949af7121f9fc39f7d27f91be8546f3fb112c608bc4029aef0bab86a2a5", 1870 + "sha256:d080e0a5eb2529460b30190fcfcc4199bd7f827663f858a226a81bc27beaa97e", 1871 + "sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb", 1872 + "sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9", 1873 + "sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57", 1874 + "sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc", 1875 + "sha256:f698de3fd0c4e6972b92290a45bd9b1536bffe8c6759c62471efaa8acb4c37bc", 1876 + "sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2", 1877 + "sha256:ffcc3f7c66b5f5b7931a5aa68fc9cecc51e685ef90282f4a82f0f5e9b704ad11" 1878 + ], 1879 + "markers": "python_version >= '3.7'", 1880 + "version": "==2.1.3" 1881 + }, 1882 + "matplotlib-inline": { 1883 + "hashes": [ 1884 + "sha256:f1f41aab5328aa5aaea9b16d083b128102f8712542f819fe7e6a420ff581b311", 1885 + "sha256:f887e5f10ba98e8d2b150ddcf4702c1e5f8b3a20005eb0f74bfdbd360ee6f304" 1886 + ], 1887 + "markers": "python_version >= '3.5'", 1888 + "version": "==0.1.6" 1889 + }, 1890 + "mccabe": { 1891 + "hashes": [ 1892 + "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325", 1893 + "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e" 1894 + ], 1895 + "markers": "python_version >= '3.6'", 1896 + "version": "==0.7.0" 1897 + }, 1898 + "mypy": { 1899 + "hashes": [ 1900 + "sha256:159aa9acb16086b79bbb0016145034a1a05360626046a929f84579ce1666b315", 1901 + "sha256:258b22210a4a258ccd077426c7a181d789d1121aca6db73a83f79372f5569ae0", 1902 + "sha256:26f71b535dfc158a71264e6dc805a9f8d2e60b67215ca0bfa26e2e1aa4d4d373", 1903 + "sha256:26fb32e4d4afa205b24bf645eddfbb36a1e17e995c5c99d6d00edb24b693406a", 1904 + "sha256:2fc3a600f749b1008cc75e02b6fb3d4db8dbcca2d733030fe7a3b3502902f161", 1905 + "sha256:32cb59609b0534f0bd67faebb6e022fe534bdb0e2ecab4290d683d248be1b275", 1906 + "sha256:330857f9507c24de5c5724235e66858f8364a0693894342485e543f5b07c8693", 1907 + "sha256:361da43c4f5a96173220eb53340ace68cda81845cd88218f8862dfb0adc8cddb", 1908 + "sha256:4a465ea2ca12804d5b34bb056be3a29dc47aea5973b892d0417c6a10a40b2d65", 1909 + "sha256:51cb1323064b1099e177098cb939eab2da42fea5d818d40113957ec954fc85f4", 1910 + "sha256:57b10c56016adce71fba6bc6e9fd45d8083f74361f629390c556738565af8eeb", 1911 + "sha256:596fae69f2bfcb7305808c75c00f81fe2829b6236eadda536f00610ac5ec2243", 1912 + "sha256:5d627124700b92b6bbaa99f27cbe615c8ea7b3402960f6372ea7d65faf376c14", 1913 + "sha256:6ac9c21bfe7bc9f7f1b6fae441746e6a106e48fc9de530dea29e8cd37a2c0cc4", 1914 + "sha256:82cb6193de9bbb3844bab4c7cf80e6227d5225cc7625b068a06d005d861ad5f1", 1915 + "sha256:8f772942d372c8cbac575be99f9cc9d9fb3bd95c8bc2de6c01411e2c84ebca8a", 1916 + "sha256:9fece120dbb041771a63eb95e4896791386fe287fefb2837258925b8326d6160", 1917 + "sha256:a156e6390944c265eb56afa67c74c0636f10283429171018446b732f1a05af25", 1918 + "sha256:a9ec1f695f0c25986e6f7f8778e5ce61659063268836a38c951200c57479cc12", 1919 + "sha256:abed92d9c8f08643c7d831300b739562b0a6c9fcb028d211134fc9ab20ccad5d", 1920 + "sha256:b031b9601f1060bf1281feab89697324726ba0c0bae9d7cd7ab4b690940f0b92", 1921 + "sha256:c543214ffdd422623e9fedd0869166c2f16affe4ba37463975043ef7d2ea8770", 1922 + "sha256:d28ddc3e3dfeab553e743e532fb95b4e6afad51d4706dd22f28e1e5e664828d2", 1923 + "sha256:f33592ddf9655a4894aef22d134de7393e95fcbdc2d15c1ab65828eee5c66c70", 1924 + "sha256:f6b0e77db9ff4fda74de7df13f30016a0a663928d669c9f2c057048ba44f09bb", 1925 + "sha256:f757063a83970d67c444f6e01d9550a7402322af3557ce7630d3c957386fa8f5", 1926 + "sha256:ff0cedc84184115202475bbb46dd99f8dcb87fe24d5d0ddfc0fe6b8575c88d2f" 1927 + ], 1928 + "index": "pypi", 1929 + "markers": "python_version >= '3.8'", 1930 + "version": "==1.5.1" 1931 + }, 1932 + "mypy-boto3-s3": { 1933 + "hashes": [ 1934 + "sha256:44da375fd4d75b1c5ccc26dcd3be48294c7061445efd6d90ebfca43ffebbb3e4", 1935 + "sha256:d0e90074e4043edf420292397012e37309ff204442a0874d8c969f56546be665" 1936 + ], 1937 + "version": "==1.28.36" 1938 + }, 1939 + "mypy-extensions": { 1940 + "hashes": [ 1941 + "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d", 1942 + "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782" 1943 + ], 1944 + "markers": "python_version >= '3.5'", 1945 + "version": "==1.0.0" 1946 + }, 1947 + "nodeenv": { 1948 + "hashes": [ 1949 + "sha256:d51e0c37e64fbf47d017feac3145cdbb58836d7eee8c6f6d3b6880c5456227d2", 1950 + "sha256:df865724bb3c3adc86b3876fa209771517b0cfe596beff01a92700e0e8be4cec" 1951 + ], 1952 + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6'", 1953 + "version": "==1.8.0" 1954 + }, 1955 + "packaging": { 1956 + "hashes": [ 1957 + "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61", 1958 + "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f" 1959 + ], 1960 + "markers": "python_version >= '3.7'", 1961 + "version": "==23.1" 1962 + }, 1963 + "parso": { 1964 + "hashes": [ 1965 + "sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0", 1966 + "sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75" 1967 + ], 1968 + "markers": "python_version >= '3.6'", 1969 + "version": "==0.8.3" 1970 + }, 1971 + "pathspec": { 1972 + "hashes": [ 1973 + "sha256:1d6ed233af05e679efb96b1851550ea95bbb64b7c490b0f5aa52996c11e92a20", 1974 + "sha256:e0d8d0ac2f12da61956eb2306b69f9469b42f4deb0f3cb6ed47b9cce9996ced3" 1975 + ], 1976 + "markers": "python_version >= '3.7'", 1977 + "version": "==0.11.2" 1978 + }, 1979 + "pexpect": { 1980 + "hashes": [ 1981 + "sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937", 1982 + "sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c" 1983 + ], 1984 + "markers": "sys_platform != 'win32'", 1985 + "version": "==4.8.0" 1986 + }, 1987 + "pickleshare": { 1988 + "hashes": [ 1989 + "sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca", 1990 + "sha256:9649af414d74d4df115d5d718f82acb59c9d418196b7b4290ed47a12ce62df56" 1991 + ], 1992 + "version": "==0.7.5" 1993 + }, 1994 + "platformdirs": { 1995 + "hashes": [ 1996 + "sha256:b45696dab2d7cc691a3226759c0d3b00c47c8b6e293d96f6436f733303f77f6d", 1997 + "sha256:d7c24979f292f916dc9cbf8648319032f551ea8c49a4c9bf2fb556a02070ec1d" 1998 + ], 1999 + "markers": "python_version >= '3.7'", 2000 + "version": "==3.10.0" 2001 + }, 2002 + "pre-commit": { 2003 + "hashes": [ 2004 + "sha256:6bbd5129a64cad4c0dfaeeb12cd8f7ea7e15b77028d985341478c8af3c759522", 2005 + "sha256:96d529a951f8b677f730a7212442027e8ba53f9b04d217c4c67dc56c393ad945" 2006 + ], 2007 + "index": "pypi", 2008 + "markers": "python_version >= '3.8'", 2009 + "version": "==3.4.0" 2010 + }, 2011 + "prompt-toolkit": { 2012 + "hashes": [ 2013 + "sha256:04505ade687dc26dc4284b1ad19a83be2f2afe83e7a828ace0c72f3a1df72aac", 2014 + "sha256:9dffbe1d8acf91e3de75f3b544e4842382fc06c6babe903ac9acb74dc6e08d88" 2015 + ], 2016 + "markers": "python_full_version >= '3.7.0'", 2017 + "version": "==3.0.39" 2018 + }, 2019 + "ptyprocess": { 2020 + "hashes": [ 2021 + "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35", 2022 + "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220" 2023 + ], 2024 + "version": "==0.7.0" 2025 + }, 2026 + "pure-eval": { 2027 + "hashes": [ 2028 + "sha256:01eaab343580944bc56080ebe0a674b39ec44a945e6d09ba7db3cb8cec289350", 2029 + "sha256:2b45320af6dfaa1750f543d714b6d1c520a1688dec6fd24d339063ce0aaa9ac3" 2030 + ], 2031 + "version": "==0.2.2" 2032 + }, 2033 + "pycodestyle": { 2034 + "hashes": [ 2035 + "sha256:259bcc17857d8a8b3b4a2327324b79e5f020a13c16074670f9c8c8f872ea76d0", 2036 + "sha256:5d1013ba8dc7895b548be5afb05740ca82454fd899971563d2ef625d090326f8" 2037 + ], 2038 + "markers": "python_version >= '3.8'", 2039 + "version": "==2.11.0" 2040 + }, 2041 + "pyflakes": { 2042 + "hashes": [ 2043 + "sha256:4132f6d49cb4dae6819e5379898f2b8cce3c5f23994194c24b77d5da2e36f774", 2044 + "sha256:a0aae034c444db0071aa077972ba4768d40c830d9539fd45bf4cd3f8f6992efc" 2045 + ], 2046 + "markers": "python_version >= '3.8'", 2047 + "version": "==3.1.0" 2048 + }, 2049 + "pygments": { 2050 + "hashes": [ 2051 + "sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692", 2052 + "sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29" 2053 + ], 2054 + "markers": "python_version >= '3.7'", 2055 + "version": "==2.16.1" 2056 + }, 2057 + "python-dateutil": { 2058 + "hashes": [ 2059 + "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86", 2060 + "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9" 2061 + ], 2062 + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'", 2063 + "version": "==2.8.2" 2064 + }, 2065 + "pyyaml": { 2066 + "hashes": [ 2067 + "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5", 2068 + "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc", 2069 + "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df", 2070 + "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741", 2071 + "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206", 2072 + "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27", 2073 + "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595", 2074 + "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62", 2075 + "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98", 2076 + "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696", 2077 + "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290", 2078 + "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9", 2079 + "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d", 2080 + "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6", 2081 + "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867", 2082 + "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47", 2083 + "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486", 2084 + "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6", 2085 + "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3", 2086 + "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007", 2087 + "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938", 2088 + "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0", 2089 + "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c", 2090 + "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735", 2091 + "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d", 2092 + "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28", 2093 + "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4", 2094 + "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba", 2095 + "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8", 2096 + "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5", 2097 + "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd", 2098 + "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3", 2099 + "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0", 2100 + "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515", 2101 + "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c", 2102 + "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c", 2103 + "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924", 2104 + "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34", 2105 + "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43", 2106 + "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859", 2107 + "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673", 2108 + "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54", 2109 + "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a", 2110 + "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b", 2111 + "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab", 2112 + "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa", 2113 + "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c", 2114 + "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585", 2115 + "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d", 2116 + "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f" 2117 + ], 2118 + "markers": "python_version >= '3.6'", 2119 + "version": "==6.0.1" 2120 + }, 2121 + "requests": { 2122 + "hashes": [ 2123 + "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f", 2124 + "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1" 2125 + ], 2126 + "index": "pypi", 2127 + "markers": "python_version >= '3.7'", 2128 + "version": "==2.31.0" 2129 + }, 2130 + "s3transfer": { 2131 + "hashes": [ 2132 + "sha256:b014be3a8a2aab98cfe1abc7229cc5a9a0cf05eb9c1f2b86b230fd8df3f78084", 2133 + "sha256:cab66d3380cca3e70939ef2255d01cd8aece6a4907a9528740f668c4b0611861" 2134 + ], 2135 + "markers": "python_version >= '3.7'", 2136 + "version": "==0.6.2" 2137 + }, 2138 + "setuptools": { 2139 + "hashes": [ 2140 + "sha256:00478ca80aeebeecb2f288d3206b0de568df5cd2b8fada1209843cc9a8d88a48", 2141 + "sha256:af3d5949030c3f493f550876b2fd1dd5ec66689c4ee5d5344f009746f71fd5a8" 2142 + ], 2143 + "markers": "python_version >= '3.8'", 2144 + "version": "==68.2.0" 2145 + }, 2146 + "six": { 2147 + "hashes": [ 2148 + "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", 2149 + "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" 2150 + ], 2151 + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'", 2152 + "version": "==1.16.0" 2153 + }, 2154 + "sqlparse": { 2155 + "hashes": [ 2156 + "sha256:5430a4fe2ac7d0f93e66f1efc6e1338a41884b7ddf2a350cedd20ccc4d9d28f3", 2157 + "sha256:d446183e84b8349fa3061f0fe7f06ca94ba65b426946ffebe6e3e8295332420c" 2158 + ], 2159 + "markers": "python_version >= '3.5'", 2160 + "version": "==0.4.4" 2161 + }, 2162 + "stack-data": { 2163 + "hashes": [ 2164 + "sha256:32d2dd0376772d01b6cb9fc996f3c8b57a357089dec328ed4b6553d037eaf815", 2165 + "sha256:cbb2a53eb64e5785878201a97ed7c7b94883f48b87bfb0bbe8b623c74679e4a8" 2166 + ], 2167 + "version": "==0.6.2" 2168 + }, 2169 + "tblib": { 2170 + "hashes": [ 2171 + "sha256:9100bfa016b047d5b980d66e7efed952fbd20bd85b56110aaf473cb97d18709a", 2172 + "sha256:a6df30f272c08bf8be66e0775fad862005d950a6b8449b94f7c788731d70ecd7" 2173 + ], 2174 + "index": "pypi", 2175 + "markers": "python_version >= '3.7'", 2176 + "version": "==2.0.0" 2177 + }, 2178 + "traitlets": { 2179 + "hashes": [ 2180 + "sha256:9e6ec080259b9a5940c797d58b613b5e31441c2257b87c2e795c5228ae80d2d8", 2181 + "sha256:f6cde21a9c68cf756af02035f72d5a723bf607e862e7be33ece505abf4a3bad9" 2182 + ], 2183 + "markers": "python_version >= '3.7'", 2184 + "version": "==5.9.0" 2185 + }, 2186 + "types-awscrt": { 2187 + "hashes": [ 2188 + "sha256:61833aa140e724a9098025610f4b8cde3dcf65b842631d7447378f9f5db4e1fd", 2189 + "sha256:68fffeb75396e9e7614cd930b2d52295f680230774750907bcafb56f11514043" 2190 + ], 2191 + "markers": "python_version >= '3.7' and python_version < '4.0'", 2192 + "version": "==0.19.1" 2193 + }, 2194 + "types-pytz": { 2195 + "hashes": [ 2196 + "sha256:1a7b8d4aac70981cfa24478a41eadfcd96a087c986d6f150d77e3ceb3c2bdfab", 2197 + "sha256:65152e872137926bb67a8fe6cc9cfd794365df86650c5d5fdc7b167b0f38892e" 2198 + ], 2199 + "version": "==2023.3.0.1" 2200 + }, 2201 + "types-pyyaml": { 2202 + "hashes": [ 2203 + "sha256:7d340b19ca28cddfdba438ee638cd4084bde213e501a3978738543e27094775b", 2204 + "sha256:a461508f3096d1d5810ec5ab95d7eeecb651f3a15b71959999988942063bf01d" 2205 + ], 2206 + "version": "==6.0.12.11" 2207 + }, 2208 + "types-requests": { 2209 + "hashes": [ 2210 + "sha256:56d181c85b5925cbc59f4489a57e72a8b2166f18273fd8ba7b6fe0c0b986f12a", 2211 + "sha256:6aa3f7faf0ea52d728bb18c0a0d1522d9bfd8c72d26ff6f61bfc3d06a411cf40" 2212 + ], 2213 + "version": "==2.31.0.2" 2214 + }, 2215 + "types-s3transfer": { 2216 + "hashes": [ 2217 + "sha256:1068877b6e59be5226fa3006ae64371ac9d5bc590dfdbd9c66fd0a075d3254ac", 2218 + "sha256:4ba9b483796fdcd026aa162ee03bdcedd2bf7d08e9387c820dcdd158b0102057" 2219 + ], 2220 + "markers": "python_version >= '3.7' and python_version < '4.0'", 2221 + "version": "==0.6.2" 2222 + }, 2223 + "types-urllib3": { 2224 + "hashes": [ 2225 + "sha256:229b7f577c951b8c1b92c1bc2b2fdb0b49847bd2af6d1cc2a2e3dd340f3bda8f", 2226 + "sha256:9683bbb7fb72e32bfe9d2be6e04875fbe1b3eeec3cbb4ea231435aa7fd6b4f0e" 2227 + ], 2228 + "version": "==1.26.25.14" 2229 + }, 2230 + "typing-extensions": { 2231 + "hashes": [ 2232 + "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36", 2233 + "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2" 2234 + ], 2235 + "markers": "python_version >= '3.7'", 2236 + "version": "==4.7.1" 2237 + }, 2238 + "urllib3": { 2239 + "hashes": [ 2240 + "sha256:8d36afa7616d8ab714608411b4a3b13e58f463aee519024578e062e141dce20f", 2241 + "sha256:8f135f6502756bde6b2a9b28989df5fbe87c9970cecaa69041edcce7f0589b14" 2242 + ], 2243 + "markers": "python_version >= '3.6'", 2244 + "version": "==1.26.16" 2245 + }, 2246 + "virtualenv": { 2247 + "hashes": [ 2248 + "sha256:b80039f280f4919c77b30f1c23294ae357c4c8701042086e3fc005963e4e537b", 2249 + "sha256:e8361967f6da6fbdf1426483bfe9fca8287c242ac0bc30429905721cefbff752" 2250 + ], 2251 + "markers": "python_version >= '3.7'", 2252 + "version": "==20.24.5" 2253 + }, 2254 + "watchdog": { 2255 + "hashes": [ 2256 + "sha256:0e06ab8858a76e1219e68c7573dfeba9dd1c0219476c5a44d5333b01d7e1743a", 2257 + "sha256:13bbbb462ee42ec3c5723e1205be8ced776f05b100e4737518c67c8325cf6100", 2258 + "sha256:233b5817932685d39a7896b1090353fc8efc1ef99c9c054e46c8002561252fb8", 2259 + "sha256:25f70b4aa53bd743729c7475d7ec41093a580528b100e9a8c5b5efe8899592fc", 2260 + "sha256:2b57a1e730af3156d13b7fdddfc23dea6487fceca29fc75c5a868beed29177ae", 2261 + "sha256:336adfc6f5cc4e037d52db31194f7581ff744b67382eb6021c868322e32eef41", 2262 + "sha256:3aa7f6a12e831ddfe78cdd4f8996af9cf334fd6346531b16cec61c3b3c0d8da0", 2263 + "sha256:3ed7c71a9dccfe838c2f0b6314ed0d9b22e77d268c67e015450a29036a81f60f", 2264 + "sha256:4c9956d27be0bb08fc5f30d9d0179a855436e655f046d288e2bcc11adfae893c", 2265 + "sha256:4d98a320595da7a7c5a18fc48cb633c2e73cda78f93cac2ef42d42bf609a33f9", 2266 + "sha256:4f94069eb16657d2c6faada4624c39464f65c05606af50bb7902e036e3219be3", 2267 + "sha256:5113334cf8cf0ac8cd45e1f8309a603291b614191c9add34d33075727a967709", 2268 + "sha256:51f90f73b4697bac9c9a78394c3acbbd331ccd3655c11be1a15ae6fe289a8c83", 2269 + "sha256:5d9f3a10e02d7371cd929b5d8f11e87d4bad890212ed3901f9b4d68767bee759", 2270 + "sha256:7ade88d0d778b1b222adebcc0927428f883db07017618a5e684fd03b83342bd9", 2271 + "sha256:7c5f84b5194c24dd573fa6472685b2a27cc5a17fe5f7b6fd40345378ca6812e3", 2272 + "sha256:7e447d172af52ad204d19982739aa2346245cc5ba6f579d16dac4bfec226d2e7", 2273 + "sha256:8ae9cda41fa114e28faf86cb137d751a17ffd0316d1c34ccf2235e8a84365c7f", 2274 + "sha256:8f3ceecd20d71067c7fd4c9e832d4e22584318983cabc013dbf3f70ea95de346", 2275 + "sha256:9fac43a7466eb73e64a9940ac9ed6369baa39b3bf221ae23493a9ec4d0022674", 2276 + "sha256:a70a8dcde91be523c35b2bf96196edc5730edb347e374c7de7cd20c43ed95397", 2277 + "sha256:adfdeab2da79ea2f76f87eb42a3ab1966a5313e5a69a0213a3cc06ef692b0e96", 2278 + "sha256:ba07e92756c97e3aca0912b5cbc4e5ad802f4557212788e72a72a47ff376950d", 2279 + "sha256:c07253088265c363d1ddf4b3cdb808d59a0468ecd017770ed716991620b8f77a", 2280 + "sha256:c9d8c8ec7efb887333cf71e328e39cffbf771d8f8f95d308ea4125bf5f90ba64", 2281 + "sha256:d00e6be486affb5781468457b21a6cbe848c33ef43f9ea4a73b4882e5f188a44", 2282 + "sha256:d429c2430c93b7903914e4db9a966c7f2b068dd2ebdd2fa9b9ce094c7d459f33" 2283 + ], 2284 + "index": "pypi", 2285 + "markers": "python_version >= '3.7'", 2286 + "version": "==3.0.0" 2287 + }, 2288 + "wcwidth": { 2289 + "hashes": [ 2290 + "sha256:795b138f6875577cd91bba52baf9e445cd5118fd32723b460e30a0af30ea230e", 2291 + "sha256:a5220780a404dbe3353789870978e472cfe477761f06ee55077256e509b156d0" 2292 + ], 2293 + "version": "==0.2.6" 2294 + }, 2295 + "werkzeug": { 2296 + "hashes": [ 2297 + "sha256:2b8c0e447b4b9dbcc85dd97b6eeb4dcbaf6c8b6c3be0bd654e25553e0a2157d8", 2298 + "sha256:effc12dba7f3bd72e605ce49807bbe692bd729c3bb122a3b91747a6ae77df528" 2299 + ], 2300 + "index": "pypi", 2301 + "markers": "python_version >= '3.8'", 2302 + "version": "==2.3.7" 2303 + } 2304 + }, 2305 + "docs": { 2306 + "alabaster": { 2307 + "hashes": [ 2308 + "sha256:1ee19aca801bbabb5ba3f5f258e4422dfa86f82f3e9cefb0859b283cdd7f62a3", 2309 + "sha256:a27a4a084d5e690e16e01e03ad2b2e552c61a65469419b907243193de1a84ae2" 2310 + ], 2311 + "markers": "python_version >= '3.6'", 2312 + "version": "==0.7.13" 2313 + }, 2314 + "babel": { 2315 + "hashes": [ 2316 + "sha256:b4246fb7677d3b98f501a39d43396d3cafdc8eadb045f4a31be01863f655c610", 2317 + "sha256:cc2d99999cd01d44420ae725a21c9e3711b3aadc7976d6147f622d8581963455" 2318 + ], 2319 + "markers": "python_version >= '3.7'", 2320 + "version": "==2.12.1" 2321 + }, 2322 + "beautifulsoup4": { 2323 + "hashes": [ 2324 + "sha256:492bbc69dca35d12daac71c4db1bfff0c876c00ef4a2ffacce226d4638eb72da", 2325 + "sha256:bd2520ca0d9d7d12694a53d44ac482d181b4ec1888909b035a3dbf40d0f57d4a" 2326 + ], 2327 + "markers": "python_full_version >= '3.6.0'", 2328 + "version": "==4.12.2" 2329 + }, 2330 + "certifi": { 2331 + "hashes": [ 2332 + "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082", 2333 + "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9" 2334 + ], 2335 + "markers": "python_version >= '3.6'", 2336 + "version": "==2023.7.22" 2337 + }, 2338 + "charset-normalizer": { 2339 + "hashes": [ 2340 + "sha256:04e57ab9fbf9607b77f7d057974694b4f6b142da9ed4a199859d9d4d5c63fe96", 2341 + "sha256:09393e1b2a9461950b1c9a45d5fd251dc7c6f228acab64da1c9c0165d9c7765c", 2342 + "sha256:0b87549028f680ca955556e3bd57013ab47474c3124dc069faa0b6545b6c9710", 2343 + "sha256:1000fba1057b92a65daec275aec30586c3de2401ccdcd41f8a5c1e2c87078706", 2344 + "sha256:1249cbbf3d3b04902ff081ffbb33ce3377fa6e4c7356f759f3cd076cc138d020", 2345 + "sha256:1920d4ff15ce893210c1f0c0e9d19bfbecb7983c76b33f046c13a8ffbd570252", 2346 + "sha256:193cbc708ea3aca45e7221ae58f0fd63f933753a9bfb498a3b474878f12caaad", 2347 + "sha256:1a100c6d595a7f316f1b6f01d20815d916e75ff98c27a01ae817439ea7726329", 2348 + "sha256:1f30b48dd7fa1474554b0b0f3fdfdd4c13b5c737a3c6284d3cdc424ec0ffff3a", 2349 + "sha256:203f0c8871d5a7987be20c72442488a0b8cfd0f43b7973771640fc593f56321f", 2350 + "sha256:246de67b99b6851627d945db38147d1b209a899311b1305dd84916f2b88526c6", 2351 + "sha256:2dee8e57f052ef5353cf608e0b4c871aee320dd1b87d351c28764fc0ca55f9f4", 2352 + "sha256:2efb1bd13885392adfda4614c33d3b68dee4921fd0ac1d3988f8cbb7d589e72a", 2353 + "sha256:2f4ac36d8e2b4cc1aa71df3dd84ff8efbe3bfb97ac41242fbcfc053c67434f46", 2354 + "sha256:3170c9399da12c9dc66366e9d14da8bf7147e1e9d9ea566067bbce7bb74bd9c2", 2355 + "sha256:3b1613dd5aee995ec6d4c69f00378bbd07614702a315a2cf6c1d21461fe17c23", 2356 + "sha256:3bb3d25a8e6c0aedd251753a79ae98a093c7e7b471faa3aa9a93a81431987ace", 2357 + "sha256:3bb7fda7260735efe66d5107fb7e6af6a7c04c7fce9b2514e04b7a74b06bf5dd", 2358 + "sha256:41b25eaa7d15909cf3ac4c96088c1f266a9a93ec44f87f1d13d4a0e86c81b982", 2359 + "sha256:45de3f87179c1823e6d9e32156fb14c1927fcc9aba21433f088fdfb555b77c10", 2360 + "sha256:46fb8c61d794b78ec7134a715a3e564aafc8f6b5e338417cb19fe9f57a5a9bf2", 2361 + "sha256:48021783bdf96e3d6de03a6e39a1171ed5bd7e8bb93fc84cc649d11490f87cea", 2362 + "sha256:4957669ef390f0e6719db3613ab3a7631e68424604a7b448f079bee145da6e09", 2363 + "sha256:5e86d77b090dbddbe78867a0275cb4df08ea195e660f1f7f13435a4649e954e5", 2364 + "sha256:6339d047dab2780cc6220f46306628e04d9750f02f983ddb37439ca47ced7149", 2365 + "sha256:681eb3d7e02e3c3655d1b16059fbfb605ac464c834a0c629048a30fad2b27489", 2366 + "sha256:6c409c0deba34f147f77efaa67b8e4bb83d2f11c8806405f76397ae5b8c0d1c9", 2367 + "sha256:7095f6fbfaa55defb6b733cfeb14efaae7a29f0b59d8cf213be4e7ca0b857b80", 2368 + "sha256:70c610f6cbe4b9fce272c407dd9d07e33e6bf7b4aa1b7ffb6f6ded8e634e3592", 2369 + "sha256:72814c01533f51d68702802d74f77ea026b5ec52793c791e2da806a3844a46c3", 2370 + "sha256:7a4826ad2bd6b07ca615c74ab91f32f6c96d08f6fcc3902ceeedaec8cdc3bcd6", 2371 + "sha256:7c70087bfee18a42b4040bb9ec1ca15a08242cf5867c58726530bdf3945672ed", 2372 + "sha256:855eafa5d5a2034b4621c74925d89c5efef61418570e5ef9b37717d9c796419c", 2373 + "sha256:8700f06d0ce6f128de3ccdbc1acaea1ee264d2caa9ca05daaf492fde7c2a7200", 2374 + "sha256:89f1b185a01fe560bc8ae5f619e924407efca2191b56ce749ec84982fc59a32a", 2375 + "sha256:8b2c760cfc7042b27ebdb4a43a4453bd829a5742503599144d54a032c5dc7e9e", 2376 + "sha256:8c2f5e83493748286002f9369f3e6607c565a6a90425a3a1fef5ae32a36d749d", 2377 + "sha256:8e098148dd37b4ce3baca71fb394c81dc5d9c7728c95df695d2dca218edf40e6", 2378 + "sha256:94aea8eff76ee6d1cdacb07dd2123a68283cb5569e0250feab1240058f53b623", 2379 + "sha256:95eb302ff792e12aba9a8b8f8474ab229a83c103d74a750ec0bd1c1eea32e669", 2380 + "sha256:9bd9b3b31adcb054116447ea22caa61a285d92e94d710aa5ec97992ff5eb7cf3", 2381 + "sha256:9e608aafdb55eb9f255034709e20d5a83b6d60c054df0802fa9c9883d0a937aa", 2382 + "sha256:a103b3a7069b62f5d4890ae1b8f0597618f628b286b03d4bc9195230b154bfa9", 2383 + "sha256:a386ebe437176aab38c041de1260cd3ea459c6ce5263594399880bbc398225b2", 2384 + "sha256:a38856a971c602f98472050165cea2cdc97709240373041b69030be15047691f", 2385 + "sha256:a401b4598e5d3f4a9a811f3daf42ee2291790c7f9d74b18d75d6e21dda98a1a1", 2386 + "sha256:a7647ebdfb9682b7bb97e2a5e7cb6ae735b1c25008a70b906aecca294ee96cf4", 2387 + "sha256:aaf63899c94de41fe3cf934601b0f7ccb6b428c6e4eeb80da72c58eab077b19a", 2388 + "sha256:b0dac0ff919ba34d4df1b6131f59ce95b08b9065233446be7e459f95554c0dc8", 2389 + "sha256:baacc6aee0b2ef6f3d308e197b5d7a81c0e70b06beae1f1fcacffdbd124fe0e3", 2390 + "sha256:bf420121d4c8dce6b889f0e8e4ec0ca34b7f40186203f06a946fa0276ba54029", 2391 + "sha256:c04a46716adde8d927adb9457bbe39cf473e1e2c2f5d0a16ceb837e5d841ad4f", 2392 + "sha256:c0b21078a4b56965e2b12f247467b234734491897e99c1d51cee628da9786959", 2393 + "sha256:c1c76a1743432b4b60ab3358c937a3fe1341c828ae6194108a94c69028247f22", 2394 + "sha256:c4983bf937209c57240cff65906b18bb35e64ae872da6a0db937d7b4af845dd7", 2395 + "sha256:c4fb39a81950ec280984b3a44f5bd12819953dc5fa3a7e6fa7a80db5ee853952", 2396 + "sha256:c57921cda3a80d0f2b8aec7e25c8aa14479ea92b5b51b6876d975d925a2ea346", 2397 + "sha256:c8063cf17b19661471ecbdb3df1c84f24ad2e389e326ccaf89e3fb2484d8dd7e", 2398 + "sha256:ccd16eb18a849fd8dcb23e23380e2f0a354e8daa0c984b8a732d9cfaba3a776d", 2399 + "sha256:cd6dbe0238f7743d0efe563ab46294f54f9bc8f4b9bcf57c3c666cc5bc9d1299", 2400 + "sha256:d62e51710986674142526ab9f78663ca2b0726066ae26b78b22e0f5e571238dd", 2401 + "sha256:db901e2ac34c931d73054d9797383d0f8009991e723dab15109740a63e7f902a", 2402 + "sha256:e03b8895a6990c9ab2cdcd0f2fe44088ca1c65ae592b8f795c3294af00a461c3", 2403 + "sha256:e1c8a2f4c69e08e89632defbfabec2feb8a8d99edc9f89ce33c4b9e36ab63037", 2404 + "sha256:e4b749b9cc6ee664a3300bb3a273c1ca8068c46be705b6c31cf5d276f8628a94", 2405 + "sha256:e6a5bf2cba5ae1bb80b154ed68a3cfa2fa00fde979a7f50d6598d3e17d9ac20c", 2406 + "sha256:e857a2232ba53ae940d3456f7533ce6ca98b81917d47adc3c7fd55dad8fab858", 2407 + "sha256:ee4006268ed33370957f55bf2e6f4d263eaf4dc3cfc473d1d90baff6ed36ce4a", 2408 + "sha256:eef9df1eefada2c09a5e7a40991b9fc6ac6ef20b1372abd48d2794a316dc0449", 2409 + "sha256:f058f6963fd82eb143c692cecdc89e075fa0828db2e5b291070485390b2f1c9c", 2410 + "sha256:f25c229a6ba38a35ae6e25ca1264621cc25d4d38dca2942a7fce0b67a4efe918", 2411 + "sha256:f2a1d0fd4242bd8643ce6f98927cf9c04540af6efa92323e9d3124f57727bfc1", 2412 + "sha256:f7560358a6811e52e9c4d142d497f1a6e10103d3a6881f18d04dbce3729c0e2c", 2413 + "sha256:f779d3ad205f108d14e99bb3859aa7dd8e9c68874617c72354d7ecaec2a054ac", 2414 + "sha256:f87f746ee241d30d6ed93969de31e5ffd09a2961a051e60ae6bddde9ec3583aa" 2415 + ], 2416 + "markers": "python_full_version >= '3.7.0'", 2417 + "version": "==3.2.0" 2418 + }, 2419 + "docutils": { 2420 + "hashes": [ 2421 + "sha256:96f387a2c5562db4476f09f13bbab2192e764cac08ebbf3a34a95d9b1e4a59d6", 2422 + "sha256:f08a4e276c3a1583a86dce3e34aba3fe04d02bba2dd51ed16106244e8a923e3b" 2423 + ], 2424 + "markers": "python_version >= '3.7'", 2425 + "version": "==0.20.1" 2426 + }, 2427 + "furo": { 2428 + "hashes": [ 2429 + "sha256:513092538537dc5c596691da06e3c370714ec99bc438680edc1debffb73e5bfc", 2430 + "sha256:5707530a476d2a63b8cad83b4f961f3739a69f4b058bcf38a03a39fa537195b2" 2431 + ], 2432 + "index": "pypi", 2433 + "markers": "python_version >= '3.8'", 2434 + "version": "==2023.9.10" 2435 + }, 2436 + "idna": { 2437 + "hashes": [ 2438 + "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4", 2439 + "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2" 2440 + ], 2441 + "markers": "python_version >= '3.5'", 2442 + "version": "==3.4" 2443 + }, 2444 + "imagesize": { 2445 + "hashes": [ 2446 + "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b", 2447 + "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a" 2448 + ], 2449 + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", 2450 + "version": "==1.4.1" 2451 + }, 2452 + "jinja2": { 2453 + "hashes": [ 2454 + "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852", 2455 + "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61" 2456 + ], 2457 + "markers": "python_version >= '3.7'", 2458 + "version": "==3.1.2" 2459 + }, 2460 + "markupsafe": { 2461 + "hashes": [ 2462 + "sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e", 2463 + "sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e", 2464 + "sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431", 2465 + "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686", 2466 + "sha256:14ff806850827afd6b07a5f32bd917fb7f45b046ba40c57abdb636674a8b559c", 2467 + "sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559", 2468 + "sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc", 2469 + "sha256:1b8dd8c3fd14349433c79fa8abeb573a55fc0fdd769133baac1f5e07abf54aeb", 2470 + "sha256:1f67c7038d560d92149c060157d623c542173016c4babc0c1913cca0564b9939", 2471 + "sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c", 2472 + "sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0", 2473 + "sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4", 2474 + "sha256:338ae27d6b8745585f87218a3f23f1512dbf52c26c28e322dbe54bcede54ccb9", 2475 + "sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575", 2476 + "sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba", 2477 + "sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d", 2478 + "sha256:47d4f1c5f80fc62fdd7777d0d40a2e9dda0a05883ab11374334f6c4de38adffd", 2479 + "sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3", 2480 + "sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00", 2481 + "sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155", 2482 + "sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac", 2483 + "sha256:65c1a9bcdadc6c28eecee2c119465aebff8f7a584dd719facdd9e825ec61ab52", 2484 + "sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f", 2485 + "sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8", 2486 + "sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b", 2487 + "sha256:715d3562f79d540f251b99ebd6d8baa547118974341db04f5ad06d5ea3eb8007", 2488 + "sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24", 2489 + "sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea", 2490 + "sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198", 2491 + "sha256:8758846a7e80910096950b67071243da3e5a20ed2546e6392603c096778d48e0", 2492 + "sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee", 2493 + "sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be", 2494 + "sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2", 2495 + "sha256:8f9293864fe09b8149f0cc42ce56e3f0e54de883a9de90cd427f191c346eb2e1", 2496 + "sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707", 2497 + "sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6", 2498 + "sha256:9aad3c1755095ce347e26488214ef77e0485a3c34a50c5a5e2471dff60b9dd9c", 2499 + "sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58", 2500 + "sha256:aa57bd9cf8ae831a362185ee444e15a93ecb2e344c8e52e4d721ea3ab6ef1823", 2501 + "sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779", 2502 + "sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636", 2503 + "sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c", 2504 + "sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad", 2505 + "sha256:b076b6226fb84157e3f7c971a47ff3a679d837cf338547532ab866c57930dbee", 2506 + "sha256:b7ff0f54cb4ff66dd38bebd335a38e2c22c41a8ee45aa608efc890ac3e3931bc", 2507 + "sha256:bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2", 2508 + "sha256:c011a4149cfbcf9f03994ec2edffcb8b1dc2d2aede7ca243746df97a5d41ce48", 2509 + "sha256:c9c804664ebe8f83a211cace637506669e7890fec1b4195b505c214e50dd4eb7", 2510 + "sha256:ca379055a47383d02a5400cb0d110cef0a776fc644cda797db0c5696cfd7e18e", 2511 + "sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b", 2512 + "sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa", 2513 + "sha256:ceb01949af7121f9fc39f7d27f91be8546f3fb112c608bc4029aef0bab86a2a5", 2514 + "sha256:d080e0a5eb2529460b30190fcfcc4199bd7f827663f858a226a81bc27beaa97e", 2515 + "sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb", 2516 + "sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9", 2517 + "sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57", 2518 + "sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc", 2519 + "sha256:f698de3fd0c4e6972b92290a45bd9b1536bffe8c6759c62471efaa8acb4c37bc", 2520 + "sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2", 2521 + "sha256:ffcc3f7c66b5f5b7931a5aa68fc9cecc51e685ef90282f4a82f0f5e9b704ad11" 2522 + ], 2523 + "markers": "python_version >= '3.7'", 2524 + "version": "==2.1.3" 2525 + }, 2526 + "packaging": { 2527 + "hashes": [ 2528 + "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61", 2529 + "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f" 2530 + ], 2531 + "markers": "python_version >= '3.7'", 2532 + "version": "==23.1" 2533 + }, 2534 + "pygments": { 2535 + "hashes": [ 2536 + "sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692", 2537 + "sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29" 2538 + ], 2539 + "markers": "python_version >= '3.7'", 2540 + "version": "==2.16.1" 2541 + }, 2542 + "requests": { 2543 + "hashes": [ 2544 + "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f", 2545 + "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1" 2546 + ], 2547 + "index": "pypi", 2548 + "markers": "python_version >= '3.7'", 2549 + "version": "==2.31.0" 2550 + }, 2551 + "snowballstemmer": { 2552 + "hashes": [ 2553 + "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1", 2554 + "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a" 2555 + ], 2556 + "version": "==2.2.0" 2557 + }, 2558 + "soupsieve": { 2559 + "hashes": [ 2560 + "sha256:5663d5a7b3bfaeee0bc4372e7fc48f9cff4940b3eec54a6451cc5299f1097690", 2561 + "sha256:eaa337ff55a1579b6549dc679565eac1e3d000563bcb1c8ab0d0fefbc0c2cdc7" 2562 + ], 2563 + "markers": "python_version >= '3.8'", 2564 + "version": "==2.5" 2565 + }, 2566 + "sphinx": { 2567 + "hashes": [ 2568 + "sha256:1a9290001b75c497fd087e92b0334f1bbfa1a1ae7fddc084990c4b7bd1130b88", 2569 + "sha256:9269f9ed2821c9ebd30e4204f5c2339f5d4980e377bc89cb2cb6f9b17409c20a" 2570 + ], 2571 + "index": "pypi", 2572 + "markers": "python_version >= '3.9'", 2573 + "version": "==7.2.5" 2574 + }, 2575 + "sphinx-basic-ng": { 2576 + "hashes": [ 2577 + "sha256:9ec55a47c90c8c002b5960c57492ec3021f5193cb26cebc2dc4ea226848651c9", 2578 + "sha256:eb09aedbabfb650607e9b4b68c9d240b90b1e1be221d6ad71d61c52e29f7932b" 2579 + ], 2580 + "markers": "python_version >= '3.7'", 2581 + "version": "==1.0.0b2" 2582 + }, 2583 + "sphinxcontrib-applehelp": { 2584 + "hashes": [ 2585 + "sha256:094c4d56209d1734e7d252f6e0b3ccc090bd52ee56807a5d9315b19c122ab15d", 2586 + "sha256:39fdc8d762d33b01a7d8f026a3b7d71563ea3b72787d5f00ad8465bd9d6dfbfa" 2587 + ], 2588 + "markers": "python_version >= '3.9'", 2589 + "version": "==1.0.7" 2590 + }, 2591 + "sphinxcontrib-devhelp": { 2592 + "hashes": [ 2593 + "sha256:63b41e0d38207ca40ebbeabcf4d8e51f76c03e78cd61abe118cf4435c73d4212", 2594 + "sha256:fe8009aed765188f08fcaadbb3ea0d90ce8ae2d76710b7e29ea7d047177dae2f" 2595 + ], 2596 + "markers": "python_version >= '3.9'", 2597 + "version": "==1.0.5" 2598 + }, 2599 + "sphinxcontrib-htmlhelp": { 2600 + "hashes": [ 2601 + "sha256:6c26a118a05b76000738429b724a0568dbde5b72391a688577da08f11891092a", 2602 + "sha256:8001661c077a73c29beaf4a79968d0726103c5605e27db92b9ebed8bab1359e9" 2603 + ], 2604 + "markers": "python_version >= '3.9'", 2605 + "version": "==2.0.4" 2606 + }, 2607 + "sphinxcontrib-jsmath": { 2608 + "hashes": [ 2609 + "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178", 2610 + "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8" 2611 + ], 2612 + "markers": "python_version >= '3.5'", 2613 + "version": "==1.0.1" 2614 + }, 2615 + "sphinxcontrib-qthelp": { 2616 + "hashes": [ 2617 + "sha256:62b9d1a186ab7f5ee3356d906f648cacb7a6bdb94d201ee7adf26db55092982d", 2618 + "sha256:bf76886ee7470b934e363da7a954ea2825650013d367728588732c7350f49ea4" 2619 + ], 2620 + "markers": "python_version >= '3.9'", 2621 + "version": "==1.0.6" 2622 + }, 2623 + "sphinxcontrib-serializinghtml": { 2624 + "hashes": [ 2625 + "sha256:0c64ff898339e1fac29abd2bf5f11078f3ec413cfe9c046d3120d7ca65530b54", 2626 + "sha256:9b36e503703ff04f20e9675771df105e58aa029cfcbc23b8ed716019b7416ae1" 2627 + ], 2628 + "markers": "python_version >= '3.9'", 2629 + "version": "==1.1.9" 2630 + }, 2631 + "urllib3": { 2632 + "hashes": [ 2633 + "sha256:8d36afa7616d8ab714608411b4a3b13e58f463aee519024578e062e141dce20f", 2634 + "sha256:8f135f6502756bde6b2a9b28989df5fbe87c9970cecaa69041edcce7f0589b14" 2635 + ], 2636 + "markers": "python_version >= '3.6'", 2637 + "version": "==1.26.16" 2638 + } 2639 + } 2640 + }
+17 -19
care/facility/tests/test_patientfilterset.py
··· 1 1 from django.utils import timezone 2 + from rest_framework.test import APITestCase 2 3 3 4 from care.facility.api.viewsets.patient import PatientFilterSet 4 - from care.facility.models import ( 5 - AssetLocation, 6 - Bed, 7 - ConsultationBed, 8 - PatientRegistration, 9 - ) 10 - from care.utils.tests.test_base import TestBase 5 + from care.facility.models import Bed, ConsultationBed, PatientRegistration 6 + from care.utils.tests.test_utils import TestUtils 11 7 12 8 13 - class PatientFilterSetTestCase(TestBase): 9 + class PatientFilterSetTestCase(TestUtils, APITestCase): 14 10 @classmethod 15 - def setUpClass(cls): 16 - super().setUpClass() 11 + def setUpTestData(cls) -> None: 12 + cls.state = cls.create_state() 13 + cls.district = cls.create_district(cls.state) 14 + cls.local_body = cls.create_local_body(cls.district) 15 + cls.super_user = cls.create_super_user("su", cls.district) 16 + cls.facility = cls.create_facility(cls.super_user, cls.district, cls.local_body) 17 + cls.user = cls.create_user("staff1", cls.district, home_facility=cls.facility) 18 + cls.patient = cls.create_patient(cls.district, cls.facility) 19 + cls.asset_location = cls.create_asset_location(cls.facility) 17 20 18 21 def test_filter_by_bed_type(self): 19 - patient1 = self.create_patient(name="patient1") 20 - patient2 = self.create_patient(name="patient2") 22 + patient1 = self.create_patient(self.district, self.facility, name="patient1") 23 + patient2 = self.create_patient(self.district, self.facility, name="patient2") 21 24 patient3 = self.patient 22 25 23 - # create asset 24 - asset1 = AssetLocation.objects.create( 25 - name="asset1", location_type=1, facility=self.facility 26 - ) 27 - 28 26 # create beds 29 27 bed1_data = { 30 28 "name": "bed 1", 31 29 "bed_type": 1, 32 - "location": asset1, 30 + "location": self.asset_location, 33 31 "facility": self.facility, 34 32 } 35 33 bed2_data = { 36 34 "name": "bed 2", 37 35 "bed_type": 2, 38 - "location": asset1, 36 + "location": self.asset_location, 39 37 "facility": self.facility, 40 38 } 41 39
+26 -22
care/users/tests/test_user_homefacility_allocation_tracking.py
··· 1 - from care.users.models import User, UserFacilityAllocation 2 - from care.utils.tests.test_base import TestBase 1 + from rest_framework.test import APITestCase 3 2 3 + from care.users.models import UserFacilityAllocation 4 + from care.utils.tests.test_utils import TestUtils 4 5 5 - class TestUserFacilityAllocation(TestBase): 6 - @classmethod 7 - def setUpClass(cls): 8 - super().setUpClass() 9 - cls.new_facility = cls.create_facility(cls.district) 10 6 7 + class TestUserFacilityAllocation(TestUtils, APITestCase): 11 8 @classmethod 12 - def tearDownClass(cls): 13 - cls.new_facility.delete() 14 - super().tearDownClass() 9 + def setUpTestData(cls) -> None: 10 + cls.state = cls.create_state() 11 + cls.district = cls.create_district(cls.state) 12 + cls.local_body = cls.create_local_body(cls.district) 13 + cls.super_user = cls.create_super_user("su", cls.district) 14 + cls.facility = cls.create_facility(cls.super_user, cls.district, cls.local_body) 15 15 16 - def tearDown(self): 17 - super().tearDown() 18 - User._base_manager.filter(username="facility_allocation_test_user").delete() 19 - UserFacilityAllocation.objects.all().delete() 16 + def setUp(self) -> None: 17 + # disable force auth 18 + pass 20 19 21 20 def test_user_facility_allocation_is_created_when_user_is_created(self): 22 21 user = self.create_user( 23 - self.district, 22 + district=self.district, 24 23 username="facility_allocation_test_user", 25 24 home_facility=self.facility, 26 25 ) ··· 28 27 29 28 def test_user_facility_allocation_is_ended_when_home_facility_is_cleared(self): 30 29 user = self.create_user( 31 - self.district, 30 + district=self.district, 32 31 username="facility_allocation_test_user", 33 32 home_facility=self.facility, 34 33 ) ··· 41 40 42 41 def test_user_facility_allocation_is_ended_when_user_is_deleted(self): 43 42 user = self.create_user( 44 - self.district, 43 + district=self.district, 45 44 username="facility_allocation_test_user", 46 45 home_facility=self.facility, 47 46 ) ··· 54 53 55 54 def test_user_facility_allocation_on_home_facility_changed(self): 56 55 user = self.create_user( 57 - self.district, 56 + district=self.district, 58 57 username="facility_allocation_test_user", 59 58 home_facility=self.facility, 60 59 ) 61 - user.home_facility = self.new_facility 60 + new_facility = self.create_facility( 61 + self.super_user, self.district, self.local_body 62 + ) 63 + user.home_facility = new_facility 62 64 user.save() 63 65 allocation = UserFacilityAllocation.objects.get( 64 66 user=user, facility=self.facility ··· 66 68 self.assertIsNotNone(allocation.end_date) 67 69 self.assertTrue( 68 70 UserFacilityAllocation.objects.filter( 69 - user=user, facility=self.new_facility 71 + user=user, facility=new_facility 70 72 ).exists() 71 73 ) 72 74 73 75 def test_user_facility_allocation_is_not_created_when_user_is_created_without_home_facility( 74 76 self, 75 77 ): 76 - user = self.create_user(self.district, username="facility_allocation_test_user") 78 + user = self.create_user( 79 + district=self.district, username="facility_allocation_test_user" 80 + ) 77 81 self.assertFalse(UserFacilityAllocation.objects.filter(user=user).exists()) 78 82 79 83 def test_user_facility_allocation_is_not_changed_when_update_fields_is_passed_without_home_facility( 80 84 self, 81 85 ): 82 86 user = self.create_user( 83 - self.district, 87 + district=self.district, 84 88 username="facility_allocation_test_user", 85 89 home_facility=self.facility, 86 90 )
celery_beat-ecs.sh scripts/celery_beat-ecs.sh
celery_beat.sh scripts/celery_beat.sh
-5
celery_dev.sh
··· 1 - #!/bin/bash 2 - 3 - watchmedo \ 4 - auto-restart --directory=./ --pattern=*.py --recursive -- \ 5 - celery -A config.celery_app worker -B --loglevel=INFO
celery_worker-ecs.sh scripts/celery_worker-ecs.sh
celery_worker.sh scripts/celery_worker.sh
-1
config/settings/base.py
··· 95 95 "django.forms", 96 96 ] 97 97 THIRD_PARTY_APPS = [ 98 - "storages", 99 98 "rest_framework", 100 99 "rest_framework.authtoken", 101 100 "drf_spectacular",
+11 -10
docker-compose.local.yaml
··· 1 1 version: '3.4' 2 2 3 3 services: 4 - db: 5 - env_file: 6 - - ./docker/.local.env 7 - 8 4 backend: 5 + image: care_local 9 6 build: 10 7 context: . 11 - dockerfile: docker/DevDockerfile 8 + dockerfile: docker/dev.Dockerfile 12 9 env_file: 13 10 - ./docker/.local.env 14 11 volumes: 15 12 - .:/app 13 + entrypoint: [ "bash", "scripts/start-dev.sh" ] 14 + ports: 15 + - "9000:9000" 16 + - "9876:9876" #debugpy 17 + depends_on: 18 + - db 19 + - redis 16 20 17 21 celery: 18 - container_name: care_celery 19 - build: 20 - context: . 21 - dockerfile: docker/DevDockerfile 22 + image: care_local 22 23 env_file: 23 24 - ./docker/.local.env 24 - entrypoint: [ "bash", "celery_dev.sh" ] 25 + entrypoint: [ "bash", "scripts/celery-dev.sh" ] 25 26 depends_on: 26 27 - db 27 28 - backend
+8 -4
docker-compose.pre-built.yaml
··· 6 6 image: "ghcr.io/coronasafe/care:latest" 7 7 env_file: 8 8 - ./docker/.prebuilt.env 9 + entrypoint: [ "bash", "start-ecs.sh" ] 10 + depends_on: 11 + - db 12 + - redis 13 + ports: 14 + - "9000:9000" 9 15 10 16 celery-worker: 11 - container_name: care_celery_worker 12 17 image: "ghcr.io/coronasafe/care:latest" 13 18 env_file: 14 19 - ./docker/.prebuilt.env 15 - entrypoint: [ "bash", "celery_worker.sh" ] 20 + entrypoint: [ "bash", "celery_worker-ecs.sh" ] 16 21 depends_on: 17 22 - db 18 23 - backend 19 24 - redis 20 25 21 26 celery-beat: 22 - container_name: care_celery_beat 23 27 image: "ghcr.io/coronasafe/care:latest" 24 28 env_file: 25 29 - ./docker/.prebuilt.env 26 - entrypoint: [ "bash", "celery_beat.sh" ] 30 + entrypoint: [ "bash", "celery_beat-ecs.sh" ] 27 31 depends_on: 28 32 - db 29 33 - backend
+5 -14
docker-compose.yaml
··· 6 6 7 7 services: 8 8 db: 9 - container_name: care_db 10 - image: postgres:latest 9 + image: postgres:alpine 11 10 restart: always 12 11 env_file: 13 - - ./docker/.local.env 12 + - ./docker/.prebuilt.env 14 13 volumes: 15 14 - postgres-data:/var/lib/postgresql/data 16 15 17 16 redis: 18 - container_name: care_redis 19 17 image: redis:alpine 20 18 restart: always 21 - 22 - backend: 23 - container_name: care 24 - entrypoint: ["bash", "docker/docker-entrypoint.sh"] 25 - ports: 26 - - "9000:9000" 27 - - "9876:9876" #debugpy 28 - depends_on: 29 - - db 19 + volumes: 20 + - redis-data:/data 30 21 31 22 localstack: 32 23 image: localstack/localstack:latest ··· 39 30 - "./docker/awslocal:/docker-entrypoint-initaws.d" 40 31 41 32 fidelius: 42 - container_name: care_fidelius 43 33 image: khavinshankar/fidelius:v1.0 44 34 restart: always 45 35 46 36 volumes: 47 37 postgres-data: 38 + redis-data:
-8
docker/.dockerignore
··· 1 - *Dockerfile 2 - *.travis.yml 3 - *.coverage 4 - *.py[cod] 5 - .dockerignore 6 - *Makefile 7 - *.pre-commit-config.yaml 8 - *.git*
-35
docker/DevDockerfile
··· 1 - FROM python:3.11-slim-bullseye 2 - 3 - # These two environment variables prevent __pycache__/ files. 4 - # since ipython is already present in required, you might as well use it 5 - ENV PYTHONUNBUFFERED 1 PYTHONDONTWRITEBYTECODE 1 PYTHONBREAKPOINT=ipython 6 - 7 - # Install required system dependencies 8 - RUN apt-get update && apt-get install --no-install-recommends -y \ 9 - # dependencies for building Python packages 10 - build-essential libjpeg-dev zlib1g-dev \ 11 - # psycopg dependencies 12 - libpq-dev \ 13 - # Translations dependencies 14 - gettext \ 15 - # Misc 16 - wget gnupg chromium \ 17 - # cleaning up unused files 18 - && apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ 19 - && rm -rf /var/lib/apt/lists/* 20 - 21 - # Copy the requirements folder to ensure they are cached 22 - COPY requirements ./requirements 23 - 24 - # Upgrade pip 25 - RUN python -m pip install --upgrade pip 26 - 27 - # Install the requirements. 28 - RUN pip install -r requirements/local.txt 29 - 30 - # Copy the rest of the code. 31 - COPY . /app 32 - 33 - WORKDIR /app 34 - 35 - # ENTRYPOINT ["bash", "docker/docker-entrypoint.sh"]
+24
docker/dev.Dockerfile
··· 1 + FROM python:3.11-slim-bullseye 2 + 3 + ENV PYTHONUNBUFFERED 1 4 + ENV PYTHONDONTWRITEBYTECODE 1 5 + 6 + ENV PATH /venv/bin:$PATH 7 + 8 + 9 + RUN apt-get update && apt-get install --no-install-recommends -y \ 10 + build-essential libjpeg-dev zlib1g-dev \ 11 + libpq-dev gettext wget gnupg chromium \ 12 + && apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ 13 + && rm -rf /var/lib/apt/lists/* 14 + 15 + # use pipenv to manage virtualenv 16 + RUN python -m venv /venv 17 + RUN pip install pipenv 18 + 19 + COPY Pipfile Pipfile.lock ./ 20 + RUN pipenv install --system --categories "packages dev-packages" 21 + 22 + COPY . /app 23 + 24 + WORKDIR /app
-16
docker/docker-entrypoint.sh
··· 1 - #!/usr/bin/env bash 2 - set -euxo pipefail 3 - 4 - echo "running migrations" 5 - python manage.py migrate 6 - echo "All migrations have been made successfully" 7 - 8 - echo "running collectstatic" 9 - python manage.py collectstatic --noinput 10 - 11 - 12 - if [[ "${DJANGO_DEBUG,,}" == "true" ]]; then 13 - python -m debugpy --wait-for-client --listen 0.0.0.0:9876 manage.py runserver_plus 0.0.0.0:9000 14 - else 15 - python manage.py runserver 0.0.0.0:9000 16 - fi
+53
docker/prod.Dockerfile
··· 1 + ARG PYTHON_VERSION=3.11-slim-bullseye 2 + 3 + FROM python:${PYTHON_VERSION} as base 4 + 5 + ENV PYTHONUNBUFFERED 1 6 + ENV PYTHONDONTWRITEBYTECODE 1 7 + 8 + 9 + # --- 10 + FROM base as builder 11 + 12 + ARG BUILD_ENVIRONMENT=production 13 + 14 + ENV PATH /venv/bin:$PATH 15 + 16 + RUN apt-get update && apt-get install --no-install-recommends -y \ 17 + build-essential libjpeg-dev zlib1g-dev libpq-dev 18 + 19 + # use pipenv to manage virtualenv 20 + RUN python -m venv /venv 21 + RUN pip install pipenv 22 + 23 + COPY Pipfile Pipfile.lock ./ 24 + RUN pipenv install --system --deploy 25 + 26 + 27 + # --- 28 + FROM base as runtime 29 + 30 + ARG BUILD_ENVIRONMENT=production 31 + ARG APP_HOME=/app 32 + 33 + ENV PYTHONUNBUFFERED 1 34 + ENV PYTHONDONTWRITEBYTECODE 1 35 + ENV BUILD_ENV ${BUILD_ENVIRONMENT} 36 + 37 + ENV PATH /venv/bin:$PATH 38 + 39 + WORKDIR ${APP_HOME} 40 + 41 + RUN apt-get update && apt-get install --no-install-recommends -y \ 42 + libpq-dev gettext wget gnupg chromium \ 43 + && apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ 44 + && rm -rf /var/lib/apt/lists/* 45 + 46 + # copy in Python environment 47 + COPY --from=builder /venv /venv 48 + 49 + COPY --chmod=0755 ./scripts/*.sh ./ 50 + 51 + COPY . ${APP_HOME} 52 + 53 + EXPOSE 9000
+1 -1
docs/Makefile
··· 10 10 # This will build the documentation and put it in the _build/html 11 11 12 12 SPHINXOPTS ?= 13 - SPHINXBUILD ?= sphinx-build 13 + SPHINXBUILD ?= pipenv run sphinx-build 14 14 SOURCEDIR = . 15 15 BUILDDIR = _build 16 16
+1 -1
docs/conf.py
··· 22 22 # -- Project information ----------------------------------------------------- 23 23 24 24 project = "Care" 25 - copyright = """2022, Care""" 25 + copyright = """2023, Open Healthcare Network""" 26 26 author = "coronasafe" 27 27 28 28
+27 -27
docs/django-commands/configuration.rst
··· 3 3 4 4 All Django commands must be executed by invoking :code:`python manage.py`, so for example, if the command is :code:`do_something` then the correct way to call the command is :code:`python manage.py do_something`. Make sure that the command is run in the root directory of the project and any virtual environment present must be activated before running the command. 5 5 6 - +-----------------+---------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 7 - | command | Arguments | Description | 8 - +=================+===============================================================+==================================================================================================================================================================================================================================================================================================================================+ 9 - | createsuperuser | None | This command is used to create a superuser in the care application, Superusers are able to log in through the Django Admin panel and Access Scopes do not apply to them. Please take caution when creating them, apply strict password policies for accounts created as superusers. ideally, there should only be one superuser. | 10 - | | | | 11 - | | | Example Invocation: :code:`python manage.py createsuperuser` | 12 - +-----------------+---------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 13 - | load_dummy_data | None | This command is used to load dummy data for testing and development purposes only. User "devdistrictadmin" with password "Coronasafe@123" is populated, invokes :code:`load_data kerala` and :code:`seed_data`. This command will intentionally fail to run in staging or production environment. | 14 - | | | | 15 - | | | Example Invocation: :code:`python manage.py load_dummy_data` | 16 - +-----------------+---------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 17 - | load_data | state_name | This command is used to load all the DIstrict/Lsg/Ward Level data for a given state, The data that is imported is scraped from various sources, The admin can change this data at any point through the admin panel, If the state name is given as "all" then all available data is imported into care. | 18 - | | | | 19 - | | | Example Invocation: :code:`python manage.py load_data kerala` | 20 - +-----------------+---------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 21 - | load_medicines_ | None | This command is used to load medibase medicines into the database from medibase.json | 22 - | data | | | 23 - | | | Example Invocation: :code:`python manage.py load_medicines_data` | 24 - +-----------------+---------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 25 - | seed_data | None | This command loads all static data that the application needs to run, this includes inventory seed data for Oxygen, Medical Tests data, etc. All this data can be changed by the superuser from the admin panel. | 26 - | | | | 27 - | | | Example Invocation: :code:`python manage.py seed_data` | 28 - +-----------------+---------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 29 - | summarize | None | The summary jobs are run by Celery every 10 mins, but we can force Django to summarize the current data and update the summary table with this command | 30 - | | | | 31 - | | | Example Invocation: :code:`python manage.py summarize` | 32 - +-----------------+---------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 6 + +---------------------+---------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 7 + | command | Arguments | Description | 8 + +=====================+===============================================================+==================================================================================================================================================================================================================================================================================================================================+ 9 + | createsuperuser | None | This command is used to create a superuser in the care application, Superusers are able to log in through the Django Admin panel and Access Scopes do not apply to them. Please take caution when creating them, apply strict password policies for accounts created as superusers. ideally, there should only be one superuser. | 10 + | | | | 11 + | | | Example Invocation: :code:`python manage.py createsuperuser` | 12 + +---------------------+---------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 13 + | load_dummy_data | None | This command is used to load dummy data for testing and development purposes only. User "devdistrictadmin" with password "Coronasafe@123" is populated, invokes :code:`load_data kerala` and :code:`seed_data`. This command will intentionally fail to run in staging or production environment. | 14 + | | | | 15 + | | | Example Invocation: :code:`python manage.py load_dummy_data` | 16 + +---------------------+---------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 17 + | load_data | state_name | This command is used to load all the DIstrict/Lsg/Ward Level data for a given state, The data that is imported is scraped from various sources, The admin can change this data at any point through the admin panel, If the state name is given as "all" then all available data is imported into care. | 18 + | | | | 19 + | | | Example Invocation: :code:`python manage.py load_data kerala` | 20 + +---------------------+---------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 21 + | load_medicines_data | None | This command is used to load medibase medicines into the database from medibase.json | 22 + | | | | 23 + | | | Example Invocation: :code:`python manage.py load_medicines_data` | 24 + +---------------------+---------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 25 + | seed_data | None | This command loads all static data that the application needs to run, this includes inventory seed data for Oxygen, Medical Tests data, etc. All this data can be changed by the superuser from the admin panel. | 26 + | | | | 27 + | | | Example Invocation: :code:`python manage.py seed_data` | 28 + +---------------------+---------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 29 + | summarize | None | The summary jobs are run by Celery every 10 mins, but we can force Django to summarize the current data and update the summary table with this command | 30 + | | | | 31 + | | | Example Invocation: :code:`python manage.py summarize` | 32 + +---------------------+---------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+1 -1
docs/local-setup/configuration.rst
··· 112 112 * Install pre-commit 113 113 pre-commit is installed while you run :: 114 114 115 - pip install -r requirements/local.txt 115 + pipenv install --categories "package dev-packages" 116 116 117 117 * Setup 118 118 this installs all the git-hooks ::
-3
requirements.txt
··· 1 - # This file is expected by Heroku. 2 - 3 - -r requirements/production.txt
-60
requirements/base.txt
··· 1 - argon2-cffi==21.3.0 # https://github.com/hynek/argon2-cffi/blob/main/CHANGELOG.md 2 - Authlib==1.2.0 # https://docs.authlib.org/en/latest/changelog.html 3 - boto3==1.26.157 # For AWS interactions 4 - Pillow==9.5.0 # https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst 5 - python-slugify==8.0.1 # https://github.com/un33k/python-slugify/blob/master/CHANGELOG.md 6 - PyJWT==2.7.0 # https://github.com/jpadilla/pyjwt/blob/master/CHANGELOG.rst 7 - redis[hiredis]==4.5.5 # https://github.com/redis/redis-py/blob/master/CHANGES 8 - requests==2.31.0 # https://requests.readthedocs.io/en/latest/community/updates/ 9 - whitenoise==6.4.0 # https://whitenoise.readthedocs.io/en/stable/changelog.html 10 - psycopg==3.1.9 # https://github.com/psycopg/psycopg 11 - 12 - # Django 13 - # ------------------------------------------------------------------------------ 14 - django==4.2.2 # https://docs.djangoproject.com/en/dev/releases/ 15 - django-environ==0.10.0 # https://github.com/joke2k/django-environ/blob/main/CHANGELOG.rst 16 - django-model-utils==4.3.1 # https://github.com/jazzband/django-model-utils/blob/master/CHANGES.rst 17 - djangorestframework==3.14.0 # https://www.django-rest-framework.org/community/release-notes/ 18 - djangorestframework-simplejwt==5.2.2 # https://github.com/jazzband/djangorestframework-simplejwt/blob/master/CHANGELOG.md 19 - drf-spectacular==0.26.2 # https://drf-spectacular.readthedocs.io/en/latest/changelog.html 20 - django-filter==23.2 # https://github.com/carltongibson/django-filter/blob/main/CHANGES.rst 21 - drf-nested-routers==0.93.3 22 - django-multiselectfield==0.1.12 # https://github.com/goinnn/django-multiselectfield/blob/master/CHANGES.rst 23 - django-simple-history==3.3.0 # https://github.com/jazzband/django-simple-history/blob/master/CHANGES.rst 24 - django-ratelimit==4.0.0 # https://github.com/jsocol/pystatsd/blob/main/CHANGELOG.md 25 - django-cors-headers==4.0.0 # https://github.com/adamchainz/django-cors-headers/blob/main/CHANGELOG.rst 26 - django-maintenance-mode==0.18.0 # https://github.com/fabiocaccamo/django-maintenance-mode/blob/main/CHANGELOG.md 27 - django-queryset-csv==1.1.0 28 - django-rest-passwordreset==1.3.0 # https://github.com/anexia-it/django-rest-passwordreset/blob/master/CHANGELOG.md 29 - djangoql==0.17.1 # https://github.com/ivelum/djangoql/blob/master/CHANGES.rst 30 - healthy-django>=0.1.0 31 - 32 - django-redis==5.2.0 # https://github.com/jazzband/django-redis/blob/master/CHANGELOG.rst 33 - django-hardcopy==0.1.4 34 - dry-rest-permissions==0.1.10 # For permissions handling 35 - django-storages==1.9.1 # For Storing Static Files in AWS 36 - 37 - # Json Schema 38 - # ------------------------------------------------------------------------------ 39 - jsonschema==3.2.0 40 - typed-ast==1.5.4 41 - # In Memory Database 42 - # ------------------------------------------------------------------------------ 43 - littletable==2.0.7 44 - 45 - # Asyncronous Part 46 - # ------------------------------------------------------------------------------ 47 - celery==5.3.0 # https://docs.celeryq.dev/en/latest/changelog.html 48 - 49 - # WebPushes 50 - # ------------------------------------------------------------------------------ 51 - pywebpush==1.11.0 52 - 53 - 54 - # HCX 55 - # ------------------------------------------------------------------------------ 56 - fhir.resources==6.5.0 57 - pydantic==1.* 58 - jwcrypto==1.5.0 # https://github.com/latchset/jwcrypto/releases 59 - pycryptodome==3.16.0 60 - pycryptodomex==3.16.0
-4
requirements/docs.txt
··· 1 - # Documentation 2 - # ------------------------------------------------------------------------------ 3 - sphinx==5.0.1 # https://github.com/sphinx-doc/sphinx 4 - furo==2022.06.04.1 # https://github.com/pradyunsg/furo
-33
requirements/local.txt
··· 1 - -r ./base.txt 2 - -r ./docs.txt 3 - Werkzeug==2.3.6 # https://werkzeug.palletsprojects.com/en/latest/changes/ 4 - 5 - # Django 6 - # ------------------------------------------------------------------------------ 7 - django-debug-toolbar==4.1 # https://github.com/jazzband/django-debug-toolbar/releases 8 - django-extensions==3.2.3 # https://github.com/django-extensions/django-extensions/blob/main/CHANGELOG.md 9 - django-silk==5.0.3 # https://github.com/jazzband/django-silk/blob/master/CHANGELOG.md 10 - 11 - # Code quality 12 - # ------------------------------------------------------------------------------ 13 - isort==5.12.0 # https://github.com/PyCQA/isort/blob/main/CHANGELOG.md 14 - flake8==6.0.0 # https://flake8.pycqa.org/en/latest/release-notes/index.html 15 - black==23.3.0 # https://github.com/psf/black/blob/main/CHANGES.md 16 - pre-commit==3.3.2 # https://github.com/pre-commit/pre-commit/blob/main/CHANGELOG.md 17 - 18 - # Test 19 - # ------------------------------- 20 - factory-boy==2.12.0 # https://github.com/FactoryBoy/factory_boy 21 - freezegun==0.3.15 # https://github.com/spulec/freezegun 22 - coverage[toml]==6.4.1 # https://github.com/nedbat/coveragepy 23 - django-coverage-plugin==2.0.3 24 - tblib==1.7.0 # https://github.com/ionelmc/python-tblib 25 - mypy==1.3.0 # https://github.com/python/mypy 26 - django-stubs==4.2.1 # https://github.com/typeddjango/django-stubs 27 - djangorestframework-stubs==3.14.1 # https://github.com/typeddjango/djangorestframework-stubs 28 - boto3-stubs[boto3,s3] # https://pypi.org/project/boto3-stubs/ 29 - 30 - # Container development 31 - # ------------------------------------------------------------------------------ 32 - debugpy==1.6.7 33 - watchdog # https://github.com/gorakhargosh/watchdog
-5
requirements/production.txt
··· 1 - -r ./base.txt 2 - 3 - gunicorn==20.1.0 # https://github.com/benoitc/gunicorn 4 - sentry-sdk==1.25.1 # https://github.com/getsentry/sentry-python 5 - newrelic
-1
runtime.txt
··· 1 - python-3.11.4
+5
scripts/celery-dev.sh
··· 1 + #!/bin/bash 2 + 3 + watchmedo \ 4 + auto-restart --directory=./ --pattern=*.py --recursive -- \ 5 + celery --workdir="/app" -A config.celery_app worker -B --loglevel=INFO
+17
scripts/start-dev.sh
··· 1 + #!/usr/bin/env bash 2 + set -euo pipefail 3 + 4 + cd /app 5 + 6 + echo "running migrations..." 7 + python manage.py migrate 8 + 9 + echo "running collectstatic..." 10 + python manage.py collectstatic --noinput 11 + 12 + echo "starting server..." 13 + if [[ "${DJANGO_DEBUG,,}" == "true" ]]; then 14 + python -m debugpy --wait-for-client --listen 0.0.0.0:9876 manage.py runserver_plus 0.0.0.0:9000 15 + else 16 + python manage.py runserver 0.0.0.0:9000 17 + fi
+35
scripts/start.sh
··· 1 + #!/bin/bash 2 + 3 + set -o errexit 4 + set -o pipefail 5 + set -o nounset 6 + 7 + if [ -z "${DATABASE_URL}" ]; then 8 + export DATABASE_URL="postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DB}" 9 + fi 10 + 11 + postgres_ready() { 12 + python << END 13 + import sys 14 + 15 + import psycopg 16 + 17 + try: 18 + psycopg.connect(conninfo="${DATABASE_URL}") 19 + except psycopg.OperationalError: 20 + sys.exit(-1) 21 + sys.exit(0) 22 + 23 + END 24 + } 25 + until postgres_ready; do 26 + >&2 echo 'Waiting for PostgreSQL to become available...' 27 + sleep 1 28 + done 29 + >&2 echo 'PostgreSQL is available' 30 + 31 + 32 + export NEW_RELIC_CONFIG_FILE=/etc/newrelic.ini 33 + python manage.py collectstatic --noinput 34 + python manage.py migrate 35 + newrelic-admin run-program /usr/local/bin/gunicorn config.wsgi:application --bind 0.0.0.0:9000 --chdir=/app
-35
start
··· 1 - #!/bin/bash 2 - 3 - set -o errexit 4 - set -o pipefail 5 - set -o nounset 6 - 7 - if [ -z "${DATABASE_URL}" ]; then 8 - export DATABASE_URL="postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DB}" 9 - fi 10 - 11 - postgres_ready() { 12 - python << END 13 - import sys 14 - 15 - import psycopg 16 - 17 - try: 18 - psycopg.connect(conninfo="${DATABASE_URL}") 19 - except psycopg.OperationalError: 20 - sys.exit(-1) 21 - sys.exit(0) 22 - 23 - END 24 - } 25 - until postgres_ready; do 26 - >&2 echo 'Waiting for PostgreSQL to become available...' 27 - sleep 1 28 - done 29 - >&2 echo 'PostgreSQL is available' 30 - 31 - 32 - export NEW_RELIC_CONFIG_FILE=/etc/newrelic.ini 33 - python manage.py collectstatic --noinput 34 - python manage.py migrate 35 - newrelic-admin run-program /usr/local/bin/gunicorn config.wsgi:application --bind 0.0.0.0:9000 --chdir=/app
start-ecs.sh scripts/start-ecs.sh