From e0b344267b46530c426c5f358f9fd241a557f9ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89loi=20Rivard?= Date: Fri, 5 Apr 2024 09:46:25 +0200 Subject: [PATCH 01/14] chore: stop support for python 3.8 --- .github/workflows/Check_local_run.yml | 2 +- .pre-commit-config.yaml | 2 +- poetry.lock | 47 +------ pyproject.toml | 4 +- web/b3desk/settings.py | 18 ++- web/requirements.app.txt | 144 ++++++++++---------- web/requirements.dev.txt | 148 ++++++++++---------- web/requirements.doc.txt | 186 +++++++++++++------------- 8 files changed, 251 insertions(+), 300 deletions(-) diff --git a/.github/workflows/Check_local_run.yml b/.github/workflows/Check_local_run.yml index 7fd1e674..c1cf4136 100644 --- a/.github/workflows/Check_local_run.yml +++ b/.github/workflows/Check_local_run.yml @@ -27,10 +27,10 @@ jobs: strategy: matrix: python: + - '3.12' - '3.11' - '3.10' - '3.9' - - '3.8' steps: - name: Setup git diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index d3fbd651..7c68284a 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -29,4 +29,4 @@ repos: rev: v3.15.2 hooks: - id: pyupgrade - args: ["--py38-plus"] + args: ["--py39-plus"] diff --git a/poetry.lock b/poetry.lock index 47d7c741..ff3a8a5f 100644 --- a/poetry.lock +++ b/poetry.lock @@ -38,8 +38,6 @@ files = [ ] [package.dependencies] -importlib-metadata = {version = "*", markers = "python_version < \"3.9\""} -importlib-resources = {version = "*", markers = "python_version < \"3.9\""} Mako = "*" SQLAlchemy = ">=1.3.0" typing-extensions = ">=4" @@ -72,9 +70,6 @@ files = [ {file = "annotated_types-0.6.0.tar.gz", hash = "sha256:563339e807e53ffd9c267e99fc6d9ea23eb8443c08f112651963e24e22f84a5d"}, ] -[package.dependencies] -typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.9\""} - [[package]] name = "async-timeout" version = "4.0.3" @@ -142,7 +137,6 @@ files = [ ] [package.dependencies] -importlib-metadata = {version = ">1", markers = "python_version <= \"3.8\""} pydantic = ">=2.0,<3.0.0" pydantic-settings = ">=2.0,<3.0.0" Sphinx = ">=4.0" @@ -164,43 +158,9 @@ files = [ {file = "Babel-2.14.0.tar.gz", hash = "sha256:6919867db036398ba21eb5c7a0f6b28ab8cbc3ae7a73a44ebe34ae74a4e7d363"}, ] -[package.dependencies] -pytz = {version = ">=2015.7", markers = "python_version < \"3.9\""} - [package.extras] dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"] -[[package]] -name = "backports-zoneinfo" -version = "0.2.1" -description = "Backport of the standard library zoneinfo module" -optional = false -python-versions = ">=3.6" -files = [ - {file = "backports.zoneinfo-0.2.1-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:da6013fd84a690242c310d77ddb8441a559e9cb3d3d59ebac9aca1a57b2e18bc"}, - {file = "backports.zoneinfo-0.2.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:89a48c0d158a3cc3f654da4c2de1ceba85263fafb861b98b59040a5086259722"}, - {file = "backports.zoneinfo-0.2.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:1c5742112073a563c81f786e77514969acb58649bcdf6cdf0b4ed31a348d4546"}, - {file = "backports.zoneinfo-0.2.1-cp36-cp36m-win32.whl", hash = "sha256:e8236383a20872c0cdf5a62b554b27538db7fa1bbec52429d8d106effbaeca08"}, - {file = "backports.zoneinfo-0.2.1-cp36-cp36m-win_amd64.whl", hash = "sha256:8439c030a11780786a2002261569bdf362264f605dfa4d65090b64b05c9f79a7"}, - {file = "backports.zoneinfo-0.2.1-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:f04e857b59d9d1ccc39ce2da1021d196e47234873820cbeaad210724b1ee28ac"}, - {file = "backports.zoneinfo-0.2.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:17746bd546106fa389c51dbea67c8b7c8f0d14b5526a579ca6ccf5ed72c526cf"}, - {file = "backports.zoneinfo-0.2.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:5c144945a7752ca544b4b78c8c41544cdfaf9786f25fe5ffb10e838e19a27570"}, - {file = "backports.zoneinfo-0.2.1-cp37-cp37m-win32.whl", hash = "sha256:e55b384612d93be96506932a786bbcde5a2db7a9e6a4bb4bffe8b733f5b9036b"}, - {file = "backports.zoneinfo-0.2.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a76b38c52400b762e48131494ba26be363491ac4f9a04c1b7e92483d169f6582"}, - {file = "backports.zoneinfo-0.2.1-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:8961c0f32cd0336fb8e8ead11a1f8cd99ec07145ec2931122faaac1c8f7fd987"}, - {file = "backports.zoneinfo-0.2.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:e81b76cace8eda1fca50e345242ba977f9be6ae3945af8d46326d776b4cf78d1"}, - {file = "backports.zoneinfo-0.2.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:7b0a64cda4145548fed9efc10322770f929b944ce5cee6c0dfe0c87bf4c0c8c9"}, - {file = "backports.zoneinfo-0.2.1-cp38-cp38-win32.whl", hash = "sha256:1b13e654a55cd45672cb54ed12148cd33628f672548f373963b0bff67b217328"}, - {file = "backports.zoneinfo-0.2.1-cp38-cp38-win_amd64.whl", hash = "sha256:4a0f800587060bf8880f954dbef70de6c11bbe59c673c3d818921f042f9954a6"}, - {file = "backports.zoneinfo-0.2.1.tar.gz", hash = "sha256:fadbfe37f74051d024037f223b8e001611eac868b5c5b06144ef4d8b799862f2"}, -] - -[package.dependencies] -tzdata = {version = "*", optional = true, markers = "extra == \"tzdata\""} - -[package.extras] -tzdata = ["tzdata"] - [[package]] name = "beautifulsoup4" version = "4.12.3" @@ -294,7 +254,6 @@ files = [ ] [package.dependencies] -"backports.zoneinfo" = {version = ">=0.2.1", markers = "python_version < \"3.9\""} billiard = ">=4.2.0,<5.0" click = ">=8.1.2,<9.0" click-didyoumean = ">=0.3.0" @@ -800,7 +759,6 @@ files = [ [package.dependencies] python-dateutil = ">=2.4" -typing-extensions = {version = ">=3.10.0.1", markers = "python_version <= \"3.8\""} [[package]] name = "filelock" @@ -1251,7 +1209,6 @@ files = [ [package.dependencies] amqp = ">=5.1.1,<6.0.0" -"backports.zoneinfo" = {version = ">=0.2.1", extras = ["tzdata"], markers = "python_version < \"3.9\""} typing-extensions = {version = "*", markers = "python_version < \"3.10\""} vine = "*" @@ -2952,5 +2909,5 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" -python-versions = ">=3.8.1,<4.0" -content-hash = "83bdc5f44aac2ddc4e08a7856fb5f8d1a60cf1ecd726cabd34c25619ed3d4780" +python-versions = ">=3.9,<4.0" +content-hash = "8b4de0bd382a742b2334b748475c9d07d4bd8f22c568c0a1bee1f8eccd0b080b" diff --git a/pyproject.toml b/pyproject.toml index 04b5d2eb..eba0c224 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -10,7 +10,7 @@ authors = ["Your Name "] readme = "README.md" [tool.poetry.dependencies] -python = ">=3.8.1,<4.0" +python = ">=3.9,<4.0" celery = "^5.2.7" filetype = "^1.2.0" flask = "^3.0.0" @@ -82,10 +82,10 @@ isolated_build = true skipsdist = true envlist = style - py38 py39 py310 py311 + py312 coverage doc diff --git a/web/b3desk/settings.py b/web/b3desk/settings.py index 32d6a318..d61d600a 100644 --- a/web/b3desk/settings.py +++ b/web/b3desk/settings.py @@ -2,8 +2,6 @@ import json from typing import Annotated from typing import Any -from typing import Dict -from typing import List from typing import Optional from flask_babel import lazy_gettext as _ @@ -24,7 +22,7 @@ def split_comma_separated_strings(value): return map(str.strip, value.split(",")) -ListOfStrings = Annotated[List[str], BeforeValidator(split_comma_separated_strings)] +ListOfStrings = Annotated[list[str], BeforeValidator(split_comma_separated_strings)] AVAILABLE_WORDINGS = { @@ -231,7 +229,7 @@ class MainSettings(BaseSettings): MAX_MEETINGS_PER_USER: int = 50 """Le nombre maximum de séminaires que peut créer un utilisateur.""" - ALLOWED_MIME_TYPES_SERVER_SIDE: Optional[List[str]] = [ + ALLOWED_MIME_TYPES_SERVER_SIDE: Optional[list[str]] = [ "application/pdf", "image/vnd.dwg", "image/x-xcf", @@ -268,9 +266,9 @@ class MainSettings(BaseSettings): @field_validator("ALLOWED_MIME_TYPES_SERVER_SIDE", mode="before") def get_allowed_mime_types_server_side( cls, - allowed_mime_types_server_side: Optional[List[str]], + allowed_mime_types_server_side: Optional[list[str]], info: ValidationInfo, - ) -> List[str]: + ) -> list[str]: if not allowed_mime_types_server_side: return [] @@ -318,7 +316,7 @@ def get_allowed_mime_types_server_side( https://flask-pyoidc.readthedocs.io/en/latest/api.html?highlight=userinfo_http_method#flask_pyoidc.provider_configuration.ProviderConfiguration """ - OIDC_INFO_REQUESTED_FIELDS: List[str] = ["email", "given_name", "family_name"] + OIDC_INFO_REQUESTED_FIELDS: list[str] = ["email", "given_name", "family_name"] """Probablement un relicat de flask-oidc, semble inutilisé.""" OIDC_ISSUER: Optional[str] = None @@ -492,7 +490,7 @@ def get_attendee_attendee_scopes( """Semble inutilisé.""" @computed_field - def DOCUMENTATION_LINK(self) -> Dict[str, Any]: + def DOCUMENTATION_LINK(self) -> dict[str, Any]: return { "url": self.DOCUMENTATION_LINK_URL, "label": self.DOCUMENTATION_LINK_LABEL, @@ -821,7 +819,7 @@ def get_meeting_mail_subject( """Sous-titre de la page de documentation.""" @computed_field - def WORDINGS(self) -> Dict[str, Any]: + def WORDINGS(self) -> dict[str, Any]: return { "a_meeting": self.WORDING_A_MEETING, "the_meeting": self.WORDING_THE_MEETING, @@ -960,7 +958,7 @@ def get_moderator_welcome_message( @field_validator("EMAIL_WHITELIST") def get_email_whitelist( - cls, email_whitelist: List[str], info: ValidationInfo + cls, email_whitelist: list[str], info: ValidationInfo ) -> str: if not email_whitelist: return DEFAULT_EMAIL_WHITELIST diff --git a/web/requirements.app.txt b/web/requirements.app.txt index 4cb192d2..f5f57ca1 100644 --- a/web/requirements.app.txt +++ b/web/requirements.app.txt @@ -1,73 +1,71 @@ -alembic==1.13.1 ; python_full_version >= "3.8.1" and python_version < "4.0" -amqp==5.2.0 ; python_full_version >= "3.8.1" and python_version < "4.0" -annotated-types==0.6.0 ; python_full_version >= "3.8.1" and python_version < "4.0" -async-timeout==4.0.3 ; python_full_version >= "3.8.1" and python_full_version < "3.11.3" -babel==2.14.0 ; python_full_version >= "3.8.1" and python_version < "4.0" -backports-zoneinfo==0.2.1 ; python_full_version >= "3.8.1" and python_version < "3.9" -backports-zoneinfo[tzdata]==0.2.1 ; python_full_version >= "3.8.1" and python_version < "3.9" -billiard==4.2.0 ; python_full_version >= "3.8.1" and python_version < "4.0" -blinker==1.7.0 ; python_full_version >= "3.8.1" and python_version < "4.0" -cachelib==0.9.0 ; python_full_version >= "3.8.1" and python_version < "4.0" -celery==5.3.6 ; python_full_version >= "3.8.1" and python_version < "4.0" -certifi==2024.2.2 ; python_full_version >= "3.8.1" and python_version < "4.0" -cffi==1.16.0 ; python_full_version >= "3.8.1" and python_version < "4.0" and platform_python_implementation != "PyPy" -charset-normalizer==3.3.2 ; python_full_version >= "3.8.1" and python_version < "4.0" -click-didyoumean==0.3.1 ; python_full_version >= "3.8.1" and python_version < "4.0" -click-plugins==1.1.1 ; python_full_version >= "3.8.1" and python_version < "4.0" -click-repl==0.3.0 ; python_full_version >= "3.8.1" and python_version < "4.0" -click==8.1.7 ; python_full_version >= "3.8.1" and python_version < "4.0" -colorama==0.4.6 ; python_full_version >= "3.8.1" and python_version < "4.0" and platform_system == "Windows" -cryptography==42.0.5 ; python_full_version >= "3.8.1" and python_version < "4.0" -defusedxml==0.7.1 ; python_full_version >= "3.8.1" and python_version < "4.0" -filetype==1.2.0 ; python_full_version >= "3.8.1" and python_version < "4.0" -flask-babel==4.0.0 ; python_full_version >= "3.8.1" and python_version < "4.0" -flask-caching==2.1.0 ; python_full_version >= "3.8.1" and python_version < "4.0" -flask-migrate==4.0.7 ; python_full_version >= "3.8.1" and python_version < "4.0" -flask-pyoidc==3.14.3 ; python_full_version >= "3.8.1" and python_version < "4.0" -flask-sqlalchemy==3.0.5 ; python_full_version >= "3.8.1" and python_version < "4.0" -flask-uploads==0.2.1 ; python_full_version >= "3.8.1" and python_version < "4.0" -flask-wtf==1.2.1 ; python_full_version >= "3.8.1" and python_version < "4.0" -flask==3.0.2 ; python_full_version >= "3.8.1" and python_version < "4.0" -future==1.0.0 ; python_full_version >= "3.8.1" and python_version < "4.0" -greenlet==3.0.3 ; python_full_version >= "3.8.1" and (platform_machine == "aarch64" or platform_machine == "ppc64le" or platform_machine == "x86_64" or platform_machine == "amd64" or platform_machine == "AMD64" or platform_machine == "win32" or platform_machine == "WIN32") and python_version < "4.0" -gunicorn==21.2.0 ; python_full_version >= "3.8.1" and python_version < "4.0" -idna==3.6 ; python_full_version >= "3.8.1" and python_version < "4.0" -importlib-metadata==7.1.0 ; python_full_version >= "3.8.1" and python_version < "3.10" -importlib-resources==6.4.0 ; python_full_version >= "3.8.1" and python_version < "4.0" -itsdangerous==2.1.2 ; python_full_version >= "3.8.1" and python_version < "4.0" -jinja2==3.1.3 ; python_full_version >= "3.8.1" and python_version < "4.0" -kombu==5.3.6 ; python_full_version >= "3.8.1" and python_version < "4.0" -lxml==5.2.1 ; python_full_version >= "3.8.1" and python_version < "4.0" -mako==1.3.2 ; python_full_version >= "3.8.1" and python_version < "4.0" -markupsafe==2.1.5 ; python_full_version >= "3.8.1" and python_version < "4.0" -netaddr==1.2.1 ; python_full_version >= "3.8.1" and python_version < "4.0" -oic==1.6.1 ; python_full_version >= "3.8.1" and python_version < "4.0" -packaging==24.0 ; python_full_version >= "3.8.1" and python_version < "4.0" -prompt-toolkit==3.0.43 ; python_full_version >= "3.8.1" and python_version < "4.0" -psycopg2==2.9.9 ; python_full_version >= "3.8.1" and python_version < "4.0" -pycparser==2.22 ; python_full_version >= "3.8.1" and python_version < "4.0" and platform_python_implementation != "PyPy" -pycryptodomex==3.20.0 ; python_full_version >= "3.8.1" and python_version < "4.0" -pydantic-core==2.16.3 ; python_full_version >= "3.8.1" and python_version < "4.0" -pydantic-settings==2.2.1 ; python_full_version >= "3.8.1" and python_version < "4.0" -pydantic==2.6.4 ; python_full_version >= "3.8.1" and python_version < "4.0" -pyjwkest==1.4.2 ; python_full_version >= "3.8.1" and python_version < "4.0" -python-dateutil==2.9.0.post0 ; python_full_version >= "3.8.1" and python_version < "4.0" -python-dotenv==1.0.1 ; python_full_version >= "3.8.1" and python_version < "4.0" -python-slugify==8.0.4 ; python_full_version >= "3.8.1" and python_version < "4.0" -pytz==2024.1 ; python_full_version >= "3.8.1" and python_version < "4.0" -redis==5.0.3 ; python_full_version >= "3.8.1" and python_version < "4.0" -requests==2.31.0 ; python_full_version >= "3.8.1" and python_version < "4.0" -six==1.16.0 ; python_full_version >= "3.8.1" and python_version < "4.0" -sqlalchemy-json==0.7.0 ; python_full_version >= "3.8.1" and python_version < "4.0" -sqlalchemy-utils==0.41.2 ; python_full_version >= "3.8.1" and python_version < "4.0" -sqlalchemy==1.4.52 ; python_full_version >= "3.8.1" and python_version < "4.0" -text-unidecode==1.3 ; python_full_version >= "3.8.1" and python_version < "4.0" -typing-extensions==4.10.0 ; python_full_version >= "3.8.1" and python_version < "4.0" -tzdata==2024.1 ; python_full_version >= "3.8.1" and python_version < "4.0" -urllib3==2.2.1 ; python_full_version >= "3.8.1" and python_version < "4.0" -vine==5.1.0 ; python_full_version >= "3.8.1" and python_version < "4.0" -wcwidth==0.2.13 ; python_full_version >= "3.8.1" and python_version < "4.0" -webdavclient3==3.14.6 ; python_full_version >= "3.8.1" and python_version < "4.0" -werkzeug==3.0.2 ; python_full_version >= "3.8.1" and python_version < "4.0" -wtforms==3.1.2 ; python_full_version >= "3.8.1" and python_version < "4.0" -zipp==3.18.1 ; python_full_version >= "3.8.1" and python_version < "3.10" +alembic==1.13.1 ; python_version >= "3.9" and python_version < "4.0" +amqp==5.2.0 ; python_version >= "3.9" and python_version < "4.0" +annotated-types==0.6.0 ; python_version >= "3.9" and python_version < "4.0" +async-timeout==4.0.3 ; python_version >= "3.9" and python_full_version < "3.11.3" +babel==2.14.0 ; python_version >= "3.9" and python_version < "4.0" +billiard==4.2.0 ; python_version >= "3.9" and python_version < "4.0" +blinker==1.7.0 ; python_version >= "3.9" and python_version < "4.0" +cachelib==0.9.0 ; python_version >= "3.9" and python_version < "4.0" +celery==5.3.6 ; python_version >= "3.9" and python_version < "4.0" +certifi==2024.2.2 ; 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-didyoumean==0.3.1 ; python_version >= "3.9" and python_version < "4.0" +click-plugins==1.1.1 ; python_version >= "3.9" and python_version < "4.0" +click-repl==0.3.0 ; 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 platform_system == "Windows" +cryptography==42.0.5 ; python_version >= "3.9" and python_version < "4.0" +defusedxml==0.7.1 ; python_version >= "3.9" and python_version < "4.0" +filetype==1.2.0 ; python_version >= "3.9" and python_version < "4.0" +flask-babel==4.0.0 ; python_version >= "3.9" and python_version < "4.0" +flask-caching==2.1.0 ; python_version >= "3.9" and python_version < "4.0" +flask-migrate==4.0.7 ; python_version >= "3.9" and python_version < "4.0" +flask-pyoidc==3.14.3 ; python_version >= "3.9" and python_version < "4.0" +flask-sqlalchemy==3.0.5 ; python_version >= "3.9" and python_version < "4.0" +flask-uploads==0.2.1 ; python_version >= "3.9" and python_version < "4.0" +flask-wtf==1.2.1 ; python_version >= "3.9" and python_version < "4.0" +flask==3.0.2 ; python_version >= "3.9" and python_version < "4.0" +future==1.0.0 ; python_version >= "3.9" and python_version < "4.0" +greenlet==3.0.3 ; python_version >= "3.9" and (platform_machine == "aarch64" or platform_machine == "ppc64le" or platform_machine == "x86_64" or platform_machine == "amd64" or platform_machine == "AMD64" or platform_machine == "win32" or platform_machine == "WIN32") and python_version < "4.0" +gunicorn==21.2.0 ; python_version >= "3.9" and python_version < "4.0" +idna==3.6 ; python_version >= "3.9" and python_version < "4.0" +importlib-metadata==7.1.0 ; python_version >= "3.9" and python_version < "3.10" +importlib-resources==6.4.0 ; python_version >= "3.9" and python_version < "4.0" +itsdangerous==2.1.2 ; python_version >= "3.9" and python_version < "4.0" +jinja2==3.1.3 ; python_version >= "3.9" and python_version < "4.0" +kombu==5.3.6 ; python_version >= "3.9" and python_version < "4.0" +lxml==5.2.1 ; python_version >= "3.9" and python_version < "4.0" +mako==1.3.2 ; python_version >= "3.9" and python_version < "4.0" +markupsafe==2.1.5 ; python_version >= "3.9" and python_version < "4.0" +netaddr==1.2.1 ; python_version >= "3.9" and python_version < "4.0" +oic==1.6.1 ; python_version >= "3.9" and python_version < "4.0" +packaging==24.0 ; python_version >= "3.9" and python_version < "4.0" +prompt-toolkit==3.0.43 ; python_version >= "3.9" and python_version < "4.0" +psycopg2==2.9.9 ; python_version >= "3.9" and python_version < "4.0" +pycparser==2.22 ; python_version >= "3.9" and python_version < "4.0" and platform_python_implementation != "PyPy" +pycryptodomex==3.20.0 ; python_version >= "3.9" and python_version < "4.0" +pydantic-core==2.16.3 ; python_version >= "3.9" and python_version < "4.0" +pydantic-settings==2.2.1 ; python_version >= "3.9" and python_version < "4.0" +pydantic==2.6.4 ; python_version >= "3.9" and python_version < "4.0" +pyjwkest==1.4.2 ; python_version >= "3.9" and python_version < "4.0" +python-dateutil==2.9.0.post0 ; python_version >= "3.9" and python_version < "4.0" +python-dotenv==1.0.1 ; python_version >= "3.9" and python_version < "4.0" +python-slugify==8.0.4 ; python_version >= "3.9" and python_version < "4.0" +pytz==2024.1 ; python_version >= "3.9" and python_version < "4.0" +redis==5.0.3 ; python_version >= "3.9" and python_version < "4.0" +requests==2.31.0 ; python_version >= "3.9" and python_version < "4.0" +six==1.16.0 ; python_version >= "3.9" and python_version < "4.0" +sqlalchemy-json==0.7.0 ; python_version >= "3.9" and python_version < "4.0" +sqlalchemy-utils==0.41.2 ; python_version >= "3.9" and python_version < "4.0" +sqlalchemy==1.4.52 ; python_version >= "3.9" and python_version < "4.0" +text-unidecode==1.3 ; python_version >= "3.9" and python_version < "4.0" +typing-extensions==4.10.0 ; python_version >= "3.9" and python_version < "4.0" +tzdata==2024.1 ; python_version >= "3.9" and python_version < "4.0" +urllib3==2.2.1 ; python_version >= "3.9" and python_version < "4.0" +vine==5.1.0 ; python_version >= "3.9" and python_version < "4.0" +wcwidth==0.2.13 ; python_version >= "3.9" and python_version < "4.0" +webdavclient3==3.14.6 ; python_version >= "3.9" and python_version < "4.0" +werkzeug==3.0.2 ; python_version >= "3.9" and python_version < "4.0" +wtforms==3.1.2 ; python_version >= "3.9" and python_version < "4.0" +zipp==3.18.1 ; python_version >= "3.9" and python_version < "3.10" diff --git a/web/requirements.dev.txt b/web/requirements.dev.txt index 7d3b6cb1..67ee1237 100644 --- a/web/requirements.dev.txt +++ b/web/requirements.dev.txt @@ -1,74 +1,74 @@ -aiosmtpd==1.4.5 ; python_full_version >= "3.8.1" and python_version < "4" -annotated-types==0.6.0 ; python_full_version >= "3.8.1" and python_version < "4.0" -atpublic==4.1.0 ; python_full_version >= "3.8.1" and python_version < "4" -attrs==23.2.0 ; python_full_version >= "3.8.1" and python_version < "4" -authlib==1.3.0 ; python_full_version >= "3.8.1" and python_version < "4.0" -beautifulsoup4==4.12.3 ; python_full_version >= "3.8.1" and python_version < "4" -blinker==1.7.0 ; python_full_version >= "3.8.1" and python_version < "4.0" -canaille[oidc]==0.0.44 ; python_full_version >= "3.8.1" and python_version < "4.0" -cffi==1.16.0 ; python_full_version >= "3.8.1" and python_version < "4" and platform_python_implementation != "PyPy" -cfgv==3.4.0 ; python_full_version >= "3.8.1" and python_version < "4.0" -click==8.1.7 ; python_full_version >= "3.8.1" and python_version < "4.0" -colorama==0.4.6 ; python_full_version >= "3.8.1" and python_version < "4.0" and (sys_platform == "win32" or platform_system == "Windows") -coverage==7.4.4 ; python_full_version >= "3.8.1" and python_version < "4.0" -coverage[toml]==7.4.4 ; python_full_version >= "3.8.1" and python_version < "4.0" -cryptography==42.0.5 ; python_full_version >= "3.8.1" and python_version < "4" -cssselect==1.2.0 ; python_full_version >= "3.8.1" and python_version < "4.0" -defusedxml==0.7.1 ; python_full_version >= "3.8.1" and python_version < "4.0" -distlib==0.3.8 ; python_full_version >= "3.8.1" and python_version < "4.0" -enum-extend==0.1.1 ; python_full_version >= "3.8.1" and python_version < "4.0" -exceptiongroup==1.2.0 ; python_full_version >= "3.8.1" and python_version < "3.11" -faker==24.4.0 ; python_full_version >= "3.8.1" and python_version < "4.0" -filelock==3.13.3 ; python_full_version >= "3.8.1" and python_version < "4.0" -flake8==7.0.0 ; python_full_version >= "3.8.1" and python_version < "4.0" -flask-webtest==0.1.4 ; python_full_version >= "3.8.1" and python_version < "4.0" -flask-wtf==1.2.1 ; python_full_version >= "3.8.1" and python_version < "4.0" -flask==3.0.2 ; python_full_version >= "3.8.1" and python_version < "4.0" -freezegun==1.4.0 ; python_full_version >= "3.8.1" and python_version < "4.0" -identify==2.5.35 ; python_full_version >= "3.8.1" and python_version < "4.0" -importlib-metadata==7.1.0 ; python_full_version >= "3.8.1" and python_version < "3.10" -iniconfig==2.0.0 ; python_full_version >= "3.8.1" and python_version < "4.0" -itsdangerous==2.1.2 ; python_full_version >= "3.8.1" and python_version < "4.0" -jinja2==3.1.3 ; python_full_version >= "3.8.1" and python_version < "4.0" -json5==0.9.24 ; python_full_version >= "3.8.1" and python_version < "4.0" -lxml==5.2.1 ; python_full_version >= "3.8.1" and python_version < "4.0" -markupsafe==2.1.5 ; python_full_version >= "3.8.1" and python_version < "4.0" -mccabe==0.7.0 ; python_full_version >= "3.8.1" and python_version < "4.0" -nodeenv==1.8.0 ; python_full_version >= "3.8.1" and python_version < "4.0" -packaging==24.0 ; python_full_version >= "3.8.1" and python_version < "4.0" -platformdirs==4.2.0 ; python_full_version >= "3.8.1" and python_version < "4.0" -pluggy==1.4.0 ; python_full_version >= "3.8.1" and python_version < "4.0" -portpicker==1.6.0 ; python_full_version >= "3.8.1" and python_version < "4.0" -pre-commit==3.5.0 ; python_full_version >= "3.8.1" and python_version < "4.0" -psutil==5.9.8 ; python_full_version >= "3.8.1" and python_version < "4.0" -pycodestyle==2.11.1 ; python_full_version >= "3.8.1" and python_version < "4.0" -pycparser==2.22 ; python_full_version >= "3.8.1" and python_version < "4" and platform_python_implementation != "PyPy" -pydantic-core==2.16.3 ; python_full_version >= "3.8.1" and python_version < "4.0" -pydantic-settings==2.2.1 ; python_full_version >= "3.8.1" and python_version < "4.0" -pydantic==2.6.4 ; python_full_version >= "3.8.1" and python_version < "4.0" -pyflakes==3.2.0 ; python_full_version >= "3.8.1" and python_version < "4.0" -pyquery==2.0.0 ; python_full_version >= "3.8.1" and python_version < "4.0" -pytest-cov==5.0.0 ; python_full_version >= "3.8.1" and python_version < "4.0" -pytest-dotenv==0.5.2 ; python_full_version >= "3.8.1" and python_version < "4.0" -pytest-iam==0.0.8 ; python_full_version >= "3.8.1" and python_version < "4.0" -pytest-mock==3.14.0 ; python_full_version >= "3.8.1" and python_version < "4.0" -pytest-smtpd==0.1.0 ; python_full_version >= "3.8.1" and python_version < "4" -pytest==8.1.1 ; python_full_version >= "3.8.1" and python_version < "4.0" -python-dateutil==2.9.0.post0 ; python_full_version >= "3.8.1" and python_version < "4.0" -python-dotenv==1.0.1 ; python_full_version >= "3.8.1" and python_version < "4.0" -pyyaml==6.0.1 ; python_full_version >= "3.8.1" and python_version < "4.0" -setuptools==69.2.0 ; python_full_version >= "3.8.1" and python_version < "4.0" -six==1.16.0 ; python_full_version >= "3.8.1" and python_version < "4.0" -smtpdfix==0.5.1 ; python_full_version >= "3.8.1" and python_version < "4" -soupsieve==2.5 ; python_full_version >= "3.8.1" and python_version < "4" -sphinx-enum-extend==0.1.3 ; python_full_version >= "3.8.1" and python_version < "4.0" -tomli==2.0.1 ; python_full_version >= "3.8.1" and python_full_version <= "3.11.0a6" -typing-extensions==4.10.0 ; python_full_version >= "3.8.1" and python_version < "4.0" -virtualenv==20.25.1 ; python_full_version >= "3.8.1" and python_version < "4.0" -waitress==3.0.0 ; python_full_version >= "3.8.1" and python_version < "4" -webob==1.8.7 ; python_full_version >= "3.8.1" and python_version < "4" -webtest==3.0.0 ; python_full_version >= "3.8.1" and python_version < "4" -werkzeug==3.0.2 ; python_full_version >= "3.8.1" and python_version < "4.0" -wsgidav==4.3.2 ; python_full_version >= "3.8.1" and python_version < "4.0" -wtforms==3.1.2 ; python_full_version >= "3.8.1" and python_version < "4.0" -zipp==3.18.1 ; python_full_version >= "3.8.1" and python_version < "3.10" +aiosmtpd==1.4.5 ; python_version >= "3.9" and python_version < "4" +annotated-types==0.6.0 ; python_version >= "3.9" and python_version < "4.0" +atpublic==4.1.0 ; python_version >= "3.9" and python_version < "4" +attrs==23.2.0 ; python_version >= "3.9" and python_version < "4" +authlib==1.3.0 ; python_version >= "3.9" and python_version < "4.0" +beautifulsoup4==4.12.3 ; python_version >= "3.9" and python_version < "4" +blinker==1.7.0 ; python_version >= "3.9" and python_version < "4.0" +canaille[oidc]==0.0.45 ; python_version >= "3.9" and python_version < "4.0" +cffi==1.16.0 ; python_version >= "3.9" and python_version < "4" and platform_python_implementation != "PyPy" +cfgv==3.4.0 ; 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 platform_system == "Windows") +coverage==7.4.4 ; python_version >= "3.9" and python_version < "4.0" +coverage[toml]==7.4.4 ; python_version >= "3.9" and python_version < "4.0" +cryptography==42.0.5 ; python_version >= "3.9" and python_version < "4" +cssselect==1.2.0 ; python_version >= "3.9" and python_version < "4.0" +defusedxml==0.7.1 ; python_version >= "3.9" and python_version < "4.0" +distlib==0.3.8 ; python_version >= "3.9" and python_version < "4.0" +enum-extend==0.1.1 ; python_version >= "3.9" and python_version < "4.0" +exceptiongroup==1.2.0 ; python_version >= "3.9" and python_version < "3.11" +faker==24.4.0 ; python_version >= "3.9" and python_version < "4.0" +filelock==3.13.3 ; python_version >= "3.9" and python_version < "4.0" +flake8==7.0.0 ; python_version >= "3.9" and python_version < "4.0" +flask-webtest==0.1.4 ; python_version >= "3.9" and python_version < "4.0" +flask-wtf==1.2.1 ; python_version >= "3.9" and python_version < "4.0" +flask==3.0.2 ; python_version >= "3.9" and python_version < "4.0" +freezegun==1.4.0 ; python_version >= "3.9" and python_version < "4.0" +identify==2.5.35 ; python_version >= "3.9" and python_version < "4.0" +importlib-metadata==7.1.0 ; python_version >= "3.9" and python_version < "3.10" +iniconfig==2.0.0 ; python_version >= "3.9" and python_version < "4.0" +itsdangerous==2.1.2 ; python_version >= "3.9" and python_version < "4.0" +jinja2==3.1.3 ; python_version >= "3.9" and python_version < "4.0" +json5==0.9.24 ; python_version >= "3.9" and python_version < "4.0" +lxml==5.2.1 ; python_version >= "3.9" and python_version < "4.0" +markupsafe==2.1.5 ; python_version >= "3.9" and python_version < "4.0" +mccabe==0.7.0 ; python_version >= "3.9" and python_version < "4.0" +nodeenv==1.8.0 ; python_version >= "3.9" and python_version < "4.0" +packaging==24.0 ; python_version >= "3.9" and python_version < "4.0" +platformdirs==4.2.0 ; python_version >= "3.9" and python_version < "4.0" +pluggy==1.4.0 ; python_version >= "3.9" and python_version < "4.0" +portpicker==1.6.0 ; python_version >= "3.9" and python_version < "4.0" +pre-commit==3.5.0 ; python_version >= "3.9" and python_version < "4.0" +psutil==5.9.8 ; python_version >= "3.9" and python_version < "4.0" +pycodestyle==2.11.1 ; python_version >= "3.9" and python_version < "4.0" +pycparser==2.22 ; python_version >= "3.9" and python_version < "4" and platform_python_implementation != "PyPy" +pydantic-core==2.16.3 ; python_version >= "3.9" and python_version < "4.0" +pydantic-settings==2.2.1 ; python_version >= "3.9" and python_version < "4.0" +pydantic==2.6.4 ; python_version >= "3.9" and python_version < "4.0" +pyflakes==3.2.0 ; python_version >= "3.9" and python_version < "4.0" +pyquery==2.0.0 ; python_version >= "3.9" and python_version < "4.0" +pytest-cov==5.0.0 ; python_version >= "3.9" and python_version < "4.0" +pytest-dotenv==0.5.2 ; python_version >= "3.9" and python_version < "4.0" +pytest-iam==0.0.9 ; python_version >= "3.9" and python_version < "4.0" +pytest-mock==3.14.0 ; python_version >= "3.9" and python_version < "4.0" +pytest-smtpd==0.1.0 ; python_version >= "3.9" and python_version < "4" +pytest==8.1.1 ; python_version >= "3.9" and python_version < "4.0" +python-dateutil==2.9.0.post0 ; python_version >= "3.9" and python_version < "4.0" +python-dotenv==1.0.1 ; python_version >= "3.9" and python_version < "4.0" +pyyaml==6.0.1 ; python_version >= "3.9" and python_version < "4.0" +setuptools==69.2.0 ; python_version >= "3.9" and python_version < "4.0" +six==1.16.0 ; python_version >= "3.9" and python_version < "4.0" +smtpdfix==0.5.1 ; python_version >= "3.9" and python_version < "4" +soupsieve==2.5 ; python_version >= "3.9" and python_version < "4" +sphinx-enum-extend==0.1.3 ; python_version >= "3.9" and python_version < "4.0" +tomli==2.0.1 ; python_version >= "3.9" and python_full_version <= "3.11.0a6" +typing-extensions==4.10.0 ; python_version >= "3.9" and python_version < "4.0" +virtualenv==20.25.1 ; python_version >= "3.9" and python_version < "4.0" +waitress==3.0.0 ; python_version >= "3.9" and python_version < "4" +webob==1.8.7 ; python_version >= "3.9" and python_version < "4" +webtest==3.0.0 ; python_version >= "3.9" and python_version < "4" +werkzeug==3.0.2 ; python_version >= "3.9" and python_version < "4.0" +wsgidav==4.3.2 ; python_version >= "3.9" and python_version < "4.0" +wtforms==3.1.2 ; python_version >= "3.9" and python_version < "4.0" +zipp==3.18.1 ; python_version >= "3.9" and python_version < "3.10" diff --git a/web/requirements.doc.txt b/web/requirements.doc.txt index f1838552..968fc6d9 100644 --- a/web/requirements.doc.txt +++ b/web/requirements.doc.txt @@ -1,94 +1,92 @@ -alabaster==0.7.13 ; python_full_version >= "3.8.1" and python_version < "4.0" -alembic==1.13.1 ; python_full_version >= "3.8.1" and python_version < "4.0" -amqp==5.2.0 ; python_full_version >= "3.8.1" and python_version < "4.0" -annotated-types==0.6.0 ; python_full_version >= "3.8.1" and python_version < "4.0" -async-timeout==4.0.3 ; python_full_version >= "3.8.1" and python_full_version < "3.11.3" -autodoc-pydantic==2.1.0 ; python_full_version >= "3.8.1" and python_version < "4.0" -babel==2.14.0 ; python_full_version >= "3.8.1" and python_version < "4.0" -backports-zoneinfo==0.2.1 ; python_full_version >= "3.8.1" and python_version < "3.9" -backports-zoneinfo[tzdata]==0.2.1 ; python_full_version >= "3.8.1" and python_version < "3.9" -billiard==4.2.0 ; python_full_version >= "3.8.1" and python_version < "4.0" -blinker==1.7.0 ; python_full_version >= "3.8.1" and python_version < "4.0" -cachelib==0.9.0 ; python_full_version >= "3.8.1" and python_version < "4.0" -celery==5.3.6 ; python_full_version >= "3.8.1" and python_version < "4.0" -certifi==2024.2.2 ; python_full_version >= "3.8.1" and python_version < "4.0" -cffi==1.16.0 ; python_full_version >= "3.8.1" and python_version < "4.0" and platform_python_implementation != "PyPy" -charset-normalizer==3.3.2 ; python_full_version >= "3.8.1" and python_version < "4.0" -click-didyoumean==0.3.1 ; python_full_version >= "3.8.1" and python_version < "4.0" -click-plugins==1.1.1 ; python_full_version >= "3.8.1" and python_version < "4.0" -click-repl==0.3.0 ; python_full_version >= "3.8.1" and python_version < "4.0" -click==8.1.7 ; python_full_version >= "3.8.1" and python_version < "4.0" -colorama==0.4.6 ; python_full_version >= "3.8.1" and python_version < "4.0" and (sys_platform == "win32" or platform_system == "Windows") -cryptography==42.0.5 ; python_full_version >= "3.8.1" and python_version < "4.0" -defusedxml==0.7.1 ; python_full_version >= "3.8.1" and python_version < "4.0" -docutils==0.20.1 ; python_full_version >= "3.8.1" and python_version < "4.0" -filetype==1.2.0 ; python_full_version >= "3.8.1" and python_version < "4.0" -flask-babel==4.0.0 ; python_full_version >= "3.8.1" and python_version < "4.0" -flask-caching==2.1.0 ; python_full_version >= "3.8.1" and python_version < "4.0" -flask-migrate==4.0.7 ; python_full_version >= "3.8.1" and python_version < "4.0" -flask-pyoidc==3.14.3 ; python_full_version >= "3.8.1" and python_version < "4.0" -flask-sqlalchemy==3.0.5 ; python_full_version >= "3.8.1" and python_version < "4.0" -flask-uploads==0.2.1 ; python_full_version >= "3.8.1" and python_version < "4.0" -flask-wtf==1.2.1 ; python_full_version >= "3.8.1" and python_version < "4.0" -flask==3.0.2 ; python_full_version >= "3.8.1" and python_version < "4.0" -future==1.0.0 ; python_full_version >= "3.8.1" and python_version < "4.0" -greenlet==3.0.3 ; python_full_version >= "3.8.1" and (platform_machine == "aarch64" or platform_machine == "ppc64le" or platform_machine == "x86_64" or platform_machine == "amd64" or platform_machine == "AMD64" or platform_machine == "win32" or platform_machine == "WIN32") and python_version < "4.0" -gunicorn==21.2.0 ; python_full_version >= "3.8.1" and python_version < "4.0" -idna==3.6 ; python_full_version >= "3.8.1" and python_version < "4.0" -imagesize==1.4.1 ; python_full_version >= "3.8.1" and python_version < "4.0" -importlib-metadata==7.1.0 ; python_full_version >= "3.8.1" and python_version < "3.10" -importlib-resources==6.4.0 ; python_full_version >= "3.8.1" and python_version < "4.0" -itsdangerous==2.1.2 ; python_full_version >= "3.8.1" and python_version < "4.0" -jinja2==3.1.3 ; python_full_version >= "3.8.1" and python_version < "4.0" -kombu==5.3.6 ; python_full_version >= "3.8.1" and python_version < "4.0" -lxml==5.2.1 ; python_full_version >= "3.8.1" and python_version < "4.0" -mako==1.3.2 ; python_full_version >= "3.8.1" and python_version < "4.0" -markdown-it-py==3.0.0 ; python_full_version >= "3.8.1" and python_version < "4.0" -markupsafe==2.1.5 ; python_full_version >= "3.8.1" and python_version < "4.0" -mdit-py-plugins==0.4.0 ; python_full_version >= "3.8.1" and python_version < "4.0" -mdurl==0.1.2 ; python_full_version >= "3.8.1" and python_version < "4.0" -myst-parser==2.0.0 ; python_full_version >= "3.8.1" and python_version < "4.0" -netaddr==1.2.1 ; python_full_version >= "3.8.1" and python_version < "4.0" -oic==1.6.1 ; python_full_version >= "3.8.1" and python_version < "4.0" -packaging==24.0 ; python_full_version >= "3.8.1" and python_version < "4.0" -prompt-toolkit==3.0.43 ; python_full_version >= "3.8.1" and python_version < "4.0" -psycopg2==2.9.9 ; python_full_version >= "3.8.1" and python_version < "4.0" -pycparser==2.22 ; python_full_version >= "3.8.1" and python_version < "4.0" and platform_python_implementation != "PyPy" -pycryptodomex==3.20.0 ; python_full_version >= "3.8.1" and python_version < "4.0" -pydantic-core==2.16.3 ; python_full_version >= "3.8.1" and python_version < "4.0" -pydantic-settings==2.2.1 ; python_full_version >= "3.8.1" and python_version < "4.0" -pydantic==2.6.4 ; python_full_version >= "3.8.1" and python_version < "4.0" -pygments==2.17.2 ; python_full_version >= "3.8.1" and python_version < "4.0" -pyjwkest==1.4.2 ; python_full_version >= "3.8.1" and python_version < "4.0" -python-dateutil==2.9.0.post0 ; python_full_version >= "3.8.1" and python_version < "4.0" -python-dotenv==1.0.1 ; python_full_version >= "3.8.1" and python_version < "4.0" -python-slugify==8.0.4 ; python_full_version >= "3.8.1" and python_version < "4.0" -pytz==2024.1 ; python_full_version >= "3.8.1" and python_version < "4.0" -pyyaml==6.0.1 ; python_full_version >= "3.8.1" and python_version < "4.0" -redis==5.0.3 ; python_full_version >= "3.8.1" and python_version < "4.0" -requests==2.31.0 ; python_full_version >= "3.8.1" and python_version < "4.0" -six==1.16.0 ; python_full_version >= "3.8.1" and python_version < "4.0" -snowballstemmer==2.2.0 ; python_full_version >= "3.8.1" and python_version < "4.0" -sphinx-issues==4.0.0 ; python_full_version >= "3.8.1" and python_version < "4.0" -sphinx-rtd-theme==2.0.0 ; python_full_version >= "3.8.1" and python_version < "4.0" -sphinx==7.1.2 ; python_full_version >= "3.8.1" and python_version < "4.0" -sphinxcontrib-applehelp==1.0.4 ; python_full_version >= "3.8.1" and python_version < "4.0" -sphinxcontrib-devhelp==1.0.2 ; python_full_version >= "3.8.1" and python_version < "4.0" -sphinxcontrib-htmlhelp==2.0.1 ; python_full_version >= "3.8.1" and python_version < "4.0" -sphinxcontrib-jquery==4.1 ; python_full_version >= "3.8.1" and python_version < "4.0" -sphinxcontrib-jsmath==1.0.1 ; python_full_version >= "3.8.1" and python_version < "4.0" -sphinxcontrib-qthelp==1.0.3 ; python_full_version >= "3.8.1" and python_version < "4.0" -sphinxcontrib-serializinghtml==1.1.5 ; python_full_version >= "3.8.1" and python_version < "4.0" -sqlalchemy-json==0.7.0 ; python_full_version >= "3.8.1" and python_version < "4.0" -sqlalchemy-utils==0.41.2 ; python_full_version >= "3.8.1" and python_version < "4.0" -sqlalchemy==1.4.52 ; python_full_version >= "3.8.1" and python_version < "4.0" -text-unidecode==1.3 ; python_full_version >= "3.8.1" and python_version < "4.0" -typing-extensions==4.10.0 ; python_full_version >= "3.8.1" and python_version < "4.0" -tzdata==2024.1 ; python_full_version >= "3.8.1" and python_version < "4.0" -urllib3==2.2.1 ; python_full_version >= "3.8.1" and python_version < "4.0" -vine==5.1.0 ; python_full_version >= "3.8.1" and python_version < "4.0" -wcwidth==0.2.13 ; python_full_version >= "3.8.1" and python_version < "4.0" -webdavclient3==3.14.6 ; python_full_version >= "3.8.1" and python_version < "4.0" -werkzeug==3.0.2 ; python_full_version >= "3.8.1" and python_version < "4.0" -wtforms==3.1.2 ; python_full_version >= "3.8.1" and python_version < "4.0" -zipp==3.18.1 ; python_full_version >= "3.8.1" and python_version < "3.10" +alabaster==0.7.13 ; python_version >= "3.9" and python_version < "4.0" +alembic==1.13.1 ; python_version >= "3.9" and python_version < "4.0" +amqp==5.2.0 ; python_version >= "3.9" and python_version < "4.0" +annotated-types==0.6.0 ; python_version >= "3.9" and python_version < "4.0" +async-timeout==4.0.3 ; python_version >= "3.9" and python_full_version < "3.11.3" +autodoc-pydantic==2.1.0 ; python_version >= "3.9" and python_version < "4.0" +babel==2.14.0 ; python_version >= "3.9" and python_version < "4.0" +billiard==4.2.0 ; python_version >= "3.9" and python_version < "4.0" +blinker==1.7.0 ; python_version >= "3.9" and python_version < "4.0" +cachelib==0.9.0 ; python_version >= "3.9" and python_version < "4.0" +celery==5.3.6 ; python_version >= "3.9" and python_version < "4.0" +certifi==2024.2.2 ; 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-didyoumean==0.3.1 ; python_version >= "3.9" and python_version < "4.0" +click-plugins==1.1.1 ; python_version >= "3.9" and python_version < "4.0" +click-repl==0.3.0 ; 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 platform_system == "Windows") +cryptography==42.0.5 ; python_version >= "3.9" and python_version < "4.0" +defusedxml==0.7.1 ; python_version >= "3.9" and python_version < "4.0" +docutils==0.20.1 ; python_version >= "3.9" and python_version < "4.0" +filetype==1.2.0 ; python_version >= "3.9" and python_version < "4.0" +flask-babel==4.0.0 ; python_version >= "3.9" and python_version < "4.0" +flask-caching==2.1.0 ; python_version >= "3.9" and python_version < "4.0" +flask-migrate==4.0.7 ; python_version >= "3.9" and python_version < "4.0" +flask-pyoidc==3.14.3 ; python_version >= "3.9" and python_version < "4.0" +flask-sqlalchemy==3.0.5 ; python_version >= "3.9" and python_version < "4.0" +flask-uploads==0.2.1 ; python_version >= "3.9" and python_version < "4.0" +flask-wtf==1.2.1 ; python_version >= "3.9" and python_version < "4.0" +flask==3.0.2 ; python_version >= "3.9" and python_version < "4.0" +future==1.0.0 ; python_version >= "3.9" and python_version < "4.0" +greenlet==3.0.3 ; python_version >= "3.9" and (platform_machine == "aarch64" or platform_machine == "ppc64le" or platform_machine == "x86_64" or platform_machine == "amd64" or platform_machine == "AMD64" or platform_machine == "win32" or platform_machine == "WIN32") and python_version < "4.0" +gunicorn==21.2.0 ; python_version >= "3.9" and python_version < "4.0" +idna==3.6 ; python_version >= "3.9" and python_version < "4.0" +imagesize==1.4.1 ; python_version >= "3.9" and python_version < "4.0" +importlib-metadata==7.1.0 ; python_version >= "3.9" and python_version < "3.10" +importlib-resources==6.4.0 ; python_version >= "3.9" and python_version < "4.0" +itsdangerous==2.1.2 ; python_version >= "3.9" and python_version < "4.0" +jinja2==3.1.3 ; python_version >= "3.9" and python_version < "4.0" +kombu==5.3.6 ; python_version >= "3.9" and python_version < "4.0" +lxml==5.2.1 ; python_version >= "3.9" and python_version < "4.0" +mako==1.3.2 ; python_version >= "3.9" and python_version < "4.0" +markdown-it-py==3.0.0 ; python_version >= "3.9" and python_version < "4.0" +markupsafe==2.1.5 ; python_version >= "3.9" and python_version < "4.0" +mdit-py-plugins==0.4.0 ; python_version >= "3.9" and python_version < "4.0" +mdurl==0.1.2 ; python_version >= "3.9" and python_version < "4.0" +myst-parser==2.0.0 ; python_version >= "3.9" and python_version < "4.0" +netaddr==1.2.1 ; python_version >= "3.9" and python_version < "4.0" +oic==1.6.1 ; python_version >= "3.9" and python_version < "4.0" +packaging==24.0 ; python_version >= "3.9" and python_version < "4.0" +prompt-toolkit==3.0.43 ; python_version >= "3.9" and python_version < "4.0" +psycopg2==2.9.9 ; python_version >= "3.9" and python_version < "4.0" +pycparser==2.22 ; python_version >= "3.9" and python_version < "4.0" and platform_python_implementation != "PyPy" +pycryptodomex==3.20.0 ; python_version >= "3.9" and python_version < "4.0" +pydantic-core==2.16.3 ; python_version >= "3.9" and python_version < "4.0" +pydantic-settings==2.2.1 ; python_version >= "3.9" and python_version < "4.0" +pydantic==2.6.4 ; python_version >= "3.9" and python_version < "4.0" +pygments==2.17.2 ; python_version >= "3.9" and python_version < "4.0" +pyjwkest==1.4.2 ; python_version >= "3.9" and python_version < "4.0" +python-dateutil==2.9.0.post0 ; python_version >= "3.9" and python_version < "4.0" +python-dotenv==1.0.1 ; python_version >= "3.9" and python_version < "4.0" +python-slugify==8.0.4 ; python_version >= "3.9" and python_version < "4.0" +pytz==2024.1 ; python_version >= "3.9" and python_version < "4.0" +pyyaml==6.0.1 ; python_version >= "3.9" and python_version < "4.0" +redis==5.0.3 ; python_version >= "3.9" and python_version < "4.0" +requests==2.31.0 ; python_version >= "3.9" and python_version < "4.0" +six==1.16.0 ; python_version >= "3.9" and python_version < "4.0" +snowballstemmer==2.2.0 ; python_version >= "3.9" and python_version < "4.0" +sphinx-issues==4.0.0 ; python_version >= "3.9" and python_version < "4.0" +sphinx-rtd-theme==2.0.0 ; python_version >= "3.9" and python_version < "4.0" +sphinx==7.1.2 ; python_version >= "3.9" and python_version < "4.0" +sphinxcontrib-applehelp==1.0.4 ; python_version >= "3.9" and python_version < "4.0" +sphinxcontrib-devhelp==1.0.2 ; python_version >= "3.9" and python_version < "4.0" +sphinxcontrib-htmlhelp==2.0.1 ; python_version >= "3.9" and python_version < "4.0" +sphinxcontrib-jquery==4.1 ; python_version >= "3.9" and python_version < "4.0" +sphinxcontrib-jsmath==1.0.1 ; python_version >= "3.9" and python_version < "4.0" +sphinxcontrib-qthelp==1.0.3 ; python_version >= "3.9" and python_version < "4.0" +sphinxcontrib-serializinghtml==1.1.5 ; python_version >= "3.9" and python_version < "4.0" +sqlalchemy-json==0.7.0 ; python_version >= "3.9" and python_version < "4.0" +sqlalchemy-utils==0.41.2 ; python_version >= "3.9" and python_version < "4.0" +sqlalchemy==1.4.52 ; python_version >= "3.9" and python_version < "4.0" +text-unidecode==1.3 ; python_version >= "3.9" and python_version < "4.0" +typing-extensions==4.10.0 ; python_version >= "3.9" and python_version < "4.0" +tzdata==2024.1 ; python_version >= "3.9" and python_version < "4.0" +urllib3==2.2.1 ; python_version >= "3.9" and python_version < "4.0" +vine==5.1.0 ; python_version >= "3.9" and python_version < "4.0" +wcwidth==0.2.13 ; python_version >= "3.9" and python_version < "4.0" +webdavclient3==3.14.6 ; python_version >= "3.9" and python_version < "4.0" +werkzeug==3.0.2 ; python_version >= "3.9" and python_version < "4.0" +wtforms==3.1.2 ; python_version >= "3.9" and python_version < "4.0" +zipp==3.18.1 ; python_version >= "3.9" and python_version < "3.10" From baa7140a8a47a00cdcb760755f89146c986c40de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89loi=20Rivard?= Date: Fri, 5 Apr 2024 10:00:00 +0200 Subject: [PATCH 02/14] doc: fix a wrong link to a document --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index aee9ae02..8572017b 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -135,7 +135,7 @@ Le projet est organisé de la façon suivante : - Les modification sont faites sur une `branche` de votre **fork**. - Lorsque le développement est prêt, une *pull request* vers la branche `main` du projet d'*origine* est réalisée -- Une fois ce {doc}`développement validé <../maintainers/pullRequestValidation>`, les mainteneurs du projet vont *merger* ces modifications sur `main` +- Une fois ce {doc}`développement validé <../maintainers/codeReview>`, les mainteneurs du projet vont *merger* ces modifications sur `main` - Lorsque suffisamment de modifications sont faites dans `main`, les mainteneurs peuvent décider de créer une nouvelle version du projet - La branche `main` est *mergée* dans la branche `production`, référente pour les déploiements du projet B3Desk From 60a8acc55351fd52ff3b28a3e980230ec8066200 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89loi=20Rivard?= Date: Fri, 5 Apr 2024 10:01:24 +0200 Subject: [PATCH 03/14] chore: sphinx fail on errors --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index eba0c224..6a273f1a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -109,7 +109,7 @@ commands = [testenv:doc] commands = poetry install --with doc - poetry run sphinx-build documentation build/sphinx/html + poetry run sphinx-build -W --keep-going documentation build/sphinx/html """ [tool.coverage.run] From 357f3024590ad4d3725819bb0900d5b0b738efe4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89loi=20Rivard?= Date: Fri, 5 Apr 2024 10:01:48 +0200 Subject: [PATCH 04/14] chore: ignore .tox directory --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 1b63d3aa..7766f358 100644 --- a/.gitignore +++ b/.gitignore @@ -35,3 +35,4 @@ web-local.env *.swp messages.mo +.tox From 59e3ae153a95a2abfacd19addd4a5683a4482532 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89loi=20Rivard?= Date: Tue, 16 Apr 2024 16:09:59 +0200 Subject: [PATCH 05/14] tests: speed up unit tests by caching the jinja bytecode between tests --- web/tests/conftest.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/web/tests/conftest.py b/web/tests/conftest.py index fa803826..2e479c72 100644 --- a/web/tests/conftest.py +++ b/web/tests/conftest.py @@ -8,14 +8,15 @@ import pytest from flask_migrate import Migrate from flask_webtest import TestApp +from jinja2 import FileSystemBytecodeCache from wsgidav.fs_dav_provider import FilesystemProvider from wsgidav.wsgidav_app import WsgiDAVApp import b3desk.utils from b3desk import create_app +from b3desk.models import db b3desk.utils.secret_key = lambda: "AZERTY" -from b3desk.models import db @pytest.fixture @@ -108,9 +109,16 @@ def configuration(tmp_path, iam_server, iam_client, smtpd): } +@pytest.fixture(scope="session") +def jinja_cache_directory(tmp_path_factory): + return tmp_path_factory.mktemp("cache") + + @pytest.fixture -def app(configuration): +def app(configuration, jinja_cache_directory): app = create_app(configuration) + app.jinja_env.bytecode_cache = FileSystemBytecodeCache(jinja_cache_directory) + with app.app_context(): Migrate(app, db, compare_type=True) db.create_all() From 01dd8236e1c65420792498ac4e3a8b328744582b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89loi=20Rivard?= Date: Mon, 22 Apr 2024 09:27:13 +0200 Subject: [PATCH 06/14] chore: update dependencies --- poetry.lock | 421 +++++++++++++++++++++++++--------------------------- 1 file changed, 201 insertions(+), 220 deletions(-) diff --git a/poetry.lock b/poetry.lock index ff3a8a5f..2a026165 100644 --- a/poetry.lock +++ b/poetry.lock @@ -17,13 +17,13 @@ attrs = "*" [[package]] name = "alabaster" -version = "0.7.13" -description = "A configurable sidebar-enabled Sphinx theme" +version = "0.7.16" +description = "A light, configurable Sphinx theme" optional = false -python-versions = ">=3.6" +python-versions = ">=3.9" files = [ - {file = "alabaster-0.7.13-py3-none-any.whl", hash = "sha256:1ee19aca801bbabb5ba3f5f258e4422dfa86f82f3e9cefb0859b283cdd7f62a3"}, - {file = "alabaster-0.7.13.tar.gz", hash = "sha256:a27a4a084d5e690e16e01e03ad2b2e552c61a65469419b907243193de1a84ae2"}, + {file = "alabaster-0.7.16-py3-none-any.whl", hash = "sha256:b46733c07dce03ae4e150330b975c75737fa60f0a7c591b6c8bf4928a28e2c92"}, + {file = "alabaster-0.7.16.tar.gz", hash = "sha256:75a8b99c28a5dad50dd7f8ccdd447a121ddb3892da9e53d1ca5cca3106d58d65"}, ] [[package]] @@ -217,13 +217,13 @@ files = [ [[package]] name = "canaille" -version = "0.0.45" +version = "0.0.51" description = "Lightweight identity and autorization management software" optional = false python-versions = "<4.0,>=3.8" files = [ - {file = "canaille-0.0.45-cp311-cp311-manylinux_2_39_x86_64.whl", hash = "sha256:135d74840257cb6a38e5af3462dcb18a96eaa5150b4d715ce7fe62a761362c88"}, - {file = "canaille-0.0.45.tar.gz", hash = "sha256:6d34e0ede5a91ca49c66723db25c687f08a578e970d85c6f36169fa34da213f2"}, + {file = "canaille-0.0.51-cp312-cp312-manylinux_2_39_x86_64.whl", hash = "sha256:abe9d39e55442e341322fd82bf9d94183530e40563afe2f33d3ac9c0f23e7bc2"}, + {file = "canaille-0.0.51.tar.gz", hash = "sha256:b5598c7ef9325940ebc3b6fbde55d0978d900ea296a34a98d9ce8ff46e08d3c6"}, ] [package.dependencies] @@ -231,7 +231,6 @@ authlib = {version = ">=1.2.1,<2.0.0", optional = true, markers = "extra == \"oi flask = ">=3.0.0,<4.0.0" flask-wtf = ">=1.2.1,<2.0.0" pydantic-settings = ">=2.0.3,<3.0.0" -sphinx-enum-extend = ">=0.1.3,<0.2.0" wtforms = ">=3.1.1,<4.0.0" [package.extras] @@ -244,13 +243,13 @@ sql = ["passlib (>=1.7.4,<2.0.0)", "sqlalchemy (>=2.0.23,<3.0.0)", "sqlalchemy-j [[package]] name = "celery" -version = "5.3.6" +version = "5.4.0" description = "Distributed Task Queue." optional = false python-versions = ">=3.8" files = [ - {file = "celery-5.3.6-py3-none-any.whl", hash = "sha256:9da4ea0118d232ce97dff5ed4974587fb1c0ff5c10042eb15278487cdd27d1af"}, - {file = "celery-5.3.6.tar.gz", hash = "sha256:870cc71d737c0200c397290d730344cc991d13a057534353d124c9380267aab9"}, + {file = "celery-5.4.0-py3-none-any.whl", hash = "sha256:369631eb580cf8c51a82721ec538684994f8277637edde2dfc0dacd73ed97f64"}, + {file = "celery-5.4.0.tar.gz", hash = "sha256:504a19140e8d3029d5acad88330c541d4c3f64c789d85f94756762d8bca7e706"}, ] [package.dependencies] @@ -266,7 +265,7 @@ vine = ">=5.1.0,<6.0" [package.extras] arangodb = ["pyArango (>=2.0.2)"] -auth = ["cryptography (==41.0.5)"] +auth = ["cryptography (==42.0.5)"] azureblockblob = ["azure-storage-blob (>=12.15.0)"] brotli = ["brotli (>=1.0.0)", "brotlipy (>=0.7.0)"] cassandra = ["cassandra-driver (>=3.25.0,<4)"] @@ -276,22 +275,23 @@ couchbase = ["couchbase (>=3.0.0)"] couchdb = ["pycouchdb (==1.14.2)"] django = ["Django (>=2.2.28)"] dynamodb = ["boto3 (>=1.26.143)"] -elasticsearch = ["elastic-transport (<=8.10.0)", "elasticsearch (<=8.11.0)"] +elasticsearch = ["elastic-transport (<=8.13.0)", "elasticsearch (<=8.13.0)"] eventlet = ["eventlet (>=0.32.0)"] +gcs = ["google-cloud-storage (>=2.10.0)"] gevent = ["gevent (>=1.5.0)"] librabbitmq = ["librabbitmq (>=2.0.0)"] memcache = ["pylibmc (==1.6.3)"] mongodb = ["pymongo[srv] (>=4.0.2)"] -msgpack = ["msgpack (==1.0.7)"] -pymemcache = ["python-memcached (==1.59)"] +msgpack = ["msgpack (==1.0.8)"] +pymemcache = ["python-memcached (>=1.61)"] pyro = ["pyro4 (==4.82)"] -pytest = ["pytest-celery (==0.0.0)"] +pytest = ["pytest-celery[all] (>=1.0.0)"] redis = ["redis (>=4.5.2,!=4.5.5,<6.0.0)"] s3 = ["boto3 (>=1.26.143)"] slmq = ["softlayer-messaging (>=1.0.3)"] solar = ["ephem (==4.1.5)"] sqlalchemy = ["sqlalchemy (>=1.4.48,<2.1)"] -sqs = ["boto3 (>=1.26.143)", "kombu[sqs] (>=5.3.0)", "pycurl (>=7.43.0.5)", "urllib3 (>=1.26.16)"] +sqs = ["boto3 (>=1.26.143)", "kombu[sqs] (>=5.3.4)", "pycurl (>=7.43.0.5)", "urllib3 (>=1.26.16)"] tblib = ["tblib (>=1.3.0)", "tblib (>=1.5.0)"] yaml = ["PyYAML (>=3.10)"] zookeeper = ["kazoo (>=1.3.1)"] @@ -721,26 +721,15 @@ files = [ {file = "docutils-0.20.1.tar.gz", hash = "sha256:f08a4e276c3a1583a86dce3e34aba3fe04d02bba2dd51ed16106244e8a923e3b"}, ] -[[package]] -name = "enum-extend" -version = "0.1.1" -description = "Enum base classes that support enum comparsion and auto numbering with doc strings" -optional = false -python-versions = ">=3.4.0" -files = [ - {file = "enum-extend-0.1.1.tar.gz", hash = "sha256:943208b2e62535e1a649945ee8dceab4576473a85cbb740ff84b4821492161b1"}, - {file = "enum_extend-0.1.1-py3-none-any.whl", hash = "sha256:a6bd4b09e1539d144d433ecf7c7d94def45b8852e5e494b2c31faf618d6a5a17"}, -] - [[package]] name = "exceptiongroup" -version = "1.2.0" +version = "1.2.1" description = "Backport of PEP 654 (exception groups)" optional = false python-versions = ">=3.7" files = [ - {file = "exceptiongroup-1.2.0-py3-none-any.whl", hash = "sha256:4bfd3996ac73b41e9b9628b04e079f193850720ea5945fc96a08633c66912f14"}, - {file = "exceptiongroup-1.2.0.tar.gz", hash = "sha256:91f5c769735f051a4290d52edd0858999b57e5876e9f85937691bd4c9fa3ed68"}, + {file = "exceptiongroup-1.2.1-py3-none-any.whl", hash = "sha256:5258b9ed329c5bbdd31a309f53cbfb0b155341807f6ff7606a1e801a891b29ad"}, + {file = "exceptiongroup-1.2.1.tar.gz", hash = "sha256:a4785e48b045528f5bfe627b6ad554ff32def154f42372786903b7abcfe1aa16"}, ] [package.extras] @@ -748,13 +737,13 @@ test = ["pytest (>=6)"] [[package]] name = "faker" -version = "24.4.0" +version = "24.11.0" description = "Faker is a Python package that generates fake data for you." optional = false python-versions = ">=3.8" files = [ - {file = "Faker-24.4.0-py3-none-any.whl", hash = "sha256:998c29ee7d64429bd59204abffa9ba11f784fb26c7b9df4def78d1a70feb36a7"}, - {file = "Faker-24.4.0.tar.gz", hash = "sha256:a5ddccbe97ab691fad6bd8036c31f5697cfaa550e62e000078d1935fa8a7ec2e"}, + {file = "Faker-24.11.0-py3-none-any.whl", hash = "sha256:adb98e771073a06bdc5d2d6710d8af07ac5da64c8dc2ae3b17bb32319e66fd82"}, + {file = "Faker-24.11.0.tar.gz", hash = "sha256:34b947581c2bced340c39b35f89dbfac4f356932cfff8fe893bde854903f0e6e"}, ] [package.dependencies] @@ -762,13 +751,13 @@ python-dateutil = ">=2.4" [[package]] name = "filelock" -version = "3.13.3" +version = "3.13.4" description = "A platform independent file lock." optional = false python-versions = ">=3.8" files = [ - {file = "filelock-3.13.3-py3-none-any.whl", hash = "sha256:5ffa845303983e7a0b7ae17636509bc97997d58afeafa72fb141a17b152284cb"}, - {file = "filelock-3.13.3.tar.gz", hash = "sha256:a79895a25bbefdf55d1a2a0a80968f7dbb28edcd6d4234a0afb3f37ecde4b546"}, + {file = "filelock-3.13.4-py3-none-any.whl", hash = "sha256:404e5e9253aa60ad457cae1be07c0f0ca90a63931200a47d9b6a6af84fd7b45f"}, + {file = "filelock-3.13.4.tar.gz", hash = "sha256:d13f466618bfde72bd2c18255e269f72542c6e70e7bac83a0232d6b1cc5c8cf4"}, ] [package.extras] @@ -805,13 +794,13 @@ pyflakes = ">=3.2.0,<3.3.0" [[package]] name = "flask" -version = "3.0.2" +version = "3.0.3" description = "A simple framework for building complex web applications." optional = false python-versions = ">=3.8" files = [ - {file = "flask-3.0.2-py3-none-any.whl", hash = "sha256:3232e0e9c850d781933cf0207523d1ece087eb8d87b23777ae38456e2fbe7c6e"}, - {file = "flask-3.0.2.tar.gz", hash = "sha256:822c03f4b799204250a7ee84b1eddc40665395333973dfb9deebfe425fefcb7d"}, + {file = "flask-3.0.3-py3-none-any.whl", hash = "sha256:34e815dfaa43340d1d15a5c3a02b8476004037eb4840b34910c6e21679d288f3"}, + {file = "flask-3.0.3.tar.gz", hash = "sha256:ceb27b0af3823ea2737928a4d99d125a06175b8512c445cbd9a9ce200ef76842"}, ] [package.dependencies] @@ -1075,13 +1064,13 @@ tornado = ["tornado (>=0.2)"] [[package]] name = "identify" -version = "2.5.35" +version = "2.5.36" description = "File identification library for Python" optional = false python-versions = ">=3.8" files = [ - {file = "identify-2.5.35-py2.py3-none-any.whl", hash = "sha256:c4de0081837b211594f8e877a6b4fad7ca32bbfc1a9307fdd61c28bfe923f13e"}, - {file = "identify-2.5.35.tar.gz", hash = "sha256:10a7ca245cfcd756a554a7288159f72ff105ad233c7c4b9c6f0f4d108f5f6791"}, + {file = "identify-2.5.36-py2.py3-none-any.whl", hash = "sha256:37d93f380f4de590500d9dba7db359d0d3da95ffe7f9de1753faa159e71e7dfa"}, + {file = "identify-2.5.36.tar.gz", hash = "sha256:e5e00f54165f9047fbebeb4a560f9acfb8af4c88232be60a488e9b68d122745d"}, ] [package.extras] @@ -1089,13 +1078,13 @@ license = ["ukkonen"] [[package]] name = "idna" -version = "3.6" +version = "3.7" description = "Internationalized Domain Names in Applications (IDNA)" 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]] @@ -1159,13 +1148,13 @@ files = [ [[package]] name = "itsdangerous" -version = "2.1.2" +version = "2.2.0" description = "Safely pass data to untrusted environments and back." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "itsdangerous-2.1.2-py3-none-any.whl", hash = "sha256:2c2349112351b88699d8d4b6b075022c0808887cb7ad10069318a8b0bc88db44"}, - {file = "itsdangerous-2.1.2.tar.gz", hash = "sha256:5dbbc68b317e5e42f327f9021763545dc3fc3bfe22e6deb96aaf1fc38874156a"}, + {file = "itsdangerous-2.2.0-py3-none-any.whl", hash = "sha256:c6242fc49e35958c8b15141343aa660db5fc54d4f13a1db01a3f5891b98700ef"}, + {file = "itsdangerous-2.2.0.tar.gz", hash = "sha256:e0050c0b7da1eea53ffaf149c0cfbb5c6e2e2b69c4bef22c81fa6eb73e5f6173"}, ] [[package]] @@ -1187,24 +1176,24 @@ i18n = ["Babel (>=2.7)"] [[package]] name = "json5" -version = "0.9.24" +version = "0.9.25" description = "A Python implementation of the JSON5 data format." optional = false python-versions = ">=3.8" files = [ - {file = "json5-0.9.24-py3-none-any.whl", hash = "sha256:4ca101fd5c7cb47960c055ef8f4d0e31e15a7c6c48c3b6f1473fc83b6c462a13"}, - {file = "json5-0.9.24.tar.gz", hash = "sha256:0c638399421da959a20952782800e5c1a78c14e08e1dc9738fa10d8ec14d58c8"}, + {file = "json5-0.9.25-py3-none-any.whl", hash = "sha256:34ed7d834b1341a86987ed52f3f76cd8ee184394906b6e22a1e0deb9ab294e8f"}, + {file = "json5-0.9.25.tar.gz", hash = "sha256:548e41b9be043f9426776f05df8635a00fe06104ea51ed24b67f908856e151ae"}, ] [[package]] name = "kombu" -version = "5.3.6" +version = "5.3.7" description = "Messaging library for Python." optional = false python-versions = ">=3.8" files = [ - {file = "kombu-5.3.6-py3-none-any.whl", hash = "sha256:49f1e62b12369045de2662f62cc584e7df83481a513db83b01f87b5b9785e378"}, - {file = "kombu-5.3.6.tar.gz", hash = "sha256:f3da5b570a147a5da8280180aa80b03807283d63ea5081fcdb510d18242431d9"}, + {file = "kombu-5.3.7-py3-none-any.whl", hash = "sha256:5634c511926309c7f9789f1433e9ed402616b56836ef9878f01bd59267b4c7a9"}, + {file = "kombu-5.3.7.tar.gz", hash = "sha256:011c4cd9a355c14a1de8d35d257314a1d2456d52b7140388561acac3cf1a97bf"}, ] [package.dependencies] @@ -1402,13 +1391,13 @@ source = ["Cython (>=3.0.10)"] [[package]] name = "mako" -version = "1.3.2" +version = "1.3.3" description = "A super-fast templating language that borrows the best ideas from the existing templating languages." optional = false python-versions = ">=3.8" files = [ - {file = "Mako-1.3.2-py3-none-any.whl", hash = "sha256:32a99d70754dfce237019d17ffe4a282d2d3351b9c476e90d8a60e63f133b80c"}, - {file = "Mako-1.3.2.tar.gz", hash = "sha256:2a0c8ad7f6274271b3bb7467dd37cf9cc6dab4bc19cb69a4ef10669402de698e"}, + {file = "Mako-1.3.3-py3-none-any.whl", hash = "sha256:5324b88089a8978bf76d1629774fcc2f1c07b82acdf00f4c5dd8ceadfffc4b40"}, + {file = "Mako-1.3.3.tar.gz", hash = "sha256:e16c01d9ab9c11f7290eef1cfefc093fb5a45ee4a3da09e2fec2e4d1bae54e73"}, ] [package.dependencies] @@ -1664,13 +1653,13 @@ test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4.3)", "pytest- [[package]] name = "pluggy" -version = "1.4.0" +version = "1.5.0" description = "plugin and hook calling mechanisms for python" optional = false python-versions = ">=3.8" files = [ - {file = "pluggy-1.4.0-py3-none-any.whl", hash = "sha256:7db9f7b503d67d1c5b95f59773ebb58a8c1c288129a88665838012cfb07b8981"}, - {file = "pluggy-1.4.0.tar.gz", hash = "sha256:8c85c2876142a764e5b7548e7d9a0e0ddb46f5185161049a79b7e974454223be"}, + {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, + {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, ] [package.extras] @@ -1693,13 +1682,13 @@ psutil = "*" [[package]] name = "pre-commit" -version = "3.5.0" +version = "3.7.0" description = "A framework for managing and maintaining multi-language pre-commit hooks." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "pre_commit-3.5.0-py2.py3-none-any.whl", hash = "sha256:841dc9aef25daba9a0238cd27984041fa0467b4199fc4852e27950664919f660"}, - {file = "pre_commit-3.5.0.tar.gz", hash = "sha256:5804465c675b659b0862f07907f96295d490822a450c4c40e747d0b1c6ebcb32"}, + {file = "pre_commit-3.7.0-py2.py3-none-any.whl", hash = "sha256:5eae9e10c2b5ac51577c3452ec0a490455c45a0533f7960f993a0d01e59decab"}, + {file = "pre_commit-3.7.0.tar.gz", hash = "sha256:e209d61b8acdcf742404408531f0c37d49d2c734fd7cff2d6076083d191cb060"}, ] [package.dependencies] @@ -1838,18 +1827,18 @@ files = [ [[package]] name = "pydantic" -version = "2.6.4" +version = "2.7.0" description = "Data validation using Python type hints" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic-2.6.4-py3-none-any.whl", hash = "sha256:cc46fce86607580867bdc3361ad462bab9c222ef042d3da86f2fb333e1d916c5"}, - {file = "pydantic-2.6.4.tar.gz", hash = "sha256:b1704e0847db01817624a6b86766967f552dd9dbf3afba4004409f908dcc84e6"}, + {file = "pydantic-2.7.0-py3-none-any.whl", hash = "sha256:9dee74a271705f14f9a1567671d144a851c675b072736f0a7b2608fd9e495352"}, + {file = "pydantic-2.7.0.tar.gz", hash = "sha256:b5ecdd42262ca2462e2624793551e80911a1e989f462910bb81aef974b4bb383"}, ] [package.dependencies] annotated-types = ">=0.4.0" -pydantic-core = "2.16.3" +pydantic-core = "2.18.1" typing-extensions = ">=4.6.1" [package.extras] @@ -1857,90 +1846,90 @@ email = ["email-validator (>=2.0.0)"] [[package]] name = "pydantic-core" -version = "2.16.3" -description = "" +version = "2.18.1" +description = "Core functionality for Pydantic validation and serialization" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic_core-2.16.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:75b81e678d1c1ede0785c7f46690621e4c6e63ccd9192af1f0bd9d504bbb6bf4"}, - {file = "pydantic_core-2.16.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9c865a7ee6f93783bd5d781af5a4c43dadc37053a5b42f7d18dc019f8c9d2bd1"}, - {file = "pydantic_core-2.16.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:162e498303d2b1c036b957a1278fa0899d02b2842f1ff901b6395104c5554a45"}, - {file = "pydantic_core-2.16.3-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2f583bd01bbfbff4eaee0868e6fc607efdfcc2b03c1c766b06a707abbc856187"}, - {file = "pydantic_core-2.16.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b926dd38db1519ed3043a4de50214e0d600d404099c3392f098a7f9d75029ff8"}, - {file = "pydantic_core-2.16.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:716b542728d4c742353448765aa7cdaa519a7b82f9564130e2b3f6766018c9ec"}, - {file = "pydantic_core-2.16.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc4ad7f7ee1a13d9cb49d8198cd7d7e3aa93e425f371a68235f784e99741561f"}, - {file = "pydantic_core-2.16.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bd87f48924f360e5d1c5f770d6155ce0e7d83f7b4e10c2f9ec001c73cf475c99"}, - {file = "pydantic_core-2.16.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0df446663464884297c793874573549229f9eca73b59360878f382a0fc085979"}, - {file = "pydantic_core-2.16.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4df8a199d9f6afc5ae9a65f8f95ee52cae389a8c6b20163762bde0426275b7db"}, - {file = "pydantic_core-2.16.3-cp310-none-win32.whl", hash = "sha256:456855f57b413f077dff513a5a28ed838dbbb15082ba00f80750377eed23d132"}, - {file = "pydantic_core-2.16.3-cp310-none-win_amd64.whl", hash = "sha256:732da3243e1b8d3eab8c6ae23ae6a58548849d2e4a4e03a1924c8ddf71a387cb"}, - {file = "pydantic_core-2.16.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:519ae0312616026bf4cedc0fe459e982734f3ca82ee8c7246c19b650b60a5ee4"}, - {file = "pydantic_core-2.16.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b3992a322a5617ded0a9f23fd06dbc1e4bd7cf39bc4ccf344b10f80af58beacd"}, - {file = "pydantic_core-2.16.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8d62da299c6ecb04df729e4b5c52dc0d53f4f8430b4492b93aa8de1f541c4aac"}, - {file = "pydantic_core-2.16.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2acca2be4bb2f2147ada8cac612f8a98fc09f41c89f87add7256ad27332c2fda"}, - {file = "pydantic_core-2.16.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1b662180108c55dfbf1280d865b2d116633d436cfc0bba82323554873967b340"}, - {file = "pydantic_core-2.16.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e7c6ed0dc9d8e65f24f5824291550139fe6f37fac03788d4580da0d33bc00c97"}, - {file = "pydantic_core-2.16.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a6b1bb0827f56654b4437955555dc3aeeebeddc47c2d7ed575477f082622c49e"}, - {file = "pydantic_core-2.16.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e56f8186d6210ac7ece503193ec84104da7ceb98f68ce18c07282fcc2452e76f"}, - {file = "pydantic_core-2.16.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:936e5db01dd49476fa8f4383c259b8b1303d5dd5fb34c97de194560698cc2c5e"}, - {file = "pydantic_core-2.16.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:33809aebac276089b78db106ee692bdc9044710e26f24a9a2eaa35a0f9fa70ba"}, - {file = "pydantic_core-2.16.3-cp311-none-win32.whl", hash = "sha256:ded1c35f15c9dea16ead9bffcde9bb5c7c031bff076355dc58dcb1cb436c4721"}, - {file = "pydantic_core-2.16.3-cp311-none-win_amd64.whl", hash = "sha256:d89ca19cdd0dd5f31606a9329e309d4fcbb3df860960acec32630297d61820df"}, - {file = "pydantic_core-2.16.3-cp311-none-win_arm64.whl", hash = "sha256:6162f8d2dc27ba21027f261e4fa26f8bcb3cf9784b7f9499466a311ac284b5b9"}, - {file = "pydantic_core-2.16.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:0f56ae86b60ea987ae8bcd6654a887238fd53d1384f9b222ac457070b7ac4cff"}, - {file = "pydantic_core-2.16.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c9bd22a2a639e26171068f8ebb5400ce2c1bc7d17959f60a3b753ae13c632975"}, - {file = "pydantic_core-2.16.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4204e773b4b408062960e65468d5346bdfe139247ee5f1ca2a378983e11388a2"}, - {file = "pydantic_core-2.16.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f651dd19363c632f4abe3480a7c87a9773be27cfe1341aef06e8759599454120"}, - {file = "pydantic_core-2.16.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aaf09e615a0bf98d406657e0008e4a8701b11481840be7d31755dc9f97c44053"}, - {file = "pydantic_core-2.16.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8e47755d8152c1ab5b55928ab422a76e2e7b22b5ed8e90a7d584268dd49e9c6b"}, - {file = "pydantic_core-2.16.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:500960cb3a0543a724a81ba859da816e8cf01b0e6aaeedf2c3775d12ee49cade"}, - {file = "pydantic_core-2.16.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cf6204fe865da605285c34cf1172879d0314ff267b1c35ff59de7154f35fdc2e"}, - {file = "pydantic_core-2.16.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d33dd21f572545649f90c38c227cc8631268ba25c460b5569abebdd0ec5974ca"}, - {file = "pydantic_core-2.16.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:49d5d58abd4b83fb8ce763be7794d09b2f50f10aa65c0f0c1696c677edeb7cbf"}, - {file = "pydantic_core-2.16.3-cp312-none-win32.whl", hash = "sha256:f53aace168a2a10582e570b7736cc5bef12cae9cf21775e3eafac597e8551fbe"}, - {file = "pydantic_core-2.16.3-cp312-none-win_amd64.whl", hash = "sha256:0d32576b1de5a30d9a97f300cc6a3f4694c428d956adbc7e6e2f9cad279e45ed"}, - {file = "pydantic_core-2.16.3-cp312-none-win_arm64.whl", hash = "sha256:ec08be75bb268473677edb83ba71e7e74b43c008e4a7b1907c6d57e940bf34b6"}, - {file = "pydantic_core-2.16.3-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:b1f6f5938d63c6139860f044e2538baeee6f0b251a1816e7adb6cbce106a1f01"}, - {file = "pydantic_core-2.16.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2a1ef6a36fdbf71538142ed604ad19b82f67b05749512e47f247a6ddd06afdc7"}, - {file = "pydantic_core-2.16.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:704d35ecc7e9c31d48926150afada60401c55efa3b46cd1ded5a01bdffaf1d48"}, - {file = "pydantic_core-2.16.3-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d937653a696465677ed583124b94a4b2d79f5e30b2c46115a68e482c6a591c8a"}, - {file = "pydantic_core-2.16.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c9803edf8e29bd825f43481f19c37f50d2b01899448273b3a7758441b512acf8"}, - {file = "pydantic_core-2.16.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:72282ad4892a9fb2da25defeac8c2e84352c108705c972db82ab121d15f14e6d"}, - {file = "pydantic_core-2.16.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f752826b5b8361193df55afcdf8ca6a57d0232653494ba473630a83ba50d8c9"}, - {file = "pydantic_core-2.16.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4384a8f68ddb31a0b0c3deae88765f5868a1b9148939c3f4121233314ad5532c"}, - {file = "pydantic_core-2.16.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:a4b2bf78342c40b3dc830880106f54328928ff03e357935ad26c7128bbd66ce8"}, - {file = "pydantic_core-2.16.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:13dcc4802961b5f843a9385fc821a0b0135e8c07fc3d9949fd49627c1a5e6ae5"}, - {file = "pydantic_core-2.16.3-cp38-none-win32.whl", hash = "sha256:e3e70c94a0c3841e6aa831edab1619ad5c511199be94d0c11ba75fe06efe107a"}, - {file = "pydantic_core-2.16.3-cp38-none-win_amd64.whl", hash = "sha256:ecdf6bf5f578615f2e985a5e1f6572e23aa632c4bd1dc67f8f406d445ac115ed"}, - {file = "pydantic_core-2.16.3-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:bda1ee3e08252b8d41fa5537413ffdddd58fa73107171a126d3b9ff001b9b820"}, - {file = "pydantic_core-2.16.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:21b888c973e4f26b7a96491c0965a8a312e13be108022ee510248fe379a5fa23"}, - {file = "pydantic_core-2.16.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:be0ec334369316fa73448cc8c982c01e5d2a81c95969d58b8f6e272884df0074"}, - {file = "pydantic_core-2.16.3-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b5b6079cc452a7c53dd378c6f881ac528246b3ac9aae0f8eef98498a75657805"}, - {file = "pydantic_core-2.16.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7ee8d5f878dccb6d499ba4d30d757111847b6849ae07acdd1205fffa1fc1253c"}, - {file = "pydantic_core-2.16.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7233d65d9d651242a68801159763d09e9ec96e8a158dbf118dc090cd77a104c9"}, - {file = "pydantic_core-2.16.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c6119dc90483a5cb50a1306adb8d52c66e447da88ea44f323e0ae1a5fcb14256"}, - {file = "pydantic_core-2.16.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:578114bc803a4c1ff9946d977c221e4376620a46cf78da267d946397dc9514a8"}, - {file = "pydantic_core-2.16.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d8f99b147ff3fcf6b3cc60cb0c39ea443884d5559a30b1481e92495f2310ff2b"}, - {file = "pydantic_core-2.16.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4ac6b4ce1e7283d715c4b729d8f9dab9627586dafce81d9eaa009dd7f25dd972"}, - {file = "pydantic_core-2.16.3-cp39-none-win32.whl", hash = "sha256:e7774b570e61cb998490c5235740d475413a1f6de823169b4cf94e2fe9e9f6b2"}, - {file = "pydantic_core-2.16.3-cp39-none-win_amd64.whl", hash = "sha256:9091632a25b8b87b9a605ec0e61f241c456e9248bfdcf7abdf344fdb169c81cf"}, - {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:36fa178aacbc277bc6b62a2c3da95226520da4f4e9e206fdf076484363895d2c"}, - {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:dcca5d2bf65c6fb591fff92da03f94cd4f315972f97c21975398bd4bd046854a"}, - {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2a72fb9963cba4cd5793854fd12f4cfee731e86df140f59ff52a49b3552db241"}, - {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b60cc1a081f80a2105a59385b92d82278b15d80ebb3adb200542ae165cd7d183"}, - {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cbcc558401de90a746d02ef330c528f2e668c83350f045833543cd57ecead1ad"}, - {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:fee427241c2d9fb7192b658190f9f5fd6dfe41e02f3c1489d2ec1e6a5ab1e04a"}, - {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f4cb85f693044e0f71f394ff76c98ddc1bc0953e48c061725e540396d5c8a2e1"}, - {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:b29eeb887aa931c2fcef5aa515d9d176d25006794610c264ddc114c053bf96fe"}, - {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:a425479ee40ff021f8216c9d07a6a3b54b31c8267c6e17aa88b70d7ebd0e5e5b"}, - {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:5c5cbc703168d1b7a838668998308018a2718c2130595e8e190220238addc96f"}, - {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99b6add4c0b39a513d323d3b93bc173dac663c27b99860dd5bf491b240d26137"}, - {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75f76ee558751746d6a38f89d60b6228fa174e5172d143886af0f85aa306fd89"}, - {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:00ee1c97b5364b84cb0bd82e9bbf645d5e2871fb8c58059d158412fee2d33d8a"}, - {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:287073c66748f624be4cef893ef9174e3eb88fe0b8a78dc22e88eca4bc357ca6"}, - {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:ed25e1835c00a332cb10c683cd39da96a719ab1dfc08427d476bce41b92531fc"}, - {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:86b3d0033580bd6bbe07590152007275bd7af95f98eaa5bd36f3da219dcd93da"}, - {file = "pydantic_core-2.16.3.tar.gz", hash = "sha256:1cac689f80a3abab2d3c0048b29eea5751114054f032a941a32de4c852c59cad"}, + {file = "pydantic_core-2.18.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:ee9cf33e7fe14243f5ca6977658eb7d1042caaa66847daacbd2117adb258b226"}, + {file = "pydantic_core-2.18.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6b7bbb97d82659ac8b37450c60ff2e9f97e4eb0f8a8a3645a5568b9334b08b50"}, + {file = "pydantic_core-2.18.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:df4249b579e75094f7e9bb4bd28231acf55e308bf686b952f43100a5a0be394c"}, + {file = "pydantic_core-2.18.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d0491006a6ad20507aec2be72e7831a42efc93193d2402018007ff827dc62926"}, + {file = "pydantic_core-2.18.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2ae80f72bb7a3e397ab37b53a2b49c62cc5496412e71bc4f1277620a7ce3f52b"}, + {file = "pydantic_core-2.18.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:58aca931bef83217fca7a390e0486ae327c4af9c3e941adb75f8772f8eeb03a1"}, + {file = "pydantic_core-2.18.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1be91ad664fc9245404a789d60cba1e91c26b1454ba136d2a1bf0c2ac0c0505a"}, + {file = "pydantic_core-2.18.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:667880321e916a8920ef49f5d50e7983792cf59f3b6079f3c9dac2b88a311d17"}, + {file = "pydantic_core-2.18.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:f7054fdc556f5421f01e39cbb767d5ec5c1139ea98c3e5b350e02e62201740c7"}, + {file = "pydantic_core-2.18.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:030e4f9516f9947f38179249778709a460a3adb516bf39b5eb9066fcfe43d0e6"}, + {file = "pydantic_core-2.18.1-cp310-none-win32.whl", hash = "sha256:2e91711e36e229978d92642bfc3546333a9127ecebb3f2761372e096395fc649"}, + {file = "pydantic_core-2.18.1-cp310-none-win_amd64.whl", hash = "sha256:9a29726f91c6cb390b3c2338f0df5cd3e216ad7a938762d11c994bb37552edb0"}, + {file = "pydantic_core-2.18.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:9ece8a49696669d483d206b4474c367852c44815fca23ac4e48b72b339807f80"}, + {file = "pydantic_core-2.18.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7a5d83efc109ceddb99abd2c1316298ced2adb4570410defe766851a804fcd5b"}, + {file = "pydantic_core-2.18.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f7973c381283783cd1043a8c8f61ea5ce7a3a58b0369f0ee0ee975eaf2f2a1b"}, + {file = "pydantic_core-2.18.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:54c7375c62190a7845091f521add19b0f026bcf6ae674bdb89f296972272e86d"}, + {file = "pydantic_core-2.18.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dd63cec4e26e790b70544ae5cc48d11b515b09e05fdd5eff12e3195f54b8a586"}, + {file = "pydantic_core-2.18.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:561cf62c8a3498406495cfc49eee086ed2bb186d08bcc65812b75fda42c38294"}, + {file = "pydantic_core-2.18.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68717c38a68e37af87c4da20e08f3e27d7e4212e99e96c3d875fbf3f4812abfc"}, + {file = "pydantic_core-2.18.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2d5728e93d28a3c63ee513d9ffbac9c5989de8c76e049dbcb5bfe4b923a9739d"}, + {file = "pydantic_core-2.18.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f0f17814c505f07806e22b28856c59ac80cee7dd0fbb152aed273e116378f519"}, + {file = "pydantic_core-2.18.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d816f44a51ba5175394bc6c7879ca0bd2be560b2c9e9f3411ef3a4cbe644c2e9"}, + {file = "pydantic_core-2.18.1-cp311-none-win32.whl", hash = "sha256:09f03dfc0ef8c22622eaa8608caa4a1e189cfb83ce847045eca34f690895eccb"}, + {file = "pydantic_core-2.18.1-cp311-none-win_amd64.whl", hash = "sha256:27f1009dc292f3b7ca77feb3571c537276b9aad5dd4efb471ac88a8bd09024e9"}, + {file = "pydantic_core-2.18.1-cp311-none-win_arm64.whl", hash = "sha256:48dd883db92e92519201f2b01cafa881e5f7125666141a49ffba8b9facc072b0"}, + {file = "pydantic_core-2.18.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:b6b0e4912030c6f28bcb72b9ebe4989d6dc2eebcd2a9cdc35fefc38052dd4fe8"}, + {file = "pydantic_core-2.18.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f3202a429fe825b699c57892d4371c74cc3456d8d71b7f35d6028c96dfecad31"}, + {file = "pydantic_core-2.18.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a3982b0a32d0a88b3907e4b0dc36809fda477f0757c59a505d4e9b455f384b8b"}, + {file = "pydantic_core-2.18.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:25595ac311f20e5324d1941909b0d12933f1fd2171075fcff763e90f43e92a0d"}, + {file = "pydantic_core-2.18.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:14fe73881cf8e4cbdaded8ca0aa671635b597e42447fec7060d0868b52d074e6"}, + {file = "pydantic_core-2.18.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ca976884ce34070799e4dfc6fbd68cb1d181db1eefe4a3a94798ddfb34b8867f"}, + {file = "pydantic_core-2.18.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:684d840d2c9ec5de9cb397fcb3f36d5ebb6fa0d94734f9886032dd796c1ead06"}, + {file = "pydantic_core-2.18.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:54764c083bbe0264f0f746cefcded6cb08fbbaaf1ad1d78fb8a4c30cff999a90"}, + {file = "pydantic_core-2.18.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:201713f2f462e5c015b343e86e68bd8a530a4f76609b33d8f0ec65d2b921712a"}, + {file = "pydantic_core-2.18.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fd1a9edb9dd9d79fbeac1ea1f9a8dd527a6113b18d2e9bcc0d541d308dae639b"}, + {file = "pydantic_core-2.18.1-cp312-none-win32.whl", hash = "sha256:d5e6b7155b8197b329dc787356cfd2684c9d6a6b1a197f6bbf45f5555a98d411"}, + {file = "pydantic_core-2.18.1-cp312-none-win_amd64.whl", hash = "sha256:9376d83d686ec62e8b19c0ac3bf8d28d8a5981d0df290196fb6ef24d8a26f0d6"}, + {file = "pydantic_core-2.18.1-cp312-none-win_arm64.whl", hash = "sha256:c562b49c96906b4029b5685075fe1ebd3b5cc2601dfa0b9e16c2c09d6cbce048"}, + {file = "pydantic_core-2.18.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:3e352f0191d99fe617371096845070dee295444979efb8f27ad941227de6ad09"}, + {file = "pydantic_core-2.18.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c0295d52b012cbe0d3059b1dba99159c3be55e632aae1999ab74ae2bd86a33d7"}, + {file = "pydantic_core-2.18.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56823a92075780582d1ffd4489a2e61d56fd3ebb4b40b713d63f96dd92d28144"}, + {file = "pydantic_core-2.18.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:dd3f79e17b56741b5177bcc36307750d50ea0698df6aa82f69c7db32d968c1c2"}, + {file = "pydantic_core-2.18.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:38a5024de321d672a132b1834a66eeb7931959c59964b777e8f32dbe9523f6b1"}, + {file = "pydantic_core-2.18.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d2ce426ee691319d4767748c8e0895cfc56593d725594e415f274059bcf3cb76"}, + {file = "pydantic_core-2.18.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2adaeea59849ec0939af5c5d476935f2bab4b7f0335b0110f0f069a41024278e"}, + {file = "pydantic_core-2.18.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9b6431559676a1079eac0f52d6d0721fb8e3c5ba43c37bc537c8c83724031feb"}, + {file = "pydantic_core-2.18.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:85233abb44bc18d16e72dc05bf13848a36f363f83757541f1a97db2f8d58cfd9"}, + {file = "pydantic_core-2.18.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:641a018af4fe48be57a2b3d7a1f0f5dbca07c1d00951d3d7463f0ac9dac66622"}, + {file = "pydantic_core-2.18.1-cp38-none-win32.whl", hash = "sha256:63d7523cd95d2fde0d28dc42968ac731b5bb1e516cc56b93a50ab293f4daeaad"}, + {file = "pydantic_core-2.18.1-cp38-none-win_amd64.whl", hash = "sha256:907a4d7720abfcb1c81619863efd47c8a85d26a257a2dbebdb87c3b847df0278"}, + {file = "pydantic_core-2.18.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:aad17e462f42ddbef5984d70c40bfc4146c322a2da79715932cd8976317054de"}, + {file = "pydantic_core-2.18.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:94b9769ba435b598b547c762184bcfc4783d0d4c7771b04a3b45775c3589ca44"}, + {file = "pydantic_core-2.18.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:80e0e57cc704a52fb1b48f16d5b2c8818da087dbee6f98d9bf19546930dc64b5"}, + {file = "pydantic_core-2.18.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:76b86e24039c35280ceee6dce7e62945eb93a5175d43689ba98360ab31eebc4a"}, + {file = "pydantic_core-2.18.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:12a05db5013ec0ca4a32cc6433f53faa2a014ec364031408540ba858c2172bb0"}, + {file = "pydantic_core-2.18.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:250ae39445cb5475e483a36b1061af1bc233de3e9ad0f4f76a71b66231b07f88"}, + {file = "pydantic_core-2.18.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a32204489259786a923e02990249c65b0f17235073149d0033efcebe80095570"}, + {file = "pydantic_core-2.18.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6395a4435fa26519fd96fdccb77e9d00ddae9dd6c742309bd0b5610609ad7fb2"}, + {file = "pydantic_core-2.18.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2533ad2883f001efa72f3d0e733fb846710c3af6dcdd544fe5bf14fa5fe2d7db"}, + {file = "pydantic_core-2.18.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b560b72ed4816aee52783c66854d96157fd8175631f01ef58e894cc57c84f0f6"}, + {file = "pydantic_core-2.18.1-cp39-none-win32.whl", hash = "sha256:582cf2cead97c9e382a7f4d3b744cf0ef1a6e815e44d3aa81af3ad98762f5a9b"}, + {file = "pydantic_core-2.18.1-cp39-none-win_amd64.whl", hash = "sha256:ca71d501629d1fa50ea7fa3b08ba884fe10cefc559f5c6c8dfe9036c16e8ae89"}, + {file = "pydantic_core-2.18.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:e178e5b66a06ec5bf51668ec0d4ac8cfb2bdcb553b2c207d58148340efd00143"}, + {file = "pydantic_core-2.18.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:72722ce529a76a4637a60be18bd789d8fb871e84472490ed7ddff62d5fed620d"}, + {file = "pydantic_core-2.18.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2fe0c1ce5b129455e43f941f7a46f61f3d3861e571f2905d55cdbb8b5c6f5e2c"}, + {file = "pydantic_core-2.18.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d4284c621f06a72ce2cb55f74ea3150113d926a6eb78ab38340c08f770eb9b4d"}, + {file = "pydantic_core-2.18.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1a0c3e718f4e064efde68092d9d974e39572c14e56726ecfaeebbe6544521f47"}, + {file = "pydantic_core-2.18.1-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:2027493cc44c23b598cfaf200936110433d9caa84e2c6cf487a83999638a96ac"}, + {file = "pydantic_core-2.18.1-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:76909849d1a6bffa5a07742294f3fa1d357dc917cb1fe7b470afbc3a7579d539"}, + {file = "pydantic_core-2.18.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ee7ccc7fb7e921d767f853b47814c3048c7de536663e82fbc37f5eb0d532224b"}, + {file = "pydantic_core-2.18.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:ee2794111c188548a4547eccc73a6a8527fe2af6cf25e1a4ebda2fd01cdd2e60"}, + {file = "pydantic_core-2.18.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:a139fe9f298dc097349fb4f28c8b81cc7a202dbfba66af0e14be5cfca4ef7ce5"}, + {file = "pydantic_core-2.18.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d074b07a10c391fc5bbdcb37b2f16f20fcd9e51e10d01652ab298c0d07908ee2"}, + {file = "pydantic_core-2.18.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c69567ddbac186e8c0aadc1f324a60a564cfe25e43ef2ce81bcc4b8c3abffbae"}, + {file = "pydantic_core-2.18.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:baf1c7b78cddb5af00971ad5294a4583188bda1495b13760d9f03c9483bb6203"}, + {file = "pydantic_core-2.18.1-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:2684a94fdfd1b146ff10689c6e4e815f6a01141781c493b97342cdc5b06f4d5d"}, + {file = "pydantic_core-2.18.1-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:73c1bc8a86a5c9e8721a088df234265317692d0b5cd9e86e975ce3bc3db62a59"}, + {file = "pydantic_core-2.18.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:e60defc3c15defb70bb38dd605ff7e0fae5f6c9c7cbfe0ad7868582cb7e844a6"}, + {file = "pydantic_core-2.18.1.tar.gz", hash = "sha256:de9d3e8717560eb05e28739d1b35e4eac2e458553a52a301e51352a7ffc86a35"}, ] [package.dependencies] @@ -2289,18 +2278,18 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "setuptools" -version = "69.2.0" +version = "69.5.1" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "setuptools-69.2.0-py3-none-any.whl", hash = "sha256:c21c49fb1042386df081cb5d86759792ab89efca84cf114889191cd09aacc80c"}, - {file = "setuptools-69.2.0.tar.gz", hash = "sha256:0ff4183f8f42cd8fa3acea16c45205521a4ef28f73c6391d8a25e92893134f2e"}, + {file = "setuptools-69.5.1-py3-none-any.whl", hash = "sha256:c636ac361bc47580504644275c9ad802c50415c7522212252c033bd15f301f32"}, + {file = "setuptools-69.5.1.tar.gz", hash = "sha256:6c1fccdac05a97e598fb0ae3bbed5904ccb317337a51139dcd51453611bbb987"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] -testing = ["build[virtualenv]", "filelock (>=3.4.0)", "importlib-metadata", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "mypy (==1.9)", "packaging (>=23.2)", "pip (>=19.1)", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff (>=0.2.1)", "pytest-timeout", "pytest-xdist (>=3)", "tomli", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "importlib-metadata", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "mypy (==1.9)", "packaging (>=23.2)", "pip (>=19.1)", "pytest (>=6,!=8.1.1)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy", "pytest-perf", "pytest-ruff (>=0.2.1)", "pytest-timeout", "pytest-xdist (>=3)", "tomli", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.2)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] [[package]] @@ -2316,13 +2305,13 @@ files = [ [[package]] name = "smtpdfix" -version = "0.5.1" +version = "0.5.2" description = "A SMTP server for use as a pytest fixture that implements encryption and authentication for testing." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "smtpdfix-0.5.1-py3-none-any.whl", hash = "sha256:fab6c8f9060d1dca4ac6f338dae00f487e59de69a2133e58f03f0fe7ff295f52"}, - {file = "smtpdfix-0.5.1.tar.gz", hash = "sha256:f3cda2d13e84c9267a8f13a0a0cd75314fa16b8d577ca8c30e1523797eeabe9e"}, + {file = "smtpdfix-0.5.2-py3-none-any.whl", hash = "sha256:85045723df6bb492af2ddbadfb0b8f8b5c52f69bb6fd4f6bca78c4f182d6c2b7"}, + {file = "smtpdfix-0.5.2.tar.gz", hash = "sha256:e4d1ace90f3712a19127ed8874e697a86148c1f48d2b2db0c0720968e8e3ec95"}, ] [package.dependencies] @@ -2332,8 +2321,8 @@ portpicker = "*" pytest = "*" [package.extras] -dev = ["flake8", "isort", "pytest-asyncio", "pytest-cov", "pytest-timeout", "tox"] -typing = ["mypy"] +dev = ["smtpdfix[testing]", "tox"] +testing = ["flake8", "isort", "mypy", "pytest-asyncio", "pytest-cov", "pytest-timeout"] [[package]] name = "snowballstemmer" @@ -2359,25 +2348,25 @@ files = [ [[package]] name = "sphinx" -version = "7.1.2" +version = "7.3.7" description = "Python documentation generator" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "sphinx-7.1.2-py3-none-any.whl", hash = "sha256:d170a81825b2fcacb6dfd5a0d7f578a053e45d3f2b153fecc948c37344eb4cbe"}, - {file = "sphinx-7.1.2.tar.gz", hash = "sha256:780f4d32f1d7d1126576e0e5ecc19dc32ab76cd24e950228dcf7b1f6d3d9e22f"}, + {file = "sphinx-7.3.7-py3-none-any.whl", hash = "sha256:413f75440be4cacf328f580b4274ada4565fb2187d696a84970c23f77b64d8c3"}, + {file = "sphinx-7.3.7.tar.gz", hash = "sha256:a4a7db75ed37531c05002d56ed6948d4c42f473a36f46e1382b0bd76ca9627bc"}, ] [package.dependencies] -alabaster = ">=0.7,<0.8" +alabaster = ">=0.7.14,<0.8.0" babel = ">=2.9" colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} -docutils = ">=0.18.1,<0.21" +docutils = ">=0.18.1,<0.22" imagesize = ">=1.3" importlib-metadata = {version = ">=4.8", markers = "python_version < \"3.10\""} Jinja2 = ">=3.0" packaging = ">=21.0" -Pygments = ">=2.13" +Pygments = ">=2.14" requests = ">=2.25.0" snowballstemmer = ">=2.0" sphinxcontrib-applehelp = "*" @@ -2385,36 +2374,23 @@ sphinxcontrib-devhelp = "*" sphinxcontrib-htmlhelp = ">=2.0.0" sphinxcontrib-jsmath = "*" sphinxcontrib-qthelp = "*" -sphinxcontrib-serializinghtml = ">=1.1.5" +sphinxcontrib-serializinghtml = ">=1.1.9" +tomli = {version = ">=2", markers = "python_version < \"3.11\""} [package.extras] docs = ["sphinxcontrib-websupport"] -lint = ["docutils-stubs", "flake8 (>=3.5.0)", "flake8-simplify", "isort", "mypy (>=0.990)", "ruff", "sphinx-lint", "types-requests"] -test = ["cython", "filelock", "html5lib", "pytest (>=4.6)"] - -[[package]] -name = "sphinx-enum-extend" -version = "0.1.3" -description = "Spinx plugin for documenting enum-extend.AutoEnum" -optional = false -python-versions = ">=3.4.0" -files = [ - {file = "sphinx-enum-extend-0.1.3.tar.gz", hash = "sha256:c0a73ebb106aae3562247244a759c55c731d2204026648501440ceef4166ff97"}, - {file = "sphinx_enum_extend-0.1.3-py3-none-any.whl", hash = "sha256:4f7747119beca6d2408c819b08cadabd26136612bdc9e7aa0f2f8dcd646d689b"}, -] - -[package.dependencies] -enum-extend = ">=0.1.1" +lint = ["flake8 (>=3.5.0)", "importlib_metadata", "mypy (==1.9.0)", "pytest (>=6.0)", "ruff (==0.3.7)", "sphinx-lint", "tomli", "types-docutils", "types-requests"] +test = ["cython (>=3.0)", "defusedxml (>=0.7.1)", "pytest (>=6.0)", "setuptools (>=67.0)"] [[package]] name = "sphinx-issues" -version = "4.0.0" +version = "4.1.0" description = "A Sphinx extension for linking to your project's issue tracker" optional = false python-versions = ">=3.8" files = [ - {file = "sphinx_issues-4.0.0-py3-none-any.whl", hash = "sha256:ce1ee87682eb8e661d2d500672756916f113ac0a37da3678aa474b7d8ce3d039"}, - {file = "sphinx_issues-4.0.0.tar.gz", hash = "sha256:5b8fcc229ffaeaef53fef0dca88dc89bc14b4aa81f221d9682a64ecced02e25d"}, + {file = "sphinx_issues-4.1.0-py3-none-any.whl", hash = "sha256:d779dddff441175c9fddb7a4018eca38f9f6cdb1e0a2fe31d93b4f89587c7ba1"}, + {file = "sphinx_issues-4.1.0.tar.gz", hash = "sha256:a67f7ef31d164b420b2f21b6c9b020baeb4a014afd4045f5be314c984e8ee520"}, ] [package.dependencies] @@ -2445,47 +2421,50 @@ dev = ["bump2version", "sphinxcontrib-httpdomain", "transifex-client", "wheel"] [[package]] name = "sphinxcontrib-applehelp" -version = "1.0.4" +version = "1.0.8" description = "sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "sphinxcontrib-applehelp-1.0.4.tar.gz", hash = "sha256:828f867945bbe39817c210a1abfd1bc4895c8b73fcaade56d45357a348a07d7e"}, - {file = "sphinxcontrib_applehelp-1.0.4-py3-none-any.whl", hash = "sha256:29d341f67fb0f6f586b23ad80e072c8e6ad0b48417db2bde114a4c9746feb228"}, + {file = "sphinxcontrib_applehelp-1.0.8-py3-none-any.whl", hash = "sha256:cb61eb0ec1b61f349e5cc36b2028e9e7ca765be05e49641c97241274753067b4"}, + {file = "sphinxcontrib_applehelp-1.0.8.tar.gz", hash = "sha256:c40a4f96f3776c4393d933412053962fac2b84f4c99a7982ba42e09576a70619"}, ] [package.extras] lint = ["docutils-stubs", "flake8", "mypy"] +standalone = ["Sphinx (>=5)"] test = ["pytest"] [[package]] name = "sphinxcontrib-devhelp" -version = "1.0.2" -description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp document." +version = "1.0.6" +description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp documents" optional = false -python-versions = ">=3.5" +python-versions = ">=3.9" files = [ - {file = "sphinxcontrib-devhelp-1.0.2.tar.gz", hash = "sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4"}, - {file = "sphinxcontrib_devhelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e"}, + {file = "sphinxcontrib_devhelp-1.0.6-py3-none-any.whl", hash = "sha256:6485d09629944511c893fa11355bda18b742b83a2b181f9a009f7e500595c90f"}, + {file = "sphinxcontrib_devhelp-1.0.6.tar.gz", hash = "sha256:9893fd3f90506bc4b97bdb977ceb8fbd823989f4316b28c3841ec128544372d3"}, ] [package.extras] lint = ["docutils-stubs", "flake8", "mypy"] +standalone = ["Sphinx (>=5)"] test = ["pytest"] [[package]] name = "sphinxcontrib-htmlhelp" -version = "2.0.1" +version = "2.0.5" description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "sphinxcontrib-htmlhelp-2.0.1.tar.gz", hash = "sha256:0cbdd302815330058422b98a113195c9249825d681e18f11e8b1f78a2f11efff"}, - {file = "sphinxcontrib_htmlhelp-2.0.1-py3-none-any.whl", hash = "sha256:c38cb46dccf316c79de6e5515e1770414b797162b23cd3d06e67020e1d2a6903"}, + {file = "sphinxcontrib_htmlhelp-2.0.5-py3-none-any.whl", hash = "sha256:393f04f112b4d2f53d93448d4bce35842f62b307ccdc549ec1585e950bc35e04"}, + {file = "sphinxcontrib_htmlhelp-2.0.5.tar.gz", hash = "sha256:0dc87637d5de53dd5eec3a6a01753b1ccf99494bd756aafecd74b4fa9e729015"}, ] [package.extras] lint = ["docutils-stubs", "flake8", "mypy"] +standalone = ["Sphinx (>=5)"] test = ["html5lib", "pytest"] [[package]] @@ -2518,32 +2497,34 @@ test = ["flake8", "mypy", "pytest"] [[package]] name = "sphinxcontrib-qthelp" -version = "1.0.3" -description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp document." +version = "1.0.7" +description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp documents" optional = false -python-versions = ">=3.5" +python-versions = ">=3.9" files = [ - {file = "sphinxcontrib-qthelp-1.0.3.tar.gz", hash = "sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72"}, - {file = "sphinxcontrib_qthelp-1.0.3-py2.py3-none-any.whl", hash = "sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6"}, + {file = "sphinxcontrib_qthelp-1.0.7-py3-none-any.whl", hash = "sha256:e2ae3b5c492d58fcbd73281fbd27e34b8393ec34a073c792642cd8e529288182"}, + {file = "sphinxcontrib_qthelp-1.0.7.tar.gz", hash = "sha256:053dedc38823a80a7209a80860b16b722e9e0209e32fea98c90e4e6624588ed6"}, ] [package.extras] lint = ["docutils-stubs", "flake8", "mypy"] +standalone = ["Sphinx (>=5)"] test = ["pytest"] [[package]] name = "sphinxcontrib-serializinghtml" -version = "1.1.5" -description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)." +version = "1.1.10" +description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)" optional = false -python-versions = ">=3.5" +python-versions = ">=3.9" files = [ - {file = "sphinxcontrib-serializinghtml-1.1.5.tar.gz", hash = "sha256:aa5f6de5dfdf809ef505c4895e51ef5c9eac17d0f287933eb49ec495280b6952"}, - {file = "sphinxcontrib_serializinghtml-1.1.5-py2.py3-none-any.whl", hash = "sha256:352a9a00ae864471d3a7ead8d7d79f5fc0b57e8b3f95e9867eb9eb28999b92fd"}, + {file = "sphinxcontrib_serializinghtml-1.1.10-py3-none-any.whl", hash = "sha256:326369b8df80a7d2d8d7f99aa5ac577f51ea51556ed974e7716cfd4fca3f6cb7"}, + {file = "sphinxcontrib_serializinghtml-1.1.10.tar.gz", hash = "sha256:93f3f5dc458b91b192fe10c397e324f262cf163d79f3282c158e8436a2c4511f"}, ] [package.extras] lint = ["docutils-stubs", "flake8", "mypy"] +standalone = ["Sphinx (>=5)"] test = ["pytest"] [[package]] @@ -2694,13 +2675,13 @@ files = [ [[package]] name = "typing-extensions" -version = "4.10.0" +version = "4.11.0" description = "Backported and Experimental Type Hints for Python 3.8+" optional = false python-versions = ">=3.8" files = [ - {file = "typing_extensions-4.10.0-py3-none-any.whl", hash = "sha256:69b1a937c3a517342112fb4c6df7e72fc39a38e7891a5730ed4985b5214b5475"}, - {file = "typing_extensions-4.10.0.tar.gz", hash = "sha256:b0abd7c89e8fb96f98db18d86106ff1d90ab692004eb746cf6eda2682f91b3cb"}, + {file = "typing_extensions-4.11.0-py3-none-any.whl", hash = "sha256:c1f94d72897edaf4ce775bb7558d5b79d8126906a14ea5ed1635921406c0387a"}, + {file = "typing_extensions-4.11.0.tar.gz", hash = "sha256:83f085bd5ca59c80295fc2a82ab5dac679cbe02b9f33f7d83af68e241bea51b0"}, ] [[package]] @@ -2744,13 +2725,13 @@ files = [ [[package]] name = "virtualenv" -version = "20.25.1" +version = "20.25.3" description = "Virtual Python Environment builder" optional = false python-versions = ">=3.7" files = [ - {file = "virtualenv-20.25.1-py3-none-any.whl", hash = "sha256:961c026ac520bac5f69acb8ea063e8a4f071bcc9457b9c1f28f6b085c511583a"}, - {file = "virtualenv-20.25.1.tar.gz", hash = "sha256:e08e13ecdca7a0bd53798f356d5831434afa5b07b93f0abdf0797b7a06ffe197"}, + {file = "virtualenv-20.25.3-py3-none-any.whl", hash = "sha256:8aac4332f2ea6ef519c648d0bc48a5b1d324994753519919bddbb1aff25a104e"}, + {file = "virtualenv-20.25.3.tar.gz", hash = "sha256:7bb554bbdfeaacc3349fa614ea5bff6ac300fc7c335e9facf3a3bcfc703f45be"}, ] [package.dependencies] @@ -2759,7 +2740,7 @@ filelock = ">=3.12.2,<4" platformdirs = ">=3.9.1,<5" [package.extras] -docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] +docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2,!=7.3)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8)", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10)"] [[package]] From 7f573682e5f4febdb78add3c14348466c37d6567 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89loi=20Rivard?= Date: Mon, 22 Apr 2024 11:48:36 +0200 Subject: [PATCH 07/14] feat: BBB API response debug logs --- web/b3desk/models/bbb.py | 1 + web/tests/conftest.py | 1 + web/tests/meeting/test_recordings.py | 1 + web/tests/test_bbb_api_caching.py | 3 +++ 4 files changed, 6 insertions(+) diff --git a/web/b3desk/models/bbb.py b/web/b3desk/models/bbb.py index 4a260a9c..945f8426 100644 --- a/web/b3desk/models/bbb.py +++ b/web/b3desk/models/bbb.py @@ -74,6 +74,7 @@ def bbb_response(self, request): session = requests.Session() current_app.logger.debug("BBB API request %s: %s", request.method, request.url) response = session.send(request) + current_app.logger.debug("BBB API response %s", response.text) return {c.tag: c.text for c in ElementTree.fromstring(response.content)} bbb_response.make_cache_key = cache_key diff --git a/web/tests/conftest.py b/web/tests/conftest.py index 2e479c72..26eed23e 100644 --- a/web/tests/conftest.py +++ b/web/tests/conftest.py @@ -212,6 +212,7 @@ def bbb_response(mocker): class Response: content = """SUCCESStrue""" status_code = 200 + text = "" yield mocker.patch("requests.Session.send", return_value=Response) diff --git a/web/tests/meeting/test_recordings.py b/web/tests/meeting/test_recordings.py index 9e5c60b8..3530a517 100644 --- a/web/tests/meeting/test_recordings.py +++ b/web/tests/meeting/test_recordings.py @@ -112,6 +112,7 @@ class Response: """ + text = "" yield mocker.patch("requests.Session.send", return_value=Response) diff --git a/web/tests/test_bbb_api_caching.py b/web/tests/test_bbb_api_caching.py index 0947ea78..df09d831 100644 --- a/web/tests/test_bbb_api_caching.py +++ b/web/tests/test_bbb_api_caching.py @@ -21,6 +21,7 @@ def test_is_meeting_running(meeting, mocker): class Response: content = IS_MEETING_RUNNING_SUCCESS_RESPONSE + text = "" send = mocker.patch("requests.Session.send", return_value=Response) @@ -142,6 +143,7 @@ def test_get_recordings(meeting, mocker): class Response: content = GET_RECORDINGS_RESPONSE + text = "" send = mocker.patch("requests.Session.send", return_value=Response) @@ -183,6 +185,7 @@ def test_create(meeting, mocker): class Response: content = CREATE_RESPONSE + text = "" send = mocker.patch("requests.Session.send", return_value=Response) mocker.patch("requests.post") From c93feadbc27bb549885f55730a1fb4b63f9c8c37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89loi=20Rivard?= Date: Mon, 22 Apr 2024 12:11:04 +0200 Subject: [PATCH 08/14] feat: celery BBB API debug logs --- web/b3desk/tasks.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/web/b3desk/tasks.py b/web/b3desk/tasks.py index d454d78f..1cc8b0ef 100644 --- a/web/b3desk/tasks.py +++ b/web/b3desk/tasks.py @@ -15,10 +15,11 @@ @celery.task(name="background_upload") def background_upload(endpoint, xml): - requests.post( + response = requests.post( endpoint, headers={"Content-Type": "application/xml"}, data=xml, ) - logger.info(f"adding background files endpoint:{endpoint} xml:{xml}") + logger.info("BBB API request %s: xml:%s", endpoint, xml) + logger.info("BBB API response %s", response.text) return True From b83a9b7fad33dd4a0c382dfaf3e6a8d81917ec91 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89loi=20Rivard?= Date: Mon, 22 Apr 2024 12:24:34 +0200 Subject: [PATCH 09/14] chore: log the BBB payload --- web/b3desk/models/bbb.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/web/b3desk/models/bbb.py b/web/b3desk/models/bbb.py index 945f8426..12f01b78 100644 --- a/web/b3desk/models/bbb.py +++ b/web/b3desk/models/bbb.py @@ -72,7 +72,12 @@ def bbb_request(self, action, method="GET", **kwargs): ) def bbb_response(self, request): session = requests.Session() - current_app.logger.debug("BBB API request %s: %s", request.method, request.url) + current_app.logger.debug( + "BBB API request method:%s url:%s data:%s", + request.method, + request.url, + request.body, + ) response = session.send(request) current_app.logger.debug("BBB API response %s", response.text) return {c.tag: c.text for c in ElementTree.fromstring(response.content)} @@ -222,7 +227,9 @@ def get_recordings(self): request = self.bbb_request( "getRecordings", params={"meetingID": self.meeting.meetingID} ) - current_app.logger.debug("BBB API request %s: %s", request.method, request.url) + current_app.logger.debug( + "BBB API request method:%s url:%s", request.method, request.url + ) response = requests.Session().send(request) root = ElementTree.fromstring(response.content) From 39c99c0f9d734cd1e264d410e50919eba5bf1fe1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89loi=20Rivard?= Date: Mon, 22 Apr 2024 13:40:04 +0200 Subject: [PATCH 10/14] chore: development version --- pyproject.toml | 2 +- web/b3desk/__init__.py | 2 +- web/b3desk/templates/footer.html | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 6a273f1a..cc6a93a8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api" [tool.poetry] name = "b3desk" -version = "1.2.1" +version = "1.2.2dev" description = "Outil de visioconférence pour les agents de l'Education Nationale et de l'Etat en général." authors = ["Your Name "] readme = "README.md" diff --git a/web/b3desk/__init__.py b/web/b3desk/__init__.py index 085eb43f..e60ad145 100644 --- a/web/b3desk/__init__.py +++ b/web/b3desk/__init__.py @@ -29,7 +29,7 @@ from .utils import enum_converter from .utils import model_converter -__version__ = "1.2.1" +__version__ = "1.2.2dev" LANGUAGES = ["en", "fr"] diff --git a/web/b3desk/templates/footer.html b/web/b3desk/templates/footer.html index f4792873..f3c6118c 100644 --- a/web/b3desk/templates/footer.html +++ b/web/b3desk/templates/footer.html @@ -26,7 +26,7 @@ {% trans %}Le code source est ouvert et les contributions sont bienvenues.{% endtrans %} {% trans %}Voir le code source{% endtrans %} {% if version %} - {% if version == "0.0.0" %} + {% if version == "0.0.0" or "dev" in version %} DEV {% else %} v{{ version }} From e28c587af825e5c1abd2cc958acae65aff66757d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89loi=20Rivard?= Date: Mon, 22 Apr 2024 13:50:01 +0200 Subject: [PATCH 11/14] feat: better display development badge --- web/b3desk/__init__.py | 1 + web/b3desk/templates/brand.html | 6 +++++- web/b3desk/templates/footer.html | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/web/b3desk/__init__.py b/web/b3desk/__init__.py index e60ad145..2a030c6a 100644 --- a/web/b3desk/__init__.py +++ b/web/b3desk/__init__.py @@ -134,6 +134,7 @@ def global_processor(): return { "config": app.config, "beta": app.config["BETA"], + "development_version": __version__ == "0.0.0" or "dev" in __version__, "documentation_link": app.config["DOCUMENTATION_LINK"], "is_rie": is_rie(), "version": __version__, diff --git a/web/b3desk/templates/brand.html b/web/b3desk/templates/brand.html index e2ee21bc..d34bec9f 100644 --- a/web/b3desk/templates/brand.html +++ b/web/b3desk/templates/brand.html @@ -18,7 +18,11 @@

{% trans %}{{ service_title }}{% endtrans %} {% if config.get("BETA") %} - BETA + {% if development_version %} + DEV + {% else %} + BETA + {% endif %} {% endif %}

diff --git a/web/b3desk/templates/footer.html b/web/b3desk/templates/footer.html index f3c6118c..5eb3cb30 100644 --- a/web/b3desk/templates/footer.html +++ b/web/b3desk/templates/footer.html @@ -26,7 +26,7 @@ {% trans %}Le code source est ouvert et les contributions sont bienvenues.{% endtrans %} {% trans %}Voir le code source{% endtrans %} {% if version %} - {% if version == "0.0.0" or "dev" in version %} + {% if development_version %} DEV {% else %} v{{ version }} From 41f9f07abaaf9b82e7529cde8487e2ca8f3b6896 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89loi=20Rivard?= Date: Mon, 22 Apr 2024 14:22:57 +0200 Subject: [PATCH 12/14] fix: stop truncating long URLs on the file upload form --- web/b3desk/static/js/meeting.js | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/web/b3desk/static/js/meeting.js b/web/b3desk/static/js/meeting.js index 45500f5f..7a272ce7 100644 --- a/web/b3desk/static/js/meeting.js +++ b/web/b3desk/static/js/meeting.js @@ -90,15 +90,9 @@ function add_URL_file(name, from) { return ; } // si pas de https:// renseigné, on le force en préfixe, si c'est du http, la personne devra corriger d'elle-même - if (!name.match(/^http/)) name = `https://${name}`; - //simple copy as we are fetch in asynchronous mode - var URL_to_fetch = name; - // gestion if name > 50 char, reduce its printing - if (name.length > 80 ) { - var splitted = name.split(['/']); - name = splitted[2] + '/' + splitted[3] + '.../' + splitted.slice(-1).slice(-20); + if (!name.match(/^http/)) { + name = `https://${name}`; } - link_file_to_meeting(name, 'URL'); } From ed471819587fd56c92ba52eb5e3b09bb2d0b882c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89loi=20Rivard?= Date: Mon, 22 Apr 2024 14:58:19 +0200 Subject: [PATCH 13/14] fix: file upload with dropzone --- web/b3desk/endpoints/meeting_files.py | 18 +++++++++++------- web/b3desk/models/bbb.py | 2 ++ web/tests/meeting/test_meeting.py | 2 +- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/web/b3desk/endpoints/meeting_files.py b/web/b3desk/endpoints/meeting_files.py index 4ac10e90..ba7c530b 100644 --- a/web/b3desk/endpoints/meeting_files.py +++ b/web/b3desk/endpoints/meeting_files.py @@ -157,15 +157,15 @@ def download_meeting_files(meeting: Meeting, owner: User, file_id=None): def insertDocuments(meeting: Meeting): from flask import request - files_title = request.get_json() + filenames = request.get_json() secret_key = current_app.config["SECRET_KEY"] xml_beg = " " xml_end = " " xml_mid = "" # @FIX We ONLY send the documents that have been uploaded NOW, not ALL of them for this meetingid ;) - for cur_file in files_title: - id = add_external_meeting_file_nextcloud(cur_file, meeting.id) + for filename in filenames: + id = add_external_meeting_file_nextcloud(filename, meeting.id) filehash = hashlib.sha1( f"{secret_key}-1-{id}-{secret_key}".encode() ).hexdigest() @@ -174,9 +174,10 @@ def insertDocuments(meeting: Meeting): isexternal=1, mfid=id, mftoken=filehash, + filename=filename, _external=True, ) - xml_mid += f"" + xml_mid += f"" bbb_endpoint = current_app.config["BIGBLUEBUTTON_ENDPOINT"] xml = xml_beg + xml_mid + xml_end @@ -546,6 +547,7 @@ def insertDoc(token): isexternal=0, mfid=meeting_file.id, mftoken=meeting_file.download_hash, + filename=meeting_file.title, _external=True, ) xml = f" " @@ -561,8 +563,8 @@ def insertDoc(token): @bp.route("/ncdownload///") -# @auth.token_auth(provider_name="default") - must be accessible by BBB server, so no auth -def ncdownload(isexternal, mfid, mftoken): +@bp.route("/ncdownload////") +def ncdownload(isexternal, mfid, mftoken, filename=None): secret_key = current_app.config["SECRET_KEY"] # select good file from token # get file through NC credentials - HOW POSSIBLE ? @@ -607,4 +609,6 @@ def ncdownload(isexternal, mfid, mftoken): return jsonify(status=500, msg="La connexion avec Nextcloud semble rompue") # send the downloaded file to the BBB: - return send_from_directory(TMP_DOWNLOAD_DIR, uniqfile) + return send_from_directory( + TMP_DOWNLOAD_DIR, uniqfile, download_name=meeting_file.title + ) diff --git a/web/b3desk/models/bbb.py b/web/b3desk/models/bbb.py index 12f01b78..00ef4fcd 100644 --- a/web/b3desk/models/bbb.py +++ b/web/b3desk/models/bbb.py @@ -324,7 +324,9 @@ def meeting_file_addition_xml(self, meeting_files): isexternal=0, mfid=meeting_file.id, mftoken=filehash, + filename=meeting_file.title, _external=True, + _scheme=current_app.config["PREFERRED_URL_SCHEME"], ) xml_mid += f"" diff --git a/web/tests/meeting/test_meeting.py b/web/tests/meeting/test_meeting.py index f588f343..915b9c9c 100644 --- a/web/tests/meeting/test_meeting.py +++ b/web/tests/meeting/test_meeting.py @@ -519,7 +519,7 @@ def test_create_with_files( == " " + " " + " " - + f" " + + f" " + "" + "" ) From 6934e8fd0238b06f006d79087f090c28a88bc59b Mon Sep 17 00:00:00 2001 From: Loan Robert Date: Mon, 22 Apr 2024 15:11:38 +0200 Subject: [PATCH 14/14] fix: add nextcloud image with correct filename and not path --- web/b3desk/endpoints/meeting_files.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/b3desk/endpoints/meeting_files.py b/web/b3desk/endpoints/meeting_files.py index ba7c530b..17aaa6d6 100644 --- a/web/b3desk/endpoints/meeting_files.py +++ b/web/b3desk/endpoints/meeting_files.py @@ -393,7 +393,7 @@ def add_meeting_file_nextcloud(path, meeting_id, is_default): ) meeting_file = MeetingFiles( - title=path, + title=path.split("/")[-1], created_at=date.today(), meeting_id=meeting_id, nc_path=path,