diff --git a/.circleci/config.yml b/.circleci/config.yml deleted file mode 100644 index 29e6c8bcc..000000000 --- a/.circleci/config.yml +++ /dev/null @@ -1,135 +0,0 @@ -version: 2 -jobs: - test: - docker: - - image: circleci/python:3.8-buster-node - environment: - SECRET_KEY: testingsecretkey - SECURE_SSL_REDIRECT: false - ALLOWED_HOSTS: localhost - DATABASE_URL: postgresql://root@localhost/circle_test?sslmode=disable - BIRDBATH_REQUIRED: false - - image: circleci/postgres:11.5 - environment: - POSTGRES_USER: root - POSTGRES_DB: circle_test - working_directory: ~/repo - steps: - - checkout - - restore_cache: - keys: - - dependencies-{{checksum "poetry.lock"}} - - run: - name: install python dependencies - command: | - curl -sSL https://install.python-poetry.org | POETRY_VERSION=1.5.0 python3 - - python -m venv venv - . ./venv/bin/activate - poetry install --no-ansi - - save_cache: - paths: - - ./venv - key: dependencies-{{checksum "poetry.lock"}} - - run: - name: install node dependencies - command: | - npm ci - - run: - name: Linting js - command: | - npm run lint:js - - run: - name: Linting css - command: | - npm run lint:css - - run: - name: Linting format - command: | - npm run lint:format - - run: - name: Front end tests - command: | - npm run test:coverage - - run: - name: compile static assets - command: | - npm run build:prod - - run: - name: Run Django tests - command: | - . venv/bin/activate - pip install coverage - isort --recursive --check-only --diff ./rca - ./manage.py collectstatic --verbosity 0 --noinput --clear - ./manage.py makemigrations --check --noinput - ./manage.py check - coverage run ./manage.py test --settings=rca.settings.test - coverage report - coverage xml - bash <(curl -s https://codecov.io/bash) -t $COVERAGE_TOKEN - - run: - name: Run Black - command: | - . venv/bin/activate - black --check --diff ./rca --exclude migrations/ - deploy_dev: - docker: - - image: buildpack-deps:trusty - steps: - - checkout - - run: - name: deploy dev to heroku - command: | - echo "Deploying to Heroku. To see progress, go to: https://dashboard.heroku.com/apps/$HEROKU_APP_NAME_DEV/activity" - curl -sf -X POST -m 900 https://heroku-deploy.torchbox.com/$HEROKU_APP_NAME_DEV/$CIRCLE_SHA1?key=$DEPLOYMENT_KEY -d "Content-Length: 0" - deploy_staging: - docker: - - image: buildpack-deps:trusty - steps: - - checkout - - run: - name: deploy staging to heroku - command: | - echo "Deploying to Heroku. To see progress, go to: https://dashboard.heroku.com/apps/$HEROKU_APP_NAME_STAGING/activity" - curl -sf -X POST -m 900 https://heroku-deploy.torchbox.com/$HEROKU_APP_NAME_STAGING/$CIRCLE_SHA1?key=$DEPLOYMENT_KEY -d "Content-Length: 0" - deploy_production: - docker: - - image: buildpack-deps:trusty - steps: - - checkout - - run: - name: deploy master to heroku - command: | - echo "Deploying to Heroku. To see progress, go to: https://dashboard.heroku.com/apps/$HEROKU_APP_NAME_PRODUCTION/activity" - curl -sf -X POST -m 900 https://heroku-deploy.torchbox.com/$HEROKU_APP_NAME_PRODUCTION/$CIRCLE_SHA1?key=$DEPLOYMENT_KEY -d "Content-Length: 0" -workflows: - version: 2 - build-deploy: - jobs: - - test - - deploy_dev: - requires: - - test - filters: - branches: - only: dev - - deploy_staging: - requires: - - test - filters: - branches: - only: staging - - confirm_deploy_production: - type: approval - requires: - - test - filters: - branches: - only: master - - deploy_production: - requires: - - test - - confirm_deploy_production - filters: - branches: - only: master diff --git a/.env b/.env index f7515d09b..5b71bba89 100644 --- a/.env +++ b/.env @@ -1,2 +1,2 @@ # Uncomment this to disable running the front-end tooling in Docker. -# FRONTEND=local \ No newline at end of file +# FRONTEND=local diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml new file mode 100644 index 000000000..75d28802a --- /dev/null +++ b/.github/workflows/ci.yaml @@ -0,0 +1,31 @@ +name: CI + +on: + pull_request: + push: + branches: [dev, staging, master] + +jobs: + lint: + uses: ./.github/workflows/lint.yaml + + test: + uses: ./.github/workflows/test.yaml + + deploy_production: + if: contains(github.ref, 'master') + needs: [lint, test] + uses: ./.github/workflows/deploy-production.yaml + secrets: inherit + + deploy_dev: + if: contains(github.ref, 'dev') + needs: [lint, test] + uses: ./.github/workflows/deploy-dev.yaml + secrets: inherit + + deploy_staging: + if: contains(github.ref, 'staging') + needs: [lint, test] + uses: ./.github/workflows/deploy-staging.yaml + secrets: inherit diff --git a/.github/workflows/deploy-dev.yaml b/.github/workflows/deploy-dev.yaml new file mode 100644 index 000000000..a9468901b --- /dev/null +++ b/.github/workflows/deploy-dev.yaml @@ -0,0 +1,19 @@ +name: dev_deployment + +on: workflow_call + +jobs: + deploy_dev: + runs-on: ubuntu-latest + + env: + DEPLOYMENT_KEY: ${{ secrets.DEPLOYMENT_KEY_DEV }} + HEROKU_APP_NAME: ${{ secrets.HEROKU_APP_NAME_DEV }} + SHA: ${{ github.sha }} + + steps: + - uses: actions/checkout@v4 + - name: 'deploy dev to heroku' + run: | + echo "Deploying to Heroku. To see progress, go to: https://dashboard.heroku.com/apps/$HEROKU_APP_NAME/activity" + curl -sf -X POST -m 900 https://heroku-deploy.torchbox.com/$HEROKU_APP_NAME/$SHA?key=$DEPLOYMENT_KEY -d "Content-Length: 0" diff --git a/.github/workflows/deploy-production.yaml b/.github/workflows/deploy-production.yaml new file mode 100644 index 000000000..4e98dab5b --- /dev/null +++ b/.github/workflows/deploy-production.yaml @@ -0,0 +1,19 @@ +name: production_deployment + +on: workflow_call + +jobs: + deploy_production: + runs-on: ubuntu-latest + + env: + DEPLOYMENT_KEY: ${{ secrets.DEPLOYMENT_KEY_PRODUCTION }} + HEROKU_APP_NAME: ${{ secrets.HEROKU_APP_NAME_PRODUCTION }} + SHA: ${{ github.sha }} + + steps: + - uses: actions/checkout@v4 + - name: 'deploy master to heroku' + run: | + echo "Deploying to Heroku. To see progress, go to: https://dashboard.heroku.com/apps/$HEROKU_APP_NAME/activity" + curl -sf -X POST -m 900 https://heroku-deploy.torchbox.com/$HEROKU_APP_NAME/$SHA?key=$DEPLOYMENT_KEY -d "Content-Length: 0" diff --git a/.github/workflows/deploy-staging.yaml b/.github/workflows/deploy-staging.yaml new file mode 100644 index 000000000..8d5ae37cd --- /dev/null +++ b/.github/workflows/deploy-staging.yaml @@ -0,0 +1,19 @@ +name: staging_deployment + +on: workflow_call + +jobs: + deploy_staging: + runs-on: ubuntu-latest + + env: + DEPLOYMENT_KEY: ${{ secrets.DEPLOYMENT_KEY_STAGING }} + HEROKU_APP_NAME: ${{ secrets.HEROKU_APP_NAME_STAGING }} + SHA: ${{ github.sha }} + + steps: + - uses: actions/checkout@v4 + - name: 'deploy staging to heroku' + run: | + echo "Deploying to Heroku. To see progress, go to: https://dashboard.heroku.com/apps/$HEROKU_APP_NAME/activity" + curl -sf -X POST -m 900 https://heroku-deploy.torchbox.com/$HEROKU_APP_NAME/$SHA?key=$DEPLOYMENT_KEY -d "Content-Length: 0" diff --git a/.github/workflows/gh-pages.yaml b/.github/workflows/gh-pages.yaml new file mode 100644 index 000000000..7943f1054 --- /dev/null +++ b/.github/workflows/gh-pages.yaml @@ -0,0 +1,71 @@ +name: Docs + +on: + pull_request: + branches: ['master'] + paths: + - 'docs/**/*' + - 'mkdocs.yml' + + push: + branches: ['master'] + paths: + - 'docs/**/*' + - 'mkdocs.yml' + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# Allow one concurrent deployment +concurrency: + group: 'pages' + cancel-in-progress: true + +jobs: + build: + runs-on: ubuntu-22.04 + steps: + - name: Checkout code + uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: Setup Pages + uses: actions/configure-pages@v3 + + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: 3.8 + cache: 'pip' + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + python -m pip install mkdocs==1.6.0 mkdocs-material==9.5.19 pymdown-extensions==10.8 + + - name: Build site (_site directory name is used for Jekyll compatiblity) + run: mkdocs build --config-file ./mkdocs.yml --site-dir ./_site + - name: Upload artifact + uses: actions/upload-pages-artifact@v1 + + deploy: + needs: build + if: github.ref == 'refs/heads/master' + + # Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages + permissions: + contents: read + pages: write + id-token: write + + # Deploy to the github-pages environment + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + + runs-on: ubuntu-22.04 + steps: + - name: Deploy Docs to GitHub Pages + id: deployment + uses: actions/deploy-pages@v2 diff --git a/.github/workflows/lint.yaml b/.github/workflows/lint.yaml new file mode 100644 index 000000000..7e3ad660e --- /dev/null +++ b/.github/workflows/lint.yaml @@ -0,0 +1,44 @@ +name: lint + +on: workflow_call + +jobs: + lint-front-end: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v3 + with: + node-version: '16' + - name: Install npm dependencies + run: npm install + - name: CSS linting + run: npm run lint:css + - name: JS linting + run: npm run lint:js + - name: Prettier + run: npm run format + - name: JS tests + run: npm run test + + lint-python: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: 3.8 + - uses: Gr1N/setup-poetry@v8 + with: + poetry-version: 1.5.0 + - name: Install Poetry + run: | + poetry config virtualenvs.create false && + poetry install + - name: Flake8 + run: flake8 ./rca fabfile.py + - name: isort + run: isort --check-only --diff ./rca fabfile.py + - name: black + run: black --check --diff ./rca fabfile.py --exclude migrations/ diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml new file mode 100644 index 000000000..8b7b4ad5d --- /dev/null +++ b/.github/workflows/test.yaml @@ -0,0 +1,59 @@ +name: test + +on: workflow_call + +jobs: + python-tests: + runs-on: ubuntu-latest + + env: + DJANGO_SETTINGS_MODULE: rca.settings.test + SECRET_KEY: testingsecretkey + SECURE_SSL_REDIRECT: false + ALLOWED_HOSTS: localhost + DATABASE_URL: postgres://postgres:postgres@localhost/postgres + BIRDBATH_REQUIRED: false + + services: + postgres: + image: postgres:12.3 + env: + POSTGRES_USER: postgres + POSTGRES_PASSWORD: postgres + POSTGRES_DB: postgres + ports: + - 5432:5432 + options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 + + steps: + - uses: actions/checkout@v4 + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: 3.8 + - uses: Gr1N/setup-poetry@v8 + with: + poetry-version: 1.5.0 + - name: Install Poetry + run: | + poetry config virtualenvs.create false && + poetry install + - uses: actions/setup-node@v3 + with: + node-version: '16' + - name: Install npm dependencies + run: npm install + - name: Compile static files + run: npm run build:prod + - name: collectstatic + run: python manage.py collectstatic --verbosity 0 --noinput --clear + - name: System checks + run: python manage.py check + - name: Missing migrations + run: python manage.py makemigrations --check --noinput + - name: Test and Coverage + run: | + coverage run ./manage.py test --settings=rca.settings.test + coverage report + coverage xml + bash <(curl -s https://codecov.io/bash) -t $COVERAGE_TOKEN diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml deleted file mode 100644 index f4992e9ba..000000000 --- a/.gitlab-ci.yml +++ /dev/null @@ -1,249 +0,0 @@ -# vim:set sw=2 ts=2 et: -# This is a sample .gitlab-ci.yml created by wagtail-kit. You should review -# it for any necessary changes. - -# Stages are groups that jobs can be groupped into. -# Jobs within each stage run in parallel and if one of them fails, the next -# stage won't be run. -# This will set up the following: -# -# - Build stage: build of static assets. -# - Test stage: code style, migration, basic configuration checks and unit -# tests. -# - Deploy stage: deploy to Heroku. -stages: - - build - - test - - deploy - -# Test if static assets can be built succesfully. -static: - image: node:12-alpine - stage: build - before_script: - - apk add --no-cache rsync - script: - # Make sure your project has a package-lock.json lockfile, otherwise this install will fail. - - npm ci - - npm run build:prod - # Saving the job result as an artifact means that the files can be used by - # other jobs. - artifacts: - name: 'static-$CI_JOB_ID' - paths: - - ./node_modules - - ./rca/static_compiled - expire_in: 1 week - -# Check python code style. -flake8: - image: python:3.6 - stage: test - script: - # Remember to update a version in requirements-dev.txt - - pip install flake8==3.7.7 - - flake8 rca - -# Check imports sort order, i.e. check whether they are in an alphabetical -# order and grouped properly. -isort: - image: python:3.6 - stage: test - before_script: - # Remember to update a version in requirements-dev.txt - - pip install isort==4.3.15 - script: - - isort --check-only --diff --recursive rca - -lint_js: - image: node:12-alpine - stage: test - dependencies: - - static - script: - - npm run lint:js - -lint_css: - image: node:12-alpine - stage: test - dependencies: - - static - script: - - npm run lint:css - -lint_format: - image: node:12-alpine - stage: test - dependencies: - - static - script: - - npm run lint:format - -# Run black and check for changes -black: - image: python:3.7 - stage: test - before_script: - # Remember to update a version in requirements-dev.txt - - pip install black==19.3b0 - script: - - black --check ./ - -# Check settings, migrations and run tests. -test_python: - # Make sure this Python version matches the version in your Dockerfile. - image: python:3.6.6 - stage: test - services: - # Make sure this matches the Postgres version you run on your servers. - - postgres:9.6 - dependencies: - - static - variables: - # Run tests with the production settings. - DJANGO_SETTINGS_MODULE: rca.settings.production - - # SECRET_KEY is required by Django to start. - SECRET_KEY: fake_secret_key_to_run_tests - - # Silence RECAPTCHA - RECAPTCHA_PUBLIC_KEY: 'dummy-key-value' - RECAPTCHA_PRIVATE_KEY: 'dummy-key-value' - - # This is the URL used by databases on our CI. - DATABASE_URL: postgres://postgres@postgres/postgres - - # Don't redirect to HTTPS in tests. - SECURE_SSL_REDIRECT: 'false' - before_script: - # Install requirements - - pip install wheel - - pip install -r requirements.txt - script: - # We need to run the collectstatic command, because we use ManifestStaticFilesStorage. - # Otherwise the check command will fail - - python manage.py collectstatic --verbosity 0 --noinput --clear - - # Run system checks - - python manage.py check - - # Check for missing migrations - - python manage.py makemigrations --check --noinput - - # Create cache table. - - python manage.py createcachetable - - # Run back-end tests - - python manage.py test - -test_js: - image: node:12-alpine - stage: test - dependencies: - - static - script: - # Run front-end tests - - npm run test:coverage - -.heroku_deploy_job_template: &heroku_deploy_job_definition - before_script: - # Install cURL and GnuPG to install Heroku CLI. - # Install Git to push the code to Heroku. It uses HTTP to push the code. - - apt-get update -y - - apt-get install -y curl git gnupg - - # Install Heroku CLI. - - curl https://cli-assets.heroku.com/install-ubuntu.sh | sh - - # Use Heroku credentials that you can add in your project settings on - # GitLab. They can be obtained from sysadmin or pwman. - - | - cat >~/.netrc <~/.netrc <=2015.7", markers = "python_version < \"3.9\""} + +[package.extras] +dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"] + [[package]] name = "bcrypt" version = "4.0.1" @@ -953,15 +970,22 @@ files = [ python-dateutil = ">=2.7" [[package]] -name = "future" -version = "0.18.2" -description = "Clean single-source support for Python 3 and 2" +name = "ghp-import" +version = "2.1.0" +description = "Copy your docs directly to the gh-pages branch." optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +python-versions = "*" files = [ - {file = "future-0.18.2.tar.gz", hash = "sha256:b1bead90b70cf6ec3f0710ae53a525360fa360d306a86583adc6bf83a4db537d"}, + {file = "ghp-import-2.1.0.tar.gz", hash = "sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343"}, + {file = "ghp_import-2.1.0-py3-none-any.whl", hash = "sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619"}, ] +[package.dependencies] +python-dateutil = ">=2.8.1" + +[package.extras] +dev = ["flake8", "markdown", "twine", "wheel"] + [[package]] name = "greenlet" version = "2.0.1" @@ -1207,17 +1231,6 @@ files = [ {file = "jmespath-1.0.1.tar.gz", hash = "sha256:90261b206d6defd58fdd5e85f478bf633a2901798906be2ad389150c5c60edbe"}, ] -[[package]] -name = "joblib" -version = "1.2.0" -description = "Lightweight pipelining with Python functions" -optional = false -python-versions = ">=3.7" -files = [ - {file = "joblib-1.2.0-py3-none-any.whl", hash = "sha256:091138ed78f800342968c523bdde947e7a305b8594b910a0fea2ab83c3c6d385"}, - {file = "joblib-1.2.0.tar.gz", hash = "sha256:e1cee4a79e4af22881164f218d4311f60074197fb707e082e803b61f6d137018"}, -] - [[package]] name = "l18n" version = "2021.3" @@ -1233,40 +1246,6 @@ files = [ pytz = ">=2020.1" six = "*" -[[package]] -name = "livereload" -version = "2.6.3" -description = "Python LiveReload is an awesome tool for web developers" -optional = false -python-versions = "*" -files = [ - {file = "livereload-2.6.3-py2.py3-none-any.whl", hash = "sha256:ad4ac6f53b2d62bb6ce1a5e6e96f1f00976a32348afedcb4b6d68df2a1d346e4"}, - {file = "livereload-2.6.3.tar.gz", hash = "sha256:776f2f865e59fde56490a56bcc6773b6917366bce0c267c60ee8aaf1a0959869"}, -] - -[package.dependencies] -six = "*" -tornado = {version = "*", markers = "python_version > \"2.7\""} - -[[package]] -name = "lunr" -version = "0.5.8" -description = "A Python implementation of Lunr.js" -optional = false -python-versions = "*" -files = [ - {file = "lunr-0.5.8-py2.py3-none-any.whl", hash = "sha256:aab3f489c4d4fab4c1294a257a30fec397db56f0a50273218ccc3efdbf01d6ca"}, - {file = "lunr-0.5.8.tar.gz", hash = "sha256:c4fb063b98eff775dd638b3df380008ae85e6cb1d1a24d1cd81a10ef6391c26e"}, -] - -[package.dependencies] -future = ">=0.16.0" -nltk = {version = ">=3.2.5", optional = true, markers = "python_version > \"2.7\" and extra == \"languages\""} -six = ">=1.11.0" - -[package.extras] -languages = ["nltk (>=3.2.5)", "nltk (>=3.2.5,<3.5)"] - [[package]] name = "lxml" version = "4.9.1" @@ -1371,19 +1350,20 @@ urllib3 = ">=1.23" [[package]] name = "markdown" -version = "3.4.1" -description = "Python implementation of Markdown." +version = "3.6" +description = "Python implementation of John Gruber's Markdown." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "Markdown-3.4.1-py3-none-any.whl", hash = "sha256:08fb8465cffd03d10b9dd34a5c3fea908e20391a2a90b88d66362cb05beed186"}, - {file = "Markdown-3.4.1.tar.gz", hash = "sha256:3b809086bb6efad416156e00a0da66fe47618a5d6918dd688f53f40c8e4cfeff"}, + {file = "Markdown-3.6-py3-none-any.whl", hash = "sha256:48f276f4d8cfb8ce6527c8f79e2ee29708508bf4d40aa410fbc3b4ee832c850f"}, + {file = "Markdown-3.6.tar.gz", hash = "sha256:ed4f41f6daecbeeb96e576ce414c41d2d876daa9a16cb35fa8ed8c2ddfad0224"}, ] [package.dependencies] importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} [package.extras] +docs = ["mdx-gh-links (>=0.2)", "mkdocs (>=1.5)", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-nature (>=0.6)", "mkdocs-section-index", "mkdocstrings[python]"] testing = ["coverage", "pyyaml"] [[package]] @@ -1456,53 +1436,103 @@ files = [ {file = "mccabe-0.6.1.tar.gz", hash = "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"}, ] +[[package]] +name = "mergedeep" +version = "1.3.4" +description = "A deep merge function for 🐍." +optional = false +python-versions = ">=3.6" +files = [ + {file = "mergedeep-1.3.4-py3-none-any.whl", hash = "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307"}, + {file = "mergedeep-1.3.4.tar.gz", hash = "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8"}, +] + [[package]] name = "mkdocs" -version = "1.1.2" +version = "1.6.0" description = "Project documentation with Markdown." optional = false -python-versions = ">=3.5" +python-versions = ">=3.8" files = [ - {file = "mkdocs-1.1.2-py3-none-any.whl", hash = "sha256:096f52ff52c02c7e90332d2e53da862fde5c062086e1b5356a6e392d5d60f5e9"}, - {file = "mkdocs-1.1.2.tar.gz", hash = "sha256:f0b61e5402b99d7789efa032c7a74c90a20220a9c81749da06dbfbcbd52ffb39"}, + {file = "mkdocs-1.6.0-py3-none-any.whl", hash = "sha256:1eb5cb7676b7d89323e62b56235010216319217d4af5ddc543a91beb8d125ea7"}, + {file = "mkdocs-1.6.0.tar.gz", hash = "sha256:a73f735824ef83a4f3bcb7a231dcab23f5a838f88b7efc54a0eef5fbdbc3c512"}, ] [package.dependencies] -click = ">=3.3" -Jinja2 = ">=2.10.1" -livereload = ">=2.5.1" -lunr = {version = "0.5.8", extras = ["languages"]} -Markdown = ">=3.2.1" -PyYAML = ">=3.10" -tornado = ">=5.0" +click = ">=7.0" +colorama = {version = ">=0.4", markers = "platform_system == \"Windows\""} +ghp-import = ">=1.0" +importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} +jinja2 = ">=2.11.1" +markdown = ">=3.3.6" +markupsafe = ">=2.0.1" +mergedeep = ">=1.3.4" +mkdocs-get-deps = ">=0.2.0" +packaging = ">=20.5" +pathspec = ">=0.11.1" +pyyaml = ">=5.1" +pyyaml-env-tag = ">=0.1" +watchdog = ">=2.0" + +[package.extras] +i18n = ["babel (>=2.9.0)"] +min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-import (==1.0)", "importlib-metadata (==4.4)", "jinja2 (==2.11.1)", "markdown (==3.3.6)", "markupsafe (==2.0.1)", "mergedeep (==1.3.4)", "mkdocs-get-deps (==0.2.0)", "packaging (==20.5)", "pathspec (==0.11.1)", "pyyaml (==5.1)", "pyyaml-env-tag (==0.1)", "watchdog (==2.0)"] + +[[package]] +name = "mkdocs-get-deps" +version = "0.2.0" +description = "MkDocs extension that lists all dependencies according to a mkdocs.yml file" +optional = false +python-versions = ">=3.8" +files = [ + {file = "mkdocs_get_deps-0.2.0-py3-none-any.whl", hash = "sha256:2bf11d0b133e77a0dd036abeeb06dec8775e46efa526dc70667d8863eefc6134"}, + {file = "mkdocs_get_deps-0.2.0.tar.gz", hash = "sha256:162b3d129c7fad9b19abfdcb9c1458a651628e4b1dea628ac68790fb3061c60c"}, +] + +[package.dependencies] +importlib-metadata = {version = ">=4.3", markers = "python_version < \"3.10\""} +mergedeep = ">=1.3.4" +platformdirs = ">=2.2.0" +pyyaml = ">=5.1" [[package]] name = "mkdocs-material" -version = "7.1.11" -description = "A Material Design theme for MkDocs" +version = "9.5.19" +description = "Documentation that simply works" optional = false -python-versions = "*" +python-versions = ">=3.8" files = [ - {file = "mkdocs-material-7.1.11.tar.gz", hash = "sha256:cad3a693f1c28823370578e5b9c9aea418bddae0c7348ab734537391e9f2b1e5"}, - {file = "mkdocs_material-7.1.11-py2.py3-none-any.whl", hash = "sha256:0bcfb788020b72b0ebf5b2722ddf89534acaed8c3feb39c2d6dda239b49dec45"}, + {file = "mkdocs_material-9.5.19-py3-none-any.whl", hash = "sha256:ea96e150b6c95f5e4ffe47d78bb712c7bacdd91d2a0bec47f46b6fa0705a86ec"}, + {file = "mkdocs_material-9.5.19.tar.gz", hash = "sha256:7473e06e17e23af608a30ef583fdde8f36389dd3ef56b1d503eed54c89c9618c"}, ] [package.dependencies] -markdown = ">=3.2" -mkdocs = ">=1.1" -mkdocs-material-extensions = ">=1.0" -Pygments = ">=2.4" -pymdown-extensions = ">=7.0" +babel = ">=2.10,<3.0" +colorama = ">=0.4,<1.0" +jinja2 = ">=3.0,<4.0" +markdown = ">=3.2,<4.0" +mkdocs = ">=1.6,<2.0" +mkdocs-material-extensions = ">=1.3,<2.0" +paginate = ">=0.5,<1.0" +pygments = ">=2.16,<3.0" +pymdown-extensions = ">=10.2,<11.0" +regex = ">=2022.4" +requests = ">=2.26,<3.0" + +[package.extras] +git = ["mkdocs-git-committers-plugin-2 (>=1.1,<2.0)", "mkdocs-git-revision-date-localized-plugin (>=1.2.4,<2.0)"] +imaging = ["cairosvg (>=2.6,<3.0)", "pillow (>=10.2,<11.0)"] +recommended = ["mkdocs-minify-plugin (>=0.7,<1.0)", "mkdocs-redirects (>=1.2,<2.0)", "mkdocs-rss-plugin (>=1.6,<2.0)"] [[package]] name = "mkdocs-material-extensions" -version = "1.1.1" +version = "1.3.1" description = "Extension pack for Python Markdown and MkDocs Material." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "mkdocs_material_extensions-1.1.1-py3-none-any.whl", hash = "sha256:e41d9f38e4798b6617ad98ca8f7f1157b1e4385ac1459ca1e4ea219b556df945"}, - {file = "mkdocs_material_extensions-1.1.1.tar.gz", hash = "sha256:9c003da71e2cc2493d910237448c672e00cefc800d3d6ae93d2fc69979e3bd93"}, + {file = "mkdocs_material_extensions-1.3.1-py3-none-any.whl", hash = "sha256:adff8b62700b25cb77b53358dad940f3ef973dd6db797907c49e3c2ef3ab4e31"}, + {file = "mkdocs_material_extensions-1.3.1.tar.gz", hash = "sha256:10c9511cea88f568257f960358a467d12b970e1f7b2c0e5fb2bb48cab1928443"}, ] [[package]] @@ -1516,31 +1546,6 @@ files = [ {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"}, ] -[[package]] -name = "nltk" -version = "3.7" -description = "Natural Language Toolkit" -optional = false -python-versions = ">=3.7" -files = [ - {file = "nltk-3.7-py3-none-any.whl", hash = "sha256:ba3de02490308b248f9b94c8bc1ac0683e9aa2ec49ee78536d8667afb5e3eec8"}, - {file = "nltk-3.7.zip", hash = "sha256:d6507d6460cec76d70afea4242a226a7542f85c669177b9c7f562b7cf1b05502"}, -] - -[package.dependencies] -click = "*" -joblib = "*" -regex = ">=2021.8.3" -tqdm = "*" - -[package.extras] -all = ["matplotlib", "numpy", "pyparsing", "python-crfsuite", "requests", "scikit-learn", "scipy", "twython"] -corenlp = ["requests"] -machine-learning = ["numpy", "python-crfsuite", "scikit-learn", "scipy"] -plot = ["matplotlib"] -tgrep = ["pyparsing"] -twitter = ["twython"] - [[package]] name = "nodeenv" version = "1.7.0" @@ -1582,6 +1587,27 @@ files = [ [package.dependencies] et-xmlfile = "*" +[[package]] +name = "packaging" +version = "24.0" +description = "Core utilities for Python packages" +optional = false +python-versions = ">=3.7" +files = [ + {file = "packaging-24.0-py3-none-any.whl", hash = "sha256:2ddfb553fdf02fb784c234c7ba6ccc288296ceabec964ad2eae3777778130bc5"}, + {file = "packaging-24.0.tar.gz", hash = "sha256:eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9"}, +] + +[[package]] +name = "paginate" +version = "0.5.6" +description = "Divides large result sets into pages for easier browsing" +optional = false +python-versions = "*" +files = [ + {file = "paginate-0.5.6.tar.gz", hash = "sha256:5e6007b6a9398177a7e1648d04fdd9f8c9766a1a945bceac82f1929e8c78af2d"}, +] + [[package]] name = "paramiko" version = "2.12.0" @@ -1607,13 +1633,13 @@ invoke = ["invoke (>=1.3)"] [[package]] name = "pathspec" -version = "0.10.2" +version = "0.12.1" description = "Utility library for gitignore style pattern matching of file paths." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pathspec-0.10.2-py3-none-any.whl", hash = "sha256:88c2606f2c1e818b978540f73ecc908e13999c6c3a383daf3705652ae79807a5"}, - {file = "pathspec-0.10.2.tar.gz", hash = "sha256:8f6bf73e5758fd365ef5d58ce09ac7c27d2833a8d7da51712eac6e27e35141b0"}, + {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"}, + {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, ] [[package]] @@ -1820,31 +1846,36 @@ files = [ [[package]] name = "pygments" -version = "2.13.0" +version = "2.17.2" description = "Pygments is a syntax highlighting package written in Python." optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "Pygments-2.13.0-py3-none-any.whl", hash = "sha256:f643f331ab57ba3c9d89212ee4a2dabc6e94f117cf4eefde99a0574720d14c42"}, - {file = "Pygments-2.13.0.tar.gz", hash = "sha256:56a8508ae95f98e2b9bdf93a6be5ae3f7d8af858b43e02c5a2ff083726be40c1"}, + {file = "pygments-2.17.2-py3-none-any.whl", hash = "sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c"}, + {file = "pygments-2.17.2.tar.gz", hash = "sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367"}, ] [package.extras] plugins = ["importlib-metadata"] +windows-terminal = ["colorama (>=0.4.6)"] [[package]] name = "pymdown-extensions" -version = "8.1.1" +version = "10.8" description = "Extension pack for Python Markdown." optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "pymdown-extensions-8.1.1.tar.gz", hash = "sha256:632371fa3bf1b21a0e3f4063010da59b41db049f261f4c0b0872069a9b6d1735"}, - {file = "pymdown_extensions-8.1.1-py3-none-any.whl", hash = "sha256:478b2c04513fbb2db61688d5f6e9030a92fb9be14f1f383535c43f7be9dff95b"}, + {file = "pymdown_extensions-10.8-py3-none-any.whl", hash = "sha256:3539003ff0d5e219ba979d2dc961d18fcad5ac259e66c764482e8347b4c0503c"}, + {file = "pymdown_extensions-10.8.tar.gz", hash = "sha256:91ca336caf414e1e5e0626feca86e145de9f85a3921a7bcbd32890b51738c428"}, ] [package.dependencies] -Markdown = ">=3.2" +markdown = ">=3.6" +pyyaml = "*" + +[package.extras] +extra = ["pygments (>=2.12)"] [[package]] name = "pynacl" @@ -1953,6 +1984,20 @@ files = [ {file = "PyYAML-5.4.1.tar.gz", hash = "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e"}, ] +[[package]] +name = "pyyaml-env-tag" +version = "0.1" +description = "A custom YAML tag for referencing environment variables in YAML files. " +optional = false +python-versions = ">=3.6" +files = [ + {file = "pyyaml_env_tag-0.1-py3-none-any.whl", hash = "sha256:af31106dec8a4d68c60207c1886031cbf839b68aa7abccdb19868200532c2069"}, + {file = "pyyaml_env_tag-0.1.tar.gz", hash = "sha256:70092675bda14fdec33b31ba77e7543de9ddc88f2e5b99160396572d11525bdb"}, +] + +[package.dependencies] +pyyaml = "*" + [[package]] name = "redis" version = "4.4.0" @@ -2465,46 +2510,6 @@ files = [ {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, ] -[[package]] -name = "tornado" -version = "6.2" -description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." -optional = false -python-versions = ">= 3.7" -files = [ - {file = "tornado-6.2-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:20f638fd8cc85f3cbae3c732326e96addff0a15e22d80f049e00121651e82e72"}, - {file = "tornado-6.2-cp37-abi3-macosx_10_9_x86_64.whl", hash = "sha256:87dcafae3e884462f90c90ecc200defe5e580a7fbbb4365eda7c7c1eb809ebc9"}, - {file = "tornado-6.2-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba09ef14ca9893954244fd872798b4ccb2367c165946ce2dd7376aebdde8e3ac"}, - {file = "tornado-6.2-cp37-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b8150f721c101abdef99073bf66d3903e292d851bee51910839831caba341a75"}, - {file = "tornado-6.2-cp37-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3a2f5999215a3a06a4fc218026cd84c61b8b2b40ac5296a6db1f1451ef04c1e"}, - {file = "tornado-6.2-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:5f8c52d219d4995388119af7ccaa0bcec289535747620116a58d830e7c25d8a8"}, - {file = "tornado-6.2-cp37-abi3-musllinux_1_1_i686.whl", hash = "sha256:6fdfabffd8dfcb6cf887428849d30cf19a3ea34c2c248461e1f7d718ad30b66b"}, - {file = "tornado-6.2-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:1d54d13ab8414ed44de07efecb97d4ef7c39f7438cf5e976ccd356bebb1b5fca"}, - {file = "tornado-6.2-cp37-abi3-win32.whl", hash = "sha256:5c87076709343557ef8032934ce5f637dbb552efa7b21d08e89ae7619ed0eb23"}, - {file = "tornado-6.2-cp37-abi3-win_amd64.whl", hash = "sha256:e5f923aa6a47e133d1cf87d60700889d7eae68988704e20c75fb2d65677a8e4b"}, - {file = "tornado-6.2.tar.gz", hash = "sha256:9b630419bde84ec666bfd7ea0a4cb2a8a651c2d5cccdbdd1972a0c859dfc3c13"}, -] - -[[package]] -name = "tqdm" -version = "4.64.1" -description = "Fast, Extensible Progress Meter" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" -files = [ - {file = "tqdm-4.64.1-py2.py3-none-any.whl", hash = "sha256:6fee160d6ffcd1b1c68c65f14c829c22832bc401726335ce92c52d395944a6a1"}, - {file = "tqdm-4.64.1.tar.gz", hash = "sha256:5f4f682a004951c1b450bc753c710e9280c5746ce6ffedee253ddbcbf54cf1e4"}, -] - -[package.dependencies] -colorama = {version = "*", markers = "platform_system == \"Windows\""} - -[package.extras] -dev = ["py-make (>=0.1.0)", "twine", "wheel"] -notebook = ["ipywidgets (>=6)"] -slack = ["slack-sdk"] -telegram = ["requests"] - [[package]] name = "typing-extensions" version = "4.4.0" @@ -2717,6 +2722,47 @@ files = [ [package.dependencies] wagtail = ">=2.4" +[[package]] +name = "watchdog" +version = "4.0.0" +description = "Filesystem events monitoring" +optional = false +python-versions = ">=3.8" +files = [ + {file = "watchdog-4.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:39cb34b1f1afbf23e9562501673e7146777efe95da24fab5707b88f7fb11649b"}, + {file = "watchdog-4.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c522392acc5e962bcac3b22b9592493ffd06d1fc5d755954e6be9f4990de932b"}, + {file = "watchdog-4.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6c47bdd680009b11c9ac382163e05ca43baf4127954c5f6d0250e7d772d2b80c"}, + {file = "watchdog-4.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8350d4055505412a426b6ad8c521bc7d367d1637a762c70fdd93a3a0d595990b"}, + {file = "watchdog-4.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c17d98799f32e3f55f181f19dd2021d762eb38fdd381b4a748b9f5a36738e935"}, + {file = "watchdog-4.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4986db5e8880b0e6b7cd52ba36255d4793bf5cdc95bd6264806c233173b1ec0b"}, + {file = "watchdog-4.0.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:11e12fafb13372e18ca1bbf12d50f593e7280646687463dd47730fd4f4d5d257"}, + {file = "watchdog-4.0.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5369136a6474678e02426bd984466343924d1df8e2fd94a9b443cb7e3aa20d19"}, + {file = "watchdog-4.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:76ad8484379695f3fe46228962017a7e1337e9acadafed67eb20aabb175df98b"}, + {file = "watchdog-4.0.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:45cc09cc4c3b43fb10b59ef4d07318d9a3ecdbff03abd2e36e77b6dd9f9a5c85"}, + {file = "watchdog-4.0.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:eed82cdf79cd7f0232e2fdc1ad05b06a5e102a43e331f7d041e5f0e0a34a51c4"}, + {file = "watchdog-4.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ba30a896166f0fee83183cec913298151b73164160d965af2e93a20bbd2ab605"}, + {file = "watchdog-4.0.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:d18d7f18a47de6863cd480734613502904611730f8def45fc52a5d97503e5101"}, + {file = "watchdog-4.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2895bf0518361a9728773083908801a376743bcc37dfa252b801af8fd281b1ca"}, + {file = "watchdog-4.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:87e9df830022488e235dd601478c15ad73a0389628588ba0b028cb74eb72fed8"}, + {file = "watchdog-4.0.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:6e949a8a94186bced05b6508faa61b7adacc911115664ccb1923b9ad1f1ccf7b"}, + {file = "watchdog-4.0.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:6a4db54edea37d1058b08947c789a2354ee02972ed5d1e0dca9b0b820f4c7f92"}, + {file = "watchdog-4.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d31481ccf4694a8416b681544c23bd271f5a123162ab603c7d7d2dd7dd901a07"}, + {file = "watchdog-4.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:8fec441f5adcf81dd240a5fe78e3d83767999771630b5ddfc5867827a34fa3d3"}, + {file = "watchdog-4.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:6a9c71a0b02985b4b0b6d14b875a6c86ddea2fdbebd0c9a720a806a8bbffc69f"}, + {file = "watchdog-4.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:557ba04c816d23ce98a06e70af6abaa0485f6d94994ec78a42b05d1c03dcbd50"}, + {file = "watchdog-4.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:d0f9bd1fd919134d459d8abf954f63886745f4660ef66480b9d753a7c9d40927"}, + {file = "watchdog-4.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:f9b2fdca47dc855516b2d66eef3c39f2672cbf7e7a42e7e67ad2cbfcd6ba107d"}, + {file = "watchdog-4.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:73c7a935e62033bd5e8f0da33a4dcb763da2361921a69a5a95aaf6c93aa03a87"}, + {file = "watchdog-4.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:6a80d5cae8c265842c7419c560b9961561556c4361b297b4c431903f8c33b269"}, + {file = "watchdog-4.0.0-py3-none-win32.whl", hash = "sha256:8f9a542c979df62098ae9c58b19e03ad3df1c9d8c6895d96c0d51da17b243b1c"}, + {file = "watchdog-4.0.0-py3-none-win_amd64.whl", hash = "sha256:f970663fa4f7e80401a7b0cbeec00fa801bf0287d93d48368fc3e6fa32716245"}, + {file = "watchdog-4.0.0-py3-none-win_ia64.whl", hash = "sha256:9a03e16e55465177d416699331b0f3564138f1807ecc5f2de9d55d8f188d08c7"}, + {file = "watchdog-4.0.0.tar.gz", hash = "sha256:e3e7065cbdabe6183ab82199d7a4f6b3ba0a438c5a512a68559846ccb76a78ec"}, +] + +[package.extras] +watchmedo = ["PyYAML (>=3.10)"] + [[package]] name = "webencodings" version = "0.5.1" @@ -2796,6 +2842,16 @@ files = [ {file = "wrapt-1.14.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8ad85f7f4e20964db4daadcab70b47ab05c7c1cf2a7c1e51087bfaa83831854c"}, {file = "wrapt-1.14.1-cp310-cp310-win32.whl", hash = "sha256:a9a52172be0b5aae932bef82a79ec0a0ce87288c7d132946d645eba03f0ad8a8"}, {file = "wrapt-1.14.1-cp310-cp310-win_amd64.whl", hash = "sha256:6d323e1554b3d22cfc03cd3243b5bb815a51f5249fdcbb86fda4bf62bab9e164"}, + {file = "wrapt-1.14.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ecee4132c6cd2ce5308e21672015ddfed1ff975ad0ac8d27168ea82e71413f55"}, + {file = "wrapt-1.14.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2020f391008ef874c6d9e208b24f28e31bcb85ccff4f335f15a3251d222b92d9"}, + {file = "wrapt-1.14.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2feecf86e1f7a86517cab34ae6c2f081fd2d0dac860cb0c0ded96d799d20b335"}, + {file = "wrapt-1.14.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:240b1686f38ae665d1b15475966fe0472f78e71b1b4903c143a842659c8e4cb9"}, + {file = "wrapt-1.14.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9008dad07d71f68487c91e96579c8567c98ca4c3881b9b113bc7b33e9fd78b8"}, + {file = "wrapt-1.14.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:6447e9f3ba72f8e2b985a1da758767698efa72723d5b59accefd716e9e8272bf"}, + {file = "wrapt-1.14.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:acae32e13a4153809db37405f5eba5bac5fbe2e2ba61ab227926a22901051c0a"}, + {file = "wrapt-1.14.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:49ef582b7a1152ae2766557f0550a9fcbf7bbd76f43fbdc94dd3bf07cc7168be"}, + {file = "wrapt-1.14.1-cp311-cp311-win32.whl", hash = "sha256:358fe87cc899c6bb0ddc185bf3dbfa4ba646f05b1b0b9b5a27c2cb92c2cea204"}, + {file = "wrapt-1.14.1-cp311-cp311-win_amd64.whl", hash = "sha256:26046cd03936ae745a502abf44dac702a5e6880b2b01c29aea8ddf3353b68224"}, {file = "wrapt-1.14.1-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:43ca3bbbe97af00f49efb06e352eae40434ca9d915906f77def219b88e85d907"}, {file = "wrapt-1.14.1-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:6b1a564e6cb69922c7fe3a678b9f9a3c54e72b469875aa8018f18b4d1dd1adf3"}, {file = "wrapt-1.14.1-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:00b6d4ea20a906c0ca56d84f93065b398ab74b927a7a3dbd470f6fc503f95dc3"}, @@ -2891,4 +2947,4 @@ gunicorn = ["gunicorn"] [metadata] lock-version = "2.0" python-versions = "~3.8" -content-hash = "d86e232e7315cbf36cc48c778a4d6a5472ff86235d2c37c2d25cf532800dc0bf" +content-hash = "840ce65980c0917deafd28f464a2d9a2463c31f6af02002886a73af11722a888" diff --git a/pyproject.toml b/pyproject.toml index a294c7b5f..b476ed78d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -55,9 +55,9 @@ isort = "4.3.18" pre-commit = "~2.11" # Documentation -mkdocs = "~1.1" -mkdocs-material = "~7.1" -pymdown-extensions = "~8.1" +mkdocs = "~1.6" +mkdocs-material = "~9.5" +pymdown-extensions = "~10.8" honcho = "^1.0.1" [build-system] diff --git a/rca/images/models.py b/rca/images/models.py index 93a8250ed..31e878d87 100644 --- a/rca/images/models.py +++ b/rca/images/models.py @@ -1,4 +1,3 @@ -from django.conf import settings from django.db import models from wagtail.api import APIField from wagtail.images.models import AbstractImage, AbstractRendition, Image diff --git a/rca/people/admin/page_import_forms.py b/rca/people/admin/page_import_forms.py index 44bf591a5..e7781dd49 100644 --- a/rca/people/admin/page_import_forms.py +++ b/rca/people/admin/page_import_forms.py @@ -1,5 +1,4 @@ from django import forms -from django.contrib import admin from django.contrib.admin.widgets import AutocompleteSelect from django.contrib.auth import get_user_model from import_export.forms import ConfirmImportForm, ImportForm