From 2d94f0dd557fae3555dcd56b8466c8eaba21efd6 Mon Sep 17 00:00:00 2001 From: FinemechanicPub <93194456+FinemechanicPub@users.noreply.github.com> Date: Fri, 26 Jan 2024 18:36:13 +0300 Subject: [PATCH 01/14] Install django-private-storage --- poetry.lock | 14 +++++++++++++- pyproject.toml | 1 + requirements/dev.txt | 1 + requirements/prod.txt | 1 + 4 files changed, 16 insertions(+), 1 deletion(-) diff --git a/poetry.lock b/poetry.lock index ae19a6922..b23eca705 100644 --- a/poetry.lock +++ b/poetry.lock @@ -726,6 +726,18 @@ files = [ [package.dependencies] Django = ">=2.1" +[[package]] +name = "django-private-storage" +version = "3.1.1" +description = "Private media file storage for Django projects" +category = "main" +optional = false +python-versions = "*" +files = [ + {file = "django-private-storage-3.1.1.tar.gz", hash = "sha256:9e8f9e88818b04895cf4be6c86f1255c4befa5466f7d25e1be3a7c2784e9b275"}, + {file = "django_private_storage-3.1.1-py3-none-any.whl", hash = "sha256:fcb14c0f56e1fb5e1984afe689e6a92d79c1347dd5329aa50b53ecec4e517a52"}, +] + [[package]] name = "django-rest-multiple-models" version = "2.1.3" @@ -2860,4 +2872,4 @@ requests = "*" [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "3e70a0d7a88bb5056af1bcf90fe6bee3b1439fc2bd85d788fe43f6f8169fda11" +content-hash = "1ae356183bb656f248f962a6dff27ec3d55322209dea811b8ba6f46d16017dcf" diff --git a/pyproject.toml b/pyproject.toml index 4acfa2f62..9a54f9601 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -61,6 +61,7 @@ requests = "^2.31.0" cryptography = "^41.0.4" sqlparse = "^0.4.4" easy-thumbnails = "^2.8.5" +django-private-storage = "^3.1.1" [tool.poetry.dev-dependencies] pre-commit = "^2.15.0" diff --git a/requirements/dev.txt b/requirements/dev.txt index 904623a00..9297ff450 100644 --- a/requirements/dev.txt +++ b/requirements/dev.txt @@ -28,6 +28,7 @@ django-filter==21.1 ; python_version >= "3.9" and python_version < "4.0" django-js-asset==2.1.0 ; python_version >= "3.9" and python_version < "4.0" django-phonenumber-field[phonenumbers]==5.2.0 ; python_version >= "3.9" and python_version < "4.0" django-polymorphic==3.1.0 ; python_version >= "3.9" and python_version < "4.0" +django-private-storage==3.1.1 ; python_version >= "3.9" and python_version < "4.0" django-rest-multiple-models==2.1.3 ; python_version >= "3.9" and python_version < "4.0" django==3.2.23 ; python_version >= "3.9" and python_version < "4.0" djangorestframework==3.13.1 ; python_version >= "3.9" and python_version < "4.0" diff --git a/requirements/prod.txt b/requirements/prod.txt index 7a2f764fd..e32dd985f 100644 --- a/requirements/prod.txt +++ b/requirements/prod.txt @@ -21,6 +21,7 @@ django-filter==21.1 ; python_version >= "3.9" and python_version < "4.0" django-js-asset==2.1.0 ; python_version >= "3.9" and python_version < "4.0" django-phonenumber-field[phonenumbers]==5.2.0 ; python_version >= "3.9" and python_version < "4.0" django-polymorphic==3.1.0 ; python_version >= "3.9" and python_version < "4.0" +django-private-storage==3.1.1 ; python_version >= "3.9" and python_version < "4.0" django-rest-multiple-models==2.1.3 ; python_version >= "3.9" and python_version < "4.0" django==3.2.23 ; python_version >= "3.9" and python_version < "4.0" djangorestframework==3.13.1 ; python_version >= "3.9" and python_version < "4.0" From c755452a1681cb64738f95dcc2968c18d5103862 Mon Sep 17 00:00:00 2001 From: FinemechanicPub <93194456+FinemechanicPub@users.noreply.github.com> Date: Fri, 26 Jan 2024 18:37:08 +0300 Subject: [PATCH 02/14] Store plays in a private storage --- .../migrations/0007_move_play_files.py | 27 +++++++++++++++++++ .../0043_alter_play_url_download.py | 22 +++++++++++++++ apps/library/models/play.py | 3 ++- config/settings/base.py | 7 +++++ config/urls.py | 5 ++++ 5 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 apps/feedback/migrations/0007_move_play_files.py create mode 100644 apps/library/migrations/0043_alter_play_url_download.py diff --git a/apps/feedback/migrations/0007_move_play_files.py b/apps/feedback/migrations/0007_move_play_files.py new file mode 100644 index 000000000..e16f0d3c9 --- /dev/null +++ b/apps/feedback/migrations/0007_move_play_files.py @@ -0,0 +1,27 @@ +# Generated by Django 3.2.23 on 2024-01-26 15:24 + +from django.conf import settings +from django.db import migrations +from shutil import copytree, move + +REGULAR_MEDIA = settings.MEDIA_ROOT / "plays" +PROTECTED_MEDIA = settings.PRIVATE_STORAGE_ROOT / "plays" + + +def move_to_protected_media(apps, schema_editor): + copytree(REGULAR_MEDIA, PROTECTED_MEDIA, copy_function=move, dirs_exist_ok=True) + + +def move_from_protected_media(apps, schema_editor): + copytree(PROTECTED_MEDIA, REGULAR_MEDIA, copy_function=move, dirs_exist_ok=True) + + +class Migration(migrations.Migration): + + dependencies = [ + ('feedback', '0006_alter_question_created'), + ] + + operations = [ + migrations.RunPython(move_to_protected_media, move_from_protected_media), + ] diff --git a/apps/library/migrations/0043_alter_play_url_download.py b/apps/library/migrations/0043_alter_play_url_download.py new file mode 100644 index 000000000..a8e21d9b7 --- /dev/null +++ b/apps/library/migrations/0043_alter_play_url_download.py @@ -0,0 +1,22 @@ +# Generated by Django 3.2.23 on 2024-01-26 13:30 + +import apps.content_pages.utilities +import django.core.validators +from django.db import migrations +import private_storage.fields +import private_storage.storage.files + + +class Migration(migrations.Migration): + + dependencies = [ + ('library', '0042_alter_author_slug'), + ] + + operations = [ + migrations.AlterField( + model_name='play', + name='url_download', + field=private_storage.fields.PrivateFileField(blank=True, help_text="Файл пьесы должен быть в одном из следующих форматов: ('doc', 'docx', 'txt', 'odt', 'pdf')", max_length=200, null=True, storage=private_storage.storage.files.PrivateFileSystemStorage(), upload_to=apps.content_pages.utilities.path_by_media_and_class_name, validators=[django.core.validators.FileExtensionValidator(('doc', 'docx', 'txt', 'odt', 'pdf'))], verbose_name='Текст пьесы'), + ), + ] diff --git a/apps/library/models/play.py b/apps/library/models/play.py index b1a049430..71b2138c1 100644 --- a/apps/library/models/play.py +++ b/apps/library/models/play.py @@ -3,6 +3,7 @@ from django.db import models from django.db.models import UniqueConstraint from django.utils.translation import gettext_lazy as _ +from private_storage.fields import PrivateFileField from apps.content_pages.utilities import path_by_media_and_class_name from apps.core.mixins import FileCleanUpMixin @@ -65,7 +66,7 @@ class Play(FileCleanUpMixin, BaseModel): blank=True, null=True, ) - url_download = models.FileField( + url_download = PrivateFileField( validators=(FileExtensionValidator(ALLOWED_FORMATS_FILE_FOR_PLAY),), max_length=200, blank=True, diff --git a/config/settings/base.py b/config/settings/base.py index 2698e352b..8363e536d 100644 --- a/config/settings/base.py +++ b/config/settings/base.py @@ -56,6 +56,7 @@ "anymail", "easy_thumbnails", "apps.filer.apps.FilerCustomConfig", + "private_storage", ] LOCAL_APPS = [ "apps.users", @@ -384,6 +385,12 @@ LOCALE_PATHS = [Path(STATIC_ROOT) / "core" / "locale", ] +# Private storage settings +PRIVATE_STORAGE_ROOT = ROOT_DIR / "protected_media" +PRIVATE_STORAGE_AUTH_FUNCTION = 'private_storage.permissions.allow_staff' +PRIVATE_STORAGE_SERVER = 'nginx' +PRIVATE_STORAGE_INTERNAL_URL = '/private-redirect/' + # APP SETTINGS AFISHA_REGISTRATION_OPENS_HOURS_BEFORE = 12 POSTFIX_MAIL_DOMAIN = os.environ.get("POSTFIX_MAIL_DOMAIN") diff --git a/config/urls.py b/config/urls.py index 9026d0219..a4c6fa5f8 100644 --- a/config/urls.py +++ b/config/urls.py @@ -1,3 +1,4 @@ +import private_storage.urls from django.conf import settings from django.conf.urls.static import static from django.contrib import admin @@ -79,3 +80,7 @@ view=include("filer.urls"), ), ] + static(MEDIA_URL, document_root=MEDIA_ROOT) + +urlpatterns += [ + path("private-media/", include(private_storage.urls)), +] From 35d8ab083f220d01d1dbed407cd50511f99cd4cc Mon Sep 17 00:00:00 2001 From: FinemechanicPub <93194456+FinemechanicPub@users.noreply.github.com> Date: Fri, 26 Jan 2024 18:37:34 +0300 Subject: [PATCH 03/14] Add private media folder to gitignore --- .gitignore | 1 + config/settings/base.py | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index af52db56d..022d2c435 100644 --- a/.gitignore +++ b/.gitignore @@ -131,6 +131,7 @@ dmypy.json # Media and Static Django /media /staticfiles +/protected_media # Logs Django /logs diff --git a/config/settings/base.py b/config/settings/base.py index 8363e536d..1ba4d6e0b 100644 --- a/config/settings/base.py +++ b/config/settings/base.py @@ -387,9 +387,9 @@ # Private storage settings PRIVATE_STORAGE_ROOT = ROOT_DIR / "protected_media" -PRIVATE_STORAGE_AUTH_FUNCTION = 'private_storage.permissions.allow_staff' -PRIVATE_STORAGE_SERVER = 'nginx' -PRIVATE_STORAGE_INTERNAL_URL = '/private-redirect/' +PRIVATE_STORAGE_AUTH_FUNCTION = "private_storage.permissions.allow_staff" +PRIVATE_STORAGE_SERVER = "nginx" +PRIVATE_STORAGE_INTERNAL_URL = "/private-redirect/" # APP SETTINGS AFISHA_REGISTRATION_OPENS_HOURS_BEFORE = 12 From c753a93877dca3e019b6b03a3f126ca21a4fe88d Mon Sep 17 00:00:00 2001 From: FinemechanicPub <93194456+FinemechanicPub@users.noreply.github.com> Date: Fri, 26 Jan 2024 18:45:21 +0300 Subject: [PATCH 04/14] Add protected media location --- infra_deploy/test/nginx/nginx_test.conf | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/infra_deploy/test/nginx/nginx_test.conf b/infra_deploy/test/nginx/nginx_test.conf index 50c90cc97..7613c506d 100644 --- a/infra_deploy/test/nginx/nginx_test.conf +++ b/infra_deploy/test/nginx/nginx_test.conf @@ -50,6 +50,11 @@ server { root /config/test/; } + location /private-redirect/ { + internal; + alias /config/test/protected_media/; + } + } From e5147acba04ac1a053139ad7338e7cd151f47549 Mon Sep 17 00:00:00 2001 From: FinemechanicPub <93194456+FinemechanicPub@users.noreply.github.com> Date: Fri, 26 Jan 2024 21:00:45 +0300 Subject: [PATCH 05/14] Refactor migrations --- .../migrations/0007_move_play_files.py | 27 ------------------- .../0043_alter_play_url_download.py | 16 +++++++++++ 2 files changed, 16 insertions(+), 27 deletions(-) delete mode 100644 apps/feedback/migrations/0007_move_play_files.py diff --git a/apps/feedback/migrations/0007_move_play_files.py b/apps/feedback/migrations/0007_move_play_files.py deleted file mode 100644 index e16f0d3c9..000000000 --- a/apps/feedback/migrations/0007_move_play_files.py +++ /dev/null @@ -1,27 +0,0 @@ -# Generated by Django 3.2.23 on 2024-01-26 15:24 - -from django.conf import settings -from django.db import migrations -from shutil import copytree, move - -REGULAR_MEDIA = settings.MEDIA_ROOT / "plays" -PROTECTED_MEDIA = settings.PRIVATE_STORAGE_ROOT / "plays" - - -def move_to_protected_media(apps, schema_editor): - copytree(REGULAR_MEDIA, PROTECTED_MEDIA, copy_function=move, dirs_exist_ok=True) - - -def move_from_protected_media(apps, schema_editor): - copytree(PROTECTED_MEDIA, REGULAR_MEDIA, copy_function=move, dirs_exist_ok=True) - - -class Migration(migrations.Migration): - - dependencies = [ - ('feedback', '0006_alter_question_created'), - ] - - operations = [ - migrations.RunPython(move_to_protected_media, move_from_protected_media), - ] diff --git a/apps/library/migrations/0043_alter_play_url_download.py b/apps/library/migrations/0043_alter_play_url_download.py index a8e21d9b7..2df7bf540 100644 --- a/apps/library/migrations/0043_alter_play_url_download.py +++ b/apps/library/migrations/0043_alter_play_url_download.py @@ -2,9 +2,24 @@ import apps.content_pages.utilities import django.core.validators +from django.conf import settings from django.db import migrations import private_storage.fields import private_storage.storage.files +from shutil import copytree, move + +REGULAR_MEDIA = settings.MEDIA_ROOT / "plays" +PROTECTED_MEDIA = settings.PRIVATE_STORAGE_ROOT / "plays" + + +def move_to_protected_media(apps, schema_editor): + if REGULAR_MEDIA.exists(): + copytree(REGULAR_MEDIA, PROTECTED_MEDIA, copy_function=move, dirs_exist_ok=True) + + +def move_from_protected_media(apps, schema_editor): + if PROTECTED_MEDIA.exists(): + copytree(PROTECTED_MEDIA, REGULAR_MEDIA, copy_function=move, dirs_exist_ok=True) class Migration(migrations.Migration): @@ -19,4 +34,5 @@ class Migration(migrations.Migration): name='url_download', field=private_storage.fields.PrivateFileField(blank=True, help_text="Файл пьесы должен быть в одном из следующих форматов: ('doc', 'docx', 'txt', 'odt', 'pdf')", max_length=200, null=True, storage=private_storage.storage.files.PrivateFileSystemStorage(), upload_to=apps.content_pages.utilities.path_by_media_and_class_name, validators=[django.core.validators.FileExtensionValidator(('doc', 'docx', 'txt', 'odt', 'pdf'))], verbose_name='Текст пьесы'), ), + migrations.RunPython(move_to_protected_media, move_from_protected_media), ] From 92d12a34fa727216d31cd1e1ff26c28a843829e6 Mon Sep 17 00:00:00 2001 From: FinemechanicPub <93194456+FinemechanicPub@users.noreply.github.com> Date: Fri, 26 Jan 2024 21:33:24 +0300 Subject: [PATCH 06/14] Fix nginx config --- infra_deploy/test/nginx/nginx_test.conf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/infra_deploy/test/nginx/nginx_test.conf b/infra_deploy/test/nginx/nginx_test.conf index 7613c506d..f87a65a85 100644 --- a/infra_deploy/test/nginx/nginx_test.conf +++ b/infra_deploy/test/nginx/nginx_test.conf @@ -35,7 +35,7 @@ server { proxy_pass $upstream_proto://$upstream_app:$upstream_port; } - location ~^/size([0-9]{3})/media(?:/(.*))?$ { + location ~"^/size([0-9]{3})/media(?:/(.*))?$" { proxy_pass http://127.0.0.1:9001; proxy_cache resized; proxy_cache_valid 180m; @@ -68,7 +68,7 @@ server { deny all; limit_req zone=2persec burst=10; - location ~^/size([0-9]{3})/media(?:/(.*))?$ { + location ~"^/size([0-9]{3})/media(?:/(.*))?$" { alias /config/test/media/$2; image_filter_buffer 10M; image_filter resize $1 -; From 03cde368c0987ca9e0522a42fc19a5b465d34b0c Mon Sep 17 00:00:00 2001 From: FinemechanicPub <93194456+FinemechanicPub@users.noreply.github.com> Date: Tue, 30 Jan 2024 03:44:49 +0300 Subject: [PATCH 07/14] Fix private medoa nginx redirect --- infra_deploy/test/lubimovka_backend_test_deploy.yml | 1 + infra_deploy/test/lubimovka_frontend_test_deploy.yml | 1 + infra_deploy/test/nginx/nginx_test.conf | 6 +++--- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/infra_deploy/test/lubimovka_backend_test_deploy.yml b/infra_deploy/test/lubimovka_backend_test_deploy.yml index 3cf8f0fa3..9360cf0f7 100644 --- a/infra_deploy/test/lubimovka_backend_test_deploy.yml +++ b/infra_deploy/test/lubimovka_backend_test_deploy.yml @@ -34,6 +34,7 @@ services: volumes: - static_value_test:/code/staticfiles/ - ./media:/code/media/ + - ./protected_media:/code/protected_media/ - ./logs/backend_logs/:/code/logs/ command: > sh -c "sleep 5; python manage.py migrate && diff --git a/infra_deploy/test/lubimovka_frontend_test_deploy.yml b/infra_deploy/test/lubimovka_frontend_test_deploy.yml index 40db2b042..69acde38b 100644 --- a/infra_deploy/test/lubimovka_frontend_test_deploy.yml +++ b/infra_deploy/test/lubimovka_frontend_test_deploy.yml @@ -21,6 +21,7 @@ services: - ./logs/nginx_logs/:/var/log/nginx/ - static_value_test:/config/test/static/ - ./media:/config/test/media/ + - ./protected_media:/config/test/protected_media/ ports: - 8080:80 restart: unless-stopped diff --git a/infra_deploy/test/nginx/nginx_test.conf b/infra_deploy/test/nginx/nginx_test.conf index f87a65a85..019b4e063 100644 --- a/infra_deploy/test/nginx/nginx_test.conf +++ b/infra_deploy/test/nginx/nginx_test.conf @@ -25,7 +25,7 @@ server { # proxy_http_version 1.1; # proxy_set_header Connection ""; } - location ~^/(api|admin|files|__debug__) { + location ~^/(api|admin|files|private-media|__debug__) { #include proxy_params; proxy_set_header Host $proxy_host; resolver 127.0.0.11 valid=20s; @@ -35,7 +35,7 @@ server { proxy_pass $upstream_proto://$upstream_app:$upstream_port; } - location ~"^/size([0-9]{3})/media(?:/(.*))?$" { + location ~ "^/size([0-9]{3})/media(?:/(.*))?$" { proxy_pass http://127.0.0.1:9001; proxy_cache resized; proxy_cache_valid 180m; @@ -68,7 +68,7 @@ server { deny all; limit_req zone=2persec burst=10; - location ~"^/size([0-9]{3})/media(?:/(.*))?$" { + location ~ "^/size([0-9]{3})/media(?:/(.*))?$" { alias /config/test/media/$2; image_filter_buffer 10M; image_filter resize $1 -; From c9356ea680f559c4b612c15bb56a24e09bfbe42f Mon Sep 17 00:00:00 2001 From: FinemechanicPub <93194456+FinemechanicPub@users.noreply.github.com> Date: Wed, 31 Jan 2024 02:50:25 +0300 Subject: [PATCH 08/14] Add permission control to file download --- apps/core/services/file_access.py | 17 +++++++++++++++++ config/settings/base.py | 2 +- 2 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 apps/core/services/file_access.py diff --git a/apps/core/services/file_access.py b/apps/core/services/file_access.py new file mode 100644 index 000000000..8ea82cff1 --- /dev/null +++ b/apps/core/services/file_access.py @@ -0,0 +1,17 @@ +"""Сервис контроля доступа к файлам для приложени django-private-storage.""" +from pathlib import Path + +from django.conf import settings +from private_storage.models import PrivateFile + +from apps.library.models.play import Play + + +def has_download_permission(private_file: PrivateFile) -> bool: + user = private_file.request.user + if user.is_authenticated and user.is_staff: + return True + + relative_path = Path(private_file.full_path).relative_to(settings.PRIVATE_STORAGE_ROOT) + print("!--Relative path:", relative_path) + return Play.objects.filter(url_download=relative_path, published=True).exists() diff --git a/config/settings/base.py b/config/settings/base.py index 1ba4d6e0b..3e063b41a 100644 --- a/config/settings/base.py +++ b/config/settings/base.py @@ -387,7 +387,7 @@ # Private storage settings PRIVATE_STORAGE_ROOT = ROOT_DIR / "protected_media" -PRIVATE_STORAGE_AUTH_FUNCTION = "private_storage.permissions.allow_staff" +PRIVATE_STORAGE_AUTH_FUNCTION = "apps.core.services.file_access.has_download_permission" PRIVATE_STORAGE_SERVER = "nginx" PRIVATE_STORAGE_INTERNAL_URL = "/private-redirect/" From 76de6778077fde847d14eac561b380c0cdce6a00 Mon Sep 17 00:00:00 2001 From: FinemechanicPub <93194456+FinemechanicPub@users.noreply.github.com> Date: Fri, 2 Feb 2024 15:47:06 +0300 Subject: [PATCH 09/14] Fix protected_media binding --- infra_deploy/test/lubimovka_backend_test_deploy.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/infra_deploy/test/lubimovka_backend_test_deploy.yml b/infra_deploy/test/lubimovka_backend_test_deploy.yml index 9360cf0f7..3009d80aa 100644 --- a/infra_deploy/test/lubimovka_backend_test_deploy.yml +++ b/infra_deploy/test/lubimovka_backend_test_deploy.yml @@ -20,6 +20,7 @@ services: volumes: - static_value_test:/code/staticfiles/ - ./media:/code/media/ + - ./protected_media:/code/protected_media/ - ./logs/backend_logs/:/code/logs/ depends_on: - postgres From 756c58b47d217f7503524172f261d6b21d1d96b4 Mon Sep 17 00:00:00 2001 From: FinemechanicPub <93194456+FinemechanicPub@users.noreply.github.com> Date: Fri, 2 Feb 2024 16:13:23 +0300 Subject: [PATCH 10/14] Stage and prod config --- apps/core/services/file_access.py | 1 - infra_deploy/prod/lubimovka_backend_prod_deploy.yml | 2 ++ infra_deploy/prod/lubimovka_frontend_prod_deploy.yml | 1 + infra_deploy/prod/swag/swag_nginx_prod.conf | 7 ++++++- infra_deploy/stage/lubimovka_backend_stage_deploy.yml | 2 ++ infra_deploy/stage/lubimovka_frontend_stage_deploy.yml | 1 + infra_deploy/stage/swag/swag_nginx_stage.conf | 8 +++++++- 7 files changed, 19 insertions(+), 3 deletions(-) diff --git a/apps/core/services/file_access.py b/apps/core/services/file_access.py index 8ea82cff1..b5c2553d5 100644 --- a/apps/core/services/file_access.py +++ b/apps/core/services/file_access.py @@ -13,5 +13,4 @@ def has_download_permission(private_file: PrivateFile) -> bool: return True relative_path = Path(private_file.full_path).relative_to(settings.PRIVATE_STORAGE_ROOT) - print("!--Relative path:", relative_path) return Play.objects.filter(url_download=relative_path, published=True).exists() diff --git a/infra_deploy/prod/lubimovka_backend_prod_deploy.yml b/infra_deploy/prod/lubimovka_backend_prod_deploy.yml index 1ec24d81b..1956b6a9d 100644 --- a/infra_deploy/prod/lubimovka_backend_prod_deploy.yml +++ b/infra_deploy/prod/lubimovka_backend_prod_deploy.yml @@ -18,6 +18,7 @@ services: volumes: - static_value_prod:/code/staticfiles/ - ./media:/code/media/ + - ./protected_media:/code/protected_media/ - ./logs/backend_logs/:/code/logs/ depends_on: - postgres @@ -32,6 +33,7 @@ services: volumes: - static_value_prod:/code/staticfiles/ - ./media:/code/media/ + - ./protected_media:/code/protected_media/ - ./logs/backend_logs/:/code/logs/ command: > sh -c " diff --git a/infra_deploy/prod/lubimovka_frontend_prod_deploy.yml b/infra_deploy/prod/lubimovka_frontend_prod_deploy.yml index 34255b202..57c44f394 100644 --- a/infra_deploy/prod/lubimovka_frontend_prod_deploy.yml +++ b/infra_deploy/prod/lubimovka_frontend_prod_deploy.yml @@ -20,6 +20,7 @@ services: - ./logs/swag_logs/:/config/log/ - static_value_prod:/config/prod/static/ - ./media:/config/prod/media/ + - ./protected_media:/config/prod/protected_media/ ports: - 443:443 - 80:80 diff --git a/infra_deploy/prod/swag/swag_nginx_prod.conf b/infra_deploy/prod/swag/swag_nginx_prod.conf index 8a1c2f9e1..e9057ce02 100644 --- a/infra_deploy/prod/swag/swag_nginx_prod.conf +++ b/infra_deploy/prod/swag/swag_nginx_prod.conf @@ -34,7 +34,7 @@ server { # proxy_http_version 1.1; # proxy_set_header Connection ""; } - location ~^/(api|admin|files) { + location ~^/(api|admin|files|private-media) { include /config/nginx/proxy.conf; set $upstream_app backend_prod; set $upstream_port 8000; @@ -53,6 +53,11 @@ server { add_header Content-disposition "attachment; filename=$1"; } + location /private-redirect/ { + internal; + alias /config/prod/protected_media/; + } + location ~^/(media|static) { set $width $arg_w; if ($arg_w = ''){ diff --git a/infra_deploy/stage/lubimovka_backend_stage_deploy.yml b/infra_deploy/stage/lubimovka_backend_stage_deploy.yml index 41292d097..7745c1342 100644 --- a/infra_deploy/stage/lubimovka_backend_stage_deploy.yml +++ b/infra_deploy/stage/lubimovka_backend_stage_deploy.yml @@ -20,6 +20,7 @@ services: volumes: - static_value_stage:/code/staticfiles/ - ./media:/code/media/ + - ./protected_media:/code/protected_media/ - ./logs/backend_logs/:/code/logs/ depends_on: - postgres @@ -34,6 +35,7 @@ services: volumes: - static_value_stage:/code/staticfiles/ - ./media:/code/media/ + - ./protected_media:/code/protected_media/ - ./logs/backend_logs/:/code/logs/ command: > sh -c " diff --git a/infra_deploy/stage/lubimovka_frontend_stage_deploy.yml b/infra_deploy/stage/lubimovka_frontend_stage_deploy.yml index 44bf4534b..b3edbe95f 100644 --- a/infra_deploy/stage/lubimovka_frontend_stage_deploy.yml +++ b/infra_deploy/stage/lubimovka_frontend_stage_deploy.yml @@ -21,6 +21,7 @@ services: - ./logs/swag_logs/:/config/log/ - static_value_stage:/config/stage/static/ - ./media:/config/stage/media/ + - ./protected_media:/config/stage/protected_media/ ports: - 443:443 - 80:80 diff --git a/infra_deploy/stage/swag/swag_nginx_stage.conf b/infra_deploy/stage/swag/swag_nginx_stage.conf index 1b9f1b7c7..762c3da42 100644 --- a/infra_deploy/stage/swag/swag_nginx_stage.conf +++ b/infra_deploy/stage/swag/swag_nginx_stage.conf @@ -36,7 +36,7 @@ server { # proxy_http_version 1.1; # proxy_set_header Connection ""; } - location ~^/(api|admin|files) { + location ~^/(api|admin|files|private-media) { include /config/nginx/proxy.conf; set $upstream_app backend; set $upstream_port 8000; @@ -55,6 +55,12 @@ server { add_header Content-disposition "attachment; filename=$1"; } + + location /private-redirect/ { + internal; + alias /config/stage/protected_media/; + } + location ~^/(media|static) { set $width $arg_w; if ($arg_w = ''){ From aa7a82af7c7bac7def13ef76507022e48cfe9c67 Mon Sep 17 00:00:00 2001 From: FinemechanicPub <93194456+FinemechanicPub@users.noreply.github.com> Date: Mon, 23 Sep 2024 21:41:53 +0300 Subject: [PATCH 11/14] Update project config --- poetry.lock | 482 ++++++++++++++++-------------------------- pyproject.toml | 30 +-- requirements/dev.txt | 37 ++-- requirements/prod.txt | 38 ++-- 4 files changed, 238 insertions(+), 349 deletions(-) diff --git a/poetry.lock b/poetry.lock index b23eca705..63d20cd3a 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,10 +1,9 @@ -# This file is automatically @generated by Poetry 1.4.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. [[package]] name = "arabic-reshaper" version = "3.0.0" description = "Reconstruct Arabic sentences to be used in applications that do not support Arabic" -category = "main" optional = false python-versions = "*" files = [ @@ -19,7 +18,6 @@ with-fonttools = ["fonttools (>=4.0)"] name = "asgiref" version = "3.7.2" description = "ASGI specs, helper code, and adapters" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -37,7 +35,6 @@ tests = ["mypy (>=0.800)", "pytest", "pytest-asyncio"] name = "asn1crypto" version = "1.5.1" description = "Fast ASN.1 parser and serializer with definitions for private keys, public keys, certificates, CRL, OCSP, CMS, PKCS#3, PKCS#7, PKCS#8, PKCS#12, PKCS#5, X.509 and TSP" -category = "main" optional = false python-versions = "*" files = [ @@ -49,7 +46,6 @@ files = [ name = "asttokens" version = "2.4.1" description = "Annotate AST trees with source code positions" -category = "dev" optional = false python-versions = "*" files = [ @@ -68,7 +64,6 @@ test = ["astroid (>=1,<2)", "astroid (>=2,<4)", "pytest"] name = "attrs" version = "23.1.0" description = "Classes Without Boilerplate" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -85,37 +80,47 @@ tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pyte [[package]] name = "black" -version = "22.12.0" +version = "24.4.0" description = "The uncompromising code formatter." -category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "black-22.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9eedd20838bd5d75b80c9f5487dbcb06836a43833a37846cf1d8c1cc01cef59d"}, - {file = "black-22.12.0-cp310-cp310-win_amd64.whl", hash = "sha256:159a46a4947f73387b4d83e87ea006dbb2337eab6c879620a3ba52699b1f4351"}, - {file = "black-22.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d30b212bffeb1e252b31dd269dfae69dd17e06d92b87ad26e23890f3efea366f"}, - {file = "black-22.12.0-cp311-cp311-win_amd64.whl", hash = "sha256:7412e75863aa5c5411886804678b7d083c7c28421210180d67dfd8cf1221e1f4"}, - {file = "black-22.12.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c116eed0efb9ff870ded8b62fe9f28dd61ef6e9ddd28d83d7d264a38417dcee2"}, - {file = "black-22.12.0-cp37-cp37m-win_amd64.whl", hash = "sha256:1f58cbe16dfe8c12b7434e50ff889fa479072096d79f0a7f25e4ab8e94cd8350"}, - {file = "black-22.12.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77d86c9f3db9b1bf6761244bc0b3572a546f5fe37917a044e02f3166d5aafa7d"}, - {file = "black-22.12.0-cp38-cp38-win_amd64.whl", hash = "sha256:82d9fe8fee3401e02e79767016b4907820a7dc28d70d137eb397b92ef3cc5bfc"}, - {file = "black-22.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:101c69b23df9b44247bd88e1d7e90154336ac4992502d4197bdac35dd7ee3320"}, - {file = "black-22.12.0-cp39-cp39-win_amd64.whl", hash = "sha256:559c7a1ba9a006226f09e4916060982fd27334ae1998e7a38b3f33a37f7a2148"}, - {file = "black-22.12.0-py3-none-any.whl", hash = "sha256:436cc9167dd28040ad90d3b404aec22cedf24a6e4d7de221bec2730ec0c97bcf"}, - {file = "black-22.12.0.tar.gz", hash = "sha256:229351e5a18ca30f447bf724d007f890f97e13af070bb6ad4c0a441cd7596a2f"}, + {file = "black-24.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6ad001a9ddd9b8dfd1b434d566be39b1cd502802c8d38bbb1ba612afda2ef436"}, + {file = "black-24.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e3a3a092b8b756c643fe45f4624dbd5a389f770a4ac294cf4d0fce6af86addaf"}, + {file = "black-24.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dae79397f367ac8d7adb6c779813328f6d690943f64b32983e896bcccd18cbad"}, + {file = "black-24.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:71d998b73c957444fb7c52096c3843875f4b6b47a54972598741fe9a7f737fcb"}, + {file = "black-24.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8e5537f456a22cf5cfcb2707803431d2feeb82ab3748ade280d6ccd0b40ed2e8"}, + {file = "black-24.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:64e60a7edd71fd542a10a9643bf369bfd2644de95ec71e86790b063aa02ff745"}, + {file = "black-24.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5cd5b4f76056cecce3e69b0d4c228326d2595f506797f40b9233424e2524c070"}, + {file = "black-24.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:64578cf99b6b46a6301bc28bdb89f9d6f9b592b1c5837818a177c98525dbe397"}, + {file = "black-24.4.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f95cece33329dc4aa3b0e1a771c41075812e46cf3d6e3f1dfe3d91ff09826ed2"}, + {file = "black-24.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4396ca365a4310beef84d446ca5016f671b10f07abdba3e4e4304218d2c71d33"}, + {file = "black-24.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:44d99dfdf37a2a00a6f7a8dcbd19edf361d056ee51093b2445de7ca09adac965"}, + {file = "black-24.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:21f9407063ec71c5580b8ad975653c66508d6a9f57bd008bb8691d273705adcd"}, + {file = "black-24.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:652e55bb722ca026299eb74e53880ee2315b181dfdd44dca98e43448620ddec1"}, + {file = "black-24.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7f2966b9b2b3b7104fca9d75b2ee856fe3fdd7ed9e47c753a4bb1a675f2caab8"}, + {file = "black-24.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1bb9ca06e556a09f7f7177bc7cb604e5ed2d2df1e9119e4f7d2f1f7071c32e5d"}, + {file = "black-24.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:d4e71cdebdc8efeb6deaf5f2deb28325f8614d48426bed118ecc2dcaefb9ebf3"}, + {file = "black-24.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6644f97a7ef6f401a150cca551a1ff97e03c25d8519ee0bbc9b0058772882665"}, + {file = "black-24.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:75a2d0b4f5eb81f7eebc31f788f9830a6ce10a68c91fbe0fade34fff7a2836e6"}, + {file = "black-24.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb949f56a63c5e134dfdca12091e98ffb5fd446293ebae123d10fc1abad00b9e"}, + {file = "black-24.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:7852b05d02b5b9a8c893ab95863ef8986e4dda29af80bbbda94d7aee1abf8702"}, + {file = "black-24.4.0-py3-none-any.whl", hash = "sha256:74eb9b5420e26b42c00a3ff470dc0cd144b80a766128b1771d07643165e08d0e"}, + {file = "black-24.4.0.tar.gz", hash = "sha256:f07b69fda20578367eaebbd670ff8fc653ab181e1ff95d84497f9fa20e7d0641"}, ] [package.dependencies] click = ">=8.0.0" mypy-extensions = ">=0.4.3" +packaging = ">=22.0" pathspec = ">=0.9.0" platformdirs = ">=2" -tomli = {version = ">=1.1.0", markers = "python_full_version < \"3.11.0a7\""} -typing-extensions = {version = ">=3.10.0.0", markers = "python_version < \"3.10\""} +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} +typing-extensions = {version = ">=4.0.1", markers = "python_version < \"3.11\""} [package.extras] colorama = ["colorama (>=0.4.3)"] -d = ["aiohttp (>=3.7.4)"] +d = ["aiohttp (>=3.7.4)", "aiohttp (>=3.7.4,!=3.9.0)"] jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] uvloop = ["uvloop (>=0.15.2)"] @@ -123,7 +128,6 @@ uvloop = ["uvloop (>=0.15.2)"] name = "cachetools" version = "5.3.2" description = "Extensible memoizing collections and decorators" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -133,21 +137,19 @@ files = [ [[package]] name = "certifi" -version = "2023.11.17" +version = "2024.8.30" description = "Python package for providing Mozilla's CA Bundle." -category = "main" optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2023.11.17-py3-none-any.whl", hash = "sha256:e036ab49d5b79556f99cfc2d9320b34cfbe5be05c5871b51de9329f0603b0474"}, - {file = "certifi-2023.11.17.tar.gz", hash = "sha256:9b469f3a900bf28dc19b8cfbf8019bf47f7fdd1a65a1d4ffb98fc14166beb4d1"}, + {file = "certifi-2024.8.30-py3-none-any.whl", hash = "sha256:922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8"}, + {file = "certifi-2024.8.30.tar.gz", hash = "sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9"}, ] [[package]] name = "cffi" version = "1.16.0" description = "Foreign Function Interface for Python calling C code." -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -212,7 +214,6 @@ pycparser = "*" name = "cfgv" version = "3.4.0" description = "Validate configuration and produce human readable error messages." -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -224,7 +225,6 @@ files = [ name = "charset-normalizer" version = "3.3.2" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -category = "main" optional = false python-versions = ">=3.7.0" files = [ @@ -324,7 +324,6 @@ files = [ name = "click" version = "8.1.7" description = "Composable command line interface toolkit" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -339,7 +338,6 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""} name = "colorama" version = "0.4.6" description = "Cross-platform colored terminal text." -category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" files = [ @@ -351,7 +349,6 @@ files = [ name = "coverage" version = "5.5" description = "Code coverage measurement for Python" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4" files = [ @@ -414,55 +411,57 @@ toml = ["toml"] [[package]] name = "cryptography" -version = "41.0.7" +version = "43.0.1" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." -category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "cryptography-41.0.7-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:3c78451b78313fa81607fa1b3f1ae0a5ddd8014c38a02d9db0616133987b9cdf"}, - {file = "cryptography-41.0.7-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:928258ba5d6f8ae644e764d0f996d61a8777559f72dfeb2eea7e2fe0ad6e782d"}, - {file = "cryptography-41.0.7-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5a1b41bc97f1ad230a41657d9155113c7521953869ae57ac39ac7f1bb471469a"}, - {file = "cryptography-41.0.7-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:841df4caa01008bad253bce2a6f7b47f86dc9f08df4b433c404def869f590a15"}, - {file = "cryptography-41.0.7-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:5429ec739a29df2e29e15d082f1d9ad683701f0ec7709ca479b3ff2708dae65a"}, - {file = "cryptography-41.0.7-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:43f2552a2378b44869fe8827aa19e69512e3245a219104438692385b0ee119d1"}, - {file = "cryptography-41.0.7-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:af03b32695b24d85a75d40e1ba39ffe7db7ffcb099fe507b39fd41a565f1b157"}, - {file = "cryptography-41.0.7-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:49f0805fc0b2ac8d4882dd52f4a3b935b210935d500b6b805f321addc8177406"}, - {file = "cryptography-41.0.7-cp37-abi3-win32.whl", hash = "sha256:f983596065a18a2183e7f79ab3fd4c475205b839e02cbc0efbbf9666c4b3083d"}, - {file = "cryptography-41.0.7-cp37-abi3-win_amd64.whl", hash = "sha256:90452ba79b8788fa380dfb587cca692976ef4e757b194b093d845e8d99f612f2"}, - {file = "cryptography-41.0.7-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:079b85658ea2f59c4f43b70f8119a52414cdb7be34da5d019a77bf96d473b960"}, - {file = "cryptography-41.0.7-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:b640981bf64a3e978a56167594a0e97db71c89a479da8e175d8bb5be5178c003"}, - {file = "cryptography-41.0.7-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:e3114da6d7f95d2dee7d3f4eec16dacff819740bbab931aff8648cb13c5ff5e7"}, - {file = "cryptography-41.0.7-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:d5ec85080cce7b0513cfd233914eb8b7bbd0633f1d1703aa28d1dd5a72f678ec"}, - {file = "cryptography-41.0.7-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:7a698cb1dac82c35fcf8fe3417a3aaba97de16a01ac914b89a0889d364d2f6be"}, - {file = "cryptography-41.0.7-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:37a138589b12069efb424220bf78eac59ca68b95696fc622b6ccc1c0a197204a"}, - {file = "cryptography-41.0.7-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:68a2dec79deebc5d26d617bfdf6e8aab065a4f34934b22d3b5010df3ba36612c"}, - {file = "cryptography-41.0.7-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:09616eeaef406f99046553b8a40fbf8b1e70795a91885ba4c96a70793de5504a"}, - {file = "cryptography-41.0.7-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:48a0476626da912a44cc078f9893f292f0b3e4c739caf289268168d8f4702a39"}, - {file = "cryptography-41.0.7-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:c7f3201ec47d5207841402594f1d7950879ef890c0c495052fa62f58283fde1a"}, - {file = "cryptography-41.0.7-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c5ca78485a255e03c32b513f8c2bc39fedb7f5c5f8535545bdc223a03b24f248"}, - {file = "cryptography-41.0.7-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:d6c391c021ab1f7a82da5d8d0b3cee2f4b2c455ec86c8aebbc84837a631ff309"}, - {file = "cryptography-41.0.7.tar.gz", hash = "sha256:13f93ce9bea8016c253b34afc6bd6a75993e5c40672ed5405a9c832f0d4a00bc"}, -] - -[package.dependencies] -cffi = ">=1.12" + {file = "cryptography-43.0.1-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:8385d98f6a3bf8bb2d65a73e17ed87a3ba84f6991c155691c51112075f9ffc5d"}, + {file = "cryptography-43.0.1-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:27e613d7077ac613e399270253259d9d53872aaf657471473ebfc9a52935c062"}, + {file = "cryptography-43.0.1-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68aaecc4178e90719e95298515979814bda0cbada1256a4485414860bd7ab962"}, + {file = "cryptography-43.0.1-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:de41fd81a41e53267cb020bb3a7212861da53a7d39f863585d13ea11049cf277"}, + {file = "cryptography-43.0.1-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:f98bf604c82c416bc829e490c700ca1553eafdf2912a91e23a79d97d9801372a"}, + {file = "cryptography-43.0.1-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:61ec41068b7b74268fa86e3e9e12b9f0c21fcf65434571dbb13d954bceb08042"}, + {file = "cryptography-43.0.1-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:014f58110f53237ace6a408b5beb6c427b64e084eb451ef25a28308270086494"}, + {file = "cryptography-43.0.1-cp37-abi3-win32.whl", hash = "sha256:2bd51274dcd59f09dd952afb696bf9c61a7a49dfc764c04dd33ef7a6b502a1e2"}, + {file = "cryptography-43.0.1-cp37-abi3-win_amd64.whl", hash = "sha256:666ae11966643886c2987b3b721899d250855718d6d9ce41b521252a17985f4d"}, + {file = "cryptography-43.0.1-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:ac119bb76b9faa00f48128b7f5679e1d8d437365c5d26f1c2c3f0da4ce1b553d"}, + {file = "cryptography-43.0.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1bbcce1a551e262dfbafb6e6252f1ae36a248e615ca44ba302df077a846a8806"}, + {file = "cryptography-43.0.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58d4e9129985185a06d849aa6df265bdd5a74ca6e1b736a77959b498e0505b85"}, + {file = "cryptography-43.0.1-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:d03a475165f3134f773d1388aeb19c2d25ba88b6a9733c5c590b9ff7bbfa2e0c"}, + {file = "cryptography-43.0.1-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:511f4273808ab590912a93ddb4e3914dfd8a388fed883361b02dea3791f292e1"}, + {file = "cryptography-43.0.1-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:80eda8b3e173f0f247f711eef62be51b599b5d425c429b5d4ca6a05e9e856baa"}, + {file = "cryptography-43.0.1-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:38926c50cff6f533f8a2dae3d7f19541432610d114a70808f0926d5aaa7121e4"}, + {file = "cryptography-43.0.1-cp39-abi3-win32.whl", hash = "sha256:a575913fb06e05e6b4b814d7f7468c2c660e8bb16d8d5a1faf9b33ccc569dd47"}, + {file = "cryptography-43.0.1-cp39-abi3-win_amd64.whl", hash = "sha256:d75601ad10b059ec832e78823b348bfa1a59f6b8d545db3a24fd44362a1564cb"}, + {file = "cryptography-43.0.1-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ea25acb556320250756e53f9e20a4177515f012c9eaea17eb7587a8c4d8ae034"}, + {file = "cryptography-43.0.1-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:c1332724be35d23a854994ff0b66530119500b6053d0bd3363265f7e5e77288d"}, + {file = "cryptography-43.0.1-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:fba1007b3ef89946dbbb515aeeb41e30203b004f0b4b00e5e16078b518563289"}, + {file = "cryptography-43.0.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:5b43d1ea6b378b54a1dc99dd8a2b5be47658fe9a7ce0a58ff0b55f4b43ef2b84"}, + {file = "cryptography-43.0.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:88cce104c36870d70c49c7c8fd22885875d950d9ee6ab54df2745f83ba0dc365"}, + {file = "cryptography-43.0.1-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:9d3cdb25fa98afdd3d0892d132b8d7139e2c087da1712041f6b762e4f807cc96"}, + {file = "cryptography-43.0.1-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:e710bf40870f4db63c3d7d929aa9e09e4e7ee219e703f949ec4073b4294f6172"}, + {file = "cryptography-43.0.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7c05650fe8023c5ed0d46793d4b7d7e6cd9c04e68eabe5b0aeea836e37bdcec2"}, + {file = "cryptography-43.0.1.tar.gz", hash = "sha256:203e92a75716d8cfb491dc47c79e17d0d9207ccffcbcb35f598fbe463ae3444d"}, +] + +[package.dependencies] +cffi = {version = ">=1.12", markers = "platform_python_implementation != \"PyPy\""} [package.extras] docs = ["sphinx (>=5.3.0)", "sphinx-rtd-theme (>=1.1.1)"] -docstest = ["pyenchant (>=1.6.11)", "sphinxcontrib-spelling (>=4.0.1)", "twine (>=1.12.0)"] +docstest = ["pyenchant (>=1.6.11)", "readme-renderer", "sphinxcontrib-spelling (>=4.0.1)"] nox = ["nox"] -pep8test = ["black", "check-sdist", "mypy", "ruff"] +pep8test = ["check-sdist", "click", "mypy", "ruff"] sdist = ["build"] ssh = ["bcrypt (>=3.1.5)"] -test = ["pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-xdist"] +test = ["certifi", "cryptography-vectors (==43.0.1)", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-xdist"] test-randomorder = ["pytest-randomly"] [[package]] name = "cssselect2" version = "0.7.0" description = "CSS selectors for Python ElementTree" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -482,7 +481,6 @@ test = ["flake8", "isort", "pytest"] name = "decorator" version = "5.1.1" description = "Decorators for Humans" -category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -494,7 +492,6 @@ files = [ name = "distlib" version = "0.3.7" description = "Distribution utilities" -category = "dev" optional = false python-versions = "*" files = [ @@ -504,14 +501,13 @@ files = [ [[package]] name = "django" -version = "3.2.23" +version = "3.2.25" description = "A high-level Python Web framework that encourages rapid development and clean, pragmatic design." -category = "main" optional = false python-versions = ">=3.6" files = [ - {file = "Django-3.2.23-py3-none-any.whl", hash = "sha256:d48608d5f62f2c1e260986835db089fa3b79d6f58510881d316b8d88345ae6e1"}, - {file = "Django-3.2.23.tar.gz", hash = "sha256:82968f3640e29ef4a773af2c28448f5f7a08d001c6ac05b32d02aeee6509508b"}, + {file = "Django-3.2.25-py3-none-any.whl", hash = "sha256:a52ea7fcf280b16f7b739cec38fa6d3f8953a5456986944c3ca97e79882b4e38"}, + {file = "Django-3.2.25.tar.gz", hash = "sha256:7ca38a78654aee72378594d63e51636c04b8e28574f5505dff630895b5472777"}, ] [package.dependencies] @@ -527,7 +523,6 @@ bcrypt = ["bcrypt"] name = "django-admin-sortable2" version = "1.0.4" description = "Generic drag-and-drop sorting for the List, the Stacked- and the Tabular-Inlines Views in the Django Admin" -category = "main" optional = false python-versions = "*" files = [ @@ -542,7 +537,6 @@ Django = ">=2.2,<4.1" name = "django-anymail" version = "8.6" description = "Django email backends and webhooks for Amazon SES, Mailgun, Mailjet, Mandrill, Postal, Postmark, SendGrid, SendinBlue, and SparkPost" -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -561,14 +555,13 @@ postal = ["cryptography"] [[package]] name = "django-ckeditor" -version = "6.7.0" +version = "6.7.1" description = "Django admin CKEditor integration." -category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "django-ckeditor-6.7.0.tar.gz", hash = "sha256:0489f7a6ae93360d328f77cea17c04891103cbdfa6c962af386bbe47e811671b"}, - {file = "django_ckeditor-6.7.0-py3-none-any.whl", hash = "sha256:73399fb8f56f565e7519b57adbd7c585623db2cdc8c75666f56918d3eecf7906"}, + {file = "django-ckeditor-6.7.1.tar.gz", hash = "sha256:7144f9ead662306266c728912487313b3b87ba2abf9dbb82c447f662ce25d1f7"}, + {file = "django_ckeditor-6.7.1-py3-none-any.whl", hash = "sha256:55b5f9ce3af47e3c8a8ed37d42be8439da2a664d6e571c2247c1db5c96459dd7"}, ] [package.dependencies] @@ -579,7 +572,6 @@ django-js-asset = ">=2.0" name = "django-cors-headers" version = "3.14.0" description = "django-cors-headers is a Django application for handling the server headers required for Cross-Origin Resource Sharing (CORS)." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -594,7 +586,6 @@ Django = ">=3.2" name = "django-debug-toolbar" version = "4.2.0" description = "A configurable set of panels that display various debug information about the current request/response." -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -610,7 +601,6 @@ sqlparse = ">=0.2" name = "django-environ" version = "0.8.1" description = "A package that allows you to utilize 12factor inspired environment variables to configure your Django application." -category = "main" optional = false python-versions = ">=3.4,<4" files = [ @@ -619,15 +609,14 @@ files = [ ] [package.extras] -develop = ["coverage[toml] (>=5.0a4)", "furo (>=2021.8.17b43,<2021.9.0)", "pytest (>=4.6.11)", "sphinx (>=3.5.0)", "sphinx-notfound-page"] -docs = ["furo (>=2021.8.17b43,<2021.9.0)", "sphinx (>=3.5.0)", "sphinx-notfound-page"] +develop = ["coverage[toml] (>=5.0a4)", "furo (>=2021.8.17b43,<2021.9.dev0)", "pytest (>=4.6.11)", "sphinx (>=3.5.0)", "sphinx-notfound-page"] +docs = ["furo (>=2021.8.17b43,<2021.9.dev0)", "sphinx (>=3.5.0)", "sphinx-notfound-page"] testing = ["coverage[toml] (>=5.0a4)", "pytest (>=4.6.11)"] [[package]] name = "django-extensions" version = "3.2.3" description = "Extensions for Django" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -642,7 +631,6 @@ Django = ">=3.2" name = "django-filer" version = "3.1.1" description = "A file management application for django that makes handling of files and images a breeze." -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -662,7 +650,6 @@ heif = ["pillow-heif"] name = "django-filter" version = "21.1" description = "Django-filter is a reusable Django application for allowing users to filter querysets dynamically." -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -677,7 +664,6 @@ Django = ">=2.2" name = "django-js-asset" version = "2.1.0" description = "script tag with additional attributes for django.forms.Media" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -695,7 +681,6 @@ tests = ["coverage"] name = "django-phonenumber-field" version = "5.2.0" description = "An international phone number field for django models." -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -715,7 +700,6 @@ phonenumberslite = ["phonenumberslite (>=7.0.2)"] name = "django-polymorphic" version = "3.1.0" description = "Seamless polymorphic inheritance for Django models" -category = "main" optional = false python-versions = "*" files = [ @@ -726,23 +710,10 @@ files = [ [package.dependencies] Django = ">=2.1" -[[package]] -name = "django-private-storage" -version = "3.1.1" -description = "Private media file storage for Django projects" -category = "main" -optional = false -python-versions = "*" -files = [ - {file = "django-private-storage-3.1.1.tar.gz", hash = "sha256:9e8f9e88818b04895cf4be6c86f1255c4befa5466f7d25e1be3a7c2784e9b275"}, - {file = "django_private_storage-3.1.1-py3-none-any.whl", hash = "sha256:fcb14c0f56e1fb5e1984afe689e6a92d79c1347dd5329aa50b53ecec4e517a52"}, -] - [[package]] name = "django-rest-multiple-models" version = "2.1.3" description = "Multiple model/queryset view (and mixin) for Django Rest Framework" -category = "main" optional = false python-versions = "*" files = [ @@ -754,7 +725,6 @@ files = [ name = "djangorestframework" version = "3.13.1" description = "Web APIs for Django, made easy." -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -770,7 +740,6 @@ pytz = "*" name = "drf-spectacular" version = "0.22.1" description = "Sane and flexible OpenAPI 3 schema generation for Django REST framework" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -794,7 +763,6 @@ sidecar = ["drf-spectacular-sidecar"] name = "easy-thumbnails" version = "2.8.5" description = "Easy thumbnails for Django" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -815,7 +783,6 @@ svg = ["reportlab", "svglib"] name = "exceptiongroup" version = "1.2.0" description = "Backport of PEP 654 (exception groups)" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -830,7 +797,6 @@ test = ["pytest (>=6)"] name = "executing" version = "2.0.1" description = "Get the currently executing AST node of a frame, and other information" -category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -845,7 +811,6 @@ tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipyth name = "factory-boy" version = "3.3.0" description = "A versatile test fixtures replacement based on thoughtbot's factory_bot for Ruby." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -864,7 +829,6 @@ doc = ["Sphinx", "sphinx-rtd-theme", "sphinxcontrib-spelling"] name = "faker" version = "20.1.0" description = "Faker is a Python package that generates fake data for you." -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -879,7 +843,6 @@ python-dateutil = ">=2.4" name = "filelock" version = "3.13.1" description = "A platform independent file lock." -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -896,7 +859,6 @@ typing = ["typing-extensions (>=4.8)"] name = "flake8" version = "3.9.2" description = "the modular source code checker: pep8 pyflakes and co" -category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" files = [ @@ -913,7 +875,6 @@ pyflakes = ">=2.3.0,<2.4.0" name = "flake8-docstrings" version = "1.7.0" description = "Extension for flake8 which uses pydocstyle to check docstrings" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -929,7 +890,6 @@ pydocstyle = ">=2.1" name = "freezegun" version = "1.3.1" description = "Let your Python tests travel through time" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -944,7 +904,6 @@ python-dateutil = ">=2.7" name = "gitdb" version = "4.0.11" description = "Git Object Database" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -957,27 +916,25 @@ smmap = ">=3.0.1,<6" [[package]] name = "gitpython" -version = "3.1.40" +version = "3.1.41" description = "GitPython is a Python library used to interact with Git repositories" -category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "GitPython-3.1.40-py3-none-any.whl", hash = "sha256:cf14627d5a8049ffbf49915732e5eddbe8134c3bdb9d476e6182b676fc573f8a"}, - {file = "GitPython-3.1.40.tar.gz", hash = "sha256:22b126e9ffb671fdd0c129796343a02bf67bf2994b35449ffc9321aa755e18a4"}, + {file = "GitPython-3.1.41-py3-none-any.whl", hash = "sha256:c36b6634d069b3f719610175020a9aed919421c87552185b085e04fbbdb10b7c"}, + {file = "GitPython-3.1.41.tar.gz", hash = "sha256:ed66e624884f76df22c8e16066d567aaa5a37d5b5fa19db2c6df6f7156db9048"}, ] [package.dependencies] gitdb = ">=4.0.1,<5" [package.extras] -test = ["black", "coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock", "mypy", "pre-commit", "pytest", "pytest-cov", "pytest-instafail", "pytest-subtests", "pytest-sugar"] +test = ["black", "coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock", "mypy", "pre-commit", "pytest (>=7.3.1)", "pytest-cov", "pytest-instafail", "pytest-mock", "pytest-sugar", "sumtypes"] [[package]] name = "google-api-core" version = "2.14.0" description = "Google API client core library" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1000,7 +957,6 @@ grpcio-gcp = ["grpcio-gcp (>=0.2.2,<1.0.dev0)"] name = "google-api-python-client" version = "2.109.0" description = "Google API Client Library for Python" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1009,7 +965,7 @@ files = [ ] [package.dependencies] -google-api-core = ">=1.31.5,<2.0.0 || >2.3.0,<3.0.0.dev0" +google-api-core = ">=1.31.5,<2.0.dev0 || >2.3.0,<3.0.0.dev0" google-auth = ">=1.19.0,<3.0.0.dev0" google-auth-httplib2 = ">=0.1.0" httplib2 = ">=0.15.0,<1.dev0" @@ -1019,7 +975,6 @@ uritemplate = ">=3.0.1,<5" name = "google-auth" version = "2.25.1" description = "Google Authentication Library" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1043,7 +998,6 @@ requests = ["requests (>=2.20.0,<3.0.0.dev0)"] name = "google-auth-httplib2" version = "0.1.1" description = "Google Authentication Library: httplib2 transport" -category = "main" optional = false python-versions = "*" files = [ @@ -1059,7 +1013,6 @@ httplib2 = ">=0.19.0" name = "googleapis-common-protos" version = "1.61.0" description = "Common protobufs used in Google APIs" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1075,30 +1028,29 @@ grpc = ["grpcio (>=1.44.0,<2.0.0.dev0)"] [[package]] name = "gunicorn" -version = "20.1.0" +version = "23.0.0" description = "WSGI HTTP Server for UNIX" -category = "main" optional = false -python-versions = ">=3.5" +python-versions = ">=3.7" files = [ - {file = "gunicorn-20.1.0-py3-none-any.whl", hash = "sha256:9dcc4547dbb1cb284accfb15ab5667a0e5d1881cc443e0677b4882a4067a807e"}, - {file = "gunicorn-20.1.0.tar.gz", hash = "sha256:e0a968b5ba15f8a328fdfd7ab1fcb5af4470c28aaf7e55df02a99bc13138e6e8"}, + {file = "gunicorn-23.0.0-py3-none-any.whl", hash = "sha256:ec400d38950de4dfd418cff8328b2c8faed0edb0d517d3394e457c317908ca4d"}, + {file = "gunicorn-23.0.0.tar.gz", hash = "sha256:f014447a0101dc57e294f6c18ca6b40227a4c90e9bdb586042628030cba004ec"}, ] [package.dependencies] -setuptools = ">=3.0" +packaging = "*" [package.extras] -eventlet = ["eventlet (>=0.24.1)"] +eventlet = ["eventlet (>=0.24.1,!=0.36.0)"] gevent = ["gevent (>=1.4.0)"] setproctitle = ["setproctitle"] +testing = ["coverage", "eventlet", "gevent", "pytest", "pytest-cov"] tornado = ["tornado (>=0.2)"] [[package]] name = "html5lib" version = "1.1" description = "HTML parser based on the WHATWG HTML specification" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -1120,7 +1072,6 @@ lxml = ["lxml"] name = "httplib2" version = "0.22.0" description = "A comprehensive HTTP client library." -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -1135,7 +1086,6 @@ pyparsing = {version = ">=2.4.2,<3.0.0 || >3.0.0,<3.0.1 || >3.0.1,<3.0.2 || >3.0 name = "identify" version = "2.5.32" description = "File identification library for Python" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -1148,21 +1098,19 @@ license = ["ukkonen"] [[package]] name = "idna" -version = "3.6" +version = "3.7" description = "Internationalized Domain Names in Applications (IDNA)" -category = "main" optional = false python-versions = ">=3.5" files = [ - {file = "idna-3.6-py3-none-any.whl", hash = "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f"}, - {file = "idna-3.6.tar.gz", hash = "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca"}, + {file = "idna-3.7-py3-none-any.whl", hash = "sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0"}, + {file = "idna-3.7.tar.gz", hash = "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc"}, ] [[package]] name = "inflection" version = "0.5.1" description = "A port of Ruby on Rails inflector to Python" -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -1174,7 +1122,6 @@ files = [ name = "iniconfig" version = "2.0.0" description = "brain-dead simple config-ini parsing" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1186,7 +1133,6 @@ files = [ name = "ipython" version = "8.18.1" description = "IPython: Productive Interactive Computing" -category = "dev" optional = false python-versions = ">=3.9" files = [ @@ -1224,7 +1170,6 @@ test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.22)", "pa name = "isort" version = "5.12.0" description = "A Python utility / library to sort Python imports." -category = "dev" optional = false python-versions = ">=3.8.0" files = [ @@ -1242,7 +1187,6 @@ requirements-deprecated-finder = ["pip-api", "pipreqs"] name = "jedi" version = "0.19.1" description = "An autocompletion tool for Python that can be used for text editors." -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -1262,7 +1206,6 @@ testing = ["Django", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] name = "jsonschema" version = "4.20.0" description = "An implementation of JSON Schema validation for Python" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1284,7 +1227,6 @@ format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339- name = "jsonschema-specifications" version = "2023.11.2" description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1299,7 +1241,6 @@ referencing = ">=0.31.0" name = "lxml" version = "4.9.3" description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, != 3.4.*" files = [ @@ -1407,7 +1348,6 @@ source = ["Cython (>=0.29.35)"] name = "markupsafe" version = "2.1.3" description = "Safely add untrusted strings to HTML/XML markup." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1467,7 +1407,6 @@ files = [ name = "matplotlib-inline" version = "0.1.6" description = "Inline Matplotlib backend for Jupyter" -category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -1482,7 +1421,6 @@ traitlets = "*" name = "mccabe" version = "0.6.1" description = "McCabe checker, plugin for flake8" -category = "main" optional = false python-versions = "*" files = [ @@ -1494,7 +1432,6 @@ files = [ name = "mypy-extensions" version = "1.0.0" description = "Type system extensions for programs checked with the mypy type checker." -category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -1506,7 +1443,6 @@ files = [ name = "nodeenv" version = "1.8.0" description = "Node.js virtual environment builder" -category = "dev" optional = false python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" files = [ @@ -1521,7 +1457,6 @@ setuptools = "*" name = "oscrypto" version = "1.3.0" description = "TLS (SSL) sockets, key generation, encryption, decryption, signing, verification and KDFs using the OS crypto libraries. Does not require a compiler, and relies on the OS for patching. Works on Windows, OS X and Linux/BSD." -category = "main" optional = false python-versions = "*" files = [ @@ -1536,7 +1471,6 @@ asn1crypto = ">=1.5.1" name = "packaging" version = "23.2" description = "Core utilities for Python packages" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1548,7 +1482,6 @@ files = [ name = "parso" version = "0.8.3" description = "A Python Parser" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -1564,7 +1497,6 @@ testing = ["docopt", "pytest (<6.0.0)"] name = "pathspec" version = "0.11.2" description = "Utility library for gitignore style pattern matching of file paths." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1576,7 +1508,6 @@ files = [ name = "pexpect" version = "4.9.0" description = "Pexpect allows easy control of interactive console applications." -category = "dev" optional = false python-versions = "*" files = [ @@ -1591,7 +1522,6 @@ ptyprocess = ">=0.5" name = "phonenumbers" version = "8.13.26" description = "Python version of Google's common library for parsing, formatting, storing and validating international phone numbers." -category = "main" optional = false python-versions = "*" files = [ @@ -1601,89 +1531,105 @@ files = [ [[package]] name = "pillow" -version = "10.1.0" +version = "10.3.0" description = "Python Imaging Library (Fork)" -category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "Pillow-10.1.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:1ab05f3db77e98f93964697c8efc49c7954b08dd61cff526b7f2531a22410106"}, - {file = "Pillow-10.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6932a7652464746fcb484f7fc3618e6503d2066d853f68a4bd97193a3996e273"}, - {file = "Pillow-10.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5f63b5a68daedc54c7c3464508d8c12075e56dcfbd42f8c1bf40169061ae666"}, - {file = "Pillow-10.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0949b55eb607898e28eaccb525ab104b2d86542a85c74baf3a6dc24002edec2"}, - {file = "Pillow-10.1.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:ae88931f93214777c7a3aa0a8f92a683f83ecde27f65a45f95f22d289a69e593"}, - {file = "Pillow-10.1.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:b0eb01ca85b2361b09480784a7931fc648ed8b7836f01fb9241141b968feb1db"}, - {file = "Pillow-10.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d27b5997bdd2eb9fb199982bb7eb6164db0426904020dc38c10203187ae2ff2f"}, - {file = "Pillow-10.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7df5608bc38bd37ef585ae9c38c9cd46d7c81498f086915b0f97255ea60c2818"}, - {file = "Pillow-10.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:41f67248d92a5e0a2076d3517d8d4b1e41a97e2df10eb8f93106c89107f38b57"}, - {file = "Pillow-10.1.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:1fb29c07478e6c06a46b867e43b0bcdb241b44cc52be9bc25ce5944eed4648e7"}, - {file = "Pillow-10.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2cdc65a46e74514ce742c2013cd4a2d12e8553e3a2563c64879f7c7e4d28bce7"}, - {file = "Pillow-10.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50d08cd0a2ecd2a8657bd3d82c71efd5a58edb04d9308185d66c3a5a5bed9610"}, - {file = "Pillow-10.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:062a1610e3bc258bff2328ec43f34244fcec972ee0717200cb1425214fe5b839"}, - {file = "Pillow-10.1.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:61f1a9d247317fa08a308daaa8ee7b3f760ab1809ca2da14ecc88ae4257d6172"}, - {file = "Pillow-10.1.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:a646e48de237d860c36e0db37ecaecaa3619e6f3e9d5319e527ccbc8151df061"}, - {file = "Pillow-10.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:47e5bf85b80abc03be7455c95b6d6e4896a62f6541c1f2ce77a7d2bb832af262"}, - {file = "Pillow-10.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a92386125e9ee90381c3369f57a2a50fa9e6aa8b1cf1d9c4b200d41a7dd8e992"}, - {file = "Pillow-10.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:0f7c276c05a9767e877a0b4c5050c8bee6a6d960d7f0c11ebda6b99746068c2a"}, - {file = "Pillow-10.1.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:a89b8312d51715b510a4fe9fc13686283f376cfd5abca8cd1c65e4c76e21081b"}, - {file = "Pillow-10.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:00f438bb841382b15d7deb9a05cc946ee0f2c352653c7aa659e75e592f6fa17d"}, - {file = "Pillow-10.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d929a19f5469b3f4df33a3df2983db070ebb2088a1e145e18facbc28cae5b27"}, - {file = "Pillow-10.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a92109192b360634a4489c0c756364c0c3a2992906752165ecb50544c251312"}, - {file = "Pillow-10.1.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:0248f86b3ea061e67817c47ecbe82c23f9dd5d5226200eb9090b3873d3ca32de"}, - {file = "Pillow-10.1.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:9882a7451c680c12f232a422730f986a1fcd808da0fd428f08b671237237d651"}, - {file = "Pillow-10.1.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:1c3ac5423c8c1da5928aa12c6e258921956757d976405e9467c5f39d1d577a4b"}, - {file = "Pillow-10.1.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:806abdd8249ba3953c33742506fe414880bad78ac25cc9a9b1c6ae97bedd573f"}, - {file = "Pillow-10.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:eaed6977fa73408b7b8a24e8b14e59e1668cfc0f4c40193ea7ced8e210adf996"}, - {file = "Pillow-10.1.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:fe1e26e1ffc38be097f0ba1d0d07fcade2bcfd1d023cda5b29935ae8052bd793"}, - {file = "Pillow-10.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7a7e3daa202beb61821c06d2517428e8e7c1aab08943e92ec9e5755c2fc9ba5e"}, - {file = "Pillow-10.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:24fadc71218ad2b8ffe437b54876c9382b4a29e030a05a9879f615091f42ffc2"}, - {file = "Pillow-10.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa1d323703cfdac2036af05191b969b910d8f115cf53093125e4058f62012c9a"}, - {file = "Pillow-10.1.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:912e3812a1dbbc834da2b32299b124b5ddcb664ed354916fd1ed6f193f0e2d01"}, - {file = "Pillow-10.1.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:7dbaa3c7de82ef37e7708521be41db5565004258ca76945ad74a8e998c30af8d"}, - {file = "Pillow-10.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9d7bc666bd8c5a4225e7ac71f2f9d12466ec555e89092728ea0f5c0c2422ea80"}, - {file = "Pillow-10.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:baada14941c83079bf84c037e2d8b7506ce201e92e3d2fa0d1303507a8538212"}, - {file = "Pillow-10.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:2ef6721c97894a7aa77723740a09547197533146fba8355e86d6d9a4a1056b14"}, - {file = "Pillow-10.1.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:0a026c188be3b443916179f5d04548092e253beb0c3e2ee0a4e2cdad72f66099"}, - {file = "Pillow-10.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:04f6f6149f266a100374ca3cc368b67fb27c4af9f1cc8cb6306d849dcdf12616"}, - {file = "Pillow-10.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb40c011447712d2e19cc261c82655f75f32cb724788df315ed992a4d65696bb"}, - {file = "Pillow-10.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a8413794b4ad9719346cd9306118450b7b00d9a15846451549314a58ac42219"}, - {file = "Pillow-10.1.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:c9aeea7b63edb7884b031a35305629a7593272b54f429a9869a4f63a1bf04c34"}, - {file = "Pillow-10.1.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:b4005fee46ed9be0b8fb42be0c20e79411533d1fd58edabebc0dd24626882cfd"}, - {file = "Pillow-10.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4d0152565c6aa6ebbfb1e5d8624140a440f2b99bf7afaafbdbf6430426497f28"}, - {file = "Pillow-10.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d921bc90b1defa55c9917ca6b6b71430e4286fc9e44c55ead78ca1a9f9eba5f2"}, - {file = "Pillow-10.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:cfe96560c6ce2f4c07d6647af2d0f3c54cc33289894ebd88cfbb3bcd5391e256"}, - {file = "Pillow-10.1.0-pp310-pypy310_pp73-macosx_10_10_x86_64.whl", hash = "sha256:937bdc5a7f5343d1c97dc98149a0be7eb9704e937fe3dc7140e229ae4fc572a7"}, - {file = "Pillow-10.1.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1c25762197144e211efb5f4e8ad656f36c8d214d390585d1d21281f46d556ba"}, - {file = "Pillow-10.1.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:afc8eef765d948543a4775f00b7b8c079b3321d6b675dde0d02afa2ee23000b4"}, - {file = "Pillow-10.1.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:883f216eac8712b83a63f41b76ddfb7b2afab1b74abbb413c5df6680f071a6b9"}, - {file = "Pillow-10.1.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:b920e4d028f6442bea9a75b7491c063f0b9a3972520731ed26c83e254302eb1e"}, - {file = "Pillow-10.1.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c41d960babf951e01a49c9746f92c5a7e0d939d1652d7ba30f6b3090f27e412"}, - {file = "Pillow-10.1.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:1fafabe50a6977ac70dfe829b2d5735fd54e190ab55259ec8aea4aaea412fa0b"}, - {file = "Pillow-10.1.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:3b834f4b16173e5b92ab6566f0473bfb09f939ba14b23b8da1f54fa63e4b623f"}, - {file = "Pillow-10.1.0.tar.gz", hash = "sha256:e6bf8de6c36ed96c86ea3b6e1d5273c53f46ef518a062464cd7ef5dd2cf92e38"}, + {file = "pillow-10.3.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:90b9e29824800e90c84e4022dd5cc16eb2d9605ee13f05d47641eb183cd73d45"}, + {file = "pillow-10.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a2c405445c79c3f5a124573a051062300936b0281fee57637e706453e452746c"}, + {file = "pillow-10.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:78618cdbccaa74d3f88d0ad6cb8ac3007f1a6fa5c6f19af64b55ca170bfa1edf"}, + {file = "pillow-10.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:261ddb7ca91fcf71757979534fb4c128448b5b4c55cb6152d280312062f69599"}, + {file = "pillow-10.3.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:ce49c67f4ea0609933d01c0731b34b8695a7a748d6c8d186f95e7d085d2fe475"}, + {file = "pillow-10.3.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:b14f16f94cbc61215115b9b1236f9c18403c15dd3c52cf629072afa9d54c1cbf"}, + {file = "pillow-10.3.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d33891be6df59d93df4d846640f0e46f1a807339f09e79a8040bc887bdcd7ed3"}, + {file = "pillow-10.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b50811d664d392f02f7761621303eba9d1b056fb1868c8cdf4231279645c25f5"}, + {file = "pillow-10.3.0-cp310-cp310-win32.whl", hash = "sha256:ca2870d5d10d8726a27396d3ca4cf7976cec0f3cb706debe88e3a5bd4610f7d2"}, + {file = "pillow-10.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:f0d0591a0aeaefdaf9a5e545e7485f89910c977087e7de2b6c388aec32011e9f"}, + {file = "pillow-10.3.0-cp310-cp310-win_arm64.whl", hash = "sha256:ccce24b7ad89adb5a1e34a6ba96ac2530046763912806ad4c247356a8f33a67b"}, + {file = "pillow-10.3.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:5f77cf66e96ae734717d341c145c5949c63180842a545c47a0ce7ae52ca83795"}, + {file = "pillow-10.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e4b878386c4bf293578b48fc570b84ecfe477d3b77ba39a6e87150af77f40c57"}, + {file = "pillow-10.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fdcbb4068117dfd9ce0138d068ac512843c52295ed996ae6dd1faf537b6dbc27"}, + {file = "pillow-10.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9797a6c8fe16f25749b371c02e2ade0efb51155e767a971c61734b1bf6293994"}, + {file = "pillow-10.3.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:9e91179a242bbc99be65e139e30690e081fe6cb91a8e77faf4c409653de39451"}, + {file = "pillow-10.3.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:1b87bd9d81d179bd8ab871603bd80d8645729939f90b71e62914e816a76fc6bd"}, + {file = "pillow-10.3.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:81d09caa7b27ef4e61cb7d8fbf1714f5aec1c6b6c5270ee53504981e6e9121ad"}, + {file = "pillow-10.3.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:048ad577748b9fa4a99a0548c64f2cb8d672d5bf2e643a739ac8faff1164238c"}, + {file = "pillow-10.3.0-cp311-cp311-win32.whl", hash = "sha256:7161ec49ef0800947dc5570f86568a7bb36fa97dd09e9827dc02b718c5643f09"}, + {file = "pillow-10.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:8eb0908e954d093b02a543dc963984d6e99ad2b5e36503d8a0aaf040505f747d"}, + {file = "pillow-10.3.0-cp311-cp311-win_arm64.whl", hash = "sha256:4e6f7d1c414191c1199f8996d3f2282b9ebea0945693fb67392c75a3a320941f"}, + {file = "pillow-10.3.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:e46f38133e5a060d46bd630faa4d9fa0202377495df1f068a8299fd78c84de84"}, + {file = "pillow-10.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:50b8eae8f7334ec826d6eeffaeeb00e36b5e24aa0b9df322c247539714c6df19"}, + {file = "pillow-10.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9d3bea1c75f8c53ee4d505c3e67d8c158ad4df0d83170605b50b64025917f338"}, + {file = "pillow-10.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:19aeb96d43902f0a783946a0a87dbdad5c84c936025b8419da0a0cd7724356b1"}, + {file = "pillow-10.3.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:74d28c17412d9caa1066f7a31df8403ec23d5268ba46cd0ad2c50fb82ae40462"}, + {file = "pillow-10.3.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:ff61bfd9253c3915e6d41c651d5f962da23eda633cf02262990094a18a55371a"}, + {file = "pillow-10.3.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d886f5d353333b4771d21267c7ecc75b710f1a73d72d03ca06df49b09015a9ef"}, + {file = "pillow-10.3.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4b5ec25d8b17217d635f8935dbc1b9aa5907962fae29dff220f2659487891cd3"}, + {file = "pillow-10.3.0-cp312-cp312-win32.whl", hash = "sha256:51243f1ed5161b9945011a7360e997729776f6e5d7005ba0c6879267d4c5139d"}, + {file = "pillow-10.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:412444afb8c4c7a6cc11a47dade32982439925537e483be7c0ae0cf96c4f6a0b"}, + {file = "pillow-10.3.0-cp312-cp312-win_arm64.whl", hash = "sha256:798232c92e7665fe82ac085f9d8e8ca98826f8e27859d9a96b41d519ecd2e49a"}, + {file = "pillow-10.3.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:4eaa22f0d22b1a7e93ff0a596d57fdede2e550aecffb5a1ef1106aaece48e96b"}, + {file = "pillow-10.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:cd5e14fbf22a87321b24c88669aad3a51ec052eb145315b3da3b7e3cc105b9a2"}, + {file = "pillow-10.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1530e8f3a4b965eb6a7785cf17a426c779333eb62c9a7d1bbcf3ffd5bf77a4aa"}, + {file = "pillow-10.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d512aafa1d32efa014fa041d38868fda85028e3f930a96f85d49c7d8ddc0383"}, + {file = "pillow-10.3.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:339894035d0ede518b16073bdc2feef4c991ee991a29774b33e515f1d308e08d"}, + {file = "pillow-10.3.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:aa7e402ce11f0885305bfb6afb3434b3cd8f53b563ac065452d9d5654c7b86fd"}, + {file = "pillow-10.3.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:0ea2a783a2bdf2a561808fe4a7a12e9aa3799b701ba305de596bc48b8bdfce9d"}, + {file = "pillow-10.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:c78e1b00a87ce43bb37642c0812315b411e856a905d58d597750eb79802aaaa3"}, + {file = "pillow-10.3.0-cp38-cp38-win32.whl", hash = "sha256:72d622d262e463dfb7595202d229f5f3ab4b852289a1cd09650362db23b9eb0b"}, + {file = "pillow-10.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:2034f6759a722da3a3dbd91a81148cf884e91d1b747992ca288ab88c1de15999"}, + {file = "pillow-10.3.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:2ed854e716a89b1afcedea551cd85f2eb2a807613752ab997b9974aaa0d56936"}, + {file = "pillow-10.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:dc1a390a82755a8c26c9964d457d4c9cbec5405896cba94cf51f36ea0d855002"}, + {file = "pillow-10.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4203efca580f0dd6f882ca211f923168548f7ba334c189e9eab1178ab840bf60"}, + {file = "pillow-10.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3102045a10945173d38336f6e71a8dc71bcaeed55c3123ad4af82c52807b9375"}, + {file = "pillow-10.3.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:6fb1b30043271ec92dc65f6d9f0b7a830c210b8a96423074b15c7bc999975f57"}, + {file = "pillow-10.3.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:1dfc94946bc60ea375cc39cff0b8da6c7e5f8fcdc1d946beb8da5c216156ddd8"}, + {file = "pillow-10.3.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b09b86b27a064c9624d0a6c54da01c1beaf5b6cadfa609cf63789b1d08a797b9"}, + {file = "pillow-10.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d3b2348a78bc939b4fed6552abfd2e7988e0f81443ef3911a4b8498ca084f6eb"}, + {file = "pillow-10.3.0-cp39-cp39-win32.whl", hash = "sha256:45ebc7b45406febf07fef35d856f0293a92e7417ae7933207e90bf9090b70572"}, + {file = "pillow-10.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:0ba26351b137ca4e0db0342d5d00d2e355eb29372c05afd544ebf47c0956ffeb"}, + {file = "pillow-10.3.0-cp39-cp39-win_arm64.whl", hash = "sha256:50fd3f6b26e3441ae07b7c979309638b72abc1a25da31a81a7fbd9495713ef4f"}, + {file = "pillow-10.3.0-pp310-pypy310_pp73-macosx_10_10_x86_64.whl", hash = "sha256:6b02471b72526ab8a18c39cb7967b72d194ec53c1fd0a70b050565a0f366d355"}, + {file = "pillow-10.3.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:8ab74c06ffdab957d7670c2a5a6e1a70181cd10b727cd788c4dd9005b6a8acd9"}, + {file = "pillow-10.3.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:048eeade4c33fdf7e08da40ef402e748df113fd0b4584e32c4af74fe78baaeb2"}, + {file = "pillow-10.3.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e2ec1e921fd07c7cda7962bad283acc2f2a9ccc1b971ee4b216b75fad6f0463"}, + {file = "pillow-10.3.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:4c8e73e99da7db1b4cad7f8d682cf6abad7844da39834c288fbfa394a47bbced"}, + {file = "pillow-10.3.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:16563993329b79513f59142a6b02055e10514c1a8e86dca8b48a893e33cf91e3"}, + {file = "pillow-10.3.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:dd78700f5788ae180b5ee8902c6aea5a5726bac7c364b202b4b3e3ba2d293170"}, + {file = "pillow-10.3.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:aff76a55a8aa8364d25400a210a65ff59d0168e0b4285ba6bf2bd83cf675ba32"}, + {file = "pillow-10.3.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:b7bc2176354defba3edc2b9a777744462da2f8e921fbaf61e52acb95bafa9828"}, + {file = "pillow-10.3.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:793b4e24db2e8742ca6423d3fde8396db336698c55cd34b660663ee9e45ed37f"}, + {file = "pillow-10.3.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d93480005693d247f8346bc8ee28c72a2191bdf1f6b5db469c096c0c867ac015"}, + {file = "pillow-10.3.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:c83341b89884e2b2e55886e8fbbf37c3fa5efd6c8907124aeb72f285ae5696e5"}, + {file = "pillow-10.3.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:1a1d1915db1a4fdb2754b9de292642a39a7fb28f1736699527bb649484fb966a"}, + {file = "pillow-10.3.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a0eaa93d054751ee9964afa21c06247779b90440ca41d184aeb5d410f20ff591"}, + {file = "pillow-10.3.0.tar.gz", hash = "sha256:9d2455fbf44c914840c793e89aa82d0e1763a14253a000743719ae5946814b2d"}, ] [package.extras] docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-removed-in", "sphinxext-opengraph"] +fpx = ["olefile"] +mic = ["olefile"] tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] +typing = ["typing-extensions"] +xmp = ["defusedxml"] [[package]] name = "pip" -version = "23.3.1" +version = "24.0" description = "The PyPA recommended tool for installing Python packages." -category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "pip-23.3.1-py3-none-any.whl", hash = "sha256:55eb67bb6171d37447e82213be585b75fe2b12b359e993773aca4de9247a052b"}, - {file = "pip-23.3.1.tar.gz", hash = "sha256:1fcaa041308d01f14575f6d0d2ea4b75a3e2871fe4f9c694976f908768e14174"}, + {file = "pip-24.0-py3-none-any.whl", hash = "sha256:ba0d021a166865d2265246961bec0152ff124de910c5cc39f1156ce3fa7c69dc"}, + {file = "pip-24.0.tar.gz", hash = "sha256:ea9bd1a847e8c5774a5777bb398c19e80bcd4e2aa16a4b301b718fe6f593aba2"}, ] [[package]] name = "platformdirs" version = "4.1.0" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -1699,7 +1645,6 @@ test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-co name = "pluggy" version = "1.3.0" description = "plugin and hook calling mechanisms for python" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1715,7 +1660,6 @@ testing = ["pytest", "pytest-benchmark"] name = "pre-commit" version = "2.21.0" description = "A framework for managing and maintaining multi-language pre-commit hooks." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1734,7 +1678,6 @@ virtualenv = ">=20.10.0" name = "prompt-toolkit" version = "3.0.41" description = "Library for building powerful interactive command lines in Python" -category = "dev" optional = false python-versions = ">=3.7.0" files = [ @@ -1749,7 +1692,6 @@ wcwidth = "*" name = "protobuf" version = "4.25.1" description = "" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1770,7 +1712,6 @@ files = [ name = "psycopg2-binary" version = "2.9.7" description = "psycopg2 - Python-PostgreSQL Database Adapter" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -1840,7 +1781,6 @@ files = [ name = "ptyprocess" version = "0.7.0" description = "Run a subprocess in a pseudo terminal" -category = "dev" optional = false python-versions = "*" files = [ @@ -1852,7 +1792,6 @@ files = [ name = "pure-eval" version = "0.2.2" description = "Safely evaluate AST nodes without side effects" -category = "dev" optional = false python-versions = "*" files = [ @@ -1867,7 +1806,6 @@ tests = ["pytest"] name = "pyasn1" version = "0.5.1" description = "Pure-Python implementation of ASN.1 types and DER/BER/CER codecs (X.208)" -category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" files = [ @@ -1879,7 +1817,6 @@ files = [ name = "pyasn1-modules" version = "0.3.0" description = "A collection of ASN.1-based protocols modules" -category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" files = [ @@ -1894,7 +1831,6 @@ pyasn1 = ">=0.4.6,<0.6.0" name = "pycodestyle" version = "2.7.0" description = "Python style guide checker" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -1906,7 +1842,6 @@ files = [ name = "pycparser" version = "2.21" description = "C parser in Python" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -1918,7 +1853,6 @@ files = [ name = "pydocstyle" version = "6.3.0" description = "Python docstring style checker" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -1936,7 +1870,6 @@ toml = ["tomli (>=1.2.3)"] name = "pyflakes" version = "2.3.1" description = "passive checker of Python programs" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -1948,7 +1881,6 @@ files = [ name = "pygments" version = "2.17.2" description = "Pygments is a syntax highlighting package written in Python." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1964,7 +1896,6 @@ windows-terminal = ["colorama (>=0.4.6)"] name = "pyhanko" version = "0.21.0" description = "Tools for stamping and signing PDF files" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1993,14 +1924,13 @@ mypy = ["pyHanko[async-http,etsi,extra-pubkey-algs,image-support,opentype,pkcs11 opentype = ["fonttools (>=4.33.3)", "uharfbuzz (>=0.25.0,<0.38.0)"] pkcs11 = ["python-pkcs11 (>=0.7.0,<0.8.0)"] testing = ["certomancer-csc-dummy (==0.2.3)", "pyHanko[async-http,extra-pubkey-algs,image-support,opentype,pkcs11,testing-basic,xmp]", "pyHanko[etsi]", "pytest-aiohttp (>=1.0.4,<1.1.0)"] -testing-basic = ["backports.zoneinfo[tzdata]", "certomancer (>=0.11.0,<0.12.0)", "freezegun (>=1.1.0)", "pytest (>=6.1.1)", "pytest-asyncio (==0.21.1)", "pytest-cov (>=4.0,<4.2)", "requests-mock (>=1.8.0)"] +testing-basic = ["backports.zoneinfo[tzdata]", "certomancer (==0.11.*)", "freezegun (>=1.1.0)", "pytest (>=6.1.1)", "pytest-asyncio (==0.21.1)", "pytest-cov (>=4.0,<4.2)", "requests-mock (>=1.8.0)"] xmp = ["defusedxml (>=0.7.1,<0.8.0)"] [[package]] name = "pyhanko-certvalidator" version = "0.26.2" description = "Validates X.509 certificates and paths; forked from wbond/certvalidator" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2024,7 +1954,6 @@ testing = ["aiohttp (>=3.8.0,<3.9.0)", "freezegun (>=1.1.0)", "pyhanko-certvalid name = "pyparsing" version = "3.1.1" description = "pyparsing module - Classes and methods to define and execute parsing grammars" -category = "main" optional = false python-versions = ">=3.6.8" files = [ @@ -2039,7 +1968,6 @@ diagrams = ["jinja2", "railroad-diagrams"] name = "pypdf" version = "3.17.1" description = "A pure-python PDF library capable of splitting, merging, cropping, and transforming PDF files" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -2061,7 +1989,6 @@ image = ["Pillow (>=8.0.0)"] name = "pypng" version = "0.20220715.0" description = "Pure Python library for saving and loading PNG images" -category = "main" optional = false python-versions = "*" files = [ @@ -2073,7 +2000,6 @@ files = [ name = "pytest" version = "7.4.3" description = "pytest: simple powerful testing with Python" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2096,7 +2022,6 @@ testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "no name = "pytest-deadfixtures" version = "2.2.1" description = "A simple plugin to list unused fixtures in pytest" -category = "dev" optional = false python-versions = "*" files = [ @@ -2111,7 +2036,6 @@ pytest = ">=3.0.0" name = "pytest-django" version = "4.7.0" description = "A Django plugin for pytest." -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -2130,7 +2054,6 @@ testing = ["Django", "django-configurations (>=2.0)"] name = "pytest-freezegun" version = "0.4.2" description = "Wrap tests with fixtures in freeze_time" -category = "dev" optional = false python-versions = "*" files = [ @@ -2146,7 +2069,6 @@ pytest = ">=3.0.0" name = "pytest-lazy-fixture" version = "0.6.3" description = "It helps to use fixtures in pytest.mark.parametrize" -category = "main" optional = false python-versions = "*" files = [ @@ -2161,7 +2083,6 @@ pytest = ">=3.2.5" name = "pytest-sugar" version = "0.9.7" description = "pytest-sugar is a plugin for pytest that changes the default look and feel of pytest (e.g. progressbar, show tests that fail instantly)." -category = "dev" optional = false python-versions = "*" files = [ @@ -2181,7 +2102,6 @@ dev = ["black", "flake8", "pre-commit"] name = "python-bidi" version = "0.4.2" description = "Pure python implementation of the BiDi layout algorithm" -category = "main" optional = false python-versions = "*" files = [ @@ -2196,7 +2116,6 @@ six = "*" name = "python-dateutil" version = "2.8.2" description = "Extensions to the standard Python datetime module" -category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" files = [ @@ -2211,7 +2130,6 @@ six = ">=1.5" name = "pytz" version = "2023.3.post1" description = "World timezone definitions, modern and historical" -category = "main" optional = false python-versions = "*" files = [ @@ -2223,7 +2141,6 @@ files = [ name = "pyyaml" version = "6.0.1" description = "YAML parser and emitter for Python" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -2273,7 +2190,6 @@ files = [ name = "qrcode" version = "7.4.2" description = "QR Code image generator" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2297,7 +2213,6 @@ test = ["coverage", "pytest"] name = "referencing" version = "0.31.1" description = "JSON Referencing + Python" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -2313,7 +2228,6 @@ rpds-py = ">=0.7.0" name = "reportlab" version = "3.6.13" description = "The Reportlab Toolkit" -category = "main" optional = false python-versions = ">=3.7,<4" files = [ @@ -2373,14 +2287,13 @@ rlpycairo = ["rlPyCairo (>=0.1.0)"] [[package]] name = "requests" -version = "2.31.0" +version = "2.32.3" description = "Python HTTP for Humans." -category = "main" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, - {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, + {file = "requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"}, + {file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"}, ] [package.dependencies] @@ -2397,7 +2310,6 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] name = "rpds-py" version = "0.13.2" description = "Python bindings to Rust's persistent data structures (rpds)" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -2506,7 +2418,6 @@ files = [ name = "rsa" version = "4.9" description = "Pure-Python RSA implementation" -category = "main" optional = false python-versions = ">=3.6,<4" files = [ @@ -2521,7 +2432,6 @@ pyasn1 = ">=0.1.3" name = "setuptools" version = "69.0.2" description = "Easily download, build, install, upgrade, and uninstall Python packages" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -2538,7 +2448,6 @@ testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jar name = "six" version = "1.16.0" description = "Python 2 and 3 compatibility utilities" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" files = [ @@ -2550,7 +2459,6 @@ files = [ name = "smmap" version = "5.0.1" description = "A pure Python implementation of a sliding window memory map manager" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2562,7 +2470,6 @@ files = [ name = "snowballstemmer" version = "2.2.0" description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms." -category = "main" optional = false python-versions = "*" files = [ @@ -2572,26 +2479,23 @@ files = [ [[package]] name = "sqlparse" -version = "0.4.4" +version = "0.5.0" description = "A non-validating SQL parser." -category = "main" optional = false -python-versions = ">=3.5" +python-versions = ">=3.8" files = [ - {file = "sqlparse-0.4.4-py3-none-any.whl", hash = "sha256:5430a4fe2ac7d0f93e66f1efc6e1338a41884b7ddf2a350cedd20ccc4d9d28f3"}, - {file = "sqlparse-0.4.4.tar.gz", hash = "sha256:d446183e84b8349fa3061f0fe7f06ca94ba65b426946ffebe6e3e8295332420c"}, + {file = "sqlparse-0.5.0-py3-none-any.whl", hash = "sha256:c204494cd97479d0e39f28c93d46c0b2d5959c7b9ab904762ea6c7af211c8663"}, + {file = "sqlparse-0.5.0.tar.gz", hash = "sha256:714d0a4932c059d16189f58ef5411ec2287a4360f17cdd0edd2d09d4c5087c93"}, ] [package.extras] -dev = ["build", "flake8"] +dev = ["build", "hatch"] doc = ["sphinx"] -test = ["pytest", "pytest-cov"] [[package]] name = "stack-data" version = "0.6.3" description = "Extract data from python stack frames and tracebacks for informative displays" -category = "dev" optional = false python-versions = "*" files = [ @@ -2611,7 +2515,6 @@ tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] name = "svglib" version = "1.5.1" description = "A pure-Python library for reading and converting SVG" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2628,7 +2531,6 @@ tinycss2 = ">=0.6.0" name = "termcolor" version = "2.4.0" description = "ANSI color formatting for output in terminal" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -2643,7 +2545,6 @@ tests = ["pytest", "pytest-cov"] name = "tinycss2" version = "1.2.1" description = "A tiny CSS parser" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2662,7 +2563,6 @@ test = ["flake8", "isort", "pytest"] name = "tomli" version = "2.0.1" description = "A lil' TOML parser" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2674,7 +2574,6 @@ files = [ name = "traitlets" version = "5.14.0" description = "Traitlets Python configuration system" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -2690,7 +2589,6 @@ test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0, name = "typing-extensions" version = "4.8.0" description = "Backported and Experimental Type Hints for Python 3.8+" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -2702,7 +2600,6 @@ files = [ name = "tzdata" version = "2023.3" description = "Provider of IANA time zone data" -category = "main" optional = false python-versions = ">=2" files = [ @@ -2714,7 +2611,6 @@ files = [ name = "tzlocal" version = "5.2" description = "tzinfo object for the local timezone" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -2732,7 +2628,6 @@ devenv = ["check-manifest", "pytest (>=4.3)", "pytest-cov", "pytest-mock (>=3.3) name = "uritemplate" version = "4.1.1" description = "Implementation of RFC 6570 URI Templates" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -2744,7 +2639,6 @@ files = [ name = "uritools" version = "4.0.2" description = "URI parsing, classification and composition" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2754,18 +2648,18 @@ files = [ [[package]] name = "urllib3" -version = "2.1.0" +version = "2.2.2" description = "HTTP library with thread-safe connection pooling, file post, and more." -category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "urllib3-2.1.0-py3-none-any.whl", hash = "sha256:55901e917a5896a349ff771be919f8bd99aff50b79fe58fec595eb37bbc56bb3"}, - {file = "urllib3-2.1.0.tar.gz", hash = "sha256:df7aa8afb0148fa78488e7899b2c59b5f4ffcfa82e6c54ccb9dd37c1d7b52d54"}, + {file = "urllib3-2.2.2-py3-none-any.whl", hash = "sha256:a448b2f64d686155468037e1ace9f2d2199776e17f0a46610480d311f73e3472"}, + {file = "urllib3-2.2.2.tar.gz", hash = "sha256:dd505485549a7a552833da5e6063639d0d177c04f23bc3864e41e5dc5f612168"}, ] [package.extras] brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] +h2 = ["h2 (>=4,<5)"] socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] zstd = ["zstandard (>=0.18.0)"] @@ -2773,7 +2667,6 @@ zstd = ["zstandard (>=0.18.0)"] name = "virtualenv" version = "20.25.0" description = "Virtual Python Environment builder" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2794,7 +2687,6 @@ test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess name = "wcwidth" version = "0.2.12" description = "Measures the displayed width of unicode strings in a terminal" -category = "dev" optional = false python-versions = "*" files = [ @@ -2806,7 +2698,6 @@ files = [ name = "webencodings" version = "0.5.1" description = "Character encoding aliases for legacy web content" -category = "main" optional = false python-versions = "*" files = [ @@ -2816,14 +2707,13 @@ files = [ [[package]] name = "werkzeug" -version = "2.3.8" +version = "3.0.4" description = "The comprehensive WSGI web application library." -category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "werkzeug-2.3.8-py3-none-any.whl", hash = "sha256:bba1f19f8ec89d4d607a3bd62f1904bd2e609472d93cd85e9d4e178f472c3748"}, - {file = "werkzeug-2.3.8.tar.gz", hash = "sha256:554b257c74bbeb7a0d254160a4f8ffe185243f52a52035060b761ca62d977f03"}, + {file = "werkzeug-3.0.4-py3-none-any.whl", hash = "sha256:02c9eb92b7d6c06f31a782811505d2157837cea66aaede3e217c7c27c039476c"}, + {file = "werkzeug-3.0.4.tar.gz", hash = "sha256:34f2371506b250df4d4f84bfe7b0921e4762525762bbd936614909fe25cd7306"}, ] [package.dependencies] @@ -2836,7 +2726,6 @@ watchdog = ["watchdog (>=2.3)"] name = "xhtml2pdf" version = "0.2.11" description = "PDF generator using HTML and CSS" -category = "main" optional = false python-versions = "*" files = [ @@ -2858,7 +2747,6 @@ svglib = ">=1.2.1" name = "yadisk" version = "1.3.4" description = "Библиотека-клиент REST API Яндекс.Диска / Yandex.Disk REST API client library" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -2872,4 +2760,4 @@ requests = "*" [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "1ae356183bb656f248f962a6dff27ec3d55322209dea811b8ba6f46d16017dcf" +content-hash = "f5bdd2deb4502a2508316b61b9af19f70c4470f49c860f6b95ce74cfd53500da" diff --git a/pyproject.toml b/pyproject.toml index 9a54f9601..0403d240e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -29,39 +29,40 @@ authors = ["Ya.Practicum Students"] [tool.poetry.dependencies] python = "^3.9" -Django = "3.2.23" +Django = "3.2.25" django-environ = "^0.8.1" django-cors-headers = "^3.11.0" djangorestframework = "3.13.1" psycopg2-binary = "2.9.7" -gunicorn = "^20.1.0" +gunicorn = "^23.0.0" drf-spectacular = "^0.22.0" django-filter = "^21.1" -Pillow = "^10.0.1" +Pillow = "^10.3.0" django-admin-sortable2 = "^1.0.2" django-debug-toolbar = "^4.2.0" django-phonenumber-field = {extras = ["phonenumbers"], version = "^5.2.0"} factory-boy = "^3.2.0" django-rest-multiple-models = "^2.1.3" -django-ckeditor = "^6.1.0" +django-ckeditor = "^6.7.1" pytest-lazy-fixture = "^0.6.3" django-anymail = {extras = ["mailjet"], version = "^8.4"} flake8-docstrings = "^1.6.0" xhtml2pdf = "^0.2.5" google-api-python-client = "^2.36.0" -GitPython = "^3.1.40" +GitPython = "^3.1.41" reportlab = "3.6.13" yadisk = "^1.2.15" django-filer = "^3.1.0" -certifi = "^2023.7.22" -pip = "^23.3.1" -werkzeug = "2.3.8" -urllib3 = "^2.0.7" -requests = "^2.31.0" -cryptography = "^41.0.4" -sqlparse = "^0.4.4" +certifi = "^2024.8.30" +pip = "^24.0" +werkzeug = "^3.0.4" +urllib3 = "^2.2.2" +requests = "^2.32.3" +cryptography = "^43.0.1" +sqlparse = "^0.5.0" easy-thumbnails = "^2.8.5" -django-private-storage = "^3.1.1" +idna = "^3.7" +black = "^24.4.0" [tool.poetry.dev-dependencies] pre-commit = "^2.15.0" @@ -70,13 +71,12 @@ flake8 = "^3.9.2" ipython = "^8.10.0" pytest-django = "^4.5.2" coverage = "^5.5" -Werkzeug = "^2.0.1" django-extensions = "^3.1.3" django-debug-toolbar = "^4.2.0" pytest-freezegun = "^0.4.2" pytest-sugar = "^0.9.4" pytest-deadfixtures = "^2.2.1" -black = "^22.3.0" +black = "^24.4.0" [build-system] requires = ["poetry-core>=1.0.0"] diff --git a/requirements/dev.txt b/requirements/dev.txt index 9297ff450..426d56401 100644 --- a/requirements/dev.txt +++ b/requirements/dev.txt @@ -3,22 +3,22 @@ asgiref==3.7.2 ; python_version >= "3.9" and python_version < "4.0" asn1crypto==1.5.1 ; python_version >= "3.9" and python_version < "4.0" asttokens==2.4.1 ; python_version >= "3.9" and python_version < "4.0" attrs==23.1.0 ; python_version >= "3.9" and python_version < "4.0" -black==22.12.0 ; python_version >= "3.9" and python_version < "4.0" +black==24.4.0 ; python_version >= "3.9" and python_version < "4.0" cachetools==5.3.2 ; python_version >= "3.9" and python_version < "4.0" -certifi==2023.11.17 ; python_version >= "3.9" and python_version < "4.0" -cffi==1.16.0 ; python_version >= "3.9" and python_version < "4.0" +certifi==2024.8.30 ; python_version >= "3.9" and python_version < "4.0" +cffi==1.16.0 ; python_version >= "3.9" and python_version < "4.0" and platform_python_implementation != "PyPy" cfgv==3.4.0 ; python_version >= "3.9" and python_version < "4.0" charset-normalizer==3.3.2 ; python_version >= "3.9" and python_version < "4.0" click==8.1.7 ; python_version >= "3.9" and python_version < "4.0" -colorama==0.4.6 ; python_version >= "3.9" and python_version < "4.0" and sys_platform == "win32" or python_version >= "3.9" and python_version < "4.0" and platform_system == "Windows" +colorama==0.4.6 ; python_version >= "3.9" and python_version < "4.0" and (sys_platform == "win32" or platform_system == "Windows") coverage==5.5 ; python_version >= "3.9" and python_version < "4" -cryptography==41.0.7 ; python_version >= "3.9" and python_version < "4.0" +cryptography==43.0.1 ; python_version >= "3.9" and python_version < "4.0" cssselect2==0.7.0 ; python_version >= "3.9" and python_version < "4.0" decorator==5.1.1 ; python_version >= "3.9" and python_version < "4.0" distlib==0.3.7 ; python_version >= "3.9" and python_version < "4.0" django-admin-sortable2==1.0.4 ; python_version >= "3.9" and python_version < "4.0" django-anymail[mailjet]==8.6 ; python_version >= "3.9" and python_version < "4.0" -django-ckeditor==6.7.0 ; python_version >= "3.9" and python_version < "4.0" +django-ckeditor==6.7.1 ; python_version >= "3.9" and python_version < "4.0" django-cors-headers==3.14.0 ; python_version >= "3.9" and python_version < "4.0" django-debug-toolbar==4.2.0 ; python_version >= "3.9" and python_version < "4.0" django-environ==0.8.1 ; python_version >= "3.9" and python_version < "4" @@ -28,9 +28,8 @@ django-filter==21.1 ; python_version >= "3.9" and python_version < "4.0" django-js-asset==2.1.0 ; python_version >= "3.9" and python_version < "4.0" django-phonenumber-field[phonenumbers]==5.2.0 ; python_version >= "3.9" and python_version < "4.0" django-polymorphic==3.1.0 ; python_version >= "3.9" and python_version < "4.0" -django-private-storage==3.1.1 ; python_version >= "3.9" and python_version < "4.0" django-rest-multiple-models==2.1.3 ; python_version >= "3.9" and python_version < "4.0" -django==3.2.23 ; python_version >= "3.9" and python_version < "4.0" +django==3.2.25 ; python_version >= "3.9" and python_version < "4.0" djangorestframework==3.13.1 ; python_version >= "3.9" and python_version < "4.0" drf-spectacular==0.22.1 ; python_version >= "3.9" and python_version < "4.0" easy-thumbnails==2.8.5 ; python_version >= "3.9" and python_version < "4.0" @@ -44,17 +43,17 @@ flake8-docstrings==1.7.0 ; python_version >= "3.9" and python_version < "4.0" flake8==3.9.2 ; python_version >= "3.9" and python_version < "4.0" freezegun==1.3.1 ; python_version >= "3.9" and python_version < "4.0" gitdb==4.0.11 ; python_version >= "3.9" and python_version < "4.0" -gitpython==3.1.40 ; python_version >= "3.9" and python_version < "4.0" +gitpython==3.1.41 ; python_version >= "3.9" and python_version < "4.0" google-api-core==2.14.0 ; python_version >= "3.9" and python_version < "4.0" google-api-python-client==2.109.0 ; python_version >= "3.9" and python_version < "4.0" google-auth-httplib2==0.1.1 ; python_version >= "3.9" and python_version < "4.0" google-auth==2.25.1 ; python_version >= "3.9" and python_version < "4.0" googleapis-common-protos==1.61.0 ; python_version >= "3.9" and python_version < "4.0" -gunicorn==20.1.0 ; python_version >= "3.9" and python_version < "4.0" +gunicorn==23.0.0 ; python_version >= "3.9" and python_version < "4.0" html5lib==1.1 ; python_version >= "3.9" and python_version < "4.0" httplib2==0.22.0 ; python_version >= "3.9" and python_version < "4.0" identify==2.5.32 ; python_version >= "3.9" and python_version < "4.0" -idna==3.6 ; python_version >= "3.9" and python_version < "4.0" +idna==3.7 ; python_version >= "3.9" and python_version < "4.0" inflection==0.5.1 ; python_version >= "3.9" and python_version < "4.0" iniconfig==2.0.0 ; python_version >= "3.9" and python_version < "4.0" ipython==8.18.1 ; python_version >= "3.9" and python_version < "4.0" @@ -74,8 +73,8 @@ parso==0.8.3 ; python_version >= "3.9" and python_version < "4.0" pathspec==0.11.2 ; python_version >= "3.9" and python_version < "4.0" pexpect==4.9.0 ; python_version >= "3.9" and python_version < "4.0" and sys_platform != "win32" phonenumbers==8.13.26 ; python_version >= "3.9" and python_version < "4.0" -pillow==10.1.0 ; python_version >= "3.9" and python_version < "4.0" -pip==23.3.1 ; python_version >= "3.9" and python_version < "4.0" +pillow==10.3.0 ; python_version >= "3.9" and python_version < "4.0" +pip==24.0 ; python_version >= "3.9" and python_version < "4.0" platformdirs==4.1.0 ; python_version >= "3.9" and python_version < "4.0" pluggy==1.3.0 ; python_version >= "3.9" and python_version < "4.0" pre-commit==2.21.0 ; python_version >= "3.9" and python_version < "4.0" @@ -87,7 +86,7 @@ pure-eval==0.2.2 ; python_version >= "3.9" and python_version < "4.0" pyasn1-modules==0.3.0 ; python_version >= "3.9" and python_version < "4.0" pyasn1==0.5.1 ; python_version >= "3.9" and python_version < "4.0" pycodestyle==2.7.0 ; python_version >= "3.9" and python_version < "4.0" -pycparser==2.21 ; python_version >= "3.9" and python_version < "4.0" +pycparser==2.21 ; python_version >= "3.9" and python_version < "4.0" and platform_python_implementation != "PyPy" pydocstyle==6.3.0 ; python_version >= "3.9" and python_version < "4.0" pyflakes==2.3.1 ; python_version >= "3.9" and python_version < "4.0" pygments==2.17.2 ; python_version >= "3.9" and python_version < "4.0" @@ -109,29 +108,29 @@ pyyaml==6.0.1 ; python_version >= "3.9" and python_version < "4.0" qrcode==7.4.2 ; python_version >= "3.9" and python_version < "4.0" referencing==0.31.1 ; python_version >= "3.9" and python_version < "4.0" reportlab==3.6.13 ; python_version >= "3.9" and python_version < "4" -requests==2.31.0 ; python_version >= "3.9" and python_version < "4.0" +requests==2.32.3 ; python_version >= "3.9" and python_version < "4.0" rpds-py==0.13.2 ; python_version >= "3.9" and python_version < "4.0" rsa==4.9 ; python_version >= "3.9" and python_version < "4" setuptools==69.0.2 ; python_version >= "3.9" and python_version < "4.0" six==1.16.0 ; python_version >= "3.9" and python_version < "4.0" smmap==5.0.1 ; python_version >= "3.9" and python_version < "4.0" snowballstemmer==2.2.0 ; python_version >= "3.9" and python_version < "4.0" -sqlparse==0.4.4 ; python_version >= "3.9" and python_version < "4.0" +sqlparse==0.5.0 ; python_version >= "3.9" and python_version < "4.0" stack-data==0.6.3 ; python_version >= "3.9" and python_version < "4.0" svglib==1.5.1 ; python_version >= "3.9" and python_version < "4.0" termcolor==2.4.0 ; python_version >= "3.9" and python_version < "4.0" tinycss2==1.2.1 ; python_version >= "3.9" and python_version < "4.0" -tomli==2.0.1 ; python_version >= "3.9" and python_full_version < "3.11.0a7" +tomli==2.0.1 ; python_version >= "3.9" and python_version < "3.11" traitlets==5.14.0 ; python_version >= "3.9" and python_version < "4.0" typing-extensions==4.8.0 ; python_version >= "3.9" and python_version < "4.0" tzdata==2023.3 ; python_version >= "3.9" and python_version < "4.0" and platform_system == "Windows" tzlocal==5.2 ; python_version >= "3.9" and python_version < "4.0" uritemplate==4.1.1 ; python_version >= "3.9" and python_version < "4.0" uritools==4.0.2 ; python_version >= "3.9" and python_version < "4.0" -urllib3==2.1.0 ; python_version >= "3.9" and python_version < "4.0" +urllib3==2.2.2 ; python_version >= "3.9" and python_version < "4.0" virtualenv==20.25.0 ; python_version >= "3.9" and python_version < "4.0" wcwidth==0.2.12 ; python_version >= "3.9" and python_version < "4.0" webencodings==0.5.1 ; python_version >= "3.9" and python_version < "4.0" -werkzeug==2.3.8 ; python_version >= "3.9" and python_version < "4.0" +werkzeug==3.0.4 ; python_version >= "3.9" and python_version < "4.0" xhtml2pdf==0.2.11 ; python_version >= "3.9" and python_version < "4.0" yadisk==1.3.4 ; python_version >= "3.9" and python_version < "4.0" diff --git a/requirements/prod.txt b/requirements/prod.txt index e32dd985f..0b977632d 100644 --- a/requirements/prod.txt +++ b/requirements/prod.txt @@ -2,17 +2,18 @@ arabic-reshaper==3.0.0 ; python_version >= "3.9" and python_version < "4.0" asgiref==3.7.2 ; python_version >= "3.9" and python_version < "4.0" asn1crypto==1.5.1 ; python_version >= "3.9" and python_version < "4.0" attrs==23.1.0 ; python_version >= "3.9" and python_version < "4.0" +black==24.4.0 ; python_version >= "3.9" and python_version < "4.0" cachetools==5.3.2 ; python_version >= "3.9" and python_version < "4.0" -certifi==2023.11.17 ; python_version >= "3.9" and python_version < "4.0" -cffi==1.16.0 ; python_version >= "3.9" and python_version < "4.0" +certifi==2024.8.30 ; python_version >= "3.9" and python_version < "4.0" +cffi==1.16.0 ; python_version >= "3.9" and python_version < "4.0" and platform_python_implementation != "PyPy" charset-normalizer==3.3.2 ; python_version >= "3.9" and python_version < "4.0" click==8.1.7 ; python_version >= "3.9" and python_version < "4.0" -colorama==0.4.6 ; python_version >= "3.9" and python_version < "4.0" and sys_platform == "win32" or python_version >= "3.9" and python_version < "4.0" and platform_system == "Windows" -cryptography==41.0.7 ; python_version >= "3.9" and python_version < "4.0" +colorama==0.4.6 ; python_version >= "3.9" and python_version < "4.0" and (sys_platform == "win32" or platform_system == "Windows") +cryptography==43.0.1 ; python_version >= "3.9" and python_version < "4.0" cssselect2==0.7.0 ; python_version >= "3.9" and python_version < "4.0" django-admin-sortable2==1.0.4 ; python_version >= "3.9" and python_version < "4.0" django-anymail[mailjet]==8.6 ; python_version >= "3.9" and python_version < "4.0" -django-ckeditor==6.7.0 ; python_version >= "3.9" and python_version < "4.0" +django-ckeditor==6.7.1 ; python_version >= "3.9" and python_version < "4.0" django-cors-headers==3.14.0 ; python_version >= "3.9" and python_version < "4.0" django-debug-toolbar==4.2.0 ; python_version >= "3.9" and python_version < "4.0" django-environ==0.8.1 ; python_version >= "3.9" and python_version < "4" @@ -21,9 +22,8 @@ django-filter==21.1 ; python_version >= "3.9" and python_version < "4.0" django-js-asset==2.1.0 ; python_version >= "3.9" and python_version < "4.0" django-phonenumber-field[phonenumbers]==5.2.0 ; python_version >= "3.9" and python_version < "4.0" django-polymorphic==3.1.0 ; python_version >= "3.9" and python_version < "4.0" -django-private-storage==3.1.1 ; python_version >= "3.9" and python_version < "4.0" django-rest-multiple-models==2.1.3 ; python_version >= "3.9" and python_version < "4.0" -django==3.2.23 ; python_version >= "3.9" and python_version < "4.0" +django==3.2.25 ; python_version >= "3.9" and python_version < "4.0" djangorestframework==3.13.1 ; python_version >= "3.9" and python_version < "4.0" drf-spectacular==0.22.1 ; python_version >= "3.9" and python_version < "4.0" easy-thumbnails==2.8.5 ; python_version >= "3.9" and python_version < "4.0" @@ -34,16 +34,16 @@ faker==20.1.0 ; python_version >= "3.9" and python_version < "4.0" flake8-docstrings==1.7.0 ; python_version >= "3.9" and python_version < "4.0" flake8==3.9.2 ; python_version >= "3.9" and python_version < "4.0" gitdb==4.0.11 ; python_version >= "3.9" and python_version < "4.0" -gitpython==3.1.40 ; python_version >= "3.9" and python_version < "4.0" +gitpython==3.1.41 ; python_version >= "3.9" and python_version < "4.0" google-api-core==2.14.0 ; python_version >= "3.9" and python_version < "4.0" google-api-python-client==2.109.0 ; python_version >= "3.9" and python_version < "4.0" google-auth-httplib2==0.1.1 ; python_version >= "3.9" and python_version < "4.0" google-auth==2.25.1 ; python_version >= "3.9" and python_version < "4.0" googleapis-common-protos==1.61.0 ; python_version >= "3.9" and python_version < "4.0" -gunicorn==20.1.0 ; python_version >= "3.9" and python_version < "4.0" +gunicorn==23.0.0 ; python_version >= "3.9" and python_version < "4.0" html5lib==1.1 ; python_version >= "3.9" and python_version < "4.0" httplib2==0.22.0 ; python_version >= "3.9" and python_version < "4.0" -idna==3.6 ; python_version >= "3.9" and python_version < "4.0" +idna==3.7 ; python_version >= "3.9" and python_version < "4.0" inflection==0.5.1 ; python_version >= "3.9" and python_version < "4.0" iniconfig==2.0.0 ; python_version >= "3.9" and python_version < "4.0" jsonschema-specifications==2023.11.2 ; python_version >= "3.9" and python_version < "4.0" @@ -51,18 +51,21 @@ jsonschema==4.20.0 ; python_version >= "3.9" and python_version < "4.0" lxml==4.9.3 ; python_version >= "3.9" and python_version < "4.0" markupsafe==2.1.3 ; python_version >= "3.9" and python_version < "4.0" mccabe==0.6.1 ; python_version >= "3.9" and python_version < "4.0" +mypy-extensions==1.0.0 ; python_version >= "3.9" and python_version < "4.0" oscrypto==1.3.0 ; python_version >= "3.9" and python_version < "4.0" packaging==23.2 ; python_version >= "3.9" and python_version < "4.0" +pathspec==0.11.2 ; python_version >= "3.9" and python_version < "4.0" phonenumbers==8.13.26 ; python_version >= "3.9" and python_version < "4.0" -pillow==10.1.0 ; python_version >= "3.9" and python_version < "4.0" -pip==23.3.1 ; python_version >= "3.9" and python_version < "4.0" +pillow==10.3.0 ; python_version >= "3.9" and python_version < "4.0" +pip==24.0 ; python_version >= "3.9" and python_version < "4.0" +platformdirs==4.1.0 ; python_version >= "3.9" and python_version < "4.0" pluggy==1.3.0 ; python_version >= "3.9" and python_version < "4.0" protobuf==4.25.1 ; python_version >= "3.9" and python_version < "4.0" psycopg2-binary==2.9.7 ; python_version >= "3.9" and python_version < "4.0" pyasn1-modules==0.3.0 ; python_version >= "3.9" and python_version < "4.0" pyasn1==0.5.1 ; python_version >= "3.9" and python_version < "4.0" pycodestyle==2.7.0 ; python_version >= "3.9" and python_version < "4.0" -pycparser==2.21 ; python_version >= "3.9" and python_version < "4.0" +pycparser==2.21 ; python_version >= "3.9" and python_version < "4.0" and platform_python_implementation != "PyPy" pydocstyle==6.3.0 ; python_version >= "3.9" and python_version < "4.0" pyflakes==2.3.1 ; python_version >= "3.9" and python_version < "4.0" pyhanko-certvalidator==0.26.2 ; python_version >= "3.9" and python_version < "4.0" @@ -79,14 +82,13 @@ pyyaml==6.0.1 ; python_version >= "3.9" and python_version < "4.0" qrcode==7.4.2 ; python_version >= "3.9" and python_version < "4.0" referencing==0.31.1 ; python_version >= "3.9" and python_version < "4.0" reportlab==3.6.13 ; python_version >= "3.9" and python_version < "4" -requests==2.31.0 ; python_version >= "3.9" and python_version < "4.0" +requests==2.32.3 ; python_version >= "3.9" and python_version < "4.0" rpds-py==0.13.2 ; python_version >= "3.9" and python_version < "4.0" rsa==4.9 ; python_version >= "3.9" and python_version < "4" -setuptools==69.0.2 ; python_version >= "3.9" and python_version < "4.0" six==1.16.0 ; python_version >= "3.9" and python_version < "4.0" smmap==5.0.1 ; python_version >= "3.9" and python_version < "4.0" snowballstemmer==2.2.0 ; python_version >= "3.9" and python_version < "4.0" -sqlparse==0.4.4 ; python_version >= "3.9" and python_version < "4.0" +sqlparse==0.5.0 ; python_version >= "3.9" and python_version < "4.0" svglib==1.5.1 ; python_version >= "3.9" and python_version < "4.0" tinycss2==1.2.1 ; python_version >= "3.9" and python_version < "4.0" tomli==2.0.1 ; python_version >= "3.9" and python_version < "3.11" @@ -95,8 +97,8 @@ tzdata==2023.3 ; python_version >= "3.9" and python_version < "4.0" and platform tzlocal==5.2 ; python_version >= "3.9" and python_version < "4.0" uritemplate==4.1.1 ; python_version >= "3.9" and python_version < "4.0" uritools==4.0.2 ; python_version >= "3.9" and python_version < "4.0" -urllib3==2.1.0 ; python_version >= "3.9" and python_version < "4.0" +urllib3==2.2.2 ; python_version >= "3.9" and python_version < "4.0" webencodings==0.5.1 ; python_version >= "3.9" and python_version < "4.0" -werkzeug==2.3.8 ; python_version >= "3.9" and python_version < "4.0" +werkzeug==3.0.4 ; python_version >= "3.9" and python_version < "4.0" xhtml2pdf==0.2.11 ; python_version >= "3.9" and python_version < "4.0" yadisk==1.3.4 ; python_version >= "3.9" and python_version < "4.0" From 477c7b0b98d0e167924501b2c41a96ed3f92c32e Mon Sep 17 00:00:00 2001 From: FinemechanicPub <93194456+FinemechanicPub@users.noreply.github.com> Date: Mon, 23 Sep 2024 21:57:34 +0300 Subject: [PATCH 12/14] Fix dependencies --- poetry.lock | 13 ++++++++++++- pyproject.toml | 1 + requirements/dev.txt | 1 + requirements/prod.txt | 1 + 4 files changed, 15 insertions(+), 1 deletion(-) diff --git a/poetry.lock b/poetry.lock index 63d20cd3a..871733631 100644 --- a/poetry.lock +++ b/poetry.lock @@ -710,6 +710,17 @@ files = [ [package.dependencies] Django = ">=2.1" +[[package]] +name = "django-private-storage" +version = "3.1.1" +description = "Private media file storage for Django projects" +optional = false +python-versions = "*" +files = [ + {file = "django-private-storage-3.1.1.tar.gz", hash = "sha256:9e8f9e88818b04895cf4be6c86f1255c4befa5466f7d25e1be3a7c2784e9b275"}, + {file = "django_private_storage-3.1.1-py3-none-any.whl", hash = "sha256:fcb14c0f56e1fb5e1984afe689e6a92d79c1347dd5329aa50b53ecec4e517a52"}, +] + [[package]] name = "django-rest-multiple-models" version = "2.1.3" @@ -2760,4 +2771,4 @@ requests = "*" [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "f5bdd2deb4502a2508316b61b9af19f70c4470f49c860f6b95ce74cfd53500da" +content-hash = "2710da768fda5e47d5699b505ac8fd230e3c3c67f08dffc0c8ef2a723b0af41c" diff --git a/pyproject.toml b/pyproject.toml index 0403d240e..4df9fd612 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -63,6 +63,7 @@ sqlparse = "^0.5.0" easy-thumbnails = "^2.8.5" idna = "^3.7" black = "^24.4.0" +django-private-storage = "^3.1.1" [tool.poetry.dev-dependencies] pre-commit = "^2.15.0" diff --git a/requirements/dev.txt b/requirements/dev.txt index 426d56401..51fc7ed8e 100644 --- a/requirements/dev.txt +++ b/requirements/dev.txt @@ -28,6 +28,7 @@ django-filter==21.1 ; python_version >= "3.9" and python_version < "4.0" django-js-asset==2.1.0 ; python_version >= "3.9" and python_version < "4.0" django-phonenumber-field[phonenumbers]==5.2.0 ; python_version >= "3.9" and python_version < "4.0" django-polymorphic==3.1.0 ; python_version >= "3.9" and python_version < "4.0" +django-private-storage==3.1.1 ; python_version >= "3.9" and python_version < "4.0" django-rest-multiple-models==2.1.3 ; python_version >= "3.9" and python_version < "4.0" django==3.2.25 ; python_version >= "3.9" and python_version < "4.0" djangorestframework==3.13.1 ; python_version >= "3.9" and python_version < "4.0" diff --git a/requirements/prod.txt b/requirements/prod.txt index 0b977632d..bb159340a 100644 --- a/requirements/prod.txt +++ b/requirements/prod.txt @@ -22,6 +22,7 @@ django-filter==21.1 ; python_version >= "3.9" and python_version < "4.0" django-js-asset==2.1.0 ; python_version >= "3.9" and python_version < "4.0" django-phonenumber-field[phonenumbers]==5.2.0 ; python_version >= "3.9" and python_version < "4.0" django-polymorphic==3.1.0 ; python_version >= "3.9" and python_version < "4.0" +django-private-storage==3.1.1 ; python_version >= "3.9" and python_version < "4.0" django-rest-multiple-models==2.1.3 ; python_version >= "3.9" and python_version < "4.0" django==3.2.25 ; python_version >= "3.9" and python_version < "4.0" djangorestframework==3.13.1 ; python_version >= "3.9" and python_version < "4.0" From 86137eb16190cea0993c3787b709d2ba87a648a4 Mon Sep 17 00:00:00 2001 From: FinemechanicPub <93194456+FinemechanicPub@users.noreply.github.com> Date: Mon, 23 Sep 2024 22:11:18 +0300 Subject: [PATCH 13/14] Fix migration order --- ...ter_play_url_download.py => 0044_alter_play_url_download.py} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename apps/library/migrations/{0043_alter_play_url_download.py => 0044_alter_play_url_download.py} (96%) diff --git a/apps/library/migrations/0043_alter_play_url_download.py b/apps/library/migrations/0044_alter_play_url_download.py similarity index 96% rename from apps/library/migrations/0043_alter_play_url_download.py rename to apps/library/migrations/0044_alter_play_url_download.py index 2df7bf540..9b45b69e7 100644 --- a/apps/library/migrations/0043_alter_play_url_download.py +++ b/apps/library/migrations/0044_alter_play_url_download.py @@ -25,7 +25,7 @@ def move_from_protected_media(apps, schema_editor): class Migration(migrations.Migration): dependencies = [ - ('library', '0042_alter_author_slug'), + ('library', '0043_alter_socialnetworklink_name'), ] operations = [ From 68d5541807ca57e10e75884cd9121f7da92eedee Mon Sep 17 00:00:00 2001 From: FinemechanicPub <93194456+FinemechanicPub@users.noreply.github.com> Date: Mon, 23 Sep 2024 22:13:40 +0300 Subject: [PATCH 14/14] Formatting --- apps/core/services/file_access.py | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/core/services/file_access.py b/apps/core/services/file_access.py index b5c2553d5..26ead9a09 100644 --- a/apps/core/services/file_access.py +++ b/apps/core/services/file_access.py @@ -1,4 +1,5 @@ """Сервис контроля доступа к файлам для приложени django-private-storage.""" + from pathlib import Path from django.conf import settings