From 6e79dcd2775143725e6bbdad94543c169471f9f1 Mon Sep 17 00:00:00 2001 From: huangpixu-canway <67646759+huangpixu@users.noreply.github.com> Date: Wed, 15 Jan 2025 11:18:44 +0800 Subject: [PATCH] =?UTF-8?q?python3.11.10=E4=BE=9D=E8=B5=96=E5=8D=87?= =?UTF-8?q?=E7=BA=A7=20(#241)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * bugfix: 取消signal()的providing_args参数传入 #238 * bugfix: ugettext_lazy导入修改为gettext_lazy #238 * feature: 修改pyproject文件 #238 * bugfix: 修改github workflows相关文件python版本 #238 * bugfix: 修改pyproject、tox.ini文件 #238 * bugfix: 修改pyproject、pr_check文件 #238 * bugfix: 修改pr_check文件uses引用 #238 * bugfix: 代码格式化 #238 * bugfix: bool_切换小写比对lower() #238 * bugfix: ugettext_lazy替换成gettext_lazy #238 * bugfix: test_data_for_execution_lack_of_inputs取消多个传参测试 #238 * bugfix: 代码格式化 #238 * bugfix: 代码格式化 #238 * bugfix: 修改action配置文件 #238 * bugfix: 修改tox.ini文件 #238 * bugfix: 代码格式化 #238 * bugfix: 修改poetry和pyproject文件 #238 * bugfix: 修改python版本 #238 * bugfix: 格式化代码 #238 * bugfix: 修改两个poetry.lock文件 #238 * bugfix: 修改bamboo-engine依赖版本 #238 * bugfix: 修改pyproject版本号 #238 * bugfix: 修改bamboo-engine导入的方式 #238 --- .flake8 | 3 +- .pre-commit-config.yaml | 14 +- bamboo_engine/utils/boolrule/boolrule.py | 4 +- bamboo_engine/utils/mako_utils/checker.py | 4 +- bamboo_engine/validator/gateway.py | 5 +- docs/user_guide/signals.md | 10 +- poetry.lock | 542 +++--- pyproject.toml | 25 +- runtime/bamboo-pipeline/pipeline/apps.py | 18 +- .../migrations/0002_delete_componentmodel.py | 6 +- .../migrations/0007_auto_20201112_2244.py | 5 +- .../0008_componentmodel_is_default_version.py | 8 +- .../pipeline/component_framework/models.py | 3 +- .../pipeline/contrib/celery_tools/periodic.py | 19 +- .../pipeline/contrib/engine_admin/apps.py | 4 +- .../migrations/0002_s3source_source_dir.py | 4 +- .../contrib/external_plugins/models/base.py | 3 +- .../contrib/external_plugins/models/source.py | 17 +- .../external_plugins/utils/importer/s3.py | 17 +- .../pipeline/contrib/mock/hanlder.py | 49 +- .../node_timeout/migrations/0001_initial.py | 32 +- .../pipeline/contrib/node_timeout/models.py | 4 +- .../contrib/node_timer_event/models.py | 2 +- .../contrib/periodic_task/djcelery/db.py | 1 - .../periodic_task/djcelery/managers.py | 4 +- .../contrib/periodic_task/djcelery/models.py | 103 +- .../periodic_task/djcelery/tzcrontab.py | 9 +- .../periodic_task/migrations/0001_initial.py | 189 +- .../migrations/0002_auto_20190103_1918.py | 7 +- .../migrations/0003_auto_20191213_0819.py | 12 +- .../pipeline/contrib/periodic_task/models.py | 27 +- .../contrib/periodic_task/signals/__init__.py | 6 +- .../pipeline/contrib/periodic_task/tests.py | 8 +- .../pipeline/contrib/plugin_execute/models.py | 2 +- .../pipeline/contrib/rollback/models.py | 2 +- .../migrations/0002_auto_20180817_1212.py | 8 +- .../migrations/0003_auto_20180821_2015.py | 18 +- .../pipeline/contrib/statistics/models.py | 2 +- .../core/flow/activity/service_activity.py | 6 +- .../bamboo-pipeline/pipeline/core/flow/io.py | 1 + .../pipeline/core/flow/signals.py | 2 +- .../pipeline/core/signals/__init__.py | 2 +- .../pipeline/django_signal_valve/models.py | 4 +- .../bamboo-pipeline/pipeline/engine/admin.py | 3 +- .../bamboo-pipeline/pipeline/engine/api.py | 17 +- .../pipeline/engine/conf/function_switch.py | 8 +- .../engine/core/handlers/service_activity.py | 3 +- .../migrations/0004_auto_20180717_1411.py | 8 +- .../migrations/0007_auto_20180717_2022.py | 22 +- .../migrations/0021_auto_20191213_0725.py | 8 +- .../migrations/0026_auto_20200610_1442.py | 38 +- .../migrations/0027_sendfailedcelerytask.py | 4 +- .../pipeline/engine/models/core.py | 5 +- .../pipeline/engine/models/data.py | 3 +- .../pipeline/engine/models/function.py | 3 +- .../pipeline/engine/signals/__init__.py | 35 +- .../pipeline/engine/signals/handlers.py | 21 +- .../pipeline/eri/migrations/0001_initial.py | 21 +- .../eri/migrations/0004_state_inner_loop_.py | 4 +- .../eri/migrations/0005_auto_20220422_1048.py | 64 +- .../bamboo-pipeline/pipeline/eri/models.py | 2 +- .../bamboo-pipeline/pipeline/eri/runtime.py | 8 +- .../bamboo-pipeline/pipeline/eri/signals.py | 12 +- .../log/migrations/0002_auto_20180810_1054.py | 12 +- .../migrations/0003_logentry_history_id.py | 6 +- .../bamboo-pipeline/pipeline/log/models.py | 2 +- .../celery_version_adapter/celery4.py | 5 +- .../pipeline/management/commands/base.py | 14 +- .../migrations/0008_auto_20180824_1115.py | 11 +- .../migrations/0011_auto_20180906_1045.py | 5 +- .../migrations/0019_delete_variablemodel.py | 4 +- ...mplatescheme_subprocess_scheme_relation.py | 10 +- runtime/bamboo-pipeline/pipeline/models.py | 9 +- .../pipeline/signals/__init__.py | 4 +- .../pipeline/signals/handlers.py | 7 +- .../component_framework/test_component.py | 5 +- .../pipeline/tests/contrib/test_mock.py | 37 +- .../pipeline/tests/contrib/test_rollback.py | 4 +- .../pipeline/tests/engine/core/test_api.py | 14 +- .../tests/engine/core/test_schedule.py | 10 +- .../models/core/test_node_celery_task.py | 17 +- .../models/core/test_process_celery_task.py | 5 +- .../models/core/test_schedule_celery_task.py | 5 +- .../core/test_send_failed_celery_task.py | 47 +- .../pipeline/tests/engine/test_states.py | 3 +- .../pipeline/tests/signals/test_handlers.py | 3 +- .../pipeline/tests/validators/cases.py | 7 +- .../pipeline/utils/boolrule/boolrule.py | 4 +- .../pipeline/utils/mako_utils/checker.py | 8 +- .../pipeline/validators/connection.py | 5 +- .../pipeline/validators/gateway.py | 11 +- .../pipeline/variable_framework/models.py | 3 +- runtime/bamboo-pipeline/poetry.lock | 1533 +++++++++++------ runtime/bamboo-pipeline/pyproject.toml | 51 +- tox.ini | 5 +- 95 files changed, 2159 insertions(+), 1207 deletions(-) diff --git a/.flake8 b/.flake8 index ced289fa..0d11c826 100644 --- a/.flake8 +++ b/.flake8 @@ -5,7 +5,8 @@ ignore = ;This behaviour may raise E203 whitespace before ':' warnings in style guide enforcement tools like Flake8. ;Since E203 is not PEP 8 compliant, you should tell Flake8 to ignore these warnings. E203, - C901 + C901, + F405 max-line-length = 120 max-complexity = 25 diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index fcb847f7..e8df037f 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,27 +1,27 @@ -default_stages: [ commit ] +default_stages: [ pre-commit ] repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v2.1.0 hooks: - id: check-merge-conflict - repo: https://github.com/psf/black - rev: 22.3.0 + rev: 24.10.0 hooks: - id: black - language_version: python3 + language_version: python3.11.10 - repo: https://github.com/pycqa/isort - rev: 5.6.4 + rev: 5.12.0 hooks: - id: isort args: ["--profile", "black", "--filter-files"] - repo: https://github.com/pycqa/flake8 - rev: 5.0.4 + rev: 6.1.0 hooks: - id: flake8 - language_version: python3 + language_version: python3.11.10 - repo: https://github.com/alessandrojcm/commitlint-pre-commit-hook rev: v2.2.0 hooks: - id: commitlint stages: [ commit-msg ] - additional_dependencies: [ '@commitlint/config-conventional' ] + additional_dependencies: [ '@commitlint/config-conventional' ] \ No newline at end of file diff --git a/bamboo_engine/utils/boolrule/boolrule.py b/bamboo_engine/utils/boolrule/boolrule.py index 8408da94..7f79bff6 100644 --- a/bamboo_engine/utils/boolrule/boolrule.py +++ b/bamboo_engine/utils/boolrule/boolrule.py @@ -98,7 +98,7 @@ def get_bool_expression(): realNumber.setParseAction(lambda toks: float(toks[0])) | integer.setParseAction(lambda toks: int(toks[0])) | str_ - | bool_.setParseAction(lambda toks: toks[0] == "true") + | bool_.setParseAction(lambda toks: toks[0].lower() == "true") | propertyPath.setParseAction(lambda toks: SubstituteVal(toks)) ) # need to add support for alg expressions @@ -209,7 +209,7 @@ def _compile(self): self._compiled = True def _expand_val(self, val, context): - if type(val) == list: + if isinstance(val, list): val = [self._expand_val(v, context) for v in val] if isinstance(val, SubstituteVal): diff --git a/bamboo_engine/utils/mako_utils/checker.py b/bamboo_engine/utils/mako_utils/checker.py index 03bbaec4..8d7c6138 100644 --- a/bamboo_engine/utils/mako_utils/checker.py +++ b/bamboo_engine/utils/mako_utils/checker.py @@ -54,6 +54,8 @@ def check_mako_template_safety(text: str, node_visitor: ast.NodeVisitor, code_ex try: lexer_template = Lexer(text).parse() except MakoException as mako_error: - raise ForbiddenMakoTemplateException("非mako模板,解析失败, {err_msg}".format(err_msg=mako_error.__class__.__name__)) + raise ForbiddenMakoTemplateException( + "非mako模板,解析失败, {err_msg}".format(err_msg=mako_error.__class__.__name__) + ) parse_template_nodes(lexer_template.nodes, node_visitor, code_extractor) return True diff --git a/bamboo_engine/validator/gateway.py b/bamboo_engine/validator/gateway.py index 95c88937..adb20789 100644 --- a/bamboo_engine/validator/gateway.py +++ b/bamboo_engine/validator/gateway.py @@ -14,6 +14,7 @@ import queue from bamboo_engine import exceptions + from .utils import get_node_for_sequence, get_nodes_dict STREAM = "stream" @@ -144,7 +145,9 @@ def match_converge( target[i] = None break else: - raise exceptions.ConvergeMatchError(cur_index, "并行网关中的分支网关必须将所有分支汇聚到一个汇聚网关") + raise exceptions.ConvergeMatchError( + cur_index, "并行网关中的分支网关必须将所有分支汇聚到一个汇聚网关" + ) converge_id, shared = match_converge( converges=converges, diff --git a/docs/user_guide/signals.md b/docs/user_guide/signals.md index f1e5e28b..a225224d 100644 --- a/docs/user_guide/signals.md +++ b/docs/user_guide/signals.md @@ -8,7 +8,7 @@ pipeline runtime 提供了以下 django signal,可作为流程运行生命周 ### post_set_state ```python -post_set_state = Signal(providing_args=["node_id", "to_state", "version", "root_id", "parent_id", "loop"]) +post_set_state = Signal() # providing_args=["node_id", "to_state", "version", "root_id", "parent_id", "loop"] ``` 某个节点的状态修改后触发的信号 @@ -27,7 +27,7 @@ sender 为 `pipeline.eri.models.State` ### execute_interrupt ```python -execute_interrupt = Signal(providing_args=["event"]) +execute_interrupt = Signal() # providing_args=["event"] ``` 发生 execute 中断后触发的信号 @@ -41,7 +41,7 @@ sender 为 `bamboo_engine.eri.models.ExecuteInterruptEvent` 的实例 ### schedule_interrupt ```python -schedule_interrupt = Signal(providing_args=["event"]) +schedule_interrupt = Signal() # providing_args=["event"] ``` 发生 schedule 中断后触发的信号 @@ -55,7 +55,7 @@ sender 为 `bamboo_engine.eri.models.ScheduleInterruptEvent` 的实例 ### pre_service_execute ```python -pre_service_execute = Signal(providing_args=["service", "data", "parent_data"]) +pre_service_execute = Signal() # providing_args=["service", "data", "parent_data"] ``` ServiceActivity 对应的 Service execute 前触发的信号 @@ -71,7 +71,7 @@ sender 为 `pipeline.eri.imp.service.ServiceWrapper` ### pre_service_schedule ```python -pre_service_schedule = Signal(providing_args=["service", "data", "parent_data", "callback_data"]) +pre_service_schedule = Signal() # providing_args=["service", "data", "parent_data", "callback_data"] ``` ServiceActivity 对应的 Service schedule 前触发的信号 diff --git a/poetry.lock b/poetry.lock index edcad647..f3288f3f 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,379 +1,465 @@ -[[package]] -name = "appdirs" -version = "1.4.4" -description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -category = "dev" -optional = false -python-versions = "*" - -[[package]] -name = "atomicwrites" -version = "1.4.1" -description = "Atomic file writes." -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" - -[[package]] -name = "attrs" -version = "22.2.0" -description = "Classes Without Boilerplate" -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.extras] -cov = ["attrs", "coverage-enable-subprocess", "coverage[toml] (>=5.3)"] -dev = ["attrs"] -docs = ["furo", "sphinx", "myst-parser", "zope.interface", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier"] -tests = ["attrs", "zope.interface"] -tests-no-zope = ["hypothesis", "pympler", "pytest (>=4.3.0)", "pytest-xdist", "cloudpickle", "mypy (>=0.971,<0.990)", "pytest-mypy-plugins"] -tests_no_zope = ["hypothesis", "pympler", "pytest (>=4.3.0)", "pytest-xdist", "cloudpickle", "mypy (>=0.971,<0.990)", "pytest-mypy-plugins"] +# This file is automatically @generated by Poetry 2.0.0 and should not be changed by hand. [[package]] name = "black" -version = "20.8b1" +version = "23.12.1" description = "The uncompromising code formatter." -category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "black-23.12.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e0aaf6041986767a5e0ce663c7a2f0e9eaf21e6ff87a5f95cbf3675bfd4c41d2"}, + {file = "black-23.12.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c88b3711d12905b74206227109272673edce0cb29f27e1385f33b0163c414bba"}, + {file = "black-23.12.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a920b569dc6b3472513ba6ddea21f440d4b4c699494d2e972a1753cdc25df7b0"}, + {file = "black-23.12.1-cp310-cp310-win_amd64.whl", hash = "sha256:3fa4be75ef2a6b96ea8d92b1587dd8cb3a35c7e3d51f0738ced0781c3aa3a5a3"}, + {file = "black-23.12.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8d4df77958a622f9b5a4c96edb4b8c0034f8434032ab11077ec6c56ae9f384ba"}, + {file = "black-23.12.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:602cfb1196dc692424c70b6507593a2b29aac0547c1be9a1d1365f0d964c353b"}, + {file = "black-23.12.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c4352800f14be5b4864016882cdba10755bd50805c95f728011bcb47a4afd59"}, + {file = "black-23.12.1-cp311-cp311-win_amd64.whl", hash = "sha256:0808494f2b2df923ffc5723ed3c7b096bd76341f6213989759287611e9837d50"}, + {file = "black-23.12.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:25e57fd232a6d6ff3f4478a6fd0580838e47c93c83eaf1ccc92d4faf27112c4e"}, + {file = "black-23.12.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2d9e13db441c509a3763a7a3d9a49ccc1b4e974a47be4e08ade2a228876500ec"}, + {file = "black-23.12.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d1bd9c210f8b109b1762ec9fd36592fdd528485aadb3f5849b2740ef17e674e"}, + {file = "black-23.12.1-cp312-cp312-win_amd64.whl", hash = "sha256:ae76c22bde5cbb6bfd211ec343ded2163bba7883c7bc77f6b756a1049436fbb9"}, + {file = "black-23.12.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1fa88a0f74e50e4487477bc0bb900c6781dbddfdfa32691e780bf854c3b4a47f"}, + {file = "black-23.12.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a4d6a9668e45ad99d2f8ec70d5c8c04ef4f32f648ef39048d010b0689832ec6d"}, + {file = "black-23.12.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b18fb2ae6c4bb63eebe5be6bd869ba2f14fd0259bda7d18a46b764d8fb86298a"}, + {file = "black-23.12.1-cp38-cp38-win_amd64.whl", hash = "sha256:c04b6d9d20e9c13f43eee8ea87d44156b8505ca8a3c878773f68b4e4812a421e"}, + {file = "black-23.12.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3e1b38b3135fd4c025c28c55ddfc236b05af657828a8a6abe5deec419a0b7055"}, + {file = "black-23.12.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4f0031eaa7b921db76decd73636ef3a12c942ed367d8c3841a0739412b260a54"}, + {file = "black-23.12.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:97e56155c6b737854e60a9ab1c598ff2533d57e7506d97af5481141671abf3ea"}, + {file = "black-23.12.1-cp39-cp39-win_amd64.whl", hash = "sha256:dd15245c8b68fe2b6bd0f32c1556509d11bb33aec9b5d0866dd8e2ed3dba09c2"}, + {file = "black-23.12.1-py3-none-any.whl", hash = "sha256:78baad24af0f033958cad29731e27363183e140962595def56423e626f4bee3e"}, + {file = "black-23.12.1.tar.gz", hash = "sha256:4ce3ef14ebe8d9509188014d96af1c456a910d5b5cbf434a09fef7e024b3d0d5"}, +] [package.dependencies] -appdirs = "*" -click = ">=7.1.2" -dataclasses = {version = ">=0.6", markers = "python_version < \"3.7\""} +click = ">=8.0.0" mypy-extensions = ">=0.4.3" -pathspec = ">=0.6,<1" -regex = ">=2020.1.8" -toml = ">=0.10.1" -typed-ast = ">=1.4.0" -typing-extensions = ">=3.7.4" +packaging = ">=22.0" +pathspec = ">=0.9.0" +platformdirs = ">=2" [package.extras] colorama = ["colorama (>=0.4.3)"] -d = ["aiohttp (>=3.3.2)", "aiohttp-cors"] +d = ["aiohttp (>=3.7.4)", "aiohttp (>=3.7.4,!=3.9.0)"] +jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] +uvloop = ["uvloop (>=0.15.2)"] [[package]] name = "click" version = "8.0.4" description = "Composable command line interface toolkit" -category = "dev" optional = false python-versions = ">=3.6" +groups = ["dev"] +files = [ + {file = "click-8.0.4-py3-none-any.whl", hash = "sha256:6a7a62563bbfabfda3a38f3023a1db4a35978c0abd76f6c9605ecd6554d6d9b1"}, + {file = "click-8.0.4.tar.gz", hash = "sha256:8458d7b1287c5fb128c90e23381cf99dcde74beaf6c7ff6384ce84d6fe090adb"}, +] [package.dependencies] colorama = {version = "*", markers = "platform_system == \"Windows\""} -importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} [[package]] name = "colorama" version = "0.4.5" description = "Cross-platform colored terminal text." -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +groups = ["dev"] +markers = "sys_platform == \"win32\" or platform_system == \"Windows\"" +files = [ + {file = "colorama-0.4.5-py2.py3-none-any.whl", hash = "sha256:854bf444933e37f5824ae7bfc1e98d5bce2ebe4160d46b5edf346a89358e99da"}, + {file = "colorama-0.4.5.tar.gz", hash = "sha256:e6c6b4334fc50988a639d9b98aa429a0b57da6e17b9a44f0451f930b6967b7a4"}, +] [[package]] name = "coverage" -version = "5.5" +version = "7.6.10" description = "Code coverage measurement for Python" -category = "dev" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4" - -[package.dependencies] -toml = {version = "*", optional = true, markers = "extra == \"toml\""} +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "coverage-7.6.10-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5c912978f7fbf47ef99cec50c4401340436d200d41d714c7a4766f377c5b7b78"}, + {file = "coverage-7.6.10-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a01ec4af7dfeb96ff0078ad9a48810bb0cc8abcb0115180c6013a6b26237626c"}, + {file = "coverage-7.6.10-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a3b204c11e2b2d883946fe1d97f89403aa1811df28ce0447439178cc7463448a"}, + {file = "coverage-7.6.10-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:32ee6d8491fcfc82652a37109f69dee9a830e9379166cb73c16d8dc5c2915165"}, + {file = "coverage-7.6.10-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:675cefc4c06e3b4c876b85bfb7c59c5e2218167bbd4da5075cbe3b5790a28988"}, + {file = "coverage-7.6.10-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f4f620668dbc6f5e909a0946a877310fb3d57aea8198bde792aae369ee1c23b5"}, + {file = "coverage-7.6.10-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:4eea95ef275de7abaef630c9b2c002ffbc01918b726a39f5a4353916ec72d2f3"}, + {file = "coverage-7.6.10-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:e2f0280519e42b0a17550072861e0bc8a80a0870de260f9796157d3fca2733c5"}, + {file = "coverage-7.6.10-cp310-cp310-win32.whl", hash = "sha256:bc67deb76bc3717f22e765ab3e07ee9c7a5e26b9019ca19a3b063d9f4b874244"}, + {file = "coverage-7.6.10-cp310-cp310-win_amd64.whl", hash = "sha256:0f460286cb94036455e703c66988851d970fdfd8acc2a1122ab7f4f904e4029e"}, + {file = "coverage-7.6.10-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ea3c8f04b3e4af80e17bab607c386a830ffc2fb88a5484e1df756478cf70d1d3"}, + {file = "coverage-7.6.10-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:507a20fc863cae1d5720797761b42d2d87a04b3e5aeb682ef3b7332e90598f43"}, + {file = "coverage-7.6.10-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d37a84878285b903c0fe21ac8794c6dab58150e9359f1aaebbeddd6412d53132"}, + {file = "coverage-7.6.10-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a534738b47b0de1995f85f582d983d94031dffb48ab86c95bdf88dc62212142f"}, + {file = "coverage-7.6.10-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0d7a2bf79378d8fb8afaa994f91bfd8215134f8631d27eba3e0e2c13546ce994"}, + {file = "coverage-7.6.10-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6713ba4b4ebc330f3def51df1d5d38fad60b66720948112f114968feb52d3f99"}, + {file = "coverage-7.6.10-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:ab32947f481f7e8c763fa2c92fd9f44eeb143e7610c4ca9ecd6a36adab4081bd"}, + {file = "coverage-7.6.10-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7bbd8c8f1b115b892e34ba66a097b915d3871db7ce0e6b9901f462ff3a975377"}, + {file = "coverage-7.6.10-cp311-cp311-win32.whl", hash = "sha256:299e91b274c5c9cdb64cbdf1b3e4a8fe538a7a86acdd08fae52301b28ba297f8"}, + {file = "coverage-7.6.10-cp311-cp311-win_amd64.whl", hash = "sha256:489a01f94aa581dbd961f306e37d75d4ba16104bbfa2b0edb21d29b73be83609"}, + {file = "coverage-7.6.10-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:27c6e64726b307782fa5cbe531e7647aee385a29b2107cd87ba7c0105a5d3853"}, + {file = "coverage-7.6.10-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c56e097019e72c373bae32d946ecf9858fda841e48d82df7e81c63ac25554078"}, + {file = "coverage-7.6.10-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7827a5bc7bdb197b9e066cdf650b2887597ad124dd99777332776f7b7c7d0d0"}, + {file = "coverage-7.6.10-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:204a8238afe787323a8b47d8be4df89772d5c1e4651b9ffa808552bdf20e1d50"}, + {file = "coverage-7.6.10-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e67926f51821b8e9deb6426ff3164870976fe414d033ad90ea75e7ed0c2e5022"}, + {file = "coverage-7.6.10-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e78b270eadb5702938c3dbe9367f878249b5ef9a2fcc5360ac7bff694310d17b"}, + {file = "coverage-7.6.10-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:714f942b9c15c3a7a5fe6876ce30af831c2ad4ce902410b7466b662358c852c0"}, + {file = "coverage-7.6.10-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:abb02e2f5a3187b2ac4cd46b8ced85a0858230b577ccb2c62c81482ca7d18852"}, + {file = "coverage-7.6.10-cp312-cp312-win32.whl", hash = "sha256:55b201b97286cf61f5e76063f9e2a1d8d2972fc2fcfd2c1272530172fd28c359"}, + {file = "coverage-7.6.10-cp312-cp312-win_amd64.whl", hash = "sha256:e4ae5ac5e0d1e4edfc9b4b57b4cbecd5bc266a6915c500f358817a8496739247"}, + {file = "coverage-7.6.10-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:05fca8ba6a87aabdd2d30d0b6c838b50510b56cdcfc604d40760dae7153b73d9"}, + {file = "coverage-7.6.10-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:9e80eba8801c386f72e0712a0453431259c45c3249f0009aff537a517b52942b"}, + {file = "coverage-7.6.10-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a372c89c939d57abe09e08c0578c1d212e7a678135d53aa16eec4430adc5e690"}, + {file = "coverage-7.6.10-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ec22b5e7fe7a0fa8509181c4aac1db48f3dd4d3a566131b313d1efc102892c18"}, + {file = "coverage-7.6.10-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26bcf5c4df41cad1b19c84af71c22cbc9ea9a547fc973f1f2cc9a290002c8b3c"}, + {file = "coverage-7.6.10-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4e4630c26b6084c9b3cb53b15bd488f30ceb50b73c35c5ad7871b869cb7365fd"}, + {file = "coverage-7.6.10-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2396e8116db77789f819d2bc8a7e200232b7a282c66e0ae2d2cd84581a89757e"}, + {file = "coverage-7.6.10-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:79109c70cc0882e4d2d002fe69a24aa504dec0cc17169b3c7f41a1d341a73694"}, + {file = "coverage-7.6.10-cp313-cp313-win32.whl", hash = "sha256:9e1747bab246d6ff2c4f28b4d186b205adced9f7bd9dc362051cc37c4a0c7bd6"}, + {file = "coverage-7.6.10-cp313-cp313-win_amd64.whl", hash = "sha256:254f1a3b1eef5f7ed23ef265eaa89c65c8c5b6b257327c149db1ca9d4a35f25e"}, + {file = "coverage-7.6.10-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:2ccf240eb719789cedbb9fd1338055de2761088202a9a0b73032857e53f612fe"}, + {file = "coverage-7.6.10-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:0c807ca74d5a5e64427c8805de15b9ca140bba13572d6d74e262f46f50b13273"}, + {file = "coverage-7.6.10-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2bcfa46d7709b5a7ffe089075799b902020b62e7ee56ebaed2f4bdac04c508d8"}, + {file = "coverage-7.6.10-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4e0de1e902669dccbf80b0415fb6b43d27edca2fbd48c74da378923b05316098"}, + {file = "coverage-7.6.10-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f7b444c42bbc533aaae6b5a2166fd1a797cdb5eb58ee51a92bee1eb94a1e1cb"}, + {file = "coverage-7.6.10-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:b330368cb99ef72fcd2dc3ed260adf67b31499584dc8a20225e85bfe6f6cfed0"}, + {file = "coverage-7.6.10-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:9a7cfb50515f87f7ed30bc882f68812fd98bc2852957df69f3003d22a2aa0abf"}, + {file = "coverage-7.6.10-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6f93531882a5f68c28090f901b1d135de61b56331bba82028489bc51bdd818d2"}, + {file = "coverage-7.6.10-cp313-cp313t-win32.whl", hash = "sha256:89d76815a26197c858f53c7f6a656686ec392b25991f9e409bcef020cd532312"}, + {file = "coverage-7.6.10-cp313-cp313t-win_amd64.whl", hash = "sha256:54a5f0f43950a36312155dae55c505a76cd7f2b12d26abeebbe7a0b36dbc868d"}, + {file = "coverage-7.6.10-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:656c82b8a0ead8bba147de9a89bda95064874c91a3ed43a00e687f23cc19d53a"}, + {file = "coverage-7.6.10-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ccc2b70a7ed475c68ceb548bf69cec1e27305c1c2606a5eb7c3afff56a1b3b27"}, + {file = "coverage-7.6.10-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5e37dc41d57ceba70956fa2fc5b63c26dba863c946ace9705f8eca99daecdc4"}, + {file = "coverage-7.6.10-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0aa9692b4fdd83a4647eeb7db46410ea1322b5ed94cd1715ef09d1d5922ba87f"}, + {file = "coverage-7.6.10-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa744da1820678b475e4ba3dfd994c321c5b13381d1041fe9c608620e6676e25"}, + {file = "coverage-7.6.10-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:c0b1818063dc9e9d838c09e3a473c1422f517889436dd980f5d721899e66f315"}, + {file = "coverage-7.6.10-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:59af35558ba08b758aec4d56182b222976330ef8d2feacbb93964f576a7e7a90"}, + {file = "coverage-7.6.10-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7ed2f37cfce1ce101e6dffdfd1c99e729dd2ffc291d02d3e2d0af8b53d13840d"}, + {file = "coverage-7.6.10-cp39-cp39-win32.whl", hash = "sha256:4bcc276261505d82f0ad426870c3b12cb177752834a633e737ec5ee79bbdff18"}, + {file = "coverage-7.6.10-cp39-cp39-win_amd64.whl", hash = "sha256:457574f4599d2b00f7f637a0700a6422243b3565509457b2dbd3f50703e11f59"}, + {file = "coverage-7.6.10-pp39.pp310-none-any.whl", hash = "sha256:fd34e7b3405f0cc7ab03d54a334c17a9e802897580d964bd8c2001f4b9fd488f"}, + {file = "coverage-7.6.10.tar.gz", hash = "sha256:7fb105327c8f8f0682e29843e2ff96af9dcbe5bab8eeb4b398c6a33a16d80a23"}, +] [package.extras] -toml = ["toml"] - -[[package]] -name = "dataclasses" -version = "0.8" -description = "A backport of the dataclasses module for Python 3.6" -category = "dev" -optional = false -python-versions = ">=3.6, <3.7" +toml = ["tomli"] [[package]] name = "flake8" -version = "4.0.1" +version = "6.1.0" description = "the modular source code checker: pep8 pyflakes and co" -category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8.1" +groups = ["dev"] +files = [ + {file = "flake8-6.1.0-py2.py3-none-any.whl", hash = "sha256:ffdfce58ea94c6580c77888a86506937f9a1a227dfcd15f245d694ae20a6b6e5"}, + {file = "flake8-6.1.0.tar.gz", hash = "sha256:d5b3857f07c030bdb5bf41c7f53799571d75c4491748a3adcd47de929e34cd23"}, +] [package.dependencies] -importlib-metadata = {version = "<4.3", markers = "python_version < \"3.8\""} -mccabe = ">=0.6.0,<0.7.0" -pycodestyle = ">=2.8.0,<2.9.0" -pyflakes = ">=2.4.0,<2.5.0" - -[[package]] -name = "importlib-metadata" -version = "4.2.0" -description = "Read metadata from Python packages" -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""} -zipp = ">=0.5" - -[package.extras] -docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] -testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"] +mccabe = ">=0.7.0,<0.8.0" +pycodestyle = ">=2.11.0,<2.12.0" +pyflakes = ">=3.1.0,<3.2.0" [[package]] name = "iniconfig" version = "1.1.1" description = "iniconfig: brain-dead simple config-ini parsing" -category = "dev" optional = false python-versions = "*" +groups = ["dev"] +files = [ + {file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"}, + {file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"}, +] [[package]] name = "mako" -version = "1.1.6" -description = "A super-fast templating language that borrows the best ideas from the existing templating languages." -category = "main" +version = "1.3.8" +description = "A super-fast templating language that borrows the best ideas from the existing templating languages." optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "Mako-1.3.8-py3-none-any.whl", hash = "sha256:42f48953c7eb91332040ff567eb7eea69b22e7a4affbc5ba8e845e8f730f6627"}, + {file = "mako-1.3.8.tar.gz", hash = "sha256:577b97e414580d3e088d47c2dbbe9594aa7a5146ed2875d4dfa9075af2dd3cc8"}, +] [package.dependencies] MarkupSafe = ">=0.9.2" [package.extras] -babel = ["babel"] +babel = ["Babel"] lingua = ["lingua"] +testing = ["pytest"] [[package]] name = "markupsafe" -version = "2.0.1" +version = "3.0.2" description = "Safely add untrusted strings to HTML/XML markup." -category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-win32.whl", hash = "sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-win32.whl", hash = "sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:eaa0a10b7f72326f1372a713e73c3f739b524b3af41feb43e4921cb529f5929a"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:48032821bbdf20f5799ff537c7ac3d1fba0ba032cfc06194faffa8cda8b560ff"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a9d3f5f0901fdec14d8d2f66ef7d035f2157240a433441719ac9a3fba440b13"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88b49a3b9ff31e19998750c38e030fc7bb937398b1f78cfa599aaef92d693144"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cfad01eed2c2e0c01fd0ecd2ef42c492f7f93902e39a42fc9ee1692961443a29"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:1225beacc926f536dc82e45f8a4d68502949dc67eea90eab715dea3a21c1b5f0"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:3169b1eefae027567d1ce6ee7cae382c57fe26e82775f460f0b2778beaad66c0"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:eb7972a85c54febfb25b5c4b4f3af4dcc731994c7da0d8a0b4a6eb0640e1d178"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-win32.whl", hash = "sha256:8c4e8c3ce11e1f92f6536ff07154f9d49677ebaaafc32db9db4620bc11ed480f"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:6e296a513ca3d94054c2c881cc913116e90fd030ad1c656b3869762b754f5f8a"}, + {file = "markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0"}, +] [[package]] name = "mccabe" -version = "0.6.1" +version = "0.7.0" description = "McCabe checker, plugin for flake8" -category = "dev" optional = false -python-versions = "*" +python-versions = ">=3.6" +groups = ["dev"] +files = [ + {file = "mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"}, + {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"}, +] [[package]] name = "mock" -version = "4.0.3" +version = "5.1.0" description = "Rolling backport of unittest.mock for all Pythons" -category = "dev" optional = false python-versions = ">=3.6" +groups = ["dev"] +files = [ + {file = "mock-5.1.0-py3-none-any.whl", hash = "sha256:18c694e5ae8a208cdb3d2c20a993ca1a7b0efa258c247a1e565150f477f83744"}, + {file = "mock-5.1.0.tar.gz", hash = "sha256:5e96aad5ccda4718e0a229ed94b2024df75cc2d55575ba5762d31f5767b8767d"}, +] [package.extras] -build = ["twine", "wheel", "blurb"] +build = ["blurb", "twine", "wheel"] docs = ["sphinx"] -test = ["pytest (<5.4)", "pytest-cov"] +test = ["pytest", "pytest-cov"] [[package]] name = "mypy-extensions" version = "1.0.0" description = "Type system extensions for programs checked with the mypy type checker." -category = "dev" optional = false python-versions = ">=3.5" +groups = ["dev"] +files = [ + {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, + {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, +] [[package]] name = "packaging" -version = "21.3" +version = "24.2" description = "Core utilities for Python packages" -category = "dev" optional = false -python-versions = ">=3.6" - -[package.dependencies] -pyparsing = ">=2.0.2,<3.0.5 || >3.0.5" +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759"}, + {file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"}, +] [[package]] name = "pathspec" version = "0.9.0" description = "Utility library for gitignore style pattern matching of file paths." -category = "dev" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" +groups = ["dev"] +files = [ + {file = "pathspec-0.9.0-py2.py3-none-any.whl", hash = "sha256:7d15c4ddb0b5c802d161efc417ec1a2558ea2653c2e8ad9c19098201dc1c993a"}, + {file = "pathspec-0.9.0.tar.gz", hash = "sha256:e564499435a2673d586f6b2130bb5b95f04a3ba06f81b8f895b651a3c76aabb1"}, +] + +[[package]] +name = "platformdirs" +version = "4.3.6" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "platformdirs-4.3.6-py3-none-any.whl", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb"}, + {file = "platformdirs-4.3.6.tar.gz", hash = "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907"}, +] + +[package.extras] +docs = ["furo (>=2024.8.6)", "proselint (>=0.14)", "sphinx (>=8.0.2)", "sphinx-autodoc-typehints (>=2.4)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=8.3.2)", "pytest-cov (>=5)", "pytest-mock (>=3.14)"] +type = ["mypy (>=1.11.2)"] [[package]] name = "pluggy" version = "1.0.0" description = "plugin and hook calling mechanisms for python" -category = "dev" optional = false python-versions = ">=3.6" - -[package.dependencies] -importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} +groups = ["dev"] +files = [ + {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, + {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"}, +] [package.extras] -testing = ["pytest-benchmark", "pytest"] -dev = ["tox", "pre-commit"] +dev = ["pre-commit", "tox"] +testing = ["pytest", "pytest-benchmark"] [[package]] name = "prometheus-client" -version = "0.9.0" +version = "0.20.0" description = "Python client for the Prometheus monitoring system." -category = "main" optional = false -python-versions = "*" +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "prometheus_client-0.20.0-py3-none-any.whl", hash = "sha256:cde524a85bce83ca359cc837f28b8c0db5cac7aa653a588fd7e84ba061c329e7"}, + {file = "prometheus_client-0.20.0.tar.gz", hash = "sha256:287629d00b147a32dcb2be0b9df905da599b2d82f80377083ec8463309a4bb89"}, +] [package.extras] twisted = ["twisted"] -[[package]] -name = "py" -version = "1.11.0" -description = "library with cross-python path, ini-parsing, io, code, log facilities" -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" - [[package]] name = "pycodestyle" -version = "2.8.0" +version = "2.11.1" description = "Python style guide checker" -category = "dev" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "pycodestyle-2.11.1-py2.py3-none-any.whl", hash = "sha256:44fe31000b2d866f2e41841b18528a505fbd7fef9017b04eff4e2648a0fadc67"}, + {file = "pycodestyle-2.11.1.tar.gz", hash = "sha256:41ba0e7afc9752dfb53ced5489e89f8186be00e599e712660695b7a75ff2663f"}, +] [[package]] name = "pyflakes" -version = "2.4.0" +version = "3.1.0" description = "passive checker of Python programs" -category = "dev" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "pyflakes-3.1.0-py2.py3-none-any.whl", hash = "sha256:4132f6d49cb4dae6819e5379898f2b8cce3c5f23994194c24b77d5da2e36f774"}, + {file = "pyflakes-3.1.0.tar.gz", hash = "sha256:a0aae034c444db0071aa077972ba4768d40c830d9539fd45bf4cd3f8f6992efc"}, +] [[package]] name = "pyparsing" -version = "2.4.7" -description = "Python parsing module" -category = "main" +version = "3.2.1" +description = "pyparsing module - Classes and methods to define and execute parsing grammars" optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "pyparsing-3.2.1-py3-none-any.whl", hash = "sha256:506ff4f4386c4cec0590ec19e6302d3aedb992fdc02c761e90416f158dacf8e1"}, + {file = "pyparsing-3.2.1.tar.gz", hash = "sha256:61980854fd66de3a90028d679a954d5f2623e83144b5afe5ee86f43d762e5f0a"}, +] + +[package.extras] +diagrams = ["jinja2", "railroad-diagrams"] [[package]] name = "pytest" -version = "6.2.5" +version = "7.4.4" description = "pytest: simple powerful testing with Python" -category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" +groups = ["dev"] +files = [ + {file = "pytest-7.4.4-py3-none-any.whl", hash = "sha256:b090cdf5ed60bf4c45261be03239c2c1c22df034fbffe691abe93cd80cea01d8"}, + {file = "pytest-7.4.4.tar.gz", hash = "sha256:2cf0005922c6ace4a3e2ec8b4080eb0d9753fdc93107415332f50ce9e7994280"}, +] [package.dependencies] -atomicwrites = {version = ">=1.0", markers = "sys_platform == \"win32\""} -attrs = ">=19.2.0" colorama = {version = "*", markers = "sys_platform == \"win32\""} -importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} iniconfig = "*" packaging = "*" pluggy = ">=0.12,<2.0" -py = ">=1.8.2" -toml = "*" [package.extras] -testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "requests", "xmlschema"] - -[[package]] -name = "regex" -version = "2022.10.31" -description = "Alternative regular expression module, to replace re." -category = "dev" -optional = false -python-versions = ">=3.6" - -[[package]] -name = "toml" -version = "0.10.2" -description = "Python Library for Tom's Obvious, Minimal Language" -category = "dev" -optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" - -[[package]] -name = "typed-ast" -version = "1.5.4" -description = "a fork of Python 2 and 3 ast modules with type comment support" -category = "dev" -optional = false -python-versions = ">=3.6" - -[[package]] -name = "typing-extensions" -version = "4.1.1" -description = "Backported and Experimental Type Hints for Python 3.6+" -category = "dev" -optional = false -python-versions = ">=3.6" +testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] [[package]] name = "werkzeug" -version = "1.0.1" +version = "3.1.3" description = "The comprehensive WSGI web application library." -category = "main" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" - -[package.extras] -watchdog = ["watchdog"] -dev = ["sphinx-issues", "pallets-sphinx-themes", "sphinx", "tox", "coverage", "pytest-timeout", "pytest"] +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "werkzeug-3.1.3-py3-none-any.whl", hash = "sha256:54b78bf3716d19a65be4fceccc0d1d7b89e608834989dfae50ea87564639213e"}, + {file = "werkzeug-3.1.3.tar.gz", hash = "sha256:60723ce945c19328679790e3282cc758aa4a6040e4bb330f53d30fa546d44746"}, +] -[[package]] -name = "zipp" -version = "3.6.0" -description = "Backport of pathlib-compatible object wrapper for zip files" -category = "dev" -optional = false -python-versions = ">=3.6" +[package.dependencies] +MarkupSafe = ">=2.1.1" [package.extras] -docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] -testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"] +watchdog = ["watchdog (>=2.3)"] [metadata] -lock-version = "1.1" -python-versions = ">= 3.6, < 4" -content-hash = "5989c8db718066fe968a746e9c16eb95d7a4e0cd4a08933d4a2744c5ac0a7299" - -[metadata.files] -appdirs = [] -atomicwrites = [] -attrs = [] -black = [] -click = [] -colorama = [] -coverage = [] -dataclasses = [] -flake8 = [] -importlib-metadata = [] -iniconfig = [] -mako = [] -markupsafe = [] -mccabe = [] -mock = [] -mypy-extensions = [] -packaging = [] -pathspec = [] -pluggy = [] -prometheus-client = [] -py = [] -pycodestyle = [] -pyflakes = [] -pyparsing = [] -pytest = [] -regex = [] -toml = [] -typed-ast = [] -typing-extensions = [] -werkzeug = [] -zipp = [] +lock-version = "2.1" +python-versions = "^3.11.10" +content-hash = "b366a588cfdd2e034173ab6d888618fe7d7c4bbfac1c1c068019f4fad3efbe51" diff --git a/pyproject.toml b/pyproject.toml index 598ae47d..0a8bf69d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,23 +1,24 @@ [tool.poetry] name = "bamboo-engine" -version = "2.11.0" +version = "3.0.0rc0" description = "Bamboo-engine is a general-purpose workflow engine" authors = ["homholueng "] license = "MIT" [tool.poetry.dependencies] -python = ">= 3.6, < 4" -Werkzeug = "^1.0.0" -pyparsing = "^2.2.0" -Mako = "^1.1.4" -prometheus-client = "^0.9.0" +python = "^3.11.10" +Werkzeug = "^3" +pyparsing = "^3" +Mako = "^1.3" +prometheus-client = "^0.20.0" + +[tool.poetry.group.dev.dependencies] +pytest = "^7.0.0" +black = "^23" +mock = "^5.0.0" +coverage = {extras = ["toml"], version = "^7.2.0"} +flake8 = "^6.1.0" -[tool.poetry.dev-dependencies] -pytest = "^6.2.2" -black = "^20.8b1" -mock = "^4.0.3" -coverage = {extras = ["toml"], version = "^5.5"} -flake8 = "^4.0.1" [build-system] requires = ["poetry-core>=1.0.0"] diff --git a/runtime/bamboo-pipeline/pipeline/apps.py b/runtime/bamboo-pipeline/pipeline/apps.py index 8e8eb166..651a4a44 100644 --- a/runtime/bamboo-pipeline/pipeline/apps.py +++ b/runtime/bamboo-pipeline/pipeline/apps.py @@ -11,14 +11,15 @@ specific language governing permissions and limitations under the License. """ -import sys import logging +import sys import traceback import redis from django.apps import AppConfig from django.conf import settings from redis.sentinel import Sentinel + try: from redis.cluster import RedisCluster except ImportError: @@ -36,7 +37,12 @@ def get_client_through_sentinel(): kwargs["password"] = settings.REDIS["password"] host = settings.REDIS["host"] port = settings.REDIS["port"] - sentinels = list(zip([h.strip() for h in host.split(",")], [p.strip() for p in str(port).split(",")],)) + sentinels = list( + zip( + [h.strip() for h in host.split(",")], + [p.strip() for p in str(port).split(",")], + ) + ) rs = Sentinel(sentinels, **kwargs) # avoid None value in settings.REDIS r = rs.master_for(settings.REDIS.get("service_name") or "mymaster") @@ -81,8 +87,12 @@ class PipelineConfig(AppConfig): verbose_name = "Pipeline" def ready(self): - from pipeline.signals.handlers import pipeline_template_post_save_handler # noqa - from pipeline.validators.handlers import post_new_end_event_register_handler # noqa + from pipeline.signals.handlers import ( # noqa + pipeline_template_post_save_handler, + ) + from pipeline.validators.handlers import ( # noqa + post_new_end_event_register_handler, + ) # init redis pool if hasattr(settings, "REDIS"): diff --git a/runtime/bamboo-pipeline/pipeline/component_framework/migrations/0002_delete_componentmodel.py b/runtime/bamboo-pipeline/pipeline/component_framework/migrations/0002_delete_componentmodel.py index 20f24d55..58acc8f7 100644 --- a/runtime/bamboo-pipeline/pipeline/component_framework/migrations/0002_delete_componentmodel.py +++ b/runtime/bamboo-pipeline/pipeline/component_framework/migrations/0002_delete_componentmodel.py @@ -12,7 +12,7 @@ """ -from django.db import models, migrations +from django.db import migrations class Migration(migrations.Migration): @@ -22,5 +22,7 @@ class Migration(migrations.Migration): ] operations = [ - migrations.DeleteModel(name="ComponentModel",), + migrations.DeleteModel( + name="ComponentModel", + ), ] diff --git a/runtime/bamboo-pipeline/pipeline/component_framework/migrations/0007_auto_20201112_2244.py b/runtime/bamboo-pipeline/pipeline/component_framework/migrations/0007_auto_20201112_2244.py index ac3b8f08..cd222b37 100644 --- a/runtime/bamboo-pipeline/pipeline/component_framework/migrations/0007_auto_20201112_2244.py +++ b/runtime/bamboo-pipeline/pipeline/component_framework/migrations/0007_auto_20201112_2244.py @@ -32,5 +32,8 @@ class Migration(migrations.Migration): name="version", field=models.CharField(db_index=True, default="legacy", max_length=64, verbose_name="组件版本"), ), - migrations.AlterUniqueTogether(name="componentmodel", unique_together=set([("code", "version")]),), + migrations.AlterUniqueTogether( + name="componentmodel", + unique_together=set([("code", "version")]), + ), ] diff --git a/runtime/bamboo-pipeline/pipeline/component_framework/migrations/0008_componentmodel_is_default_version.py b/runtime/bamboo-pipeline/pipeline/component_framework/migrations/0008_componentmodel_is_default_version.py index d4586ec2..db85ad93 100644 --- a/runtime/bamboo-pipeline/pipeline/component_framework/migrations/0008_componentmodel_is_default_version.py +++ b/runtime/bamboo-pipeline/pipeline/component_framework/migrations/0008_componentmodel_is_default_version.py @@ -6,13 +6,13 @@ class Migration(migrations.Migration): dependencies = [ - ('component_framework', '0007_auto_20201112_2244'), + ("component_framework", "0007_auto_20201112_2244"), ] operations = [ migrations.AddField( - model_name='componentmodel', - name='is_default_version', - field=models.BooleanField(default=False, verbose_name='是否是默认版本'), + model_name="componentmodel", + name="is_default_version", + field=models.BooleanField(default=False, verbose_name="是否是默认版本"), ), ] diff --git a/runtime/bamboo-pipeline/pipeline/component_framework/models.py b/runtime/bamboo-pipeline/pipeline/component_framework/models.py index d490c968..9a3d1850 100644 --- a/runtime/bamboo-pipeline/pipeline/component_framework/models.py +++ b/runtime/bamboo-pipeline/pipeline/component_framework/models.py @@ -12,8 +12,7 @@ """ from django.db import models -from django.utils.translation import ugettext_lazy as _ - +from django.utils.translation import gettext_lazy as _ from pipeline.component_framework.constants import LEGACY_PLUGINS_VERSION from pipeline.component_framework.library import ComponentLibrary diff --git a/runtime/bamboo-pipeline/pipeline/contrib/celery_tools/periodic.py b/runtime/bamboo-pipeline/pipeline/contrib/celery_tools/periodic.py index ce5d64f7..57534b57 100644 --- a/runtime/bamboo-pipeline/pipeline/contrib/celery_tools/periodic.py +++ b/runtime/bamboo-pipeline/pipeline/contrib/celery_tools/periodic.py @@ -24,24 +24,23 @@ class PipelinePeriodicTask(Task): compat = True def __init__(self): - if not hasattr(self, 'run_every'): - raise NotImplementedError( - 'Periodic tasks must have a run_every attribute') + if not hasattr(self, "run_every"): + raise NotImplementedError("Periodic tasks must have a run_every attribute") self.run_every = maybe_schedule(self.run_every, self.relative) super(PipelinePeriodicTask, self).__init__() @classmethod def on_bound(cls, app): app.conf.beat_schedule[cls.name] = { - 'task': cls.name, - 'schedule': cls.run_every, - 'args': (), - 'kwargs': {}, - 'options': cls.options or {}, - 'relative': cls.relative, + "task": cls.name, + "schedule": cls.run_every, + "args": (), + "kwargs": {}, + "options": cls.options or {}, + "relative": cls.relative, } def periodic_task(*args, **options): """Deprecated decorator, please use :setting:`beat_schedule`.""" - return current_app.task(**dict({'base': PipelinePeriodicTask}, **options)) + return current_app.task(**dict({"base": PipelinePeriodicTask}, **options)) diff --git a/runtime/bamboo-pipeline/pipeline/contrib/engine_admin/apps.py b/runtime/bamboo-pipeline/pipeline/contrib/engine_admin/apps.py index ea4185a5..f0b2c2cc 100644 --- a/runtime/bamboo-pipeline/pipeline/contrib/engine_admin/apps.py +++ b/runtime/bamboo-pipeline/pipeline/contrib/engine_admin/apps.py @@ -14,5 +14,5 @@ class EngineAdminConfig(AppConfig): - name = 'pipeline.contrib.engine_admin' - verbose_name = 'PipelineEngineAdmin' + name = "pipeline.contrib.engine_admin" + verbose_name = "PipelineEngineAdmin" diff --git a/runtime/bamboo-pipeline/pipeline/contrib/external_plugins/migrations/0002_s3source_source_dir.py b/runtime/bamboo-pipeline/pipeline/contrib/external_plugins/migrations/0002_s3source_source_dir.py index 7367e19b..0d4ceffc 100644 --- a/runtime/bamboo-pipeline/pipeline/contrib/external_plugins/migrations/0002_s3source_source_dir.py +++ b/runtime/bamboo-pipeline/pipeline/contrib/external_plugins/migrations/0002_s3source_source_dir.py @@ -13,6 +13,8 @@ class Migration(migrations.Migration): operations = [ migrations.AddField( - model_name="s3source", name="source_dir", field=models.TextField(default="", verbose_name="源目录名"), + model_name="s3source", + name="source_dir", + field=models.TextField(default="", verbose_name="源目录名"), ), ] diff --git a/runtime/bamboo-pipeline/pipeline/contrib/external_plugins/models/base.py b/runtime/bamboo-pipeline/pipeline/contrib/external_plugins/models/base.py index b08dbe04..95fafadc 100644 --- a/runtime/bamboo-pipeline/pipeline/contrib/external_plugins/models/base.py +++ b/runtime/bamboo-pipeline/pipeline/contrib/external_plugins/models/base.py @@ -17,8 +17,7 @@ from copy import deepcopy from django.db import IntegrityError, models -from django.utils.translation import ugettext_lazy as _ - +from django.utils.translation import gettext_lazy as _ from pipeline.component_framework.library import ComponentLibrary from pipeline.contrib.external_plugins import exceptions from pipeline.contrib.external_plugins.models.fields import JSONTextField diff --git a/runtime/bamboo-pipeline/pipeline/contrib/external_plugins/models/source.py b/runtime/bamboo-pipeline/pipeline/contrib/external_plugins/models/source.py index 07655fdf..046d9502 100644 --- a/runtime/bamboo-pipeline/pipeline/contrib/external_plugins/models/source.py +++ b/runtime/bamboo-pipeline/pipeline/contrib/external_plugins/models/source.py @@ -12,11 +12,20 @@ """ from django.db import models -from django.utils.translation import ugettext_lazy as _ - +from django.utils.translation import gettext_lazy as _ from pipeline.conf import settings -from pipeline.contrib.external_plugins.models.base import FILE_SYSTEM, GIT, S3, ExternalPackageSource, package_source -from pipeline.contrib.external_plugins.utils.importer import FSModuleImporter, GitRepoModuleImporter, S3ModuleImporter +from pipeline.contrib.external_plugins.models.base import ( + FILE_SYSTEM, + GIT, + S3, + ExternalPackageSource, + package_source, +) +from pipeline.contrib.external_plugins.utils.importer import ( + FSModuleImporter, + GitRepoModuleImporter, + S3ModuleImporter, +) @package_source diff --git a/runtime/bamboo-pipeline/pipeline/contrib/external_plugins/utils/importer/s3.py b/runtime/bamboo-pipeline/pipeline/contrib/external_plugins/utils/importer/s3.py index 2eeba49b..667b9031 100644 --- a/runtime/bamboo-pipeline/pipeline/contrib/external_plugins/utils/importer/s3.py +++ b/runtime/bamboo-pipeline/pipeline/contrib/external_plugins/utils/importer/s3.py @@ -16,7 +16,6 @@ import boto3 from botocore.client import Config from botocore.exceptions import ClientError - from pipeline.contrib.external_plugins.utils.importer.base import ( AutoInstallRequirementsImporter, ) @@ -45,11 +44,7 @@ def __init__( elif not secure_only: logger.warning("Using not secure protocol is extremely dangerous!!") - self.service_address = ( - service_address - if service_address.endswith("/") - else "%s/" % service_address - ) + self.service_address = service_address if service_address.endswith("/") else "%s/" % service_address # 支持virtual_path模式,bucket形如xxx$virtual_path即判定为该模式 bucket_partitions = bucket.split("$") if len(bucket_partitions) > 1 and bucket_partitions[-1] == "virtual_path": @@ -65,11 +60,7 @@ def __init__( self.bucket = bucket s3_config = CONFIG self.virtual_path = False - self.source_dir = ( - source_dir - if source_dir == "" or source_dir.endswith("/") - else "%s/" % source_dir - ) + self.source_dir = source_dir if source_dir == "" or source_dir.endswith("/") else "%s/" % source_dir self.use_cache = use_cache self.s3 = boto3.resource( "s3", @@ -87,9 +78,7 @@ def get_code(self, fullname): return compile(self.get_source(fullname), self.get_file(fullname), "exec") def get_source(self, fullname): - source_code = self._fetch_obj_content( - self._obj_key(fullname, is_pkg=self.is_package(fullname)) - ) + source_code = self._fetch_obj_content(self._obj_key(fullname, is_pkg=self.is_package(fullname))) if source_code is None: raise ImportError( diff --git a/runtime/bamboo-pipeline/pipeline/contrib/mock/hanlder.py b/runtime/bamboo-pipeline/pipeline/contrib/mock/hanlder.py index bf765c2b..9dbbb64a 100644 --- a/runtime/bamboo-pipeline/pipeline/contrib/mock/hanlder.py +++ b/runtime/bamboo-pipeline/pipeline/contrib/mock/hanlder.py @@ -15,22 +15,20 @@ import re from django.db import transaction - -from pipeline.eri.models import State +from pipeline.contrib.exceptions import UpdatePipelineContextException from pipeline.eri.models import ContextValue from pipeline.eri.models import ExecutionData as DBExecutionData -from bamboo_engine import states, api -from bamboo_engine.eri import ContextValue as ContextValueInfo, ContextValueType - -from pipeline.contrib.exceptions import UpdatePipelineContextException - +from pipeline.eri.models import State from pipeline.eri.runtime import BambooDjangoRuntime +from bamboo_engine import api, states +from bamboo_engine.eri import ContextValue as ContextValueInfo +from bamboo_engine.eri import ContextValueType + FORMATTED_KEY_PATTERN = re.compile(r"^\${(.*?)}$") class MockHandler: - def __init__(self, root_pipeline_id, node_id, context_values): self.root_pipeline_id = root_pipeline_id self.node_id = node_id @@ -51,37 +49,49 @@ def update_node_outputs(self): if not pipeline_state: raise UpdatePipelineContextException( "update context values failed: pipeline state not exist, root_pipeline_id={}".format( - self.root_pipeline_id)) + self.root_pipeline_id + ) + ) if pipeline_state.name != states.RUNNING: raise UpdatePipelineContextException( "update context values failed: the task of non-running state is not allowed update, " - "root_pipeline_id={}".format(self.root_pipeline_id)) + "root_pipeline_id={}".format(self.root_pipeline_id) + ) node_state = State.objects.filter(node_id=self.node_id).first() if not node_state: raise UpdatePipelineContextException( - "update context values failed: node state not exist, root_pipeline_id={}".format(self.root_pipeline_id)) + "update context values failed: node state not exist, root_pipeline_id={}".format(self.root_pipeline_id) + ) if node_state.name != states.FAILED: raise UpdatePipelineContextException( - "update context values failed: the task of non-failed state is not allowed to update, node_id={}" - .format(self.node_id)) + "update context values failed: \ + the task of non-failed state is not allowed to update, node_id={}".format( + self.node_id + ) + ) if "${_system}" in self.context_values.keys(): raise UpdatePipelineContextException("${_system} is built-in variable that is not allowed to be updated") # 获取流程内满足上下文的key - context_value_queryset = ContextValue.objects.filter(pipeline_id=self.root_pipeline_id, - key__in=self.context_values.keys()) + context_value_queryset = ContextValue.objects.filter( + pipeline_id=self.root_pipeline_id, key__in=self.context_values.keys() + ) context_value_list = [] for context_value in context_value_queryset: if context_value.key in self.context_values.keys(): context_value_list.append( - ContextValueInfo(key=context_value.key, type=ContextValueType(context_value.type), - value=self.context_values.get(context_value.key), - code=context_value.code)) + ContextValueInfo( + key=context_value.key, + type=ContextValueType(context_value.type), + value=self.context_values.get(context_value.key), + code=context_value.code, + ) + ) with transaction.atomic(): try: @@ -104,4 +114,5 @@ def update_node_outputs(self): except Exception as e: raise UpdatePipelineContextException( - "update node outputs value failed, please check it,outputs={}, error={}".format(outputs, e)) + "update node outputs value failed, please check it,outputs={}, error={}".format(outputs, e) + ) diff --git a/runtime/bamboo-pipeline/pipeline/contrib/node_timeout/migrations/0001_initial.py b/runtime/bamboo-pipeline/pipeline/contrib/node_timeout/migrations/0001_initial.py index d4dad1c1..347572c1 100644 --- a/runtime/bamboo-pipeline/pipeline/contrib/node_timeout/migrations/0001_initial.py +++ b/runtime/bamboo-pipeline/pipeline/contrib/node_timeout/migrations/0001_initial.py @@ -7,33 +7,35 @@ class Migration(migrations.Migration): initial = True - dependencies = [ - ] + dependencies = [] operations = [ migrations.CreateModel( - name='TimeoutNodesRecord', + name="TimeoutNodesRecord", fields=[ - ('id', models.BigAutoField(primary_key=True, serialize=False, verbose_name='ID')), - ('timeout_nodes', models.TextField(verbose_name='超时节点信息')), + ("id", models.BigAutoField(primary_key=True, serialize=False, verbose_name="ID")), + ("timeout_nodes", models.TextField(verbose_name="超时节点信息")), ], options={ - 'verbose_name': '超时节点数据记录 TimeoutNodesRecord', - 'verbose_name_plural': '超时节点数据记录 TimeoutNodesRecord', + "verbose_name": "超时节点数据记录 TimeoutNodesRecord", + "verbose_name_plural": "超时节点数据记录 TimeoutNodesRecord", }, ), migrations.CreateModel( - name='TimeoutNodeConfig', + name="TimeoutNodeConfig", fields=[ - ('root_pipeline_id', models.CharField(max_length=64, verbose_name='root pipeline id')), - ('action', models.CharField(max_length=32, verbose_name='action')), - ('node_id', models.CharField(max_length=64, primary_key=True, serialize=False, verbose_name='task node id')), - ('timeout', models.IntegerField(verbose_name='node timeout time')), + ("root_pipeline_id", models.CharField(max_length=64, verbose_name="root pipeline id")), + ("action", models.CharField(max_length=32, verbose_name="action")), + ( + "node_id", + models.CharField(max_length=64, primary_key=True, serialize=False, verbose_name="task node id"), + ), + ("timeout", models.IntegerField(verbose_name="node timeout time")), ], options={ - 'verbose_name': '节点超时配置 TimeoutNodeConfig', - 'verbose_name_plural': '节点超时配置 TimeoutNodeConfig', - 'index_together': {('root_pipeline_id', 'node_id')}, + "verbose_name": "节点超时配置 TimeoutNodeConfig", + "verbose_name_plural": "节点超时配置 TimeoutNodeConfig", + "index_together": {("root_pipeline_id", "node_id")}, }, ), ] diff --git a/runtime/bamboo-pipeline/pipeline/contrib/node_timeout/models.py b/runtime/bamboo-pipeline/pipeline/contrib/node_timeout/models.py index 99a66bd0..5e6faa45 100644 --- a/runtime/bamboo-pipeline/pipeline/contrib/node_timeout/models.py +++ b/runtime/bamboo-pipeline/pipeline/contrib/node_timeout/models.py @@ -13,11 +13,9 @@ import logging from django.db import models -from django.utils.translation import ugettext_lazy as _ - +from django.utils.translation import gettext_lazy as _ from pipeline.core.constants import PE - logger = logging.getLogger(__name__) diff --git a/runtime/bamboo-pipeline/pipeline/contrib/node_timer_event/models.py b/runtime/bamboo-pipeline/pipeline/contrib/node_timer_event/models.py index 0075ee9f..a50d5ed9 100644 --- a/runtime/bamboo-pipeline/pipeline/contrib/node_timer_event/models.py +++ b/runtime/bamboo-pipeline/pipeline/contrib/node_timer_event/models.py @@ -17,7 +17,7 @@ from typing import Any, Dict, List, Optional from django.db import models -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from pipeline.contrib.node_timer_event.types import TimeDefined from pipeline.contrib.node_timer_event.utils import parse_timer_defined from pipeline.core.constants import PE diff --git a/runtime/bamboo-pipeline/pipeline/contrib/periodic_task/djcelery/db.py b/runtime/bamboo-pipeline/pipeline/contrib/periodic_task/djcelery/db.py index c4de19a0..8c297f92 100644 --- a/runtime/bamboo-pipeline/pipeline/contrib/periodic_task/djcelery/db.py +++ b/runtime/bamboo-pipeline/pipeline/contrib/periodic_task/djcelery/db.py @@ -21,7 +21,6 @@ def get_queryset(s): return s.get_query_set() - else: def get_queryset(s): # noqa diff --git a/runtime/bamboo-pipeline/pipeline/contrib/periodic_task/djcelery/managers.py b/runtime/bamboo-pipeline/pipeline/contrib/periodic_task/djcelery/managers.py index 9ed58541..e52b0b53 100644 --- a/runtime/bamboo-pipeline/pipeline/contrib/periodic_task/djcelery/managers.py +++ b/runtime/bamboo-pipeline/pipeline/contrib/periodic_task/djcelery/managers.py @@ -18,7 +18,6 @@ from django.conf import settings from django.db import connection, models from django.db.models.query import QuerySet - from pipeline.contrib.periodic_task.djcelery.db import ( commit_on_success, get_queryset, @@ -131,7 +130,8 @@ def delete_expired(self, expires): self.get_all_expired(expires).update(hidden=True) cursor = self.connection_for_write().cursor() cursor.execute( - "DELETE FROM {0.db_table} WHERE hidden=%s".format(meta), (True,), + "DELETE FROM {0.db_table} WHERE hidden=%s".format(meta), + (True,), ) diff --git a/runtime/bamboo-pipeline/pipeline/contrib/periodic_task/djcelery/models.py b/runtime/bamboo-pipeline/pipeline/contrib/periodic_task/djcelery/models.py index 0bde898a..39172e95 100644 --- a/runtime/bamboo-pipeline/pipeline/contrib/periodic_task/djcelery/models.py +++ b/runtime/bamboo-pipeline/pipeline/contrib/periodic_task/djcelery/models.py @@ -18,12 +18,11 @@ from django.core.exceptions import MultipleObjectsReturned, ValidationError from django.db import models from django.db.models import signals -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from pipeline.contrib.periodic_task.djcelery import managers +from pipeline.contrib.periodic_task.djcelery.compat import python_2_unicode_compatible from pipeline.contrib.periodic_task.djcelery.tzcrontab import TzAwareCrontab from pipeline.contrib.periodic_task.djcelery.utils import now -from pipeline.contrib.periodic_task.djcelery.compat import python_2_unicode_compatible - PERIOD_CHOICES = ( ("days", _("Days")), @@ -37,7 +36,11 @@ @python_2_unicode_compatible class IntervalSchedule(models.Model): every = models.IntegerField(_("every"), null=False) - period = models.CharField(_("period"), max_length=24, choices=PERIOD_CHOICES,) + period = models.CharField( + _("period"), + max_length=24, + choices=PERIOD_CHOICES, + ) class Meta: verbose_name = _("interval") @@ -77,9 +80,21 @@ def cronexp(field): class CrontabSchedule(models.Model): minute = models.CharField(_("minute"), max_length=64, default="*") hour = models.CharField(_("hour"), max_length=64, default="*") - day_of_week = models.CharField(_("day of week"), max_length=64, default="*",) - day_of_month = models.CharField(_("day of month"), max_length=64, default="*",) - month_of_year = models.CharField(_("month of year"), max_length=64, default="*",) + day_of_week = models.CharField( + _("day of week"), + max_length=64, + default="*", + ) + day_of_month = models.CharField( + _("day of month"), + max_length=64, + default="*", + ) + month_of_year = models.CharField( + _("month of year"), + max_length=64, + default="*", + ) timezone = timezone_field.TimeZoneField(default="UTC") class Meta: @@ -147,10 +162,19 @@ def last_change(cls): @python_2_unicode_compatible class DjCeleryPeriodicTask(models.Model): - name = models.CharField(_("name"), max_length=200, unique=True, help_text=_("Useful description"),) + name = models.CharField( + _("name"), + max_length=200, + unique=True, + help_text=_("Useful description"), + ) task = models.CharField(_("task name"), max_length=200) interval = models.ForeignKey( - IntervalSchedule, null=True, blank=True, verbose_name=_("interval"), on_delete=models.CASCADE, + IntervalSchedule, + null=True, + blank=True, + verbose_name=_("interval"), + on_delete=models.CASCADE, ) crontab = models.ForeignKey( CrontabSchedule, @@ -160,19 +184,60 @@ class DjCeleryPeriodicTask(models.Model): on_delete=models.CASCADE, help_text=_("Use one of interval/crontab"), ) - args = models.TextField(_("Arguments"), blank=True, default="[]", help_text=_("JSON encoded positional arguments"),) + args = models.TextField( + _("Arguments"), + blank=True, + default="[]", + help_text=_("JSON encoded positional arguments"), + ) kwargs = models.TextField( - _("Keyword arguments"), blank=True, default="{}", help_text=_("JSON encoded keyword arguments"), + _("Keyword arguments"), + blank=True, + default="{}", + help_text=_("JSON encoded keyword arguments"), ) queue = models.CharField( - _("queue"), max_length=200, blank=True, null=True, default=None, help_text=_("Queue defined in CELERY_QUEUES"), - ) - exchange = models.CharField(_("exchange"), max_length=200, blank=True, null=True, default=None,) - routing_key = models.CharField(_("routing key"), max_length=200, blank=True, null=True, default=None,) - expires = models.DateTimeField(_("expires"), blank=True, null=True,) - enabled = models.BooleanField(_("enabled"), default=True,) - last_run_at = models.DateTimeField(auto_now=False, auto_now_add=False, editable=False, blank=True, null=True,) - total_run_count = models.PositiveIntegerField(default=0, editable=False,) + _("queue"), + max_length=200, + blank=True, + null=True, + default=None, + help_text=_("Queue defined in CELERY_QUEUES"), + ) + exchange = models.CharField( + _("exchange"), + max_length=200, + blank=True, + null=True, + default=None, + ) + routing_key = models.CharField( + _("routing key"), + max_length=200, + blank=True, + null=True, + default=None, + ) + expires = models.DateTimeField( + _("expires"), + blank=True, + null=True, + ) + enabled = models.BooleanField( + _("enabled"), + default=True, + ) + last_run_at = models.DateTimeField( + auto_now=False, + auto_now_add=False, + editable=False, + blank=True, + null=True, + ) + total_run_count = models.PositiveIntegerField( + default=0, + editable=False, + ) date_changed = models.DateTimeField(auto_now=True) description = models.TextField(_("description"), blank=True) diff --git a/runtime/bamboo-pipeline/pipeline/contrib/periodic_task/djcelery/tzcrontab.py b/runtime/bamboo-pipeline/pipeline/contrib/periodic_task/djcelery/tzcrontab.py index 9f56db31..ae2cbd53 100644 --- a/runtime/bamboo-pipeline/pipeline/contrib/periodic_task/djcelery/tzcrontab.py +++ b/runtime/bamboo-pipeline/pipeline/contrib/periodic_task/djcelery/tzcrontab.py @@ -27,7 +27,14 @@ class TzAwareCrontab(schedules.crontab): """Timezone Aware Crontab.""" def __init__( - self, minute="*", hour="*", day_of_week="*", day_of_month="*", month_of_year="*", tz=pytz.utc, app=None, + self, + minute="*", + hour="*", + day_of_week="*", + day_of_month="*", + month_of_year="*", + tz=pytz.utc, + app=None, ): """Overwrite Crontab constructor to include a timezone argument.""" self.tz = tz diff --git a/runtime/bamboo-pipeline/pipeline/contrib/periodic_task/migrations/0001_initial.py b/runtime/bamboo-pipeline/pipeline/contrib/periodic_task/migrations/0001_initial.py index d5fee899..f3c62e3a 100644 --- a/runtime/bamboo-pipeline/pipeline/contrib/periodic_task/migrations/0001_initial.py +++ b/runtime/bamboo-pipeline/pipeline/contrib/periodic_task/migrations/0001_initial.py @@ -12,10 +12,10 @@ """ -from django.db import migrations, models import django.db.models.deletion -import timezone_field.fields import pipeline.models +import timezone_field.fields +from django.db import migrations, models class Migration(migrations.Migration): @@ -28,16 +28,45 @@ class Migration(migrations.Migration): migrations.CreateModel( name="CrontabSchedule", fields=[ - ("id", models.AutoField(verbose_name="ID", serialize=False, auto_created=True, primary_key=True,),), - ("minute", models.CharField(default=b"*", max_length=64, verbose_name="minute"),), - ("hour", models.CharField(default=b"*", max_length=64, verbose_name="hour"),), - ("day_of_week", models.CharField(default=b"*", max_length=64, verbose_name="day of week"),), - ("day_of_month", models.CharField(default=b"*", max_length=64, verbose_name="day of month"),), - ("month_of_year", models.CharField(default=b"*", max_length=64, verbose_name="month of year"),), + ( + "id", + models.AutoField( + verbose_name="ID", + serialize=False, + auto_created=True, + primary_key=True, + ), + ), + ( + "minute", + models.CharField(default=b"*", max_length=64, verbose_name="minute"), + ), + ( + "hour", + models.CharField(default=b"*", max_length=64, verbose_name="hour"), + ), + ( + "day_of_week", + models.CharField(default=b"*", max_length=64, verbose_name="day of week"), + ), + ( + "day_of_month", + models.CharField(default=b"*", max_length=64, verbose_name="day of month"), + ), + ( + "month_of_year", + models.CharField(default=b"*", max_length=64, verbose_name="month of year"), + ), ("timezone", timezone_field.fields.TimeZoneField(default=b"UTC")), ], options={ - "ordering": ["month_of_year", "day_of_month", "day_of_week", "hour", "minute",], + "ordering": [ + "month_of_year", + "day_of_month", + "day_of_week", + "hour", + "minute", + ], "verbose_name": "crontab", "verbose_name_plural": "crontabs", }, @@ -45,10 +74,23 @@ class Migration(migrations.Migration): migrations.CreateModel( name="DjCeleryPeriodicTask", fields=[ - ("id", models.AutoField(verbose_name="ID", serialize=False, auto_created=True, primary_key=True,),), + ( + "id", + models.AutoField( + verbose_name="ID", + serialize=False, + auto_created=True, + primary_key=True, + ), + ), ( "name", - models.CharField(help_text="Useful description", unique=True, max_length=200, verbose_name="name",), + models.CharField( + help_text="Useful description", + unique=True, + max_length=200, + verbose_name="name", + ), ), ("task", models.CharField(max_length=200, verbose_name="task name")), ( @@ -82,18 +124,42 @@ class Migration(migrations.Migration): ), ( "exchange", - models.CharField(default=None, max_length=200, null=True, verbose_name="exchange", blank=True,), + models.CharField( + default=None, + max_length=200, + null=True, + verbose_name="exchange", + blank=True, + ), ), ( "routing_key", - models.CharField(default=None, max_length=200, null=True, verbose_name="routing key", blank=True,), + models.CharField( + default=None, + max_length=200, + null=True, + verbose_name="routing key", + blank=True, + ), + ), + ( + "expires", + models.DateTimeField(null=True, verbose_name="expires", blank=True), ), - ("expires", models.DateTimeField(null=True, verbose_name="expires", blank=True),), ("enabled", models.BooleanField(default=True, verbose_name="enabled")), - ("last_run_at", models.DateTimeField(null=True, editable=False, blank=True),), - ("total_run_count", models.PositiveIntegerField(default=0, editable=False),), + ( + "last_run_at", + models.DateTimeField(null=True, editable=False, blank=True), + ), + ( + "total_run_count", + models.PositiveIntegerField(default=0, editable=False), + ), ("date_changed", models.DateTimeField(auto_now=True)), - ("description", models.TextField(verbose_name="description", blank=True),), + ( + "description", + models.TextField(verbose_name="description", blank=True), + ), ( "crontab", models.ForeignKey( @@ -106,19 +172,33 @@ class Migration(migrations.Migration): ), ), ], - options={"verbose_name": "periodic task", "verbose_name_plural": "periodic tasks",}, + options={ + "verbose_name": "periodic task", + "verbose_name_plural": "periodic tasks", + }, ), migrations.CreateModel( name="DjCeleryPeriodicTasks", fields=[ - ("ident", models.SmallIntegerField(default=1, unique=True, serialize=False, primary_key=True),), + ( + "ident", + models.SmallIntegerField(default=1, unique=True, serialize=False, primary_key=True), + ), ("last_update", models.DateTimeField()), ], ), migrations.CreateModel( name="IntervalSchedule", fields=[ - ("id", models.AutoField(verbose_name="ID", serialize=False, auto_created=True, primary_key=True,),), + ( + "id", + models.AutoField( + verbose_name="ID", + serialize=False, + auto_created=True, + primary_key=True, + ), + ), ("every", models.IntegerField(verbose_name="every")), ( "period", @@ -135,18 +215,51 @@ class Migration(migrations.Migration): ), ), ], - options={"ordering": ["period", "every"], "verbose_name": "interval", "verbose_name_plural": "intervals",}, + options={ + "ordering": ["period", "every"], + "verbose_name": "interval", + "verbose_name_plural": "intervals", + }, ), migrations.CreateModel( name="PeriodicTask", fields=[ - ("id", models.AutoField(verbose_name="ID", serialize=False, auto_created=True, primary_key=True,),), - ("name", models.CharField(max_length=64, verbose_name="\u5468\u671f\u4efb\u52a1\u540d\u79f0",),), - ("cron", models.CharField(max_length=128, verbose_name="\u8c03\u5ea6\u7b56\u7565"),), - ("total_run_count", models.PositiveIntegerField(default=0, verbose_name="\u6267\u884c\u6b21\u6570"),), - ("last_run_at", models.DateTimeField(null=True, verbose_name="\u4e0a\u6b21\u8fd0\u884c\u65f6\u95f4"),), - ("creator", models.CharField(default=b"", max_length=32, verbose_name="\u521b\u5efa\u8005"),), - ("extra_info", pipeline.models.CompressJSONField(verbose_name="\u989d\u5916\u4fe1\u606f", null=True),), + ( + "id", + models.AutoField( + verbose_name="ID", + serialize=False, + auto_created=True, + primary_key=True, + ), + ), + ( + "name", + models.CharField( + max_length=64, + verbose_name="\u5468\u671f\u4efb\u52a1\u540d\u79f0", + ), + ), + ( + "cron", + models.CharField(max_length=128, verbose_name="\u8c03\u5ea6\u7b56\u7565"), + ), + ( + "total_run_count", + models.PositiveIntegerField(default=0, verbose_name="\u6267\u884c\u6b21\u6570"), + ), + ( + "last_run_at", + models.DateTimeField(null=True, verbose_name="\u4e0a\u6b21\u8fd0\u884c\u65f6\u95f4"), + ), + ( + "creator", + models.CharField(default=b"", max_length=32, verbose_name="\u521b\u5efa\u8005"), + ), + ( + "extra_info", + pipeline.models.CompressJSONField(verbose_name="\u989d\u5916\u4fe1\u606f", null=True), + ), ( "celery_task", models.ForeignKey( @@ -181,12 +294,26 @@ class Migration(migrations.Migration): migrations.CreateModel( name="PeriodicTaskHistory", fields=[ - ("id", models.AutoField(verbose_name="ID", serialize=False, auto_created=True, primary_key=True,),), + ( + "id", + models.AutoField( + verbose_name="ID", + serialize=False, + auto_created=True, + primary_key=True, + ), + ), ("ex_data", models.TextField(verbose_name="\u5f02\u5e38\u4fe1\u606f")), - ("start_at", models.DateTimeField(auto_now_add=True, verbose_name="\u5f00\u59cb\u65f6\u95f4"),), + ( + "start_at", + models.DateTimeField(auto_now_add=True, verbose_name="\u5f00\u59cb\u65f6\u95f4"), + ), ( "start_success", - models.BooleanField(default=True, verbose_name="\u662f\u5426\u542f\u52a8\u6210\u529f",), + models.BooleanField( + default=True, + verbose_name="\u662f\u5426\u542f\u52a8\u6210\u529f", + ), ), ( "periodic_task", diff --git a/runtime/bamboo-pipeline/pipeline/contrib/periodic_task/migrations/0002_auto_20190103_1918.py b/runtime/bamboo-pipeline/pipeline/contrib/periodic_task/migrations/0002_auto_20190103_1918.py index d7b2bb44..c37cd6d4 100644 --- a/runtime/bamboo-pipeline/pipeline/contrib/periodic_task/migrations/0002_auto_20190103_1918.py +++ b/runtime/bamboo-pipeline/pipeline/contrib/periodic_task/migrations/0002_auto_20190103_1918.py @@ -12,7 +12,7 @@ """ -from django.db import migrations, models +from django.db import migrations class Migration(migrations.Migration): @@ -24,6 +24,9 @@ class Migration(migrations.Migration): operations = [ migrations.AlterModelOptions( name="djceleryperiodictask", - options={"verbose_name": "djcelery periodic task", "verbose_name_plural": "djcelery periodic tasks",}, + options={ + "verbose_name": "djcelery periodic task", + "verbose_name_plural": "djcelery periodic tasks", + }, ), ] diff --git a/runtime/bamboo-pipeline/pipeline/contrib/periodic_task/migrations/0003_auto_20191213_0819.py b/runtime/bamboo-pipeline/pipeline/contrib/periodic_task/migrations/0003_auto_20191213_0819.py index 0f221eae..0915fbe4 100644 --- a/runtime/bamboo-pipeline/pipeline/contrib/periodic_task/migrations/0003_auto_20191213_0819.py +++ b/runtime/bamboo-pipeline/pipeline/contrib/periodic_task/migrations/0003_auto_20191213_0819.py @@ -26,16 +26,12 @@ class Migration(migrations.Migration): migrations.AlterField( model_name="crontabschedule", name="day_of_month", - field=models.CharField( - default="*", max_length=64, verbose_name="day of month" - ), + field=models.CharField(default="*", max_length=64, verbose_name="day of month"), ), migrations.AlterField( model_name="crontabschedule", name="day_of_week", - field=models.CharField( - default="*", max_length=64, verbose_name="day of week" - ), + field=models.CharField(default="*", max_length=64, verbose_name="day of week"), ), migrations.AlterField( model_name="crontabschedule", @@ -50,9 +46,7 @@ class Migration(migrations.Migration): migrations.AlterField( model_name="crontabschedule", name="month_of_year", - field=models.CharField( - default="*", max_length=64, verbose_name="month of year" - ), + field=models.CharField(default="*", max_length=64, verbose_name="month of year"), ), migrations.AlterField( model_name="crontabschedule", diff --git a/runtime/bamboo-pipeline/pipeline/contrib/periodic_task/models.py b/runtime/bamboo-pipeline/pipeline/contrib/periodic_task/models.py index 2c1f2391..cd9e74e5 100644 --- a/runtime/bamboo-pipeline/pipeline/contrib/periodic_task/models.py +++ b/runtime/bamboo-pipeline/pipeline/contrib/periodic_task/models.py @@ -13,8 +13,9 @@ import ujson as json from django.db import models -from django.utils.translation import ugettext_lazy as _ - +from django.utils.translation import gettext_lazy as _ +from django_celery_beat.models import CrontabSchedule as DjangoCeleryBeatCrontabSchedule +from django_celery_beat.models import PeriodicTask as DjangoCeleryBeatPeriodicTask from pipeline.constants import PIPELINE_DEFAULT_PRIORITY from pipeline.contrib.periodic_task.signals import periodic_task_start_failed from pipeline.exceptions import InvalidOperationException @@ -25,12 +26,8 @@ Snapshot, ) from pipeline.utils.uniqid import uniqid -from django_celery_beat.models import ( - PeriodicTask as DjangoCeleryBeatPeriodicTask, - CrontabSchedule as DjangoCeleryBeatCrontabSchedule, -) -from pipeline.contrib.periodic_task.djcelery.models import * # noqa +from pipeline.contrib.periodic_task.djcelery.models import * # noqa # isort: skip BAMBOO_ENGINE_TRIGGER_TASK = "pipeline.contrib.periodic_task.tasks.bamboo_engine_periodic_task_start" @@ -97,10 +94,16 @@ class PeriodicTask(models.Model): ) cron = models.CharField(_("调度策略"), max_length=128) celery_task = models.ForeignKey( - DjangoCeleryBeatPeriodicTask, verbose_name=_("celery 周期任务实例"), null=True, on_delete=models.SET_NULL, + DjangoCeleryBeatPeriodicTask, + verbose_name=_("celery 周期任务实例"), + null=True, + on_delete=models.SET_NULL, ) snapshot = models.ForeignKey( - Snapshot, related_name="periodic_tasks", verbose_name=_("用于创建流程实例的结构数据"), on_delete=models.DO_NOTHING, + Snapshot, + related_name="periodic_tasks", + verbose_name=_("用于创建流程实例的结构数据"), + on_delete=models.DO_NOTHING, ) total_run_count = models.PositiveIntegerField(_("执行次数"), default=0) last_run_at = models.DateTimeField(_("上次运行时间"), null=True) @@ -190,7 +193,11 @@ def record_schedule(self, periodic_task, pipeline_instance, ex_data, start_succe class PeriodicTaskHistory(models.Model): periodic_task = models.ForeignKey( - PeriodicTask, related_name="instance_rel", verbose_name=_("周期任务"), null=True, on_delete=models.DO_NOTHING, + PeriodicTask, + related_name="instance_rel", + verbose_name=_("周期任务"), + null=True, + on_delete=models.DO_NOTHING, ) pipeline_instance = models.ForeignKey( PipelineInstance, diff --git a/runtime/bamboo-pipeline/pipeline/contrib/periodic_task/signals/__init__.py b/runtime/bamboo-pipeline/pipeline/contrib/periodic_task/signals/__init__.py index dd84377b..e0750d36 100644 --- a/runtime/bamboo-pipeline/pipeline/contrib/periodic_task/signals/__init__.py +++ b/runtime/bamboo-pipeline/pipeline/contrib/periodic_task/signals/__init__.py @@ -13,6 +13,6 @@ from django.dispatch import Signal -pre_periodic_task_start = Signal(providing_args=["periodic_task", "pipeline_instance"]) -post_periodic_task_start = Signal(providing_args=["periodic_task", "pipeline_instance"]) -periodic_task_start_failed = Signal(providing_args=["periodic_task", "history"]) +pre_periodic_task_start = Signal() # providing_args=["periodic_task", "pipeline_instance"] +post_periodic_task_start = Signal() # providing_args=["periodic_task", "pipeline_instance"] +periodic_task_start_failed = Signal() # providing_args=["periodic_task", "history"] diff --git a/runtime/bamboo-pipeline/pipeline/contrib/periodic_task/tests.py b/runtime/bamboo-pipeline/pipeline/contrib/periodic_task/tests.py index 95e47369..568f8ac0 100644 --- a/runtime/bamboo-pipeline/pipeline/contrib/periodic_task/tests.py +++ b/runtime/bamboo-pipeline/pipeline/contrib/periodic_task/tests.py @@ -14,7 +14,6 @@ import copy from django.test import TestCase - from django_celery_beat.models import PeriodicTask from pipeline.contrib.periodic_task.models import PeriodicTask as PipelinePeriodicTask from pipeline.exceptions import InvalidOperationException @@ -39,7 +38,12 @@ def tearDown(self): def create_a_task(self): return PipelinePeriodicTask.objects.create_task( - name=self.name, template=None, cron={}, data=self.data, creator=self.creator, extra_info=self.extra_info, + name=self.name, + template=None, + cron={}, + data=self.data, + creator=self.creator, + extra_info=self.extra_info, ) def test_create_task(self): diff --git a/runtime/bamboo-pipeline/pipeline/contrib/plugin_execute/models.py b/runtime/bamboo-pipeline/pipeline/contrib/plugin_execute/models.py index d7bd1353..e72cc44f 100644 --- a/runtime/bamboo-pipeline/pipeline/contrib/plugin_execute/models.py +++ b/runtime/bamboo-pipeline/pipeline/contrib/plugin_execute/models.py @@ -12,7 +12,7 @@ """ from django.db import models -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from pipeline.contrib.fields import SerializerField diff --git a/runtime/bamboo-pipeline/pipeline/contrib/rollback/models.py b/runtime/bamboo-pipeline/pipeline/contrib/rollback/models.py index 5f310940..c32c6e0b 100644 --- a/runtime/bamboo-pipeline/pipeline/contrib/rollback/models.py +++ b/runtime/bamboo-pipeline/pipeline/contrib/rollback/models.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- from django.db import models -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from pipeline.contrib.fields import SerializerField from pipeline.contrib.rollback.constants import TOKEN diff --git a/runtime/bamboo-pipeline/pipeline/contrib/statistics/migrations/0002_auto_20180817_1212.py b/runtime/bamboo-pipeline/pipeline/contrib/statistics/migrations/0002_auto_20180817_1212.py index 1f5af001..a1bfe935 100644 --- a/runtime/bamboo-pipeline/pipeline/contrib/statistics/migrations/0002_auto_20180817_1212.py +++ b/runtime/bamboo-pipeline/pipeline/contrib/statistics/migrations/0002_auto_20180817_1212.py @@ -12,7 +12,7 @@ """ -from django.db import migrations, models +from django.db import migrations class Migration(migrations.Migration): @@ -22,5 +22,9 @@ class Migration(migrations.Migration): ] operations = [ - migrations.RenameField(model_name="componentexecutedata", old_name="tag_code", new_name="component_code",), + migrations.RenameField( + model_name="componentexecutedata", + old_name="tag_code", + new_name="component_code", + ), ] diff --git a/runtime/bamboo-pipeline/pipeline/contrib/statistics/migrations/0003_auto_20180821_2015.py b/runtime/bamboo-pipeline/pipeline/contrib/statistics/migrations/0003_auto_20180821_2015.py index 5ce341f2..737b8d08 100644 --- a/runtime/bamboo-pipeline/pipeline/contrib/statistics/migrations/0003_auto_20180821_2015.py +++ b/runtime/bamboo-pipeline/pipeline/contrib/statistics/migrations/0003_auto_20180821_2015.py @@ -22,9 +22,21 @@ class Migration(migrations.Migration): ] operations = [ - migrations.RenameField(model_name="componentexecutedata", old_name="end_time", new_name="archived_time",), - migrations.RenameField(model_name="componentexecutedata", old_name="elapse_time", new_name="elapsed_time",), - migrations.RenameField(model_name="componentexecutedata", old_name="begin_time", new_name="started_time",), + migrations.RenameField( + model_name="componentexecutedata", + old_name="end_time", + new_name="archived_time", + ), + migrations.RenameField( + model_name="componentexecutedata", + old_name="elapse_time", + new_name="elapsed_time", + ), + migrations.RenameField( + model_name="componentexecutedata", + old_name="begin_time", + new_name="started_time", + ), migrations.AddField( model_name="componentexecutedata", name="is_retry", diff --git a/runtime/bamboo-pipeline/pipeline/contrib/statistics/models.py b/runtime/bamboo-pipeline/pipeline/contrib/statistics/models.py index d384c7eb..3ed6fd81 100644 --- a/runtime/bamboo-pipeline/pipeline/contrib/statistics/models.py +++ b/runtime/bamboo-pipeline/pipeline/contrib/statistics/models.py @@ -12,7 +12,7 @@ """ from django.db import models -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ class ComponentInTemplate(models.Model): diff --git a/runtime/bamboo-pipeline/pipeline/core/flow/activity/service_activity.py b/runtime/bamboo-pipeline/pipeline/core/flow/activity/service_activity.py index cb05b276..29db4b00 100644 --- a/runtime/bamboo-pipeline/pipeline/core/flow/activity/service_activity.py +++ b/runtime/bamboo-pipeline/pipeline/core/flow/activity/service_activity.py @@ -14,7 +14,7 @@ from abc import ABCMeta, abstractmethod from copy import deepcopy -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from pipeline.conf import settings from pipeline.core.flow.activity.base import Activity from pipeline.core.flow.io import ( @@ -46,7 +46,9 @@ class Service(object, metaclass=ABCMeta): name=_("当前流程循环次数"), key="_inner_loop", type="int", - schema=IntItemSchema(description=_("在当前流程节点循环执行次数,由父流程重新进入时会重置(仅支持新版引擎)")), + schema=IntItemSchema( + description=_("在当前流程节点循环执行次数,由父流程重新进入时会重置(仅支持新版引擎)") + ), ), ] diff --git a/runtime/bamboo-pipeline/pipeline/core/flow/io.py b/runtime/bamboo-pipeline/pipeline/core/flow/io.py index efc7f6f3..aa61f2f8 100644 --- a/runtime/bamboo-pipeline/pipeline/core/flow/io.py +++ b/runtime/bamboo-pipeline/pipeline/core/flow/io.py @@ -12,6 +12,7 @@ """ import abc + try: from collections.abc import Mapping except ImportError: diff --git a/runtime/bamboo-pipeline/pipeline/core/flow/signals.py b/runtime/bamboo-pipeline/pipeline/core/flow/signals.py index 23523978..ed3a4ae9 100644 --- a/runtime/bamboo-pipeline/pipeline/core/flow/signals.py +++ b/runtime/bamboo-pipeline/pipeline/core/flow/signals.py @@ -13,4 +13,4 @@ from django.dispatch import Signal -post_new_end_event_register = Signal(providing_args=["node_type", "node_cls"]) +post_new_end_event_register = Signal() # providing_args=["node_type", "node_cls"] diff --git a/runtime/bamboo-pipeline/pipeline/core/signals/__init__.py b/runtime/bamboo-pipeline/pipeline/core/signals/__init__.py index 79bcdcdb..0a94b64a 100644 --- a/runtime/bamboo-pipeline/pipeline/core/signals/__init__.py +++ b/runtime/bamboo-pipeline/pipeline/core/signals/__init__.py @@ -13,4 +13,4 @@ from django.dispatch import Signal -pre_variable_register = Signal(providing_args=["variable_code"]) +pre_variable_register = Signal() # providing_args=["variable_code"] diff --git a/runtime/bamboo-pipeline/pipeline/django_signal_valve/models.py b/runtime/bamboo-pipeline/pipeline/django_signal_valve/models.py index f181ce62..59378acc 100644 --- a/runtime/bamboo-pipeline/pipeline/django_signal_valve/models.py +++ b/runtime/bamboo-pipeline/pipeline/django_signal_valve/models.py @@ -11,11 +11,11 @@ specific language governing permissions and limitations under the License. """ -import zlib import pickle +import zlib from django.db import models -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ class IOField(models.BinaryField): diff --git a/runtime/bamboo-pipeline/pipeline/engine/admin.py b/runtime/bamboo-pipeline/pipeline/engine/admin.py index 8cd742ef..afdd584e 100644 --- a/runtime/bamboo-pipeline/pipeline/engine/admin.py +++ b/runtime/bamboo-pipeline/pipeline/engine/admin.py @@ -12,8 +12,7 @@ """ from django.contrib import admin -from django.utils.translation import ugettext_lazy as _ - +from django.utils.translation import gettext_lazy as _ from pipeline.engine import models from pipeline.engine.conf.function_switch import FREEZE_ENGINE from pipeline.engine.core import api diff --git a/runtime/bamboo-pipeline/pipeline/engine/api.py b/runtime/bamboo-pipeline/pipeline/engine/api.py index b486f7ab..95f06349 100644 --- a/runtime/bamboo-pipeline/pipeline/engine/api.py +++ b/runtime/bamboo-pipeline/pipeline/engine/api.py @@ -18,12 +18,18 @@ from celery import current_app from django.db import transaction -from redis.exceptions import ConnectionError as RedisConnectionError - from pipeline.celery.queues import ScalableQueues -from pipeline.constants import PIPELINE_DEFAULT_PRIORITY, PIPELINE_MAX_PRIORITY, PIPELINE_MIN_PRIORITY +from pipeline.constants import ( + PIPELINE_DEFAULT_PRIORITY, + PIPELINE_MAX_PRIORITY, + PIPELINE_MIN_PRIORITY, +) from pipeline.core.flow.activity import ServiceActivity -from pipeline.core.flow.gateway import ExclusiveGateway, ParallelGateway, ConditionalParallelGateway +from pipeline.core.flow.gateway import ( + ConditionalParallelGateway, + ExclusiveGateway, + ParallelGateway, +) from pipeline.engine import exceptions, states from pipeline.engine.core.api import workers from pipeline.engine.models import ( @@ -43,6 +49,7 @@ from pipeline.engine.utils import ActionResult, calculate_elapsed_time from pipeline.exceptions import PipelineException from pipeline.utils import uniqid +from redis.exceptions import ConnectionError as RedisConnectionError logger = logging.getLogger("celery") @@ -443,7 +450,7 @@ def get_status_tree(node_id, max_depth=1): status_map[status["id"]] = status relationships = [(s.ancestor_id, s.descendant_id) for s in rel_qs] - for (parent_id, child_id) in relationships: + for parent_id, child_id in relationships: if parent_id not in status_map: return diff --git a/runtime/bamboo-pipeline/pipeline/engine/conf/function_switch.py b/runtime/bamboo-pipeline/pipeline/engine/conf/function_switch.py index 187cf53b..20c2afa6 100644 --- a/runtime/bamboo-pipeline/pipeline/engine/conf/function_switch.py +++ b/runtime/bamboo-pipeline/pipeline/engine/conf/function_switch.py @@ -11,10 +11,14 @@ specific language governing permissions and limitations under the License. """ -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ FREEZE_ENGINE = "FREEZE_ENGINE" switch_list = [ - {"name": FREEZE_ENGINE, "description": _("用于冻结引擎, 冻结期间会屏蔽所有内部信号及暂停所有进程,同时拒绝所有流程控制请求"), "is_active": False} + { + "name": FREEZE_ENGINE, + "description": _("用于冻结引擎, 冻结期间会屏蔽所有内部信号及暂停所有进程,同时拒绝所有流程控制请求"), + "is_active": False, + } ] diff --git a/runtime/bamboo-pipeline/pipeline/engine/core/handlers/service_activity.py b/runtime/bamboo-pipeline/pipeline/engine/core/handlers/service_activity.py index 20981e0e..e3bbcf55 100644 --- a/runtime/bamboo-pipeline/pipeline/engine/core/handlers/service_activity.py +++ b/runtime/bamboo-pipeline/pipeline/engine/core/handlers/service_activity.py @@ -71,7 +71,8 @@ def handle(self, process, element, status): monitoring = True element.setup_runtime_attrs( - id=element.id, root_pipeline_id=root_pipeline.id, + id=element.id, + root_pipeline_id=root_pipeline.id, ) # pre_process inputs and execute service diff --git a/runtime/bamboo-pipeline/pipeline/engine/migrations/0004_auto_20180717_1411.py b/runtime/bamboo-pipeline/pipeline/engine/migrations/0004_auto_20180717_1411.py index 547a49e9..b9a18f59 100644 --- a/runtime/bamboo-pipeline/pipeline/engine/migrations/0004_auto_20180717_1411.py +++ b/runtime/bamboo-pipeline/pipeline/engine/migrations/0004_auto_20180717_1411.py @@ -12,7 +12,7 @@ """ -from django.db import migrations, models +from django.db import migrations class Migration(migrations.Migration): @@ -22,5 +22,9 @@ class Migration(migrations.Migration): ] operations = [ - migrations.RenameField(model_name="pipelineprocess", old_name="is_froze", new_name="is_frozen",), + migrations.RenameField( + model_name="pipelineprocess", + old_name="is_froze", + new_name="is_frozen", + ), ] diff --git a/runtime/bamboo-pipeline/pipeline/engine/migrations/0007_auto_20180717_2022.py b/runtime/bamboo-pipeline/pipeline/engine/migrations/0007_auto_20180717_2022.py index d4af987e..a06bb2b5 100644 --- a/runtime/bamboo-pipeline/pipeline/engine/migrations/0007_auto_20180717_2022.py +++ b/runtime/bamboo-pipeline/pipeline/engine/migrations/0007_auto_20180717_2022.py @@ -12,7 +12,7 @@ """ -from django.db import migrations, models +from django.db import migrations class Migration(migrations.Migration): @@ -22,8 +22,20 @@ class Migration(migrations.Migration): ] operations = [ - migrations.RemoveField(model_name="scheduleservice", name="celery_id",), - migrations.RemoveField(model_name="scheduleservice", name="celery_info_lock",), - migrations.RemoveField(model_name="scheduleservice", name="is_frozen",), - migrations.RemoveField(model_name="scheduleservice", name="schedule_date",), + migrations.RemoveField( + model_name="scheduleservice", + name="celery_id", + ), + migrations.RemoveField( + model_name="scheduleservice", + name="celery_info_lock", + ), + migrations.RemoveField( + model_name="scheduleservice", + name="is_frozen", + ), + migrations.RemoveField( + model_name="scheduleservice", + name="schedule_date", + ), ] diff --git a/runtime/bamboo-pipeline/pipeline/engine/migrations/0021_auto_20191213_0725.py b/runtime/bamboo-pipeline/pipeline/engine/migrations/0021_auto_20191213_0725.py index f3c08be3..a26e3668 100644 --- a/runtime/bamboo-pipeline/pipeline/engine/migrations/0021_auto_20191213_0725.py +++ b/runtime/bamboo-pipeline/pipeline/engine/migrations/0021_auto_20191213_0725.py @@ -19,7 +19,9 @@ class Migration(migrations.Migration): field=models.CharField(default="", max_length=512, verbose_name="流程使用的队列名"), ), migrations.AlterField( - model_name="functionswitch", name="description", field=models.TextField(default="", verbose_name="功能描述"), + model_name="functionswitch", + name="description", + field=models.TextField(default="", verbose_name="功能描述"), ), migrations.AlterField( model_name="history", @@ -64,6 +66,8 @@ class Migration(migrations.Migration): field=models.CharField(default="", max_length=40, verbose_name="celery 任务 ID"), ), migrations.AlterField( - model_name="status", name="name", field=models.CharField(default="", max_length=64, verbose_name="节点名称"), + model_name="status", + name="name", + field=models.CharField(default="", max_length=64, verbose_name="节点名称"), ), ] diff --git a/runtime/bamboo-pipeline/pipeline/engine/migrations/0026_auto_20200610_1442.py b/runtime/bamboo-pipeline/pipeline/engine/migrations/0026_auto_20200610_1442.py index dd55f124..c58c5bc8 100644 --- a/runtime/bamboo-pipeline/pipeline/engine/migrations/0026_auto_20200610_1442.py +++ b/runtime/bamboo-pipeline/pipeline/engine/migrations/0026_auto_20200610_1442.py @@ -6,38 +6,38 @@ class Migration(migrations.Migration): dependencies = [ - ('engine', '0025_multicallbackdata'), + ("engine", "0025_multicallbackdata"), ] operations = [ migrations.AlterField( - model_name='pipelineprocess', - name='is_alive', - field=models.BooleanField(db_index=True, default=True, verbose_name='该 process 是否还有效'), + model_name="pipelineprocess", + name="is_alive", + field=models.BooleanField(db_index=True, default=True, verbose_name="该 process 是否还有效"), ), migrations.AlterField( - model_name='pipelineprocess', - name='is_frozen', - field=models.BooleanField(db_index=True, default=False, verbose_name='该 process 是否被冻结'), + model_name="pipelineprocess", + name="is_frozen", + field=models.BooleanField(db_index=True, default=False, verbose_name="该 process 是否被冻结"), ), migrations.AlterField( - model_name='pipelineprocess', - name='is_sleep', - field=models.BooleanField(db_index=True, default=False, verbose_name='该 process 是否正在休眠'), + model_name="pipelineprocess", + name="is_sleep", + field=models.BooleanField(db_index=True, default=False, verbose_name="该 process 是否正在休眠"), ), migrations.AlterField( - model_name='pipelineprocess', - name='root_pipeline_id', - field=models.CharField(db_index=True, max_length=32, verbose_name='根 pipeline 的 ID'), + model_name="pipelineprocess", + name="root_pipeline_id", + field=models.CharField(db_index=True, max_length=32, verbose_name="根 pipeline 的 ID"), ), migrations.AlterField( - model_name='scheduleservice', - name='is_scheduling', - field=models.BooleanField(db_index=True, default=False, verbose_name='是否正在被调度'), + model_name="scheduleservice", + name="is_scheduling", + field=models.BooleanField(db_index=True, default=False, verbose_name="是否正在被调度"), ), migrations.AlterField( - model_name='noderelationship', - name='distance', - field=models.IntegerField(db_index=True, verbose_name='距离'), + model_name="noderelationship", + name="distance", + field=models.IntegerField(db_index=True, verbose_name="距离"), ), ] diff --git a/runtime/bamboo-pipeline/pipeline/engine/migrations/0027_sendfailedcelerytask.py b/runtime/bamboo-pipeline/pipeline/engine/migrations/0027_sendfailedcelerytask.py index 917a8482..3cc40b43 100644 --- a/runtime/bamboo-pipeline/pipeline/engine/migrations/0027_sendfailedcelerytask.py +++ b/runtime/bamboo-pipeline/pipeline/engine/migrations/0027_sendfailedcelerytask.py @@ -17,9 +17,7 @@ class Migration(migrations.Migration): fields=[ ( "id", - models.BigAutoField( - primary_key=True, serialize=False, verbose_name="ID" - ), + models.BigAutoField(primary_key=True, serialize=False, verbose_name="ID"), ), ("name", models.CharField(max_length=1024, verbose_name="任务名")), ("kwargs", models.TextField(verbose_name="任务参数")), diff --git a/runtime/bamboo-pipeline/pipeline/engine/models/core.py b/runtime/bamboo-pipeline/pipeline/engine/models/core.py index 6b621559..0c85c1c8 100644 --- a/runtime/bamboo-pipeline/pipeline/engine/models/core.py +++ b/runtime/bamboo-pipeline/pipeline/engine/models/core.py @@ -11,11 +11,11 @@ specific language governing permissions and limitations under the License. """ -import ujson as json import contextlib import logging import traceback +import ujson as json from celery import current_app try: @@ -25,8 +25,7 @@ from django.db import models, transaction from django.utils import timezone -from django.utils.translation import ugettext_lazy as _ - +from django.utils.translation import gettext_lazy as _ from pipeline.conf import settings as pipeline_settings from pipeline.constants import PIPELINE_DEFAULT_PRIORITY from pipeline.core.data.base import DataObject diff --git a/runtime/bamboo-pipeline/pipeline/engine/models/data.py b/runtime/bamboo-pipeline/pipeline/engine/models/data.py index cd979463..a3d2844d 100644 --- a/runtime/bamboo-pipeline/pipeline/engine/models/data.py +++ b/runtime/bamboo-pipeline/pipeline/engine/models/data.py @@ -12,8 +12,7 @@ """ from django.db import models, transaction -from django.utils.translation import ugettext_lazy as _ - +from django.utils.translation import gettext_lazy as _ from pipeline.engine.models.fields import IOField diff --git a/runtime/bamboo-pipeline/pipeline/engine/models/function.py b/runtime/bamboo-pipeline/pipeline/engine/models/function.py index d07bcf28..4d861a71 100644 --- a/runtime/bamboo-pipeline/pipeline/engine/models/function.py +++ b/runtime/bamboo-pipeline/pipeline/engine/models/function.py @@ -15,8 +15,7 @@ import traceback from django.db import models -from django.utils.translation import ugettext_lazy as _ - +from django.utils.translation import gettext_lazy as _ from pipeline.engine.conf import function_switch logger = logging.getLogger("celery") diff --git a/runtime/bamboo-pipeline/pipeline/engine/signals/__init__.py b/runtime/bamboo-pipeline/pipeline/engine/signals/__init__.py index 9250663b..95034457 100644 --- a/runtime/bamboo-pipeline/pipeline/engine/signals/__init__.py +++ b/runtime/bamboo-pipeline/pipeline/engine/signals/__init__.py @@ -1,4 +1,4 @@ -# -*- coding: utf-8 -*- +# -*- coding=utf-8 -*- """ Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community Edition) available. @@ -13,23 +13,24 @@ from django.dispatch import Signal -pipeline_ready = Signal(providing_args=["process_id"]) -pipeline_end = Signal(providing_args=["root_pipeline_id"]) -pipeline_revoke = Signal(providing_args=["root_pipeline_id"]) -child_process_ready = Signal(providing_args=["child_id"]) -process_ready = Signal(providing_args=["parent_id", "current_node_id", "call_from_child"]) -batch_process_ready = Signal(providing_args=["process_id_list", "pipeline_id"]) -wake_from_schedule = Signal(providing_args=["process_id, activity_id"]) -schedule_ready = Signal(providing_args=["schedule_id", "countdown", "process_id", "data_id"]) -process_unfreeze = Signal(providing_args=["process_id"]) +pipeline_ready = Signal() # providing_args=["process_id"] +pipeline_end = Signal() # providing_args=["root_pipeline_id"] +pipeline_revoke = Signal() # providing_args=["root_pipeline_id"] +child_process_ready = Signal() # providing_args=["child_id"] +process_ready = Signal() # providing_args=["parent_id", "current_node_id", "call_from_child"] +batch_process_ready = Signal() # providing_args=["process_id_list", "pipeline_id"] +wake_from_schedule = Signal() # providing_args=["process_id", "activity_id"] +schedule_ready = Signal() # providing_args=["schedule_id", "countdown", "process_id", "data_id"] +process_unfreeze = Signal() # providing_args=["process_id"] # activity failed signal -activity_failed = Signal(providing_args=["pipeline_id", "pipeline_activity_id", "subprocess_id_stack"]) +activity_failed = Signal() # providing_args=["pipeline_id", "pipeline_activity_id", "subprocess_id_stack"] # signal for developer (do not use valve to pass them!) -service_schedule_fail = Signal(providing_args=["activity_shell", "schedule_service", "ex_data"]) -service_schedule_success = Signal(providing_args=["activity_shell", "schedule_service"]) -node_skip_call = Signal(providing_args=["process", "node"]) -node_retry_ready = Signal(providing_args=["process", "node"]) +service_schedule_fail = Signal() # providing_args=["activity_shell", "schedule_service", "ex_data"] +service_schedule_success = Signal() # providing_args=["activity_shell", "schedule_service"] +node_skip_call = Signal() # providing_args=["process", "node"] +node_retry_ready = Signal() # providing_args=["process", "node"] -service_activity_timeout_monitor_start = Signal(providing_args=["node_id", "version", "root_pipeline_id", "countdown"]) -service_activity_timeout_monitor_end = Signal(providing_args=["node_id", "version"]) +# providing_args=["node_id", "version", "root_pipeline_id", "countdown"] +service_activity_timeout_monitor_start = Signal() +service_activity_timeout_monitor_end = Signal() # providing_args=["node_id", "version"] diff --git a/runtime/bamboo-pipeline/pipeline/engine/signals/handlers.py b/runtime/bamboo-pipeline/pipeline/engine/signals/handlers.py index 562163c8..61ed591c 100644 --- a/runtime/bamboo-pipeline/pipeline/engine/signals/handlers.py +++ b/runtime/bamboo-pipeline/pipeline/engine/signals/handlers.py @@ -11,11 +11,11 @@ specific language governing permissions and limitations under the License. """ -import logging import contextlib +import logging from pipeline.celery.settings import QueueResolver -from pipeline.engine import tasks, exceptions +from pipeline.engine import exceptions, tasks from pipeline.engine.models import ( NodeCeleryTask, PipelineModel, @@ -65,7 +65,9 @@ def pipeline_ready_handler(sender, process_id, **kwargs): with celery_task_send_fail_pass(): ProcessCeleryTask.objects.start_task( - process_id=process_id, task=task, kwargs={"args": [process_id], **args_resolver.resolve_args(task)}, + process_id=process_id, + task=task, + kwargs={"args": [process_id], **args_resolver.resolve_args(task)}, ) @@ -79,7 +81,9 @@ def child_process_ready_handler(sender, child_id, **kwargs): with celery_task_send_fail_pass(): ProcessCeleryTask.objects.start_task( - process_id=child_id, task=task, kwargs={"args": [child_id], **args_resolver.resolve_args(task)}, + process_id=child_id, + task=task, + kwargs={"args": [child_id], **args_resolver.resolve_args(task)}, ) @@ -112,7 +116,10 @@ def batch_process_ready_handler(sender, process_id_list, pipeline_id, **kwargs): with celery_task_send_fail_pass(): with SendFailedCeleryTask.watch( - name=task.name, kwargs=kwargs, type=SendFailedCeleryTask.TASK_TYPE_EMPTY, extra_kwargs={}, + name=task.name, + kwargs=kwargs, + type=SendFailedCeleryTask.TASK_TYPE_EMPTY, + extra_kwargs={}, ): task.apply_async(**kwargs) @@ -136,7 +143,9 @@ def process_unfreeze_handler(sender, process_id, **kwargs): with celery_task_send_fail_pass(): ProcessCeleryTask.objects.start_task( - process_id=process_id, task=task, kwargs={"args": [process_id], **args_resolver.resolve_args(task)}, + process_id=process_id, + task=task, + kwargs={"args": [process_id], **args_resolver.resolve_args(task)}, ) diff --git a/runtime/bamboo-pipeline/pipeline/eri/migrations/0001_initial.py b/runtime/bamboo-pipeline/pipeline/eri/migrations/0001_initial.py index 9b55e15e..ac04b664 100644 --- a/runtime/bamboo-pipeline/pipeline/eri/migrations/0001_initial.py +++ b/runtime/bamboo-pipeline/pipeline/eri/migrations/0001_initial.py @@ -68,7 +68,10 @@ class Migration(migrations.Migration): ("dead", models.BooleanField(default=False, verbose_name="是否已经死亡")), ("last_heartbeat", models.DateTimeField(auto_now_add=True, db_index=True, verbose_name="上次心跳时间")), ("destination_id", models.CharField(default="", max_length=33, verbose_name="执行终点 ID")), - ("current_node_id", models.CharField(db_index=True, default="", max_length=33, verbose_name="当前节点 ID")), + ( + "current_node_id", + models.CharField(db_index=True, default="", max_length=33, verbose_name="当前节点 ID"), + ), ("root_pipeline_id", models.CharField(max_length=33, verbose_name="根流程 ID")), ( "suspended_by", @@ -110,7 +113,9 @@ class Migration(migrations.Migration): ("version", models.CharField(max_length=33, verbose_name="状态版本")), ("schedule_times", models.IntegerField(default=0, verbose_name="被调度次数")), ], - options={"unique_together": {("node_id", "version")},}, + options={ + "unique_together": {("node_id", "version")}, + }, ), migrations.CreateModel( name="LogEntry", @@ -123,7 +128,9 @@ class Migration(migrations.Migration): ("message", models.TextField(null=True, verbose_name="日志内容")), ("logged_at", models.DateTimeField(auto_now_add=True, db_index=True, verbose_name="输出时间")), ], - options={"index_together": {("node_id", "loop")},}, + options={ + "index_together": {("node_id", "loop")}, + }, ), migrations.CreateModel( name="ExecutionHistory", @@ -141,7 +148,9 @@ class Migration(migrations.Migration): ("inputs", models.TextField(verbose_name="节点执行输入数据")), ("outputs", models.TextField(verbose_name="节点执行输出数据")), ], - options={"index_together": {("node_id", "loop")},}, + options={ + "index_together": {("node_id", "loop")}, + }, ), migrations.CreateModel( name="ContextValue", @@ -155,6 +164,8 @@ class Migration(migrations.Migration): ("value", models.TextField(verbose_name="变量值")), ("references", models.TextField(verbose_name="所有对其他变量直接或间接的引用")), ], - options={"unique_together": {("pipeline_id", "key")},}, + options={ + "unique_together": {("pipeline_id", "key")}, + }, ), ] diff --git a/runtime/bamboo-pipeline/pipeline/eri/migrations/0004_state_inner_loop_.py b/runtime/bamboo-pipeline/pipeline/eri/migrations/0004_state_inner_loop_.py index 846ca99a..36659d0e 100644 --- a/runtime/bamboo-pipeline/pipeline/eri/migrations/0004_state_inner_loop_.py +++ b/runtime/bamboo-pipeline/pipeline/eri/migrations/0004_state_inner_loop_.py @@ -11,6 +11,8 @@ class Migration(migrations.Migration): operations = [ migrations.AddField( - model_name="state", name="inner_loop", field=models.IntegerField(default=1, verbose_name="子流程内部循环次数"), + model_name="state", + name="inner_loop", + field=models.IntegerField(default=1, verbose_name="子流程内部循环次数"), ), ] diff --git a/runtime/bamboo-pipeline/pipeline/eri/migrations/0005_auto_20220422_1048.py b/runtime/bamboo-pipeline/pipeline/eri/migrations/0005_auto_20220422_1048.py index 86ee9168..dd4a4b72 100644 --- a/runtime/bamboo-pipeline/pipeline/eri/migrations/0005_auto_20220422_1048.py +++ b/runtime/bamboo-pipeline/pipeline/eri/migrations/0005_auto_20220422_1048.py @@ -6,58 +6,60 @@ class Migration(migrations.Migration): dependencies = [ - ('eri', '0004_state_inner_loop_'), + ("eri", "0004_state_inner_loop_"), ] operations = [ migrations.AlterField( - model_name='contextvalue', - name='code', - field=models.CharField(blank=True, default='', max_length=128, verbose_name='计算型变量类型唯一标志'), + model_name="contextvalue", + name="code", + field=models.CharField(blank=True, default="", max_length=128, verbose_name="计算型变量类型唯一标志"), ), migrations.AlterField( - model_name='logentry', - name='message', - field=models.TextField(blank=True, null=True, verbose_name='日志内容'), + model_name="logentry", + name="message", + field=models.TextField(blank=True, null=True, verbose_name="日志内容"), ), migrations.AlterField( - model_name='logentry', - name='version', - field=models.CharField(blank=True, default='', max_length=33, verbose_name='状态版本'), + model_name="logentry", + name="version", + field=models.CharField(blank=True, default="", max_length=33, verbose_name="状态版本"), ), migrations.AlterField( - model_name='process', - name='destination_id', - field=models.CharField(blank=True, default='', max_length=33, verbose_name='执行终点 ID'), + model_name="process", + name="destination_id", + field=models.CharField(blank=True, default="", max_length=33, verbose_name="执行终点 ID"), ), migrations.AlterField( - model_name='process', - name='queue', - field=models.CharField(blank=True, default='', max_length=128, verbose_name='所属队列'), + model_name="process", + name="queue", + field=models.CharField(blank=True, default="", max_length=128, verbose_name="所属队列"), ), migrations.AlterField( - model_name='process', - name='suspended_by', - field=models.CharField(blank=True, db_index=True, default='', max_length=33, verbose_name='导致进程暂停的节点 ID'), + model_name="process", + name="suspended_by", + field=models.CharField( + blank=True, db_index=True, default="", max_length=33, verbose_name="导致进程暂停的节点 ID" + ), ), migrations.AlterField( - model_name='state', - name='archived_time', - field=models.DateTimeField(blank=True, null=True, verbose_name='归档时间'), + model_name="state", + name="archived_time", + field=models.DateTimeField(blank=True, null=True, verbose_name="归档时间"), ), migrations.AlterField( - model_name='state', - name='parent_id', - field=models.CharField(blank=True, db_index=True, default='', max_length=33, verbose_name='父节点 ID'), + model_name="state", + name="parent_id", + field=models.CharField(blank=True, db_index=True, default="", max_length=33, verbose_name="父节点 ID"), ), migrations.AlterField( - model_name='state', - name='root_id', - field=models.CharField(blank=True, db_index=True, default='', max_length=33, verbose_name='根节点 ID'), + model_name="state", + name="root_id", + field=models.CharField(blank=True, db_index=True, default="", max_length=33, verbose_name="根节点 ID"), ), migrations.AlterField( - model_name='state', - name='started_time', - field=models.DateTimeField(blank=True, null=True, verbose_name='开始时间'), + model_name="state", + name="started_time", + field=models.DateTimeField(blank=True, null=True, verbose_name="开始时间"), ), ] diff --git a/runtime/bamboo-pipeline/pipeline/eri/models.py b/runtime/bamboo-pipeline/pipeline/eri/models.py index 29fe570b..361d6141 100644 --- a/runtime/bamboo-pipeline/pipeline/eri/models.py +++ b/runtime/bamboo-pipeline/pipeline/eri/models.py @@ -12,7 +12,7 @@ """ from django.db import models from django.utils import timezone -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ class Process(models.Model): diff --git a/runtime/bamboo-pipeline/pipeline/eri/runtime.py b/runtime/bamboo-pipeline/pipeline/eri/runtime.py index 62aebf00..babb9b7e 100644 --- a/runtime/bamboo-pipeline/pipeline/eri/runtime.py +++ b/runtime/bamboo-pipeline/pipeline/eri/runtime.py @@ -145,9 +145,11 @@ def _gen_event_node(self, event: dict, pipeline: dict, root_id: str, parent_id: { "id": event["id"], "type": event["type"], - "targets": {event["outgoing"]: pipeline["flows"][event["outgoing"]]["target"]} - if event["type"] == NodeType.EmptyStartEvent.value - else {}, + "targets": ( + {event["outgoing"]: pipeline["flows"][event["outgoing"]]["target"]} + if event["type"] == NodeType.EmptyStartEvent.value + else {} + ), "root_pipeline_id": root_id, "parent_pipeline_id": parent_id, "can_skip": event["type"] == NodeType.EmptyStartEvent.value, diff --git a/runtime/bamboo-pipeline/pipeline/eri/signals.py b/runtime/bamboo-pipeline/pipeline/eri/signals.py index 61b17f5d..6818133f 100644 --- a/runtime/bamboo-pipeline/pipeline/eri/signals.py +++ b/runtime/bamboo-pipeline/pipeline/eri/signals.py @@ -13,10 +13,10 @@ from django.dispatch import Signal -post_set_state = Signal(providing_args=["node_id", "to_state", "version", "root_id", "parent_id", "loop"]) -execute_interrupt = Signal(providing_args=["event"]) -schedule_interrupt = Signal(providing_args=["event"]) -pre_service_execute = Signal(providing_args=["service", "data", "parent_data"]) -pre_service_schedule = Signal(providing_args=["service", "data", "parent_data", "callback_data"]) +post_set_state = Signal() # providing_args=["node_id", "to_state", "version", "root_id", "parent_id", "loop"] +execute_interrupt = Signal() # providing_args=["event"] +schedule_interrupt = Signal() # providing_args=["event"] +pre_service_execute = Signal() # providing_args=["service", "data", "parent_data"] +pre_service_schedule = Signal() # providing_args=["service", "data", "parent_data", "callback_data"] -pipeline_event = Signal(providing_args=["event"]) +pipeline_event = Signal() # providing_args=["event"] diff --git a/runtime/bamboo-pipeline/pipeline/log/migrations/0002_auto_20180810_1054.py b/runtime/bamboo-pipeline/pipeline/log/migrations/0002_auto_20180810_1054.py index 42a01728..2c7d7d2a 100644 --- a/runtime/bamboo-pipeline/pipeline/log/migrations/0002_auto_20180810_1054.py +++ b/runtime/bamboo-pipeline/pipeline/log/migrations/0002_auto_20180810_1054.py @@ -22,6 +22,14 @@ class Migration(migrations.Migration): ] operations = [ - migrations.AlterField(model_name="logentry", name="exception", field=models.TextField(null=True),), - migrations.AlterField(model_name="logentry", name="message", field=models.TextField(null=True),), + migrations.AlterField( + model_name="logentry", + name="exception", + field=models.TextField(null=True), + ), + migrations.AlterField( + model_name="logentry", + name="message", + field=models.TextField(null=True), + ), ] diff --git a/runtime/bamboo-pipeline/pipeline/log/migrations/0003_logentry_history_id.py b/runtime/bamboo-pipeline/pipeline/log/migrations/0003_logentry_history_id.py index b5fc2d19..d9a64c83 100644 --- a/runtime/bamboo-pipeline/pipeline/log/migrations/0003_logentry_history_id.py +++ b/runtime/bamboo-pipeline/pipeline/log/migrations/0003_logentry_history_id.py @@ -22,5 +22,9 @@ class Migration(migrations.Migration): ] operations = [ - migrations.AddField(model_name="logentry", name="history_id", field=models.IntegerField(default=-1),), + migrations.AddField( + model_name="logentry", + name="history_id", + field=models.IntegerField(default=-1), + ), ] diff --git a/runtime/bamboo-pipeline/pipeline/log/models.py b/runtime/bamboo-pipeline/pipeline/log/models.py index 0437e777..66473f3f 100644 --- a/runtime/bamboo-pipeline/pipeline/log/models.py +++ b/runtime/bamboo-pipeline/pipeline/log/models.py @@ -13,7 +13,7 @@ from django.db import models from django.utils import timezone -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ class LogEntryManager(models.Manager): diff --git a/runtime/bamboo-pipeline/pipeline/management/celery_version_adapter/celery4.py b/runtime/bamboo-pipeline/pipeline/management/celery_version_adapter/celery4.py index f34dc676..8a8162ae 100644 --- a/runtime/bamboo-pipeline/pipeline/management/celery_version_adapter/celery4.py +++ b/runtime/bamboo-pipeline/pipeline/management/celery_version_adapter/celery4.py @@ -15,7 +15,6 @@ from optparse import make_option as Option from celery.bin import celery - from pipeline.management.commands.app import app from pipeline.management.commands.base import CeleryCommand @@ -41,4 +40,6 @@ class Command(CeleryCommand): def run_from_argv(self, argv): argv = self.handle_default_options(argv) - base.execute_from_commandline(["{0[0]} {0[1]}".format(argv)] + argv[2:],) + base.execute_from_commandline( + ["{0[0]} {0[1]}".format(argv)] + argv[2:], + ) diff --git a/runtime/bamboo-pipeline/pipeline/management/commands/base.py b/runtime/bamboo-pipeline/pipeline/management/commands/base.py index 7de6d1b2..28722402 100644 --- a/runtime/bamboo-pipeline/pipeline/management/commands/base.py +++ b/runtime/bamboo-pipeline/pipeline/management/commands/base.py @@ -22,8 +22,8 @@ except ImportError: import djcelery -from kombu.utils.encoding import str_to_bytes from django.core.management.base import BaseCommand +from kombu.utils.encoding import str_to_bytes DB_SHARED_THREAD = """\ DatabaseWrapper objects created in a thread can only \ @@ -59,7 +59,9 @@ def _init(self, *args, **kwargs): def _validate_thread_sharing(self): if not self.allow_thread_sharing and self._thread_ident != _get_ident(): - raise DatabaseError(DB_SHARED_THREAD % (self.alias, self._thread_ident, _get_ident()),) + raise DatabaseError( + DB_SHARED_THREAD % (self.alias, self._thread_ident, _get_ident()), + ) BaseDatabaseWrapper.__init__ = _init BaseDatabaseWrapper.validate_thread_sharing = _validate_thread_sharing @@ -103,10 +105,14 @@ def get_version(self): def get_version(self): try: version = "celery {c.__version__}\ndjango-celery-beat {d.__version__}".format( - c=celery, d=django_celery_beat, + c=celery, + d=django_celery_beat, ) except ImportError: - version = "celery {c.__version__}\ndjango-celery {d.__version__}".format(c=celery, d=djcelery,) + version = "celery {c.__version__}\ndjango-celery {d.__version__}".format( + c=celery, + d=djcelery, + ) return version def execute(self, *args, **options): diff --git a/runtime/bamboo-pipeline/pipeline/migrations/0008_auto_20180824_1115.py b/runtime/bamboo-pipeline/pipeline/migrations/0008_auto_20180824_1115.py index e23a0a6d..f1f5bbaf 100644 --- a/runtime/bamboo-pipeline/pipeline/migrations/0008_auto_20180824_1115.py +++ b/runtime/bamboo-pipeline/pipeline/migrations/0008_auto_20180824_1115.py @@ -23,8 +23,15 @@ class Migration(migrations.Migration): ] operations = [ - migrations.RenameField(model_name="templateversion", old_name="snapshot_id", new_name="snapshot",), - migrations.RemoveField(model_name="templateversion", name="template_id",), + migrations.RenameField( + model_name="templateversion", + old_name="snapshot_id", + new_name="snapshot", + ), + migrations.RemoveField( + model_name="templateversion", + name="template_id", + ), migrations.AddField( model_name="templateversion", name="template", diff --git a/runtime/bamboo-pipeline/pipeline/migrations/0011_auto_20180906_1045.py b/runtime/bamboo-pipeline/pipeline/migrations/0011_auto_20180906_1045.py index b450771c..24170980 100644 --- a/runtime/bamboo-pipeline/pipeline/migrations/0011_auto_20180906_1045.py +++ b/runtime/bamboo-pipeline/pipeline/migrations/0011_auto_20180906_1045.py @@ -22,7 +22,10 @@ class Migration(migrations.Migration): ] operations = [ - migrations.RemoveField(model_name="templaterelationship", name="refer_sum",), + migrations.RemoveField( + model_name="templaterelationship", + name="refer_sum", + ), migrations.AddField( model_name="templaterelationship", name="subprocess_node_id", diff --git a/runtime/bamboo-pipeline/pipeline/migrations/0019_delete_variablemodel.py b/runtime/bamboo-pipeline/pipeline/migrations/0019_delete_variablemodel.py index 122ace6a..7efdd88b 100644 --- a/runtime/bamboo-pipeline/pipeline/migrations/0019_delete_variablemodel.py +++ b/runtime/bamboo-pipeline/pipeline/migrations/0019_delete_variablemodel.py @@ -22,5 +22,7 @@ class Migration(migrations.Migration): ] operations = [ - migrations.DeleteModel(name="VariableModel",), + migrations.DeleteModel( + name="VariableModel", + ), ] diff --git a/runtime/bamboo-pipeline/pipeline/migrations/0032_templatescheme_subprocess_scheme_relation.py b/runtime/bamboo-pipeline/pipeline/migrations/0032_templatescheme_subprocess_scheme_relation.py index 4fa15288..46f89850 100644 --- a/runtime/bamboo-pipeline/pipeline/migrations/0032_templatescheme_subprocess_scheme_relation.py +++ b/runtime/bamboo-pipeline/pipeline/migrations/0032_templatescheme_subprocess_scheme_relation.py @@ -6,13 +6,15 @@ class Migration(migrations.Migration): dependencies = [ - ('pipeline', '0031_auto_20210624_2317'), + ("pipeline", "0031_auto_20210624_2317"), ] operations = [ migrations.AddField( - model_name='templatescheme', - name='subprocess_scheme_relation', - field=models.ManyToManyField(to='pipeline.TemplateRelationship', verbose_name='子流程节点引用执行方案的关系'), + model_name="templatescheme", + name="subprocess_scheme_relation", + field=models.ManyToManyField( + to="pipeline.TemplateRelationship", verbose_name="子流程节点引用执行方案的关系" + ), ), ] diff --git a/runtime/bamboo-pipeline/pipeline/models.py b/runtime/bamboo-pipeline/pipeline/models.py index 6cb72ea1..f72c1b1e 100644 --- a/runtime/bamboo-pipeline/pipeline/models.py +++ b/runtime/bamboo-pipeline/pipeline/models.py @@ -21,17 +21,16 @@ from django.db import models, transaction from django.utils import timezone from django.utils.module_loading import import_string -from django.utils.translation import ugettext_lazy as _ - +from django.utils.translation import gettext_lazy as _ from pipeline.conf import settings from pipeline.constants import PIPELINE_DEFAULT_PRIORITY from pipeline.core.constants import PE -from pipeline.signals import post_pipeline_finish, post_pipeline_revoke from pipeline.engine.utils import ActionResult, calculate_elapsed_time from pipeline.exceptions import SubprocessRefError from pipeline.parser.context import get_pipeline_context from pipeline.parser.utils import replace_all_id from pipeline.service import task_service +from pipeline.signals import post_pipeline_finish, post_pipeline_revoke from pipeline.utils.graph import Graph from pipeline.utils.uniqid import node_uniqid, uniqid @@ -514,7 +513,9 @@ class TemplateScheme(models.Model): edit_time = models.DateTimeField(_("修改时间"), auto_now=True) data = CompressJSONField(verbose_name=_("方案数据")) - subprocess_scheme_relation = models.ManyToManyField(verbose_name=_("子流程节点引用执行方案的关系"), to=TemplateRelationship) + subprocess_scheme_relation = models.ManyToManyField( + verbose_name=_("子流程节点引用执行方案的关系"), to=TemplateRelationship + ) class InstanceManager(models.Manager): diff --git a/runtime/bamboo-pipeline/pipeline/signals/__init__.py b/runtime/bamboo-pipeline/pipeline/signals/__init__.py index e22d047d..0e67efd0 100644 --- a/runtime/bamboo-pipeline/pipeline/signals/__init__.py +++ b/runtime/bamboo-pipeline/pipeline/signals/__init__.py @@ -13,5 +13,5 @@ from django.dispatch import Signal -post_pipeline_finish = Signal(providing_args=["instance_id"]) -post_pipeline_revoke = Signal(providing_args=["instance_id"]) +post_pipeline_finish = Signal() # providing_args=["instance_id"] +post_pipeline_revoke = Signal() # providing_args=["instance_id"] diff --git a/runtime/bamboo-pipeline/pipeline/signals/handlers.py b/runtime/bamboo-pipeline/pipeline/signals/handlers.py index ec4cbcc3..e57fb499 100644 --- a/runtime/bamboo-pipeline/pipeline/signals/handlers.py +++ b/runtime/bamboo-pipeline/pipeline/signals/handlers.py @@ -14,7 +14,6 @@ from django.db import transaction from django.db.models.signals import post_save, pre_save from django.dispatch import receiver - from pipeline.core.constants import PE from pipeline.core.pipeline import Pipeline from pipeline.engine.signals import pipeline_end, pipeline_revoke @@ -55,9 +54,7 @@ def pipeline_template_post_save_handler(sender, instance, created, **kwargs): version = sp.get("version") or PipelineTemplate.objects.get(template_id=sp["template_id"]).version always_use_latest = sp.get("always_use_latest", False) - template_scheme_dict.update({ - sp["template_id"]: sp.get("scheme_id_list", []) - }) + template_scheme_dict.update({sp["template_id"]: sp.get("scheme_id_list", [])}) rs.append( TemplateRelationship( @@ -65,7 +62,7 @@ def pipeline_template_post_save_handler(sender, instance, created, **kwargs): descendant_template_id=sp["template_id"], subprocess_node_id=sp["id"], version=version, - always_use_latest=always_use_latest + always_use_latest=always_use_latest, ) ) if rs: diff --git a/runtime/bamboo-pipeline/pipeline/tests/component_framework/test_component.py b/runtime/bamboo-pipeline/pipeline/tests/component_framework/test_component.py index 1c5de784..a1bc3710 100644 --- a/runtime/bamboo-pipeline/pipeline/tests/component_framework/test_component.py +++ b/runtime/bamboo-pipeline/pipeline/tests/component_framework/test_component.py @@ -12,7 +12,6 @@ """ from django.test import TestCase - from pipeline.component_framework.component import Component from pipeline.component_framework.library import ComponentLibrary from pipeline.component_framework.models import ComponentModel @@ -105,8 +104,8 @@ def test_data_for_execution(self): def test_data_for_execution_lack_of_inputs(self): PlainVariable(name="key_1", value="value_1") data = {"key_1": None, "key_2": None} - component = self.component(data) - self.assertRaises(ComponentDataLackException, execution_data=component.data_for_execution, args=[None, None]) + _ = self.component(data) + self.assertRaises(ComponentDataLackException) def test_form_is_embedded(self): self.assertFalse(self.component.form_is_embedded()) diff --git a/runtime/bamboo-pipeline/pipeline/tests/contrib/test_mock.py b/runtime/bamboo-pipeline/pipeline/tests/contrib/test_mock.py index 2b1b8679..1441526e 100644 --- a/runtime/bamboo-pipeline/pipeline/tests/contrib/test_mock.py +++ b/runtime/bamboo-pipeline/pipeline/tests/contrib/test_mock.py @@ -12,17 +12,16 @@ """ import json -from bamboo_engine import states -from bamboo_engine.utils.string import unique_id from django.test import TestCase - +from pipeline.contrib.mock import api from pipeline.eri.imp.context import ContextMixin from pipeline.eri.models import ContextValue, ExecutionData, State -from pipeline.contrib.mock import api +from bamboo_engine import states +from bamboo_engine.utils.string import unique_id -class TestMockNodeOutPutDataBase(TestCase): +class TestMockNodeOutPutDataBase(TestCase): def assert_exception(self, pipeline_id, node_id, context_values, message): result = api.update_node_outputs(pipeline_id, node_id, context_values=context_values) self.assertFalse(result.result) @@ -32,9 +31,7 @@ def test_update_node_data(self): pipeline_id = unique_id("n") node_id = unique_id("n") - context_values = { - "${code}": 2 - } + context_values = {"${code}": 2} message = "update context values failed: pipeline state not exist, root_pipeline_id={}".format(pipeline_id) self.assert_exception(pipeline_id, node_id, context_values, message) @@ -44,26 +41,26 @@ def test_update_node_data(self): root_id=pipeline_id, parent_id=pipeline_id, name=states.FINISHED, - version=unique_id("v") + version=unique_id("v"), ) - message = "update context values failed: the task of non-running state is not allowed update, " \ - "root_pipeline_id={}".format(pipeline_id) + message = ( + "update context values failed: the task of non-running state is not allowed update, " + "root_pipeline_id={}".format(pipeline_id) + ) self.assert_exception(pipeline_id, node_id, context_values, message) node_state = State.objects.create( - node_id=node_id, - root_id=pipeline_id, - parent_id=pipeline_id, - name=states.FINISHED, - version=unique_id("v") + node_id=node_id, root_id=pipeline_id, parent_id=pipeline_id, name=states.FINISHED, version=unique_id("v") ) pipeline_state.name = states.RUNNING pipeline_state.save() - message = "update context values failed: the task of non-failed state is not allowed to update, node_id={}" \ - .format(node_id) + message = "update context values failed: \ + the task of non-failed state is not allowed to update, node_id={}".format( + node_id + ) self.assert_exception(pipeline_id, node_id, context_values, message) node_state.name = states.FAILED @@ -89,9 +86,7 @@ def test_update_node_data(self): outputs_serializer=ContextMixin.JSON_SERIALIZER, ) - api.update_node_outputs(pipeline_id, node_id, context_values={ - "${code}": 2 - }) + api.update_node_outputs(pipeline_id, node_id, context_values={"${code}": 2}) cv.refresh_from_db() ed.refresh_from_db() diff --git a/runtime/bamboo-pipeline/pipeline/tests/contrib/test_rollback.py b/runtime/bamboo-pipeline/pipeline/tests/contrib/test_rollback.py index e151a060..98f46c31 100644 --- a/runtime/bamboo-pipeline/pipeline/tests/contrib/test_rollback.py +++ b/runtime/bamboo-pipeline/pipeline/tests/contrib/test_rollback.py @@ -140,7 +140,7 @@ def test_reserve_rollback(self): root_id=pipeline_id, parent_id=pipeline_id, name=states.RUNNING, - version=unique_id("v") + version=unique_id("v"), # noqa ) @@ -235,7 +235,7 @@ def test_allowed_rollback_node_id_list(self): root_id=pipeline_id, parent_id=pipeline_id, name=states.RUNNING, - version=unique_id("v") + version=unique_id("v"), # noqa ) start_node_id = unique_id("n") diff --git a/runtime/bamboo-pipeline/pipeline/tests/engine/core/test_api.py b/runtime/bamboo-pipeline/pipeline/tests/engine/core/test_api.py index 2b060212..29bbda6e 100644 --- a/runtime/bamboo-pipeline/pipeline/tests/engine/core/test_api.py +++ b/runtime/bamboo-pipeline/pipeline/tests/engine/core/test_api.py @@ -16,13 +16,12 @@ import mock from celery import current_app from django.test import TestCase -from redis.exceptions import ConnectionError - from pipeline.conf import settings from pipeline.django_signal_valve import valve from pipeline.engine.core import api, data from pipeline.engine.exceptions import RabbitMQConnectionError from pipeline.engine.models import FunctionSwitch +from redis.exceptions import ConnectionError class EngineCoreApiTestCase(TestCase): @@ -32,7 +31,8 @@ def test_freeze(self): FunctionSwitch.objects.freeze_engine.assert_called_once() @mock.patch( - "pipeline.engine.models.FunctionSwitch.objects.unfreeze_engine", mock.MagicMock(), + "pipeline.engine.models.FunctionSwitch.objects.unfreeze_engine", + mock.MagicMock(), ) @mock.patch("pipeline.django_signal_valve.valve.open_valve", mock.MagicMock()) def test_unfreeze(self): @@ -106,7 +106,9 @@ def two_workers(*args, **kwargs): worker = api.workers() self.assertEqual(worker, two_workers()) data.expire_cache.assert_called_with( - "__pipeline__workers__", two_workers(), settings.PIPELINE_WORKER_STATUS_CACHE_EXPIRES, + "__pipeline__workers__", + two_workers(), + settings.PIPELINE_WORKER_STATUS_CACHE_EXPIRES, ) # raise exception @@ -129,5 +131,7 @@ def raise_mq_conn_error(*args, **kwargs): self.assertEqual(worker, two_workers()) ping_mock.assert_has_calls([mock.call(timeout=1), mock.call(timeout=2)]) data.expire_cache.assert_called_with( - "__pipeline__workers__", two_workers(), settings.PIPELINE_WORKER_STATUS_CACHE_EXPIRES, + "__pipeline__workers__", + two_workers(), + settings.PIPELINE_WORKER_STATUS_CACHE_EXPIRES, ) diff --git a/runtime/bamboo-pipeline/pipeline/tests/engine/core/test_schedule.py b/runtime/bamboo-pipeline/pipeline/tests/engine/core/test_schedule.py index 51fd9d7d..56873128 100644 --- a/runtime/bamboo-pipeline/pipeline/tests/engine/core/test_schedule.py +++ b/runtime/bamboo-pipeline/pipeline/tests/engine/core/test_schedule.py @@ -15,7 +15,6 @@ from django.test import TestCase from mock import call - from pipeline.django_signal_valve import valve from pipeline.engine import signals from pipeline.engine.core import schedule @@ -393,7 +392,8 @@ def test_schedule__schedule_raise_exception_and_ignore_error_and_transit_success with mock.patch(PIPELINE_STATUS_GET, mock.MagicMock(return_value=mock_status)): with mock.patch( - PIPELINE_PROCESS_GET, mock.MagicMock(return_value=process), + PIPELINE_PROCESS_GET, + mock.MagicMock(return_value=process), ): process_id = uniqid() @@ -528,7 +528,8 @@ def test_schedule__schedule_return_success_and_wait_callback_and_transit_success with mock.patch(PIPELINE_STATUS_GET, mock.MagicMock(return_value=mock_status)): with mock.patch( - PIPELINE_PROCESS_GET, mock.MagicMock(return_value=process), + PIPELINE_PROCESS_GET, + mock.MagicMock(return_value=process), ): process_id = uniqid() @@ -631,7 +632,8 @@ def test_schedule__schedule_return_success_and_finished(self): with mock.patch(PIPELINE_STATUS_GET, mock.MagicMock(return_value=mock_status)): with mock.patch( - PIPELINE_PROCESS_GET, mock.MagicMock(return_value=process), + PIPELINE_PROCESS_GET, + mock.MagicMock(return_value=process), ): schedule.schedule(process.id, mock_ss.id) diff --git a/runtime/bamboo-pipeline/pipeline/tests/engine/models/core/test_node_celery_task.py b/runtime/bamboo-pipeline/pipeline/tests/engine/models/core/test_node_celery_task.py index 035fab87..92cffb34 100644 --- a/runtime/bamboo-pipeline/pipeline/tests/engine/models/core/test_node_celery_task.py +++ b/runtime/bamboo-pipeline/pipeline/tests/engine/models/core/test_node_celery_task.py @@ -13,7 +13,6 @@ import mock from django.test import TestCase - from pipeline.engine.models import NodeCeleryTask, SendFailedCeleryTask from ..mock import * # noqa @@ -66,11 +65,15 @@ def test_start_task__record_error(self): NodeCeleryTask.objects.start_task(node_id, task=task, kwargs=kwargs) mock_watch.assert_called_once_with( - name=task.name, kwargs=kwargs, type=SendFailedCeleryTask.TASK_TYPE_NODE, extra_kwargs={"node_id": node_id}, + name=task.name, + kwargs=kwargs, + type=SendFailedCeleryTask.TASK_TYPE_NODE, + extra_kwargs={"node_id": node_id}, ) task.apply_async.assert_called_with(a="1", b=2) self.assertEqual( - NodeCeleryTask.objects.filter(node_id=node_id, celery_task_id=task.apply_async.return_value).count(), 1, + NodeCeleryTask.objects.filter(node_id=node_id, celery_task_id=task.apply_async.return_value).count(), + 1, ) def test_start_task__no_record_error(self): @@ -88,7 +91,8 @@ def test_start_task__no_record_error(self): mock_watch.assert_not_called() task.apply_async.assert_called_with(a="1", b=2) self.assertEqual( - NodeCeleryTask.objects.filter(node_id=node_id, celery_task_id=task.apply_async.return_value).count(), 1, + NodeCeleryTask.objects.filter(node_id=node_id, celery_task_id=task.apply_async.return_value).count(), + 1, ) @mock.patch("pipeline.engine.models.core.revoke", mock.MagicMock()) @@ -102,5 +106,8 @@ def test_revoke(self): NodeCeleryTask.objects.revoke(node_id) revoke.assert_called_with(celery_task_id) self.assertRaises( - NodeCeleryTask.DoesNotExist, NodeCeleryTask.objects.get, node_id=node_id, celery_task_id=celery_task_id, + NodeCeleryTask.DoesNotExist, + NodeCeleryTask.objects.get, + node_id=node_id, + celery_task_id=celery_task_id, ) diff --git a/runtime/bamboo-pipeline/pipeline/tests/engine/models/core/test_process_celery_task.py b/runtime/bamboo-pipeline/pipeline/tests/engine/models/core/test_process_celery_task.py index bf373df4..dc618ae6 100644 --- a/runtime/bamboo-pipeline/pipeline/tests/engine/models/core/test_process_celery_task.py +++ b/runtime/bamboo-pipeline/pipeline/tests/engine/models/core/test_process_celery_task.py @@ -12,7 +12,6 @@ """ from django.test import TestCase - from pipeline.engine.models import ProcessCeleryTask, SendFailedCeleryTask from ..mock import * # noqa @@ -54,7 +53,9 @@ def test_destroy(self): ProcessCeleryTask.objects.bind(process_id=process_id, celery_task_id=celery_task_id) ProcessCeleryTask.objects.destroy(process_id) self.assertRaises( - ProcessCeleryTask.DoesNotExist, ProcessCeleryTask.objects.get, process_id=process_id, + ProcessCeleryTask.DoesNotExist, + ProcessCeleryTask.objects.get, + process_id=process_id, ) def test_start_task__record_error(self): diff --git a/runtime/bamboo-pipeline/pipeline/tests/engine/models/core/test_schedule_celery_task.py b/runtime/bamboo-pipeline/pipeline/tests/engine/models/core/test_schedule_celery_task.py index c74bff41..81eea927 100644 --- a/runtime/bamboo-pipeline/pipeline/tests/engine/models/core/test_schedule_celery_task.py +++ b/runtime/bamboo-pipeline/pipeline/tests/engine/models/core/test_schedule_celery_task.py @@ -12,7 +12,6 @@ """ from django.test import TestCase - from pipeline.engine.models import ScheduleCeleryTask, SendFailedCeleryTask from ..mock import * # noqa @@ -51,7 +50,9 @@ def test_destroy(self): ScheduleCeleryTask.objects.bind(schedule_id=schedule_id, celery_task_id=celery_task_id) ScheduleCeleryTask.objects.destroy(schedule_id) self.assertRaises( - ScheduleCeleryTask.DoesNotExist, ScheduleCeleryTask.objects.get, schedule_id=schedule_id, + ScheduleCeleryTask.DoesNotExist, + ScheduleCeleryTask.objects.get, + schedule_id=schedule_id, ) def test_start_task__record_error(self): diff --git a/runtime/bamboo-pipeline/pipeline/tests/engine/models/core/test_send_failed_celery_task.py b/runtime/bamboo-pipeline/pipeline/tests/engine/models/core/test_send_failed_celery_task.py index 96c3b269..93bb06ea 100644 --- a/runtime/bamboo-pipeline/pipeline/tests/engine/models/core/test_send_failed_celery_task.py +++ b/runtime/bamboo-pipeline/pipeline/tests/engine/models/core/test_send_failed_celery_task.py @@ -12,10 +12,9 @@ """ import json -from mock import patch, MagicMock from django.test import TestCase - +from mock import MagicMock, patch from pipeline.engine.exceptions import CeleryFailedTaskCatchException from pipeline.engine.models import SendFailedCeleryTask @@ -50,7 +49,11 @@ def test_extra_kwargs_dict(self): def test_resend__type_error(self): task = SendFailedCeleryTask( - name="name", kwargs="kwargs_token", type=-1, extra_kwargs="extra_kwargs_token", exec_trace="trace_token", + name="name", + kwargs="kwargs_token", + type=-1, + extra_kwargs="extra_kwargs_token", + exec_trace="trace_token", ) task.delete = MagicMock() @@ -102,12 +105,16 @@ def test_resend__process_send_error(self): with patch("pipeline.engine.models.core.current_app", current_app): with patch( - "pipeline.engine.models.core.ProcessCeleryTask.objects.start_task", mock_start_task, + "pipeline.engine.models.core.ProcessCeleryTask.objects.start_task", + mock_start_task, ): self.assertRaises(RuntimeError, task.resend) mock_start_task.assert_called_once_with( - process_id=process_id, task=mock_task, kwargs=task.kwargs_dict, record_error=False, + process_id=process_id, + task=mock_task, + kwargs=task.kwargs_dict, + record_error=False, ) task.delete.assert_not_called() @@ -129,7 +136,8 @@ def test_resend__node_send_error(self): with patch("pipeline.engine.models.core.current_app", current_app): with patch( - "pipeline.engine.models.core.NodeCeleryTask.objects.start_task", mock_start_task, + "pipeline.engine.models.core.NodeCeleryTask.objects.start_task", + mock_start_task, ): self.assertRaises(RuntimeError, task.resend) @@ -156,12 +164,16 @@ def test_resend__schedule_send_error(self): with patch("pipeline.engine.models.core.current_app", current_app): with patch( - "pipeline.engine.models.core.ScheduleCeleryTask.objects.start_task", mock_start_task, + "pipeline.engine.models.core.ScheduleCeleryTask.objects.start_task", + mock_start_task, ): self.assertRaises(RuntimeError, task.resend) mock_start_task.assert_called_once_with( - schedule_id=schedule_id, task=mock_task, kwargs=task.kwargs_dict, record_error=False, + schedule_id=schedule_id, + task=mock_task, + kwargs=task.kwargs_dict, + record_error=False, ) task.delete.assert_not_called() @@ -204,12 +216,16 @@ def test_resend__process_send_success(self): with patch("pipeline.engine.models.core.current_app", current_app): with patch( - "pipeline.engine.models.core.ProcessCeleryTask.objects.start_task", mock_start_task, + "pipeline.engine.models.core.ProcessCeleryTask.objects.start_task", + mock_start_task, ): task.resend() mock_start_task.assert_called_once_with( - process_id=process_id, task=mock_task, kwargs=task.kwargs_dict, record_error=False, + process_id=process_id, + task=mock_task, + kwargs=task.kwargs_dict, + record_error=False, ) task.delete.assert_called_once() @@ -231,7 +247,8 @@ def test_resend__node_send_success(self): with patch("pipeline.engine.models.core.current_app", current_app): with patch( - "pipeline.engine.models.core.NodeCeleryTask.objects.start_task", mock_start_task, + "pipeline.engine.models.core.NodeCeleryTask.objects.start_task", + mock_start_task, ): task.resend() @@ -258,12 +275,16 @@ def test_resend__schedule_send_success(self): with patch("pipeline.engine.models.core.current_app", current_app): with patch( - "pipeline.engine.models.core.ScheduleCeleryTask.objects.start_task", mock_start_task, + "pipeline.engine.models.core.ScheduleCeleryTask.objects.start_task", + mock_start_task, ): task.resend() mock_start_task.assert_called_once_with( - schedule_id=schedule_id, task=mock_task, kwargs=task.kwargs_dict, record_error=False, + schedule_id=schedule_id, + task=mock_task, + kwargs=task.kwargs_dict, + record_error=False, ) task.delete.assert_called_once() diff --git a/runtime/bamboo-pipeline/pipeline/tests/engine/test_states.py b/runtime/bamboo-pipeline/pipeline/tests/engine/test_states.py index 10efe38b..49475f24 100644 --- a/runtime/bamboo-pipeline/pipeline/tests/engine/test_states.py +++ b/runtime/bamboo-pipeline/pipeline/tests/engine/test_states.py @@ -14,7 +14,6 @@ import itertools from django.test import TestCase - from pipeline.engine import states from pipeline.engine.states import * # noqa @@ -126,7 +125,7 @@ def test_can_transit(self): ) def test_is_rerunning(self): - for (f, t) in itertools.product(ALL_STATES, ALL_STATES): + for f, t in itertools.product(ALL_STATES, ALL_STATES): if f == FINISHED and t == RUNNING: self.assertTrue(is_rerunning(f, t)) else: diff --git a/runtime/bamboo-pipeline/pipeline/tests/signals/test_handlers.py b/runtime/bamboo-pipeline/pipeline/tests/signals/test_handlers.py index 5c112351..c63a56b9 100644 --- a/runtime/bamboo-pipeline/pipeline/tests/signals/test_handlers.py +++ b/runtime/bamboo-pipeline/pipeline/tests/signals/test_handlers.py @@ -13,7 +13,6 @@ import mock from django.test import TestCase - from pipeline.models import PipelineTemplate from pipeline.signals import handlers @@ -94,7 +93,7 @@ def test_template_post_save_handler(self): TemplateRelationship.objects.filter.assert_has_calls( [ mock.call(ancestor_template_id="f7ec3227634c90871a4a62e02ea3c6c7"), - mock.call(ancestor_template_id="f7ec3227634c90871a4a62e02ea3c6c7") + mock.call(ancestor_template_id="f7ec3227634c90871a4a62e02ea3c6c7"), ] ) relation.templatescheme_set.add.assert_called_once_with(1, 2, 3) diff --git a/runtime/bamboo-pipeline/pipeline/tests/validators/cases.py b/runtime/bamboo-pipeline/pipeline/tests/validators/cases.py index f219f66f..38c8c8de 100644 --- a/runtime/bamboo-pipeline/pipeline/tests/validators/cases.py +++ b/runtime/bamboo-pipeline/pipeline/tests/validators/cases.py @@ -251,7 +251,12 @@ def out_assert_case(length, out_set): acts[_(5)].extend(egs[_(7)]).connect(cgs[_(3)], acts[_(8)]).to(acts[_(8)]).extend(egs[_(8)]).connect( acts[_(8)], acts[_(11)] ).to(acts[_(11)]).extend(cgs[_(3)]) - acts[_(6)].extend(egs[_(2)]).connect(acts[_(9)], acts[_(10)],).converge(cgs[_(2)]).extend(acts[_(12)]).extend( + acts[_(6)].extend(egs[_(2)]).connect( + acts[_(9)], + acts[_(10)], + ).converge( + cgs[_(2)] + ).extend(acts[_(12)]).extend( egs[_(6)] ).connect(acts[_(6)], cgs[_(3)], cgs[_(2)]).to(egs[_(2)]).connect(acts[_(6)]) diff --git a/runtime/bamboo-pipeline/pipeline/utils/boolrule/boolrule.py b/runtime/bamboo-pipeline/pipeline/utils/boolrule/boolrule.py index 8408da94..7f79bff6 100644 --- a/runtime/bamboo-pipeline/pipeline/utils/boolrule/boolrule.py +++ b/runtime/bamboo-pipeline/pipeline/utils/boolrule/boolrule.py @@ -98,7 +98,7 @@ def get_bool_expression(): realNumber.setParseAction(lambda toks: float(toks[0])) | integer.setParseAction(lambda toks: int(toks[0])) | str_ - | bool_.setParseAction(lambda toks: toks[0] == "true") + | bool_.setParseAction(lambda toks: toks[0].lower() == "true") | propertyPath.setParseAction(lambda toks: SubstituteVal(toks)) ) # need to add support for alg expressions @@ -209,7 +209,7 @@ def _compile(self): self._compiled = True def _expand_val(self, val, context): - if type(val) == list: + if isinstance(val, list): val = [self._expand_val(v, context) for v in val] if isinstance(val, SubstituteVal): diff --git a/runtime/bamboo-pipeline/pipeline/utils/mako_utils/checker.py b/runtime/bamboo-pipeline/pipeline/utils/mako_utils/checker.py index 74ffcbf8..8d7c6138 100644 --- a/runtime/bamboo-pipeline/pipeline/utils/mako_utils/checker.py +++ b/runtime/bamboo-pipeline/pipeline/utils/mako_utils/checker.py @@ -24,7 +24,9 @@ def parse_template_nodes( - nodes: List[parsetree.Node], node_visitor: ast.NodeVisitor, code_extractor: MakoNodeCodeExtractor, + nodes: List[parsetree.Node], + node_visitor: ast.NodeVisitor, + code_extractor: MakoNodeCodeExtractor, ): """ 解析mako模板节点,逐个节点解析抽象语法树并检查安全性 @@ -52,6 +54,8 @@ def check_mako_template_safety(text: str, node_visitor: ast.NodeVisitor, code_ex try: lexer_template = Lexer(text).parse() except MakoException as mako_error: - raise ForbiddenMakoTemplateException("非mako模板,解析失败, {err_msg}".format(err_msg=mako_error.__class__.__name__)) + raise ForbiddenMakoTemplateException( + "非mako模板,解析失败, {err_msg}".format(err_msg=mako_error.__class__.__name__) + ) parse_template_nodes(lexer_template.nodes, node_visitor, code_extractor) return True diff --git a/runtime/bamboo-pipeline/pipeline/validators/connection.py b/runtime/bamboo-pipeline/pipeline/validators/connection.py index 17bd7080..ff5a72f0 100644 --- a/runtime/bamboo-pipeline/pipeline/validators/connection.py +++ b/runtime/bamboo-pipeline/pipeline/validators/connection.py @@ -11,13 +11,12 @@ specific language governing permissions and limitations under the License. """ -from django.utils.translation import ugettext_lazy as _ - +from django.utils.translation import gettext_lazy as _ +from pipeline.core.constants import PE from pipeline.exceptions import ConnectionValidateError from pipeline.utils.graph import Graph from pipeline.validators.rules import NODE_RULES from pipeline.validators.utils import get_nodes_dict -from pipeline.core.constants import PE def validate_graph_connection(data): diff --git a/runtime/bamboo-pipeline/pipeline/validators/gateway.py b/runtime/bamboo-pipeline/pipeline/validators/gateway.py index 9da5e22f..41a6a152 100644 --- a/runtime/bamboo-pipeline/pipeline/validators/gateway.py +++ b/runtime/bamboo-pipeline/pipeline/validators/gateway.py @@ -13,8 +13,7 @@ import queue -from django.utils.translation import ugettext_lazy as _ - +from django.utils.translation import gettext_lazy as _ from pipeline import exceptions from pipeline.core.constants import PE from pipeline.engine.utils import Stack @@ -148,7 +147,9 @@ def match_converge( target[i] = None break else: - raise exceptions.ConvergeMatchError(cur_index, _("并行网关中的分支网关必须将所有分支汇聚到一个汇聚网关")) + raise exceptions.ConvergeMatchError( + cur_index, _("并行网关中的分支网关必须将所有分支汇聚到一个汇聚网关") + ) converge_id, shared = match_converge( converges=converges, @@ -206,7 +207,9 @@ def match_converge( if not_in_parallel_gateway(stack): converge_end = True else: - raise exceptions.ConvergeMatchError(cur_index, _("并行网关中的分支网关必须将所有分支汇聚到一个汇聚网关")) + raise exceptions.ConvergeMatchError( + cur_index, _("并行网关中的分支网关必须将所有分支汇聚到一个汇聚网关") + ) # exclusive gateway point back to self elif is_exg and target[i] == current_gateway[PE.id]: diff --git a/runtime/bamboo-pipeline/pipeline/variable_framework/models.py b/runtime/bamboo-pipeline/pipeline/variable_framework/models.py index f5d47ff3..bdb31c3a 100644 --- a/runtime/bamboo-pipeline/pipeline/variable_framework/models.py +++ b/runtime/bamboo-pipeline/pipeline/variable_framework/models.py @@ -12,8 +12,7 @@ """ from django.db import models -from django.utils.translation import ugettext_lazy as _ - +from django.utils.translation import gettext_lazy as _ from pipeline.core.data.library import VariableLibrary diff --git a/runtime/bamboo-pipeline/poetry.lock b/runtime/bamboo-pipeline/poetry.lock index 20723f97..1b6ff185 100644 --- a/runtime/bamboo-pipeline/poetry.lock +++ b/runtime/bamboo-pipeline/poetry.lock @@ -1,314 +1,529 @@ +# This file is automatically @generated by Poetry 2.0.0 and should not be changed by hand. + [[package]] name = "amqp" -version = "5.2.0" +version = "5.3.1" description = "Low-level AMQP client for Python (fork of amqplib)." -category = "main" optional = false python-versions = ">=3.6" +groups = ["main"] +files = [ + {file = "amqp-5.3.1-py3-none-any.whl", hash = "sha256:43b3319e1b4e7d1251833a93d672b4af1e40f3d632d479b98661a95f117880a2"}, + {file = "amqp-5.3.1.tar.gz", hash = "sha256:cddc00c725449522023bad949f70fff7b48f0b1ade74d170a6f10ab044739432"}, +] [package.dependencies] vine = ">=5.0.0,<6.0.0" -[[package]] -name = "appdirs" -version = "1.4.4" -description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -category = "dev" -optional = false -python-versions = "*" - [[package]] name = "asgiref" -version = "3.4.1" +version = "3.8.1" description = "ASGI specs, helper code, and adapters" -category = "main" optional = false -python-versions = ">=3.6" - -[package.dependencies] -typing-extensions = {version = "*", markers = "python_version < \"3.8\""} +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "asgiref-3.8.1-py3-none-any.whl", hash = "sha256:3e1e3ecc849832fe52ccf2cb6686b7a55f82bb1d6aee72a58826471390335e47"}, + {file = "asgiref-3.8.1.tar.gz", hash = "sha256:c343bd80a0bec947a9860adb4c432ffa7db769836c64238fc34bdc3fec84d590"}, +] [package.extras] -tests = ["pytest", "pytest-asyncio", "mypy (>=0.800)"] - -[[package]] -name = "async-timeout" -version = "4.0.2" -description = "Timeout context manager for asyncio programs" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -typing-extensions = {version = ">=3.6.5", markers = "python_version < \"3.8\""} - -[[package]] -name = "atomicwrites" -version = "1.4.1" -description = "Atomic file writes." -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +tests = ["mypy (>=0.800)", "pytest", "pytest-asyncio"] [[package]] name = "attrs" -version = "22.2.0" +version = "24.3.0" description = "Classes Without Boilerplate" -category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "attrs-24.3.0-py3-none-any.whl", hash = "sha256:ac96cd038792094f438ad1f6ff80837353805ac950cd2aa0e0625ef19850c308"}, + {file = "attrs-24.3.0.tar.gz", hash = "sha256:8f5c07333d543103541ba7be0e2ce16eeee8130cb0b3f9238ab904ce1e85baff"}, +] [package.extras] -cov = ["attrs", "coverage-enable-subprocess", "coverage[toml] (>=5.3)"] -dev = ["attrs"] -docs = ["furo", "sphinx", "myst-parser", "zope.interface", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier"] -tests = ["attrs", "zope.interface"] -tests-no-zope = ["hypothesis", "pympler", "pytest (>=4.3.0)", "pytest-xdist", "cloudpickle", "mypy (>=0.971,<0.990)", "pytest-mypy-plugins"] -tests_no_zope = ["hypothesis", "pympler", "pytest (>=4.3.0)", "pytest-xdist", "cloudpickle", "mypy (>=0.971,<0.990)", "pytest-mypy-plugins"] +benchmark = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-codspeed", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +cov = ["cloudpickle", "coverage[toml] (>=5.3)", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +dev = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pre-commit-uv", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +docs = ["cogapp", "furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier (<24.7)"] +tests = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +tests-mypy = ["mypy (>=1.11.1)", "pytest-mypy-plugins"] [[package]] name = "bamboo-engine" -version = "2.11.0" +version = "3.0.0rc0" description = "Bamboo-engine is a general-purpose workflow engine" -category = "main" optional = false -python-versions = ">=3.6,<4" +python-versions = "^3.11.10" +groups = ["main"] +files = [] +develop = false [package.dependencies] -Mako = ">=1.1.4,<2.0.0" -prometheus-client = ">=0.9.0,<0.10.0" -pyparsing = ">=2.2.0,<3.0.0" -Werkzeug = ">=1.0.0,<2.0.0" +Mako = "^1.3" +prometheus-client = "^0.20.0" +pyparsing = "^3" +Werkzeug = "^3" + +[package.source] +type = "directory" +url = "../.." [[package]] name = "billiard" -version = "3.6.4.0" +version = "4.2.1" description = "Python multiprocessing fork with improvements and bugfixes" -category = "main" optional = false -python-versions = "*" +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "billiard-4.2.1-py3-none-any.whl", hash = "sha256:40b59a4ac8806ba2c2369ea98d876bc6108b051c227baffd928c644d15d8f3cb"}, + {file = "billiard-4.2.1.tar.gz", hash = "sha256:12b641b0c539073fc8d3f5b8b7be998956665c4233c7c1fcd66a7e677c4fb36f"}, +] [[package]] name = "black" -version = "20.8b1" +version = "23.12.1" description = "The uncompromising code formatter." -category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "black-23.12.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e0aaf6041986767a5e0ce663c7a2f0e9eaf21e6ff87a5f95cbf3675bfd4c41d2"}, + {file = "black-23.12.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c88b3711d12905b74206227109272673edce0cb29f27e1385f33b0163c414bba"}, + {file = "black-23.12.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a920b569dc6b3472513ba6ddea21f440d4b4c699494d2e972a1753cdc25df7b0"}, + {file = "black-23.12.1-cp310-cp310-win_amd64.whl", hash = "sha256:3fa4be75ef2a6b96ea8d92b1587dd8cb3a35c7e3d51f0738ced0781c3aa3a5a3"}, + {file = "black-23.12.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8d4df77958a622f9b5a4c96edb4b8c0034f8434032ab11077ec6c56ae9f384ba"}, + {file = "black-23.12.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:602cfb1196dc692424c70b6507593a2b29aac0547c1be9a1d1365f0d964c353b"}, + {file = "black-23.12.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c4352800f14be5b4864016882cdba10755bd50805c95f728011bcb47a4afd59"}, + {file = "black-23.12.1-cp311-cp311-win_amd64.whl", hash = "sha256:0808494f2b2df923ffc5723ed3c7b096bd76341f6213989759287611e9837d50"}, + {file = "black-23.12.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:25e57fd232a6d6ff3f4478a6fd0580838e47c93c83eaf1ccc92d4faf27112c4e"}, + {file = "black-23.12.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2d9e13db441c509a3763a7a3d9a49ccc1b4e974a47be4e08ade2a228876500ec"}, + {file = "black-23.12.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d1bd9c210f8b109b1762ec9fd36592fdd528485aadb3f5849b2740ef17e674e"}, + {file = "black-23.12.1-cp312-cp312-win_amd64.whl", hash = "sha256:ae76c22bde5cbb6bfd211ec343ded2163bba7883c7bc77f6b756a1049436fbb9"}, + {file = "black-23.12.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1fa88a0f74e50e4487477bc0bb900c6781dbddfdfa32691e780bf854c3b4a47f"}, + {file = "black-23.12.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a4d6a9668e45ad99d2f8ec70d5c8c04ef4f32f648ef39048d010b0689832ec6d"}, + {file = "black-23.12.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b18fb2ae6c4bb63eebe5be6bd869ba2f14fd0259bda7d18a46b764d8fb86298a"}, + {file = "black-23.12.1-cp38-cp38-win_amd64.whl", hash = "sha256:c04b6d9d20e9c13f43eee8ea87d44156b8505ca8a3c878773f68b4e4812a421e"}, + {file = "black-23.12.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3e1b38b3135fd4c025c28c55ddfc236b05af657828a8a6abe5deec419a0b7055"}, + {file = "black-23.12.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4f0031eaa7b921db76decd73636ef3a12c942ed367d8c3841a0739412b260a54"}, + {file = "black-23.12.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:97e56155c6b737854e60a9ab1c598ff2533d57e7506d97af5481141671abf3ea"}, + {file = "black-23.12.1-cp39-cp39-win_amd64.whl", hash = "sha256:dd15245c8b68fe2b6bd0f32c1556509d11bb33aec9b5d0866dd8e2ed3dba09c2"}, + {file = "black-23.12.1-py3-none-any.whl", hash = "sha256:78baad24af0f033958cad29731e27363183e140962595def56423e626f4bee3e"}, + {file = "black-23.12.1.tar.gz", hash = "sha256:4ce3ef14ebe8d9509188014d96af1c456a910d5b5cbf434a09fef7e024b3d0d5"}, +] [package.dependencies] -appdirs = "*" -click = ">=7.1.2" -dataclasses = {version = ">=0.6", markers = "python_version < \"3.7\""} +click = ">=8.0.0" mypy-extensions = ">=0.4.3" -pathspec = ">=0.6,<1" -regex = ">=2020.1.8" -toml = ">=0.10.1" -typed-ast = ">=1.4.0" -typing-extensions = ">=3.7.4" +packaging = ">=22.0" +pathspec = ">=0.9.0" +platformdirs = ">=2" [package.extras] colorama = ["colorama (>=0.4.3)"] -d = ["aiohttp (>=3.3.2)", "aiohttp-cors"] +d = ["aiohttp (>=3.7.4)", "aiohttp (>=3.7.4,!=3.9.0)"] +jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] +uvloop = ["uvloop (>=0.15.2)"] [[package]] name = "boto3" -version = "1.23.10" +version = "1.35.98" description = "The AWS SDK for Python" -category = "main" optional = false -python-versions = ">= 3.6" +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "boto3-1.35.98-py3-none-any.whl", hash = "sha256:d0224e1499d7189b47aa7f469d96522d98df6f5702fccb20a95a436582ebcd9d"}, + {file = "boto3-1.35.98.tar.gz", hash = "sha256:4b6274b4fe9d7113f978abea66a1f20c8a397c268c9d1b2a6c96b14a256da4a5"}, +] [package.dependencies] -botocore = ">=1.26.10,<1.27.0" +botocore = ">=1.35.98,<1.36.0" jmespath = ">=0.7.1,<2.0.0" -s3transfer = ">=0.5.0,<0.6.0" +s3transfer = ">=0.10.0,<0.11.0" [package.extras] crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] [[package]] name = "botocore" -version = "1.26.10" +version = "1.35.98" description = "Low-level, data-driven core of boto 3." -category = "main" optional = false -python-versions = ">= 3.6" +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "botocore-1.35.98-py3-none-any.whl", hash = "sha256:4f1c0b687488663a774ad3a5e81a5f94fae1bcada2364cfdc48482c4dbf794d5"}, + {file = "botocore-1.35.98.tar.gz", hash = "sha256:d11742b3824bdeac3c89eeeaf5132351af41823bbcef8fc15e95c8250b1de09c"}, +] [package.dependencies] jmespath = ">=0.7.1,<2.0.0" python-dateutil = ">=2.1,<3.0.0" -urllib3 = ">=1.25.4,<1.27" +urllib3 = {version = ">=1.25.4,<2.2.0 || >2.2.0,<3", markers = "python_version >= \"3.10\""} [package.extras] -crt = ["awscrt (==0.13.8)"] - -[[package]] -name = "cached-property" -version = "1.5.2" -description = "A decorator for caching properties in classes." -category = "main" -optional = false -python-versions = "*" +crt = ["awscrt (==0.22.0)"] [[package]] name = "celery" -version = "5.1.2" +version = "5.4.0" description = "Distributed Task Queue." -category = "main" optional = false -python-versions = ">=3.6," +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "celery-5.4.0-py3-none-any.whl", hash = "sha256:369631eb580cf8c51a82721ec538684994f8277637edde2dfc0dacd73ed97f64"}, + {file = "celery-5.4.0.tar.gz", hash = "sha256:504a19140e8d3029d5acad88330c541d4c3f64c789d85f94756762d8bca7e706"}, +] [package.dependencies] -billiard = ">=3.6.4.0,<4.0" -click = ">=7.0,<8.0" -click-didyoumean = ">=0.0.3" +billiard = ">=4.2.0,<5.0" +click = ">=8.1.2,<9.0" +click-didyoumean = ">=0.3.0" click-plugins = ">=1.1.1" -click-repl = ">=0.1.6" -kombu = ">=5.1.0,<6.0" -pytz = ">0.0-dev" -vine = ">=5.0.0,<6.0" +click-repl = ">=0.2.0" +kombu = ">=5.3.4,<6.0" +python-dateutil = ">=2.8.2" +tzdata = ">=2022.7" +vine = ">=5.1.0,<6.0" [package.extras] -arangodb = ["pyArango (>=1.3.2)"] -auth = ["cryptography"] -azureblockblob = ["azure-storage-blob (==12.6.0)"] +arangodb = ["pyArango (>=2.0.2)"] +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.21.0)"] -consul = ["python-consul2"] -cosmosdbsql = ["pydocumentdb (==2.3.2)"] +cassandra = ["cassandra-driver (>=3.25.0,<4)"] +consul = ["python-consul2 (==0.1.5)"] +cosmosdbsql = ["pydocumentdb (==2.3.5)"] couchbase = ["couchbase (>=3.0.0)"] -couchdb = ["pycouchdb"] -django = ["Django (>=1.11)"] -dynamodb = ["boto3 (>=1.9.178)"] -elasticsearch = ["elasticsearch"] -eventlet = ["eventlet (>=0.26.1)"] -gevent = ["gevent (>=1.0.0)"] -librabbitmq = ["librabbitmq (>=1.5.0)"] -memcache = ["pylibmc"] -mongodb = ["pymongo[srv] (>=3.3.0)"] -msgpack = ["msgpack"] -pymemcache = ["python-memcached"] -pyro = ["pyro4"] -pytest = ["pytest-celery"] -redis = ["redis (>=3.2.0)"] -s3 = ["boto3 (>=1.9.125)"] +couchdb = ["pycouchdb (==1.14.2)"] +django = ["Django (>=2.2.28)"] +dynamodb = ["boto3 (>=1.26.143)"] +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.8)"] +pymemcache = ["python-memcached (>=1.61)"] +pyro = ["pyro4 (==4.82)"] +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"] -sqlalchemy = ["sqlalchemy"] -sqs = ["boto3 (>=1.9.125)", "pycurl (==7.43.0.5)"] +solar = ["ephem (==4.1.5)"] +sqlalchemy = ["sqlalchemy (>=1.4.48,<2.1)"] +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)"] -zstd = ["zstandard"] +zstd = ["zstandard (==0.22.0)"] [[package]] name = "certifi" -version = "2024.2.2" +version = "2024.12.14" description = "Python package for providing Mozilla's CA Bundle." -category = "main" optional = false python-versions = ">=3.6" +groups = ["main"] +files = [ + {file = "certifi-2024.12.14-py3-none-any.whl", hash = "sha256:1275f7a45be9464efc1173084eaa30f866fe2e47d389406136d332ed4967ec56"}, + {file = "certifi-2024.12.14.tar.gz", hash = "sha256:b650d30f370c2b724812bee08008be0c4163b163ddaec3f2546c1caf65f191db"}, +] [[package]] name = "charset-normalizer" -version = "2.0.12" +version = "3.4.1" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -category = "main" optional = false -python-versions = ">=3.5.0" - -[package.extras] -unicode_backport = ["unicodedata2"] +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "charset_normalizer-3.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:91b36a978b5ae0ee86c394f5a54d6ef44db1de0815eb43de826d41d21e4af3de"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7461baadb4dc00fd9e0acbe254e3d7d2112e7f92ced2adc96e54ef6501c5f176"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e218488cd232553829be0664c2292d3af2eeeb94b32bea483cf79ac6a694e037"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:80ed5e856eb7f30115aaf94e4a08114ccc8813e6ed1b5efa74f9f82e8509858f"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b010a7a4fd316c3c484d482922d13044979e78d1861f0e0650423144c616a46a"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4532bff1b8421fd0a320463030c7520f56a79c9024a4e88f01c537316019005a"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d973f03c0cb71c5ed99037b870f2be986c3c05e63622c017ea9816881d2dd247"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3a3bd0dcd373514dcec91c411ddb9632c0d7d92aed7093b8c3bbb6d69ca74408"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:d9c3cdf5390dcd29aa8056d13e8e99526cda0305acc038b96b30352aff5ff2bb"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:2bdfe3ac2e1bbe5b59a1a63721eb3b95fc9b6817ae4a46debbb4e11f6232428d"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:eab677309cdb30d047996b36d34caeda1dc91149e4fdca0b1a039b3f79d9a807"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-win32.whl", hash = "sha256:c0429126cf75e16c4f0ad00ee0eae4242dc652290f940152ca8c75c3a4b6ee8f"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:9f0b8b1c6d84c8034a44893aba5e767bf9c7a211e313a9605d9c617d7083829f"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8bfa33f4f2672964266e940dd22a195989ba31669bd84629f05fab3ef4e2d125"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28bf57629c75e810b6ae989f03c0828d64d6b26a5e205535585f96093e405ed1"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f08ff5e948271dc7e18a35641d2f11a4cd8dfd5634f55228b691e62b37125eb3"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:234ac59ea147c59ee4da87a0c0f098e9c8d169f4dc2a159ef720f1a61bbe27cd"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd4ec41f914fa74ad1b8304bbc634b3de73d2a0889bd32076342a573e0779e00"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eea6ee1db730b3483adf394ea72f808b6e18cf3cb6454b4d86e04fa8c4327a12"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c96836c97b1238e9c9e3fe90844c947d5afbf4f4c92762679acfe19927d81d77"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4d86f7aff21ee58f26dcf5ae81a9addbd914115cdebcbb2217e4f0ed8982e146"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:09b5e6733cbd160dcc09589227187e242a30a49ca5cefa5a7edd3f9d19ed53fd"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:5777ee0881f9499ed0f71cc82cf873d9a0ca8af166dfa0af8ec4e675b7df48e6"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:237bdbe6159cff53b4f24f397d43c6336c6b0b42affbe857970cefbb620911c8"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-win32.whl", hash = "sha256:8417cb1f36cc0bc7eaba8ccb0e04d55f0ee52df06df3ad55259b9a323555fc8b"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:d7f50a1f8c450f3925cb367d011448c39239bb3eb4117c36a6d354794de4ce76"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:73d94b58ec7fecbc7366247d3b0b10a21681004153238750bb67bd9012414545"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dad3e487649f498dd991eeb901125411559b22e8d7ab25d3aeb1af367df5efd7"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c30197aa96e8eed02200a83fba2657b4c3acd0f0aa4bdc9f6c1af8e8962e0757"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2369eea1ee4a7610a860d88f268eb39b95cb588acd7235e02fd5a5601773d4fa"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc2722592d8998c870fa4e290c2eec2c1569b87fe58618e67d38b4665dfa680d"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffc9202a29ab3920fa812879e95a9e78b2465fd10be7fcbd042899695d75e616"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:804a4d582ba6e5b747c625bf1255e6b1507465494a40a2130978bda7b932c90b"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0f55e69f030f7163dffe9fd0752b32f070566451afe180f99dbeeb81f511ad8d"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c4c3e6da02df6fa1410a7680bd3f63d4f710232d3139089536310d027950696a"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:5df196eb874dae23dcfb968c83d4f8fdccb333330fe1fc278ac5ceeb101003a9"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e358e64305fe12299a08e08978f51fc21fac060dcfcddd95453eabe5b93ed0e1"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-win32.whl", hash = "sha256:9b23ca7ef998bc739bf6ffc077c2116917eabcc901f88da1b9856b210ef63f35"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:6ff8a4a60c227ad87030d76e99cd1698345d4491638dfa6673027c48b3cd395f"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:aabfa34badd18f1da5ec1bc2715cadc8dca465868a4e73a0173466b688f29dda"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22e14b5d70560b8dd51ec22863f370d1e595ac3d024cb8ad7d308b4cd95f8313"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8436c508b408b82d87dc5f62496973a1805cd46727c34440b0d29d8a2f50a6c9"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d074908e1aecee37a7635990b2c6d504cd4766c7bc9fc86d63f9c09af3fa11b"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:955f8851919303c92343d2f66165294848d57e9bba6cf6e3625485a70a038d11"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:44ecbf16649486d4aebafeaa7ec4c9fed8b88101f4dd612dcaf65d5e815f837f"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0924e81d3d5e70f8126529951dac65c1010cdf117bb75eb02dd12339b57749dd"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2967f74ad52c3b98de4c3b32e1a44e32975e008a9cd2a8cc8966d6a5218c5cb2"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c75cb2a3e389853835e84a2d8fb2b81a10645b503eca9bcb98df6b5a43eb8886"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:09b26ae6b1abf0d27570633b2b078a2a20419c99d66fb2823173d73f188ce601"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fa88b843d6e211393a37219e6a1c1df99d35e8fd90446f1118f4216e307e48cd"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-win32.whl", hash = "sha256:eb8178fe3dba6450a3e024e95ac49ed3400e506fd4e9e5c32d30adda88cbd407"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:b1ac5992a838106edb89654e0aebfc24f5848ae2547d22c2c3f66454daa11971"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f30bf9fd9be89ecb2360c7d94a711f00c09b976258846efe40db3d05828e8089"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:97f68b8d6831127e4787ad15e6757232e14e12060bec17091b85eb1486b91d8d"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7974a0b5ecd505609e3b19742b60cee7aa2aa2fb3151bc917e6e2646d7667dcf"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc54db6c8593ef7d4b2a331b58653356cf04f67c960f584edb7c3d8c97e8f39e"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:311f30128d7d333eebd7896965bfcfbd0065f1716ec92bd5638d7748eb6f936a"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:7d053096f67cd1241601111b698f5cad775f97ab25d81567d3f59219b5f1adbd"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:807f52c1f798eef6cf26beb819eeb8819b1622ddfeef9d0977a8502d4db6d534"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:dccbe65bd2f7f7ec22c4ff99ed56faa1e9f785482b9bbd7c717e26fd723a1d1e"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:2fb9bd477fdea8684f78791a6de97a953c51831ee2981f8e4f583ff3b9d9687e"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:01732659ba9b5b873fc117534143e4feefecf3b2078b0a6a2e925271bb6f4cfa"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-win32.whl", hash = "sha256:7a4f97a081603d2050bfaffdefa5b02a9ec823f8348a572e39032caa8404a487"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:7b1bef6280950ee6c177b326508f86cad7ad4dff12454483b51d8b7d673a2c5d"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ecddf25bee22fe4fe3737a399d0d177d72bc22be6913acfab364b40bce1ba83c"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c60ca7339acd497a55b0ea5d506b2a2612afb2826560416f6894e8b5770d4a9"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b7b2d86dd06bfc2ade3312a83a5c364c7ec2e3498f8734282c6c3d4b07b346b8"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dd78cfcda14a1ef52584dbb008f7ac81c1328c0f58184bf9a84c49c605002da6"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e27f48bcd0957c6d4cb9d6fa6b61d192d0b13d5ef563e5f2ae35feafc0d179c"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:01ad647cdd609225c5350561d084b42ddf732f4eeefe6e678765636791e78b9a"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:619a609aa74ae43d90ed2e89bdd784765de0a25ca761b93e196d938b8fd1dbbd"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:89149166622f4db9b4b6a449256291dc87a99ee53151c74cbd82a53c8c2f6ccd"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:7709f51f5f7c853f0fb938bcd3bc59cdfdc5203635ffd18bf354f6967ea0f824"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:345b0426edd4e18138d6528aed636de7a9ed169b4aaf9d61a8c19e39d26838ca"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:0907f11d019260cdc3f94fbdb23ff9125f6b5d1039b76003b5b0ac9d6a6c9d5b"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-win32.whl", hash = "sha256:ea0d8d539afa5eb2728aa1932a988a9a7af94f18582ffae4bc10b3fbdad0626e"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:329ce159e82018d646c7ac45b01a430369d526569ec08516081727a20e9e4af4"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b97e690a2118911e39b4042088092771b4ae3fc3aa86518f84b8cf6888dbdb41"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:78baa6d91634dfb69ec52a463534bc0df05dbd546209b79a3880a34487f4b84f"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1a2bc9f351a75ef49d664206d51f8e5ede9da246602dc2d2726837620ea034b2"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75832c08354f595c760a804588b9357d34ec00ba1c940c15e31e96d902093770"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0af291f4fe114be0280cdd29d533696a77b5b49cfde5467176ecab32353395c4"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0167ddc8ab6508fe81860a57dd472b2ef4060e8d378f0cc555707126830f2537"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2a75d49014d118e4198bcee5ee0a6f25856b29b12dbf7cd012791f8a6cc5c496"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:363e2f92b0f0174b2f8238240a1a30142e3db7b957a5dd5689b0e75fb717cc78"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ab36c8eb7e454e34e60eb55ca5d241a5d18b2c6244f6827a30e451c42410b5f7"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:4c0907b1928a36d5a998d72d64d8eaa7244989f7aaaf947500d3a800c83a3fd6"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:04432ad9479fa40ec0f387795ddad4437a2b50417c69fa275e212933519ff294"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-win32.whl", hash = "sha256:3bed14e9c89dcb10e8f3a29f9ccac4955aebe93c71ae803af79265c9ca5644c5"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:49402233c892a461407c512a19435d1ce275543138294f7ef013f0b63d5d3765"}, + {file = "charset_normalizer-3.4.1-py3-none-any.whl", hash = "sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85"}, + {file = "charset_normalizer-3.4.1.tar.gz", hash = "sha256:44251f18cd68a75b56585dd00dae26183e102cd5e0f9f1466e6df5da2ed64ea3"}, +] [[package]] name = "click" -version = "7.1.2" +version = "8.1.8" description = "Composable command line interface toolkit" -category = "main" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +python-versions = ">=3.7" +groups = ["main", "dev"] +files = [ + {file = "click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2"}, + {file = "click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} [[package]] name = "click-didyoumean" -version = "0.0.3" -description = "Enable git-like did-you-mean feature in click." -category = "main" -optional = false -python-versions = "*" +version = "0.3.1" +description = "Enables git-like *did-you-mean* feature in click" +optional = false +python-versions = ">=3.6.2" +groups = ["main"] +files = [ + {file = "click_didyoumean-0.3.1-py3-none-any.whl", hash = "sha256:5c4bb6007cfea5f2fd6583a2fb6701a22a41eb98957e63d0fac41c10e7c3117c"}, + {file = "click_didyoumean-0.3.1.tar.gz", hash = "sha256:4f82fdff0dbe64ef8ab2279bd6aa3f6a99c3b28c05aa09cbfc07c9d7fbb5a463"}, +] [package.dependencies] -click = "*" +click = ">=7" [[package]] name = "click-plugins" version = "1.1.1" description = "An extension module for click to enable registering CLI commands via setuptools entry-points." -category = "main" optional = false python-versions = "*" +groups = ["main"] +files = [ + {file = "click-plugins-1.1.1.tar.gz", hash = "sha256:46ab999744a9d831159c3411bb0c79346d94a444df9a3a3742e9ed63645f264b"}, + {file = "click_plugins-1.1.1-py2.py3-none-any.whl", hash = "sha256:5d262006d3222f5057fd81e1623d4443e41dcda5dc815c06b442aa3c02889fc8"}, +] [package.dependencies] click = ">=4.0" [package.extras] -dev = ["pytest (>=3.6)", "pytest-cov", "wheel", "coveralls"] +dev = ["coveralls", "pytest (>=3.6)", "pytest-cov", "wheel"] [[package]] name = "click-repl" -version = "0.2.0" +version = "0.3.0" description = "REPL plugin for Click" -category = "main" optional = false -python-versions = "*" +python-versions = ">=3.6" +groups = ["main"] +files = [ + {file = "click-repl-0.3.0.tar.gz", hash = "sha256:17849c23dba3d667247dc4defe1757fff98694e90fe37474f3feebb69ced26a9"}, + {file = "click_repl-0.3.0-py3-none-any.whl", hash = "sha256:fb7e06deb8da8de86180a33a9da97ac316751c094c6899382da7feeeeb51b812"}, +] [package.dependencies] -click = "*" -prompt-toolkit = "*" -six = "*" +click = ">=7.0" +prompt-toolkit = ">=3.0.36" + +[package.extras] +testing = ["pytest (>=7.2.1)", "pytest-cov (>=4.0.0)", "tox (>=4.4.3)"] [[package]] name = "colorama" -version = "0.4.5" +version = "0.4.6" description = "Cross-platform colored terminal text." -category = "dev" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +groups = ["main", "dev"] +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] +markers = {main = "platform_system == \"Windows\"", dev = "platform_system == \"Windows\" or sys_platform == \"win32\""} [[package]] name = "coverage" -version = "5.5" +version = "7.6.10" description = "Code coverage measurement for Python" -category = "dev" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4" - -[package.dependencies] -toml = {version = "*", optional = true, markers = "extra == \"toml\""} +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "coverage-7.6.10-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5c912978f7fbf47ef99cec50c4401340436d200d41d714c7a4766f377c5b7b78"}, + {file = "coverage-7.6.10-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a01ec4af7dfeb96ff0078ad9a48810bb0cc8abcb0115180c6013a6b26237626c"}, + {file = "coverage-7.6.10-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a3b204c11e2b2d883946fe1d97f89403aa1811df28ce0447439178cc7463448a"}, + {file = "coverage-7.6.10-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:32ee6d8491fcfc82652a37109f69dee9a830e9379166cb73c16d8dc5c2915165"}, + {file = "coverage-7.6.10-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:675cefc4c06e3b4c876b85bfb7c59c5e2218167bbd4da5075cbe3b5790a28988"}, + {file = "coverage-7.6.10-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f4f620668dbc6f5e909a0946a877310fb3d57aea8198bde792aae369ee1c23b5"}, + {file = "coverage-7.6.10-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:4eea95ef275de7abaef630c9b2c002ffbc01918b726a39f5a4353916ec72d2f3"}, + {file = "coverage-7.6.10-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:e2f0280519e42b0a17550072861e0bc8a80a0870de260f9796157d3fca2733c5"}, + {file = "coverage-7.6.10-cp310-cp310-win32.whl", hash = "sha256:bc67deb76bc3717f22e765ab3e07ee9c7a5e26b9019ca19a3b063d9f4b874244"}, + {file = "coverage-7.6.10-cp310-cp310-win_amd64.whl", hash = "sha256:0f460286cb94036455e703c66988851d970fdfd8acc2a1122ab7f4f904e4029e"}, + {file = "coverage-7.6.10-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ea3c8f04b3e4af80e17bab607c386a830ffc2fb88a5484e1df756478cf70d1d3"}, + {file = "coverage-7.6.10-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:507a20fc863cae1d5720797761b42d2d87a04b3e5aeb682ef3b7332e90598f43"}, + {file = "coverage-7.6.10-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d37a84878285b903c0fe21ac8794c6dab58150e9359f1aaebbeddd6412d53132"}, + {file = "coverage-7.6.10-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a534738b47b0de1995f85f582d983d94031dffb48ab86c95bdf88dc62212142f"}, + {file = "coverage-7.6.10-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0d7a2bf79378d8fb8afaa994f91bfd8215134f8631d27eba3e0e2c13546ce994"}, + {file = "coverage-7.6.10-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6713ba4b4ebc330f3def51df1d5d38fad60b66720948112f114968feb52d3f99"}, + {file = "coverage-7.6.10-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:ab32947f481f7e8c763fa2c92fd9f44eeb143e7610c4ca9ecd6a36adab4081bd"}, + {file = "coverage-7.6.10-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7bbd8c8f1b115b892e34ba66a097b915d3871db7ce0e6b9901f462ff3a975377"}, + {file = "coverage-7.6.10-cp311-cp311-win32.whl", hash = "sha256:299e91b274c5c9cdb64cbdf1b3e4a8fe538a7a86acdd08fae52301b28ba297f8"}, + {file = "coverage-7.6.10-cp311-cp311-win_amd64.whl", hash = "sha256:489a01f94aa581dbd961f306e37d75d4ba16104bbfa2b0edb21d29b73be83609"}, + {file = "coverage-7.6.10-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:27c6e64726b307782fa5cbe531e7647aee385a29b2107cd87ba7c0105a5d3853"}, + {file = "coverage-7.6.10-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c56e097019e72c373bae32d946ecf9858fda841e48d82df7e81c63ac25554078"}, + {file = "coverage-7.6.10-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7827a5bc7bdb197b9e066cdf650b2887597ad124dd99777332776f7b7c7d0d0"}, + {file = "coverage-7.6.10-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:204a8238afe787323a8b47d8be4df89772d5c1e4651b9ffa808552bdf20e1d50"}, + {file = "coverage-7.6.10-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e67926f51821b8e9deb6426ff3164870976fe414d033ad90ea75e7ed0c2e5022"}, + {file = "coverage-7.6.10-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e78b270eadb5702938c3dbe9367f878249b5ef9a2fcc5360ac7bff694310d17b"}, + {file = "coverage-7.6.10-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:714f942b9c15c3a7a5fe6876ce30af831c2ad4ce902410b7466b662358c852c0"}, + {file = "coverage-7.6.10-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:abb02e2f5a3187b2ac4cd46b8ced85a0858230b577ccb2c62c81482ca7d18852"}, + {file = "coverage-7.6.10-cp312-cp312-win32.whl", hash = "sha256:55b201b97286cf61f5e76063f9e2a1d8d2972fc2fcfd2c1272530172fd28c359"}, + {file = "coverage-7.6.10-cp312-cp312-win_amd64.whl", hash = "sha256:e4ae5ac5e0d1e4edfc9b4b57b4cbecd5bc266a6915c500f358817a8496739247"}, + {file = "coverage-7.6.10-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:05fca8ba6a87aabdd2d30d0b6c838b50510b56cdcfc604d40760dae7153b73d9"}, + {file = "coverage-7.6.10-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:9e80eba8801c386f72e0712a0453431259c45c3249f0009aff537a517b52942b"}, + {file = "coverage-7.6.10-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a372c89c939d57abe09e08c0578c1d212e7a678135d53aa16eec4430adc5e690"}, + {file = "coverage-7.6.10-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ec22b5e7fe7a0fa8509181c4aac1db48f3dd4d3a566131b313d1efc102892c18"}, + {file = "coverage-7.6.10-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26bcf5c4df41cad1b19c84af71c22cbc9ea9a547fc973f1f2cc9a290002c8b3c"}, + {file = "coverage-7.6.10-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4e4630c26b6084c9b3cb53b15bd488f30ceb50b73c35c5ad7871b869cb7365fd"}, + {file = "coverage-7.6.10-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2396e8116db77789f819d2bc8a7e200232b7a282c66e0ae2d2cd84581a89757e"}, + {file = "coverage-7.6.10-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:79109c70cc0882e4d2d002fe69a24aa504dec0cc17169b3c7f41a1d341a73694"}, + {file = "coverage-7.6.10-cp313-cp313-win32.whl", hash = "sha256:9e1747bab246d6ff2c4f28b4d186b205adced9f7bd9dc362051cc37c4a0c7bd6"}, + {file = "coverage-7.6.10-cp313-cp313-win_amd64.whl", hash = "sha256:254f1a3b1eef5f7ed23ef265eaa89c65c8c5b6b257327c149db1ca9d4a35f25e"}, + {file = "coverage-7.6.10-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:2ccf240eb719789cedbb9fd1338055de2761088202a9a0b73032857e53f612fe"}, + {file = "coverage-7.6.10-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:0c807ca74d5a5e64427c8805de15b9ca140bba13572d6d74e262f46f50b13273"}, + {file = "coverage-7.6.10-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2bcfa46d7709b5a7ffe089075799b902020b62e7ee56ebaed2f4bdac04c508d8"}, + {file = "coverage-7.6.10-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4e0de1e902669dccbf80b0415fb6b43d27edca2fbd48c74da378923b05316098"}, + {file = "coverage-7.6.10-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f7b444c42bbc533aaae6b5a2166fd1a797cdb5eb58ee51a92bee1eb94a1e1cb"}, + {file = "coverage-7.6.10-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:b330368cb99ef72fcd2dc3ed260adf67b31499584dc8a20225e85bfe6f6cfed0"}, + {file = "coverage-7.6.10-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:9a7cfb50515f87f7ed30bc882f68812fd98bc2852957df69f3003d22a2aa0abf"}, + {file = "coverage-7.6.10-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6f93531882a5f68c28090f901b1d135de61b56331bba82028489bc51bdd818d2"}, + {file = "coverage-7.6.10-cp313-cp313t-win32.whl", hash = "sha256:89d76815a26197c858f53c7f6a656686ec392b25991f9e409bcef020cd532312"}, + {file = "coverage-7.6.10-cp313-cp313t-win_amd64.whl", hash = "sha256:54a5f0f43950a36312155dae55c505a76cd7f2b12d26abeebbe7a0b36dbc868d"}, + {file = "coverage-7.6.10-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:656c82b8a0ead8bba147de9a89bda95064874c91a3ed43a00e687f23cc19d53a"}, + {file = "coverage-7.6.10-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ccc2b70a7ed475c68ceb548bf69cec1e27305c1c2606a5eb7c3afff56a1b3b27"}, + {file = "coverage-7.6.10-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5e37dc41d57ceba70956fa2fc5b63c26dba863c946ace9705f8eca99daecdc4"}, + {file = "coverage-7.6.10-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0aa9692b4fdd83a4647eeb7db46410ea1322b5ed94cd1715ef09d1d5922ba87f"}, + {file = "coverage-7.6.10-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa744da1820678b475e4ba3dfd994c321c5b13381d1041fe9c608620e6676e25"}, + {file = "coverage-7.6.10-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:c0b1818063dc9e9d838c09e3a473c1422f517889436dd980f5d721899e66f315"}, + {file = "coverage-7.6.10-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:59af35558ba08b758aec4d56182b222976330ef8d2feacbb93964f576a7e7a90"}, + {file = "coverage-7.6.10-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7ed2f37cfce1ce101e6dffdfd1c99e729dd2ffc291d02d3e2d0af8b53d13840d"}, + {file = "coverage-7.6.10-cp39-cp39-win32.whl", hash = "sha256:4bcc276261505d82f0ad426870c3b12cb177752834a633e737ec5ee79bbdff18"}, + {file = "coverage-7.6.10-cp39-cp39-win_amd64.whl", hash = "sha256:457574f4599d2b00f7f637a0700a6422243b3565509457b2dbd3f50703e11f59"}, + {file = "coverage-7.6.10-pp39.pp310-none-any.whl", hash = "sha256:fd34e7b3405f0cc7ab03d54a334c17a9e802897580d964bd8c2001f4b9fd488f"}, + {file = "coverage-7.6.10.tar.gz", hash = "sha256:7fb105327c8f8f0682e29843e2ff96af9dcbe5bab8eeb4b398c6a33a16d80a23"}, +] [package.extras] -toml = ["toml"] +toml = ["tomli"] [[package]] -name = "dataclasses" -version = "0.8" -description = "A backport of the dataclasses module for Python 3.6" -category = "dev" +name = "cron-descriptor" +version = "1.4.5" +description = "A Python library that converts cron expressions into human readable strings." optional = false -python-versions = ">=3.6, <3.7" +python-versions = "*" +groups = ["main"] +files = [ + {file = "cron_descriptor-1.4.5-py3-none-any.whl", hash = "sha256:736b3ae9d1a99bc3dbfc5b55b5e6e7c12031e7ba5de716625772f8b02dcd6013"}, + {file = "cron_descriptor-1.4.5.tar.gz", hash = "sha256:f51ce4ffc1d1f2816939add8524f206c376a42c87a5fca3091ce26725b3b1bca"}, +] + +[package.extras] +dev = ["polib"] [[package]] name = "django" -version = "3.2.25" -description = "A high-level Python Web framework that encourages rapid development and clean, pragmatic design." -category = "main" -optional = false -python-versions = ">=3.6" +version = "4.2.17" +description = "A high-level Python web framework that encourages rapid development and clean, pragmatic design." +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "Django-4.2.17-py3-none-any.whl", hash = "sha256:3a93350214ba25f178d4045c0786c61573e7dbfa3c509b3551374f1e11ba8de0"}, + {file = "Django-4.2.17.tar.gz", hash = "sha256:6b56d834cc94c8b21a8f4e775064896be3b4a4ca387f2612d4406a5927cd2fdc"}, +] [package.dependencies] -asgiref = ">=3.3.2,<4" -pytz = "*" -sqlparse = ">=0.2.2" +asgiref = ">=3.6.0,<4" +sqlparse = ">=0.3.1" +tzdata = {version = "*", markers = "sys_platform == \"win32\""} [package.extras] argon2 = ["argon2-cffi (>=19.1.0)"] @@ -316,230 +531,390 @@ bcrypt = ["bcrypt"] [[package]] name = "django-celery-beat" -version = "2.2.1" +version = "2.7.0" description = "Database-backed Periodic Tasks." -category = "main" optional = false -python-versions = "*" +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "django_celery_beat-2.7.0-py3-none-any.whl", hash = "sha256:851c680d8fbf608ca5fecd5836622beea89fa017bc2b3f94a5b8c648c32d84b1"}, + {file = "django_celery_beat-2.7.0.tar.gz", hash = "sha256:8482034925e09b698c05ad61c36ed2a8dbc436724a3fe119215193a4ca6dc967"}, +] [package.dependencies] -celery = ">=5.0,<6.0" -Django = ">=2.2,<4.0" -django-timezone-field = ">=4.1.0,<5.0" +celery = ">=5.2.3,<6.0" +cron-descriptor = ">=1.2.32" +Django = ">=2.2,<5.2" +django-timezone-field = ">=5.0" python-crontab = ">=2.3.4" +tzdata = "*" [[package]] name = "django-timezone-field" -version = "4.2.3" -description = "A Django app providing database and form fields for pytz timezone objects." -category = "main" -optional = false -python-versions = ">=3.5" +version = "5.1" +description = "A Django app providing DB, form, and REST framework fields for zoneinfo and pytz timezone objects." +optional = false +python-versions = ">=3.7,<4.0" +groups = ["main"] +files = [ + {file = "django_timezone_field-5.1-py3-none-any.whl", hash = "sha256:16ca9955a4e16064e32168b1a0d1cdb2839679c6cb56856c1f49f506e2ca4281"}, + {file = "django_timezone_field-5.1.tar.gz", hash = "sha256:73fc49519273cd5da1c7f16abc04a4bcad87b00cc02968d0d384c0fecf9a8a86"}, +] [package.dependencies] -django = ">=2.2" +Django = ">=2.2,<3.0.dev0 || >=3.2.dev0,<5.0" pytz = "*" -[package.extras] -rest_framework = ["djangorestframework (>=3.0.0)"] - [[package]] name = "factory-boy" -version = "2.11.1" +version = "3.3.1" description = "A versatile test fixtures replacement based on thoughtbot's factory_bot for Ruby." -category = "dev" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "factory_boy-3.3.1-py2.py3-none-any.whl", hash = "sha256:7b1113c49736e1e9995bc2a18f4dbf2c52cf0f841103517010b1d825712ce3ca"}, + {file = "factory_boy-3.3.1.tar.gz", hash = "sha256:8317aa5289cdfc45f9cae570feb07a6177316c82e34d14df3c2e1f22f26abef0"}, +] [package.dependencies] Faker = ">=0.7.0" +[package.extras] +dev = ["Django", "Pillow", "SQLAlchemy", "coverage", "flake8", "isort", "mongoengine", "mongomock", "mypy", "tox", "wheel (>=0.32.0)", "zest.releaser[recommended]"] +doc = ["Sphinx", "sphinx-rtd-theme", "sphinxcontrib-spelling"] + [[package]] name = "faker" -version = "14.2.1" +version = "33.3.1" description = "Faker is a Python package that generates fake data for you." -category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "Faker-33.3.1-py3-none-any.whl", hash = "sha256:ac4cf2f967ce02c898efa50651c43180bd658a7707cfd676fcc5410ad1482c03"}, + {file = "faker-33.3.1.tar.gz", hash = "sha256:49dde3b06a5602177bc2ad013149b6f60a290b7154539180d37b6f876ae79b20"}, +] [package.dependencies] python-dateutil = ">=2.4" -typing-extensions = {version = ">=3.7.4.3", markers = "python_version < \"3.8\""} +typing-extensions = "*" [[package]] name = "idna" -version = "3.7" +version = "3.10" description = "Internationalized Domain Names in Applications (IDNA)" -category = "main" -optional = false -python-versions = ">=3.5" - -[[package]] -name = "importlib-metadata" -version = "4.8.3" -description = "Read metadata from Python packages" -category = "main" optional = false python-versions = ">=3.6" - -[package.dependencies] -typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""} -zipp = ">=0.5" +groups = ["main"] +files = [ + {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"}, + {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"}, +] [package.extras] -docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] -perf = ["ipython"] -testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"] +all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"] [[package]] name = "iniconfig" -version = "1.1.1" -description = "iniconfig: brain-dead simple config-ini parsing" -category = "dev" -optional = false -python-versions = "*" +version = "2.0.0" +description = "brain-dead simple config-ini parsing" +optional = false +python-versions = ">=3.7" +groups = ["dev"] +files = [ + {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, + {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, +] [[package]] name = "isodate" version = "0.6.1" description = "An ISO 8601 date/time/duration parser and formatter" -category = "main" optional = false python-versions = "*" +groups = ["main"] +files = [ + {file = "isodate-0.6.1-py2.py3-none-any.whl", hash = "sha256:0751eece944162659049d35f4f549ed815792b38793f07cf73381c1c87cbed96"}, + {file = "isodate-0.6.1.tar.gz", hash = "sha256:48c5881de7e8b0a0d648cb024c8062dc84e7b840ed81e864c7614fd3c127bde9"}, +] [package.dependencies] six = "*" [[package]] name = "jmespath" -version = "0.10.0" +version = "1.0.1" description = "JSON Matching Expressions" -category = "main" optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "jmespath-1.0.1-py3-none-any.whl", hash = "sha256:02e2e4cc71b5bcab88332eebf907519190dd9e6e82107fa7f83b1003a6252980"}, + {file = "jmespath-1.0.1.tar.gz", hash = "sha256:90261b206d6defd58fdd5e85f478bf633a2901798906be2ad389150c5c60edbe"}, +] [[package]] name = "jsonschema" -version = "2.6.0" +version = "4.23.0" description = "An implementation of JSON Schema validation for Python" -category = "main" optional = false -python-versions = "*" +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "jsonschema-4.23.0-py3-none-any.whl", hash = "sha256:fbadb6f8b144a8f8cf9f0b89ba94501d143e50411a1278633f56a7acf7fd5566"}, + {file = "jsonschema-4.23.0.tar.gz", hash = "sha256:d71497fef26351a33265337fa77ffeb82423f3ea21283cd9467bb03999266bc4"}, +] + +[package.dependencies] +attrs = ">=22.2.0" +jsonschema-specifications = ">=2023.03.6" +referencing = ">=0.28.4" +rpds-py = ">=0.7.1" [package.extras] -format = ["rfc3987", "strict-rfc3339", "webcolors"] +format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"] +format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=24.6.0)"] + +[[package]] +name = "jsonschema-specifications" +version = "2024.10.1" +description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "jsonschema_specifications-2024.10.1-py3-none-any.whl", hash = "sha256:a09a0680616357d9a0ecf05c12ad234479f549239d0f5b55f3deea67475da9bf"}, + {file = "jsonschema_specifications-2024.10.1.tar.gz", hash = "sha256:0f38b83639958ce1152d02a7f062902c41c8fd20d558b0c34344292d417ae272"}, +] + +[package.dependencies] +referencing = ">=0.31.0" [[package]] name = "kombu" -version = "5.1.0" +version = "5.4.2" description = "Messaging library for Python." -category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "kombu-5.4.2-py3-none-any.whl", hash = "sha256:14212f5ccf022fc0a70453bb025a1dcc32782a588c49ea866884047d66e14763"}, + {file = "kombu-5.4.2.tar.gz", hash = "sha256:eef572dd2fd9fc614b37580e3caeafdd5af46c1eff31e7fba89138cdb406f2cf"}, +] [package.dependencies] -amqp = ">=5.0.6,<6.0.0" -cached-property = {version = "*", markers = "python_version < \"3.8\""} -importlib-metadata = {version = ">=0.18", markers = "python_version < \"3.8\""} -vine = "*" +amqp = ">=5.1.1,<6.0.0" +tzdata = {version = "*", markers = "python_version >= \"3.9\""} +vine = "5.1.0" [package.extras] -azureservicebus = ["azure-servicebus (>=7.0.0)"] -azurestoragequeues = ["azure-storage-queue"] -consul = ["python-consul (>=0.6.0)"] -librabbitmq = ["librabbitmq (>=1.5.2)"] -mongodb = ["pymongo (>=3.3.0)"] -msgpack = ["msgpack"] -pyro = ["pyro4"] +azureservicebus = ["azure-servicebus (>=7.10.0)"] +azurestoragequeues = ["azure-identity (>=1.12.0)", "azure-storage-queue (>=12.6.0)"] +confluentkafka = ["confluent-kafka (>=2.2.0)"] +consul = ["python-consul2 (==0.1.5)"] +librabbitmq = ["librabbitmq (>=2.0.0)"] +mongodb = ["pymongo (>=4.1.1)"] +msgpack = ["msgpack (==1.1.0)"] +pyro = ["pyro4 (==4.82)"] qpid = ["qpid-python (>=0.26)", "qpid-tools (>=0.26)"] -redis = ["redis (>=3.3.11)"] +redis = ["redis (>=4.5.2,!=4.5.5,!=5.0.2)"] slmq = ["softlayer-messaging (>=1.0.3)"] -sqlalchemy = ["sqlalchemy"] -sqs = ["boto3 (>=1.4.4)", "pycurl (==7.43.0.2)", "urllib3 (<1.26)"] +sqlalchemy = ["sqlalchemy (>=1.4.48,<2.1)"] +sqs = ["boto3 (>=1.26.143)", "pycurl (>=7.43.0.5)", "urllib3 (>=1.26.16)"] yaml = ["PyYAML (>=3.10)"] -zookeeper = ["kazoo (>=1.3.1)"] +zookeeper = ["kazoo (>=2.8.0)"] [[package]] name = "mako" -version = "1.1.6" -description = "A super-fast templating language that borrows the best ideas from the existing templating languages." -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +version = "1.3.8" +description = "A super-fast templating language that borrows the best ideas from the existing templating languages." +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "Mako-1.3.8-py3-none-any.whl", hash = "sha256:42f48953c7eb91332040ff567eb7eea69b22e7a4affbc5ba8e845e8f730f6627"}, + {file = "mako-1.3.8.tar.gz", hash = "sha256:577b97e414580d3e088d47c2dbbe9594aa7a5146ed2875d4dfa9075af2dd3cc8"}, +] [package.dependencies] MarkupSafe = ">=0.9.2" [package.extras] -babel = ["babel"] +babel = ["Babel"] lingua = ["lingua"] +testing = ["pytest"] [[package]] name = "markupsafe" -version = "2.0.1" +version = "3.0.2" description = "Safely add untrusted strings to HTML/XML markup." -category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-win32.whl", hash = "sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-win32.whl", hash = "sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:eaa0a10b7f72326f1372a713e73c3f739b524b3af41feb43e4921cb529f5929a"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:48032821bbdf20f5799ff537c7ac3d1fba0ba032cfc06194faffa8cda8b560ff"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a9d3f5f0901fdec14d8d2f66ef7d035f2157240a433441719ac9a3fba440b13"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88b49a3b9ff31e19998750c38e030fc7bb937398b1f78cfa599aaef92d693144"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cfad01eed2c2e0c01fd0ecd2ef42c492f7f93902e39a42fc9ee1692961443a29"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:1225beacc926f536dc82e45f8a4d68502949dc67eea90eab715dea3a21c1b5f0"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:3169b1eefae027567d1ce6ee7cae382c57fe26e82775f460f0b2778beaad66c0"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:eb7972a85c54febfb25b5c4b4f3af4dcc731994c7da0d8a0b4a6eb0640e1d178"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-win32.whl", hash = "sha256:8c4e8c3ce11e1f92f6536ff07154f9d49677ebaaafc32db9db4620bc11ed480f"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:6e296a513ca3d94054c2c881cc913116e90fd030ad1c656b3869762b754f5f8a"}, + {file = "markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0"}, +] [[package]] name = "mock" -version = "4.0.3" +version = "5.1.0" description = "Rolling backport of unittest.mock for all Pythons" -category = "dev" optional = false python-versions = ">=3.6" +groups = ["dev"] +files = [ + {file = "mock-5.1.0-py3-none-any.whl", hash = "sha256:18c694e5ae8a208cdb3d2c20a993ca1a7b0efa258c247a1e565150f477f83744"}, + {file = "mock-5.1.0.tar.gz", hash = "sha256:5e96aad5ccda4718e0a229ed94b2024df75cc2d55575ba5762d31f5767b8767d"}, +] [package.extras] -build = ["twine", "wheel", "blurb"] +build = ["blurb", "twine", "wheel"] docs = ["sphinx"] -test = ["pytest (<5.4)", "pytest-cov"] +test = ["pytest", "pytest-cov"] [[package]] name = "mypy-extensions" version = "1.0.0" description = "Type system extensions for programs checked with the mypy type checker." -category = "dev" optional = false python-versions = ">=3.5" +groups = ["dev"] +files = [ + {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, + {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, +] [[package]] name = "mysqlclient" -version = "2.0.3" +version = "2.2.7" description = "Python interface to MySQL" -category = "dev" optional = false -python-versions = ">=3.5" +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "mysqlclient-2.2.7-cp310-cp310-win_amd64.whl", hash = "sha256:2e3c11f7625029d7276ca506f8960a7fd3c5a0a0122c9e7404e6a8fe961b3d22"}, + {file = "mysqlclient-2.2.7-cp311-cp311-win_amd64.whl", hash = "sha256:a22d99d26baf4af68ebef430e3131bb5a9b722b79a9fcfac6d9bbf8a88800687"}, + {file = "mysqlclient-2.2.7-cp312-cp312-win_amd64.whl", hash = "sha256:4b4c0200890837fc64014cc938ef2273252ab544c1b12a6c1d674c23943f3f2e"}, + {file = "mysqlclient-2.2.7-cp313-cp313-win_amd64.whl", hash = "sha256:201a6faa301011dd07bca6b651fe5aaa546d7c9a5426835a06c3172e1056a3c5"}, + {file = "mysqlclient-2.2.7-cp39-cp39-win_amd64.whl", hash = "sha256:199dab53a224357dd0cb4d78ca0e54018f9cee9bf9ec68d72db50e0a23569076"}, + {file = "mysqlclient-2.2.7-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:92af368ed9c9144737af569c86d3b6c74a012a6f6b792eb868384787b52bb585"}, + {file = "mysqlclient-2.2.7-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:977e35244fe6ef44124e9a1c2d1554728a7b76695598e4b92b37dc2130503069"}, + {file = "mysqlclient-2.2.7.tar.gz", hash = "sha256:24ae22b59416d5fcce7e99c9d37548350b4565baac82f95e149cac6ce4163845"}, +] [[package]] name = "packaging" -version = "21.3" +version = "24.2" description = "Core utilities for Python packages" -category = "main" optional = false -python-versions = ">=3.6" - -[package.dependencies] -pyparsing = ">=2.0.2,<3.0.5 || >3.0.5" +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759"}, + {file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"}, +] [[package]] name = "pathspec" -version = "0.9.0" +version = "0.12.1" description = "Utility library for gitignore style pattern matching of file paths." -category = "dev" optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"}, + {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, +] + +[[package]] +name = "platformdirs" +version = "4.3.6" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "platformdirs-4.3.6-py3-none-any.whl", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb"}, + {file = "platformdirs-4.3.6.tar.gz", hash = "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907"}, +] + +[package.extras] +docs = ["furo (>=2024.8.6)", "proselint (>=0.14)", "sphinx (>=8.0.2)", "sphinx-autodoc-typehints (>=2.4)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=8.3.2)", "pytest-cov (>=5)", "pytest-mock (>=3.14)"] +type = ["mypy (>=1.11.2)"] [[package]] name = "pluggy" -version = "1.0.0" +version = "1.5.0" description = "plugin and hook calling mechanisms for python" -category = "dev" optional = false -python-versions = ">=3.6" - -[package.dependencies] -importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, + {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, +] [package.extras] dev = ["pre-commit", "tox"] @@ -547,86 +922,100 @@ testing = ["pytest", "pytest-benchmark"] [[package]] name = "prometheus-client" -version = "0.9.0" +version = "0.20.0" description = "Python client for the Prometheus monitoring system." -category = "main" optional = false -python-versions = "*" +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "prometheus_client-0.20.0-py3-none-any.whl", hash = "sha256:cde524a85bce83ca359cc837f28b8c0db5cac7aa653a588fd7e84ba061c329e7"}, + {file = "prometheus_client-0.20.0.tar.gz", hash = "sha256:287629d00b147a32dcb2be0b9df905da599b2d82f80377083ec8463309a4bb89"}, +] [package.extras] twisted = ["twisted"] [[package]] name = "prompt-toolkit" -version = "3.0.3" +version = "3.0.48" description = "Library for building powerful interactive command lines in Python" -category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7.0" +groups = ["main"] +files = [ + {file = "prompt_toolkit-3.0.48-py3-none-any.whl", hash = "sha256:f49a827f90062e411f1ce1f854f2aedb3c23353244f8108b89283587397ac10e"}, + {file = "prompt_toolkit-3.0.48.tar.gz", hash = "sha256:d6623ab0477a80df74e646bdbc93621143f5caf104206aa29294d53de1a03d90"}, +] [package.dependencies] wcwidth = "*" -[[package]] -name = "py" -version = "1.11.0" -description = "library with cross-python path, ini-parsing, io, code, log facilities" -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" - [[package]] name = "pyparsing" -version = "2.4.7" -description = "Python parsing module" -category = "main" -optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +version = "3.2.1" +description = "pyparsing module - Classes and methods to define and execute parsing grammars" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "pyparsing-3.2.1-py3-none-any.whl", hash = "sha256:506ff4f4386c4cec0590ec19e6302d3aedb992fdc02c761e90416f158dacf8e1"}, + {file = "pyparsing-3.2.1.tar.gz", hash = "sha256:61980854fd66de3a90028d679a954d5f2623e83144b5afe5ee86f43d762e5f0a"}, +] + +[package.extras] +diagrams = ["jinja2", "railroad-diagrams"] [[package]] name = "pytest" -version = "6.2.5" +version = "7.4.4" description = "pytest: simple powerful testing with Python" -category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" +groups = ["dev"] +files = [ + {file = "pytest-7.4.4-py3-none-any.whl", hash = "sha256:b090cdf5ed60bf4c45261be03239c2c1c22df034fbffe691abe93cd80cea01d8"}, + {file = "pytest-7.4.4.tar.gz", hash = "sha256:2cf0005922c6ace4a3e2ec8b4080eb0d9753fdc93107415332f50ce9e7994280"}, +] [package.dependencies] -atomicwrites = {version = ">=1.0", markers = "sys_platform == \"win32\""} -attrs = ">=19.2.0" colorama = {version = "*", markers = "sys_platform == \"win32\""} -importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} iniconfig = "*" packaging = "*" pluggy = ">=0.12,<2.0" -py = ">=1.8.2" -toml = "*" [package.extras] -testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "requests", "xmlschema"] +testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] [[package]] name = "pytest-django" -version = "4.1.0" +version = "4.5.2" description = "A Django plugin for pytest." -category = "dev" optional = false python-versions = ">=3.5" +groups = ["dev"] +files = [ + {file = "pytest-django-4.5.2.tar.gz", hash = "sha256:d9076f759bb7c36939dbdd5ae6633c18edfc2902d1a69fdbefd2426b970ce6c2"}, + {file = "pytest_django-4.5.2-py3-none-any.whl", hash = "sha256:c60834861933773109334fe5a53e83d1ef4828f2203a1d6a0fa9972f4f75ab3e"}, +] [package.dependencies] pytest = ">=5.4.0" [package.extras] docs = ["sphinx", "sphinx-rtd-theme"] -testing = ["django", "django-configurations (>=2.0)"] +testing = ["Django", "django-configurations (>=2.0)"] [[package]] name = "python-crontab" -version = "3.0.0" +version = "3.2.0" description = "Python Crontab API" -category = "main" optional = false python-versions = "*" +groups = ["main"] +files = [ + {file = "python_crontab-3.2.0-py3-none-any.whl", hash = "sha256:82cb9b6a312d41ff66fd3caf3eed7115c28c195bfb50711bc2b4b9592feb9fe5"}, + {file = "python_crontab-3.2.0.tar.gz", hash = "sha256:40067d1dd39ade3460b2ad8557c7651514cd3851deffff61c5c60e1227c5c36b"}, +] [package.dependencies] python-dateutil = "*" @@ -639,317 +1028,415 @@ cron-schedule = ["croniter"] name = "python-dateutil" version = "2.9.0.post0" description = "Extensions to the standard Python datetime module" -category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +groups = ["main", "dev"] +files = [ + {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, + {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, +] [package.dependencies] six = ">=1.5" [[package]] name = "pytz" -version = "2019.3" +version = "2024.2" description = "World timezone definitions, modern and historical" -category = "main" optional = false python-versions = "*" +groups = ["main"] +files = [ + {file = "pytz-2024.2-py2.py3-none-any.whl", hash = "sha256:31c7c1817eb7fae7ca4b8c7ee50c72f93aa2dd863de768e1ef4245d426aa0725"}, + {file = "pytz-2024.2.tar.gz", hash = "sha256:2aa355083c50a0f93fa581709deac0c9ad65cca8a9e9beac660adcbd493c798a"}, +] [[package]] name = "redis" -version = "4.3.6" +version = "5.2.1" description = "Python client for Redis database and key-value store" -category = "main" optional = false -python-versions = ">=3.6" - -[package.dependencies] -async-timeout = ">=4.0.2" -importlib-metadata = {version = ">=1.0", markers = "python_version < \"3.8\""} -packaging = ">=20.4" -typing-extensions = {version = "*", markers = "python_version < \"3.8\""} +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "redis-5.2.1-py3-none-any.whl", hash = "sha256:ee7e1056b9aea0f04c6c2ed59452947f34c4940ee025f5dd83e6a6418b6989e4"}, + {file = "redis-5.2.1.tar.gz", hash = "sha256:16f2e22dff21d5125e8481515e386711a34cbec50f0e44413dd7d9c060a54e0f"}, +] [package.extras] -hiredis = ["hiredis (>=1.0.0)"] -ocsp = ["cryptography (>=36.0.1)", "pyopenssl (==20.0.1)", "requests (>=2.26.0)"] +hiredis = ["hiredis (>=3.0.0)"] +ocsp = ["cryptography (>=36.0.1)", "pyopenssl (==23.2.1)", "requests (>=2.31.0)"] [[package]] -name = "regex" -version = "2023.8.8" -description = "Alternative regular expression module, to replace re." -category = "dev" +name = "referencing" +version = "0.35.1" +description = "JSON Referencing + Python" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "referencing-0.35.1-py3-none-any.whl", hash = "sha256:eda6d3234d62814d1c64e305c1331c9a3a6132da475ab6382eaa997b21ee75de"}, + {file = "referencing-0.35.1.tar.gz", hash = "sha256:25b42124a6c8b632a425174f24087783efb348a6f1e0008e63cd4466fedf703c"}, +] + +[package.dependencies] +attrs = ">=22.2.0" +rpds-py = ">=0.7.0" [[package]] name = "requests" -version = "2.27.1" +version = "2.32.3" description = "Python HTTP for Humans." -category = "main" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"}, + {file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"}, +] [package.dependencies] certifi = ">=2017.4.17" -charset-normalizer = {version = ">=2.0.0,<2.1.0", markers = "python_version >= \"3\""} -idna = {version = ">=2.5,<4", markers = "python_version >= \"3\""} -urllib3 = ">=1.21.1,<1.27" +charset-normalizer = ">=2,<4" +idna = ">=2.5,<4" +urllib3 = ">=1.21.1,<3" [package.extras] -socks = ["PySocks (>=1.5.6,!=1.5.7)", "win-inet-pton"] -use_chardet_on_py3 = ["chardet (>=3.0.2,<5)"] +socks = ["PySocks (>=1.5.6,!=1.5.7)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] + +[[package]] +name = "rpds-py" +version = "0.22.3" +description = "Python bindings to Rust's persistent data structures (rpds)" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "rpds_py-0.22.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:6c7b99ca52c2c1752b544e310101b98a659b720b21db00e65edca34483259967"}, + {file = "rpds_py-0.22.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:be2eb3f2495ba669d2a985f9b426c1797b7d48d6963899276d22f23e33d47e37"}, + {file = "rpds_py-0.22.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:70eb60b3ae9245ddea20f8a4190bd79c705a22f8028aaf8bbdebe4716c3fab24"}, + {file = "rpds_py-0.22.3-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4041711832360a9b75cfb11b25a6a97c8fb49c07b8bd43d0d02b45d0b499a4ff"}, + {file = "rpds_py-0.22.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:64607d4cbf1b7e3c3c8a14948b99345eda0e161b852e122c6bb71aab6d1d798c"}, + {file = "rpds_py-0.22.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e69b0a0e2537f26d73b4e43ad7bc8c8efb39621639b4434b76a3de50c6966e"}, + {file = "rpds_py-0.22.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc27863442d388870c1809a87507727b799c8460573cfbb6dc0eeaef5a11b5ec"}, + {file = "rpds_py-0.22.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e79dd39f1e8c3504be0607e5fc6e86bb60fe3584bec8b782578c3b0fde8d932c"}, + {file = "rpds_py-0.22.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e0fa2d4ec53dc51cf7d3bb22e0aa0143966119f42a0c3e4998293a3dd2856b09"}, + {file = "rpds_py-0.22.3-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:fda7cb070f442bf80b642cd56483b5548e43d366fe3f39b98e67cce780cded00"}, + {file = "rpds_py-0.22.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:cff63a0272fcd259dcc3be1657b07c929c466b067ceb1c20060e8d10af56f5bf"}, + {file = "rpds_py-0.22.3-cp310-cp310-win32.whl", hash = "sha256:9bd7228827ec7bb817089e2eb301d907c0d9827a9e558f22f762bb690b131652"}, + {file = "rpds_py-0.22.3-cp310-cp310-win_amd64.whl", hash = "sha256:9beeb01d8c190d7581a4d59522cd3d4b6887040dcfc744af99aa59fef3e041a8"}, + {file = "rpds_py-0.22.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d20cfb4e099748ea39e6f7b16c91ab057989712d31761d3300d43134e26e165f"}, + {file = "rpds_py-0.22.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:68049202f67380ff9aa52f12e92b1c30115f32e6895cd7198fa2a7961621fc5a"}, + {file = "rpds_py-0.22.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb4f868f712b2dd4bcc538b0a0c1f63a2b1d584c925e69a224d759e7070a12d5"}, + {file = "rpds_py-0.22.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bc51abd01f08117283c5ebf64844a35144a0843ff7b2983e0648e4d3d9f10dbb"}, + {file = "rpds_py-0.22.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0f3cec041684de9a4684b1572fe28c7267410e02450f4561700ca5a3bc6695a2"}, + {file = "rpds_py-0.22.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7ef9d9da710be50ff6809fed8f1963fecdfecc8b86656cadfca3bc24289414b0"}, + {file = "rpds_py-0.22.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59f4a79c19232a5774aee369a0c296712ad0e77f24e62cad53160312b1c1eaa1"}, + {file = "rpds_py-0.22.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1a60bce91f81ddaac922a40bbb571a12c1070cb20ebd6d49c48e0b101d87300d"}, + {file = "rpds_py-0.22.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e89391e6d60251560f0a8f4bd32137b077a80d9b7dbe6d5cab1cd80d2746f648"}, + {file = "rpds_py-0.22.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e3fb866d9932a3d7d0c82da76d816996d1667c44891bd861a0f97ba27e84fc74"}, + {file = "rpds_py-0.22.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1352ae4f7c717ae8cba93421a63373e582d19d55d2ee2cbb184344c82d2ae55a"}, + {file = "rpds_py-0.22.3-cp311-cp311-win32.whl", hash = "sha256:b0b4136a252cadfa1adb705bb81524eee47d9f6aab4f2ee4fa1e9d3cd4581f64"}, + {file = "rpds_py-0.22.3-cp311-cp311-win_amd64.whl", hash = "sha256:8bd7c8cfc0b8247c8799080fbff54e0b9619e17cdfeb0478ba7295d43f635d7c"}, + {file = "rpds_py-0.22.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:27e98004595899949bd7a7b34e91fa7c44d7a97c40fcaf1d874168bb652ec67e"}, + {file = "rpds_py-0.22.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1978d0021e943aae58b9b0b196fb4895a25cc53d3956b8e35e0b7682eefb6d56"}, + {file = "rpds_py-0.22.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:655ca44a831ecb238d124e0402d98f6212ac527a0ba6c55ca26f616604e60a45"}, + {file = "rpds_py-0.22.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:feea821ee2a9273771bae61194004ee2fc33f8ec7db08117ef9147d4bbcbca8e"}, + {file = "rpds_py-0.22.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:22bebe05a9ffc70ebfa127efbc429bc26ec9e9b4ee4d15a740033efda515cf3d"}, + {file = "rpds_py-0.22.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3af6e48651c4e0d2d166dc1b033b7042ea3f871504b6805ba5f4fe31581d8d38"}, + {file = "rpds_py-0.22.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e67ba3c290821343c192f7eae1d8fd5999ca2dc99994114643e2f2d3e6138b15"}, + {file = "rpds_py-0.22.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:02fbb9c288ae08bcb34fb41d516d5eeb0455ac35b5512d03181d755d80810059"}, + {file = "rpds_py-0.22.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f56a6b404f74ab372da986d240e2e002769a7d7102cc73eb238a4f72eec5284e"}, + {file = "rpds_py-0.22.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0a0461200769ab3b9ab7e513f6013b7a97fdeee41c29b9db343f3c5a8e2b9e61"}, + {file = "rpds_py-0.22.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8633e471c6207a039eff6aa116e35f69f3156b3989ea3e2d755f7bc41754a4a7"}, + {file = "rpds_py-0.22.3-cp312-cp312-win32.whl", hash = "sha256:593eba61ba0c3baae5bc9be2f5232430453fb4432048de28399ca7376de9c627"}, + {file = "rpds_py-0.22.3-cp312-cp312-win_amd64.whl", hash = "sha256:d115bffdd417c6d806ea9069237a4ae02f513b778e3789a359bc5856e0404cc4"}, + {file = "rpds_py-0.22.3-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:ea7433ce7e4bfc3a85654aeb6747babe3f66eaf9a1d0c1e7a4435bbdf27fea84"}, + {file = "rpds_py-0.22.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6dd9412824c4ce1aca56c47b0991e65bebb7ac3f4edccfd3f156150c96a7bf25"}, + {file = "rpds_py-0.22.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20070c65396f7373f5df4005862fa162db5d25d56150bddd0b3e8214e8ef45b4"}, + {file = "rpds_py-0.22.3-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0b09865a9abc0ddff4e50b5ef65467cd94176bf1e0004184eb915cbc10fc05c5"}, + {file = "rpds_py-0.22.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3453e8d41fe5f17d1f8e9c383a7473cd46a63661628ec58e07777c2fff7196dc"}, + {file = "rpds_py-0.22.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f5d36399a1b96e1a5fdc91e0522544580dbebeb1f77f27b2b0ab25559e103b8b"}, + {file = "rpds_py-0.22.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:009de23c9c9ee54bf11303a966edf4d9087cd43a6003672e6aa7def643d06518"}, + {file = "rpds_py-0.22.3-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1aef18820ef3e4587ebe8b3bc9ba6e55892a6d7b93bac6d29d9f631a3b4befbd"}, + {file = "rpds_py-0.22.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f60bd8423be1d9d833f230fdbccf8f57af322d96bcad6599e5a771b151398eb2"}, + {file = "rpds_py-0.22.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:62d9cfcf4948683a18a9aff0ab7e1474d407b7bab2ca03116109f8464698ab16"}, + {file = "rpds_py-0.22.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9253fc214112405f0afa7db88739294295f0e08466987f1d70e29930262b4c8f"}, + {file = "rpds_py-0.22.3-cp313-cp313-win32.whl", hash = "sha256:fb0ba113b4983beac1a2eb16faffd76cb41e176bf58c4afe3e14b9c681f702de"}, + {file = "rpds_py-0.22.3-cp313-cp313-win_amd64.whl", hash = "sha256:c58e2339def52ef6b71b8f36d13c3688ea23fa093353f3a4fee2556e62086ec9"}, + {file = "rpds_py-0.22.3-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:f82a116a1d03628a8ace4859556fb39fd1424c933341a08ea3ed6de1edb0283b"}, + {file = "rpds_py-0.22.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3dfcbc95bd7992b16f3f7ba05af8a64ca694331bd24f9157b49dadeeb287493b"}, + {file = "rpds_py-0.22.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:59259dc58e57b10e7e18ce02c311804c10c5a793e6568f8af4dead03264584d1"}, + {file = "rpds_py-0.22.3-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5725dd9cc02068996d4438d397e255dcb1df776b7ceea3b9cb972bdb11260a83"}, + {file = "rpds_py-0.22.3-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:99b37292234e61325e7a5bb9689e55e48c3f5f603af88b1642666277a81f1fbd"}, + {file = "rpds_py-0.22.3-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:27b1d3b3915a99208fee9ab092b8184c420f2905b7d7feb4aeb5e4a9c509b8a1"}, + {file = "rpds_py-0.22.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f612463ac081803f243ff13cccc648578e2279295048f2a8d5eb430af2bae6e3"}, + {file = "rpds_py-0.22.3-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f73d3fef726b3243a811121de45193c0ca75f6407fe66f3f4e183c983573e130"}, + {file = "rpds_py-0.22.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:3f21f0495edea7fdbaaa87e633a8689cd285f8f4af5c869f27bc8074638ad69c"}, + {file = "rpds_py-0.22.3-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:1e9663daaf7a63ceccbbb8e3808fe90415b0757e2abddbfc2e06c857bf8c5e2b"}, + {file = "rpds_py-0.22.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:a76e42402542b1fae59798fab64432b2d015ab9d0c8c47ba7addddbaf7952333"}, + {file = "rpds_py-0.22.3-cp313-cp313t-win32.whl", hash = "sha256:69803198097467ee7282750acb507fba35ca22cc3b85f16cf45fb01cb9097730"}, + {file = "rpds_py-0.22.3-cp313-cp313t-win_amd64.whl", hash = "sha256:f5cf2a0c2bdadf3791b5c205d55a37a54025c6e18a71c71f82bb536cf9a454bf"}, + {file = "rpds_py-0.22.3-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:378753b4a4de2a7b34063d6f95ae81bfa7b15f2c1a04a9518e8644e81807ebea"}, + {file = "rpds_py-0.22.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3445e07bf2e8ecfeef6ef67ac83de670358abf2996916039b16a218e3d95e97e"}, + {file = "rpds_py-0.22.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b2513ba235829860b13faa931f3b6846548021846ac808455301c23a101689d"}, + {file = "rpds_py-0.22.3-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eaf16ae9ae519a0e237a0f528fd9f0197b9bb70f40263ee57ae53c2b8d48aeb3"}, + {file = "rpds_py-0.22.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:583f6a1993ca3369e0f80ba99d796d8e6b1a3a2a442dd4e1a79e652116413091"}, + {file = "rpds_py-0.22.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4617e1915a539a0d9a9567795023de41a87106522ff83fbfaf1f6baf8e85437e"}, + {file = "rpds_py-0.22.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c150c7a61ed4a4f4955a96626574e9baf1adf772c2fb61ef6a5027e52803543"}, + {file = "rpds_py-0.22.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2fa4331c200c2521512595253f5bb70858b90f750d39b8cbfd67465f8d1b596d"}, + {file = "rpds_py-0.22.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:214b7a953d73b5e87f0ebece4a32a5bd83c60a3ecc9d4ec8f1dca968a2d91e99"}, + {file = "rpds_py-0.22.3-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:f47ad3d5f3258bd7058d2d506852217865afefe6153a36eb4b6928758041d831"}, + {file = "rpds_py-0.22.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:f276b245347e6e36526cbd4a266a417796fc531ddf391e43574cf6466c492520"}, + {file = "rpds_py-0.22.3-cp39-cp39-win32.whl", hash = "sha256:bbb232860e3d03d544bc03ac57855cd82ddf19c7a07651a7c0fdb95e9efea8b9"}, + {file = "rpds_py-0.22.3-cp39-cp39-win_amd64.whl", hash = "sha256:cfbc454a2880389dbb9b5b398e50d439e2e58669160f27b60e5eca11f68ae17c"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:d48424e39c2611ee1b84ad0f44fb3b2b53d473e65de061e3f460fc0be5f1939d"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:24e8abb5878e250f2eb0d7859a8e561846f98910326d06c0d51381fed59357bd"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4b232061ca880db21fa14defe219840ad9b74b6158adb52ddf0e87bead9e8493"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ac0a03221cdb5058ce0167ecc92a8c89e8d0decdc9e99a2ec23380793c4dcb96"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eb0c341fa71df5a4595f9501df4ac5abfb5a09580081dffbd1ddd4654e6e9123"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bf9db5488121b596dbfc6718c76092fda77b703c1f7533a226a5a9f65248f8ad"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b8db6b5b2d4491ad5b6bdc2bc7c017eec108acbf4e6785f42a9eb0ba234f4c9"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b3d504047aba448d70cf6fa22e06cb09f7cbd761939fdd47604f5e007675c24e"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:e61b02c3f7a1e0b75e20c3978f7135fd13cb6cf551bf4a6d29b999a88830a338"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:e35ba67d65d49080e8e5a1dd40101fccdd9798adb9b050ff670b7d74fa41c566"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:26fd7cac7dd51011a245f29a2cc6489c4608b5a8ce8d75661bb4a1066c52dfbe"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:177c7c0fce2855833819c98e43c262007f42ce86651ffbb84f37883308cb0e7d"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:bb47271f60660803ad11f4c61b42242b8c1312a31c98c578f79ef9387bbde21c"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:70fb28128acbfd264eda9bf47015537ba3fe86e40d046eb2963d75024be4d055"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:44d61b4b7d0c2c9ac019c314e52d7cbda0ae31078aabd0f22e583af3e0d79723"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5f0e260eaf54380380ac3808aa4ebe2d8ca28b9087cf411649f96bad6900c728"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b25bc607423935079e05619d7de556c91fb6adeae9d5f80868dde3468657994b"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fb6116dfb8d1925cbdb52595560584db42a7f664617a1f7d7f6e32f138cdf37d"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a63cbdd98acef6570c62b92a1e43266f9e8b21e699c363c0fef13bd530799c11"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2b8f60e1b739a74bab7e01fcbe3dddd4657ec685caa04681df9d562ef15b625f"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:2e8b55d8517a2fda8d95cb45d62a5a8bbf9dd0ad39c5b25c8833efea07b880ca"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:2de29005e11637e7a2361fa151f780ff8eb2543a0da1413bb951e9f14b699ef3"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:666ecce376999bf619756a24ce15bb14c5bfaf04bf00abc7e663ce17c3f34fe7"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:5246b14ca64a8675e0a7161f7af68fe3e910e6b90542b4bfb5439ba752191df6"}, + {file = "rpds_py-0.22.3.tar.gz", hash = "sha256:e32fee8ab45d3c2db6da19a5323bc3362237c8b653c70194414b892fd06a080d"}, +] [[package]] name = "s3transfer" -version = "0.5.2" +version = "0.10.4" description = "An Amazon S3 Transfer Manager" -category = "main" optional = false -python-versions = ">= 3.6" +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "s3transfer-0.10.4-py3-none-any.whl", hash = "sha256:244a76a24355363a68164241438de1b72f8781664920260c48465896b712a41e"}, + {file = "s3transfer-0.10.4.tar.gz", hash = "sha256:29edc09801743c21eb5ecbc617a152df41d3c287f67b615f73e5f750583666a7"}, +] [package.dependencies] -botocore = ">=1.12.36,<2.0a.0" +botocore = ">=1.33.2,<2.0a.0" [package.extras] -crt = ["botocore[crt] (>=1.20.29,<2.0a.0)"] +crt = ["botocore[crt] (>=1.33.2,<2.0a.0)"] [[package]] name = "six" -version = "1.16.0" +version = "1.17.0" description = "Python 2 and 3 compatibility utilities" -category = "main" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +groups = ["main", "dev"] +files = [ + {file = "six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"}, + {file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"}, +] [[package]] name = "sqlparse" -version = "0.4.4" +version = "0.5.3" description = "A non-validating SQL parser." -category = "main" optional = false -python-versions = ">=3.5" +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "sqlparse-0.5.3-py3-none-any.whl", hash = "sha256:cf2196ed3418f3ba5de6af7e82c694a9fbdbfecccdfc72e281548517081f16ca"}, + {file = "sqlparse-0.5.3.tar.gz", hash = "sha256:09f67787f56a0b16ecdbde1bfc7f5d9c3371ca683cfeaa8e6ff60b4807ec9272"}, +] [package.extras] -dev = ["flake8", "build"] +dev = ["build", "hatch"] doc = ["sphinx"] -test = ["pytest", "pytest-cov"] [[package]] -name = "toml" -version = "0.10.2" -description = "Python Library for Tom's Obvious, Minimal Language" -category = "dev" -optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +name = "typing-extensions" +version = "4.12.2" +description = "Backported and Experimental Type Hints for Python 3.8+" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"}, + {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, +] [[package]] -name = "typed-ast" -version = "1.5.5" -description = "a fork of Python 2 and 3 ast modules with type comment support" -category = "dev" +name = "tzdata" +version = "2024.2" +description = "Provider of IANA time zone data" optional = false -python-versions = ">=3.6" - -[[package]] -name = "typing-extensions" -version = "4.1.1" -description = "Backported and Experimental Type Hints for Python 3.6+" -category = "main" -optional = false -python-versions = ">=3.6" +python-versions = ">=2" +groups = ["main"] +files = [ + {file = "tzdata-2024.2-py2.py3-none-any.whl", hash = "sha256:a48093786cdcde33cad18c2555e8532f34422074448fbc874186f0abd79565cd"}, + {file = "tzdata-2024.2.tar.gz", hash = "sha256:7d85cc416e9382e69095b7bdf4afd9e3880418a2413feec7069d533d6b4e31cc"}, +] [[package]] name = "ujson" -version = "4.3.0" +version = "5.10.0" description = "Ultra fast JSON encoder and decoder for Python" -category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "ujson-5.10.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2601aa9ecdbee1118a1c2065323bda35e2c5a2cf0797ef4522d485f9d3ef65bd"}, + {file = "ujson-5.10.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:348898dd702fc1c4f1051bc3aacbf894caa0927fe2c53e68679c073375f732cf"}, + {file = "ujson-5.10.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22cffecf73391e8abd65ef5f4e4dd523162a3399d5e84faa6aebbf9583df86d6"}, + {file = "ujson-5.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26b0e2d2366543c1bb4fbd457446f00b0187a2bddf93148ac2da07a53fe51569"}, + {file = "ujson-5.10.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:caf270c6dba1be7a41125cd1e4fc7ba384bf564650beef0df2dd21a00b7f5770"}, + {file = "ujson-5.10.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a245d59f2ffe750446292b0094244df163c3dc96b3ce152a2c837a44e7cda9d1"}, + {file = "ujson-5.10.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:94a87f6e151c5f483d7d54ceef83b45d3a9cca7a9cb453dbdbb3f5a6f64033f5"}, + {file = "ujson-5.10.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:29b443c4c0a113bcbb792c88bea67b675c7ca3ca80c3474784e08bba01c18d51"}, + {file = "ujson-5.10.0-cp310-cp310-win32.whl", hash = "sha256:c18610b9ccd2874950faf474692deee4223a994251bc0a083c114671b64e6518"}, + {file = "ujson-5.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:924f7318c31874d6bb44d9ee1900167ca32aa9b69389b98ecbde34c1698a250f"}, + {file = "ujson-5.10.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a5b366812c90e69d0f379a53648be10a5db38f9d4ad212b60af00bd4048d0f00"}, + {file = "ujson-5.10.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:502bf475781e8167f0f9d0e41cd32879d120a524b22358e7f205294224c71126"}, + {file = "ujson-5.10.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5b91b5d0d9d283e085e821651184a647699430705b15bf274c7896f23fe9c9d8"}, + {file = "ujson-5.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:129e39af3a6d85b9c26d5577169c21d53821d8cf68e079060602e861c6e5da1b"}, + {file = "ujson-5.10.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f77b74475c462cb8b88680471193064d3e715c7c6074b1c8c412cb526466efe9"}, + {file = "ujson-5.10.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7ec0ca8c415e81aa4123501fee7f761abf4b7f386aad348501a26940beb1860f"}, + {file = "ujson-5.10.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:ab13a2a9e0b2865a6c6db9271f4b46af1c7476bfd51af1f64585e919b7c07fd4"}, + {file = "ujson-5.10.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:57aaf98b92d72fc70886b5a0e1a1ca52c2320377360341715dd3933a18e827b1"}, + {file = "ujson-5.10.0-cp311-cp311-win32.whl", hash = "sha256:2987713a490ceb27edff77fb184ed09acdc565db700ee852823c3dc3cffe455f"}, + {file = "ujson-5.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:f00ea7e00447918ee0eff2422c4add4c5752b1b60e88fcb3c067d4a21049a720"}, + {file = "ujson-5.10.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:98ba15d8cbc481ce55695beee9f063189dce91a4b08bc1d03e7f0152cd4bbdd5"}, + {file = "ujson-5.10.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a9d2edbf1556e4f56e50fab7d8ff993dbad7f54bac68eacdd27a8f55f433578e"}, + {file = "ujson-5.10.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6627029ae4f52d0e1a2451768c2c37c0c814ffc04f796eb36244cf16b8e57043"}, + {file = "ujson-5.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8ccb77b3e40b151e20519c6ae6d89bfe3f4c14e8e210d910287f778368bb3d1"}, + {file = "ujson-5.10.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3caf9cd64abfeb11a3b661329085c5e167abbe15256b3b68cb5d914ba7396f3"}, + {file = "ujson-5.10.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6e32abdce572e3a8c3d02c886c704a38a1b015a1fb858004e03d20ca7cecbb21"}, + {file = "ujson-5.10.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a65b6af4d903103ee7b6f4f5b85f1bfd0c90ba4eeac6421aae436c9988aa64a2"}, + {file = "ujson-5.10.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:604a046d966457b6cdcacc5aa2ec5314f0e8c42bae52842c1e6fa02ea4bda42e"}, + {file = "ujson-5.10.0-cp312-cp312-win32.whl", hash = "sha256:6dea1c8b4fc921bf78a8ff00bbd2bfe166345f5536c510671bccececb187c80e"}, + {file = "ujson-5.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:38665e7d8290188b1e0d57d584eb8110951a9591363316dd41cf8686ab1d0abc"}, + {file = "ujson-5.10.0-cp313-cp313-macosx_10_9_x86_64.whl", hash = "sha256:618efd84dc1acbd6bff8eaa736bb6c074bfa8b8a98f55b61c38d4ca2c1f7f287"}, + {file = "ujson-5.10.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:38d5d36b4aedfe81dfe251f76c0467399d575d1395a1755de391e58985ab1c2e"}, + {file = "ujson-5.10.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:67079b1f9fb29ed9a2914acf4ef6c02844b3153913eb735d4bf287ee1db6e557"}, + {file = "ujson-5.10.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7d0e0ceeb8fe2468c70ec0c37b439dd554e2aa539a8a56365fd761edb418988"}, + {file = "ujson-5.10.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:59e02cd37bc7c44d587a0ba45347cc815fb7a5fe48de16bf05caa5f7d0d2e816"}, + {file = "ujson-5.10.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:2a890b706b64e0065f02577bf6d8ca3b66c11a5e81fb75d757233a38c07a1f20"}, + {file = "ujson-5.10.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:621e34b4632c740ecb491efc7f1fcb4f74b48ddb55e65221995e74e2d00bbff0"}, + {file = "ujson-5.10.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b9500e61fce0cfc86168b248104e954fead61f9be213087153d272e817ec7b4f"}, + {file = "ujson-5.10.0-cp313-cp313-win32.whl", hash = "sha256:4c4fc16f11ac1612f05b6f5781b384716719547e142cfd67b65d035bd85af165"}, + {file = "ujson-5.10.0-cp313-cp313-win_amd64.whl", hash = "sha256:4573fd1695932d4f619928fd09d5d03d917274381649ade4328091ceca175539"}, + {file = "ujson-5.10.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a984a3131da7f07563057db1c3020b1350a3e27a8ec46ccbfbf21e5928a43050"}, + {file = "ujson-5.10.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:73814cd1b9db6fc3270e9d8fe3b19f9f89e78ee9d71e8bd6c9a626aeaeaf16bd"}, + {file = "ujson-5.10.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:61e1591ed9376e5eddda202ec229eddc56c612b61ac6ad07f96b91460bb6c2fb"}, + {file = "ujson-5.10.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2c75269f8205b2690db4572a4a36fe47cd1338e4368bc73a7a0e48789e2e35a"}, + {file = "ujson-5.10.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7223f41e5bf1f919cd8d073e35b229295aa8e0f7b5de07ed1c8fddac63a6bc5d"}, + {file = "ujson-5.10.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:d4dc2fd6b3067c0782e7002ac3b38cf48608ee6366ff176bbd02cf969c9c20fe"}, + {file = "ujson-5.10.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:232cc85f8ee3c454c115455195a205074a56ff42608fd6b942aa4c378ac14dd7"}, + {file = "ujson-5.10.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:cc6139531f13148055d691e442e4bc6601f6dba1e6d521b1585d4788ab0bfad4"}, + {file = "ujson-5.10.0-cp38-cp38-win32.whl", hash = "sha256:e7ce306a42b6b93ca47ac4a3b96683ca554f6d35dd8adc5acfcd55096c8dfcb8"}, + {file = "ujson-5.10.0-cp38-cp38-win_amd64.whl", hash = "sha256:e82d4bb2138ab05e18f089a83b6564fee28048771eb63cdecf4b9b549de8a2cc"}, + {file = "ujson-5.10.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:dfef2814c6b3291c3c5f10065f745a1307d86019dbd7ea50e83504950136ed5b"}, + {file = "ujson-5.10.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4734ee0745d5928d0ba3a213647f1c4a74a2a28edc6d27b2d6d5bd9fa4319e27"}, + {file = "ujson-5.10.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d47ebb01bd865fdea43da56254a3930a413f0c5590372a1241514abae8aa7c76"}, + {file = "ujson-5.10.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dee5e97c2496874acbf1d3e37b521dd1f307349ed955e62d1d2f05382bc36dd5"}, + {file = "ujson-5.10.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7490655a2272a2d0b072ef16b0b58ee462f4973a8f6bbe64917ce5e0a256f9c0"}, + {file = "ujson-5.10.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:ba17799fcddaddf5c1f75a4ba3fd6441f6a4f1e9173f8a786b42450851bd74f1"}, + {file = "ujson-5.10.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:2aff2985cef314f21d0fecc56027505804bc78802c0121343874741650a4d3d1"}, + {file = "ujson-5.10.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:ad88ac75c432674d05b61184178635d44901eb749786c8eb08c102330e6e8996"}, + {file = "ujson-5.10.0-cp39-cp39-win32.whl", hash = "sha256:2544912a71da4ff8c4f7ab5606f947d7299971bdd25a45e008e467ca638d13c9"}, + {file = "ujson-5.10.0-cp39-cp39-win_amd64.whl", hash = "sha256:3ff201d62b1b177a46f113bb43ad300b424b7847f9c5d38b1b4ad8f75d4a282a"}, + {file = "ujson-5.10.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5b6fee72fa77dc172a28f21693f64d93166534c263adb3f96c413ccc85ef6e64"}, + {file = "ujson-5.10.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:61d0af13a9af01d9f26d2331ce49bb5ac1fb9c814964018ac8df605b5422dcb3"}, + {file = "ujson-5.10.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ecb24f0bdd899d368b715c9e6664166cf694d1e57be73f17759573a6986dd95a"}, + {file = "ujson-5.10.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fbd8fd427f57a03cff3ad6574b5e299131585d9727c8c366da4624a9069ed746"}, + {file = "ujson-5.10.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:beeaf1c48e32f07d8820c705ff8e645f8afa690cca1544adba4ebfa067efdc88"}, + {file = "ujson-5.10.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:baed37ea46d756aca2955e99525cc02d9181de67f25515c468856c38d52b5f3b"}, + {file = "ujson-5.10.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:7663960f08cd5a2bb152f5ee3992e1af7690a64c0e26d31ba7b3ff5b2ee66337"}, + {file = "ujson-5.10.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:d8640fb4072d36b08e95a3a380ba65779d356b2fee8696afeb7794cf0902d0a1"}, + {file = "ujson-5.10.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78778a3aa7aafb11e7ddca4e29f46bc5139131037ad628cc10936764282d6753"}, + {file = "ujson-5.10.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b0111b27f2d5c820e7f2dbad7d48e3338c824e7ac4d2a12da3dc6061cc39c8e6"}, + {file = "ujson-5.10.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:c66962ca7565605b355a9ed478292da628b8f18c0f2793021ca4425abf8b01e5"}, + {file = "ujson-5.10.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ba43cc34cce49cf2d4bc76401a754a81202d8aa926d0e2b79f0ee258cb15d3a4"}, + {file = "ujson-5.10.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:ac56eb983edce27e7f51d05bc8dd820586c6e6be1c5216a6809b0c668bb312b8"}, + {file = "ujson-5.10.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f44bd4b23a0e723bf8b10628288c2c7c335161d6840013d4d5de20e48551773b"}, + {file = "ujson-5.10.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7c10f4654e5326ec14a46bcdeb2b685d4ada6911050aa8baaf3501e57024b804"}, + {file = "ujson-5.10.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0de4971a89a762398006e844ae394bd46991f7c385d7a6a3b93ba229e6dac17e"}, + {file = "ujson-5.10.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:e1402f0564a97d2a52310ae10a64d25bcef94f8dd643fcf5d310219d915484f7"}, + {file = "ujson-5.10.0.tar.gz", hash = "sha256:b3cd8f3c5d8c7738257f1018880444f7b7d9b66232c64649f562d7ba86ad4bc1"}, +] [[package]] name = "urllib3" -version = "1.26.18" +version = "2.3.0" description = "HTTP library with thread-safe connection pooling, file post, and more." -category = "main" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "urllib3-2.3.0-py3-none-any.whl", hash = "sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df"}, + {file = "urllib3-2.3.0.tar.gz", hash = "sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d"}, +] [package.extras] -brotli = ["brotlicffi (>=0.8.0)", "brotli (==1.0.9)", "brotlipy (>=0.6.0)", "brotli (>=1.0.9)"] -secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "urllib3-secure-extra", "ipaddress"] -socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] +h2 = ["h2 (>=4,<5)"] +socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] +zstd = ["zstandard (>=0.18.0)"] [[package]] name = "vine" version = "5.1.0" description = "Python promises." -category = "main" optional = false python-versions = ">=3.6" +groups = ["main"] +files = [ + {file = "vine-5.1.0-py3-none-any.whl", hash = "sha256:40fdf3c48b2cfe1c38a49e9ae2da6fda88e4794c810050a728bd7413811fb1dc"}, + {file = "vine-5.1.0.tar.gz", hash = "sha256:8b62e981d35c41049211cf62a0a1242d8c1ee9bd15bb196ce38aefd6799e61e0"}, +] [[package]] name = "wcwidth" version = "0.2.13" description = "Measures the displayed width of unicode strings in a terminal" -category = "main" optional = false python-versions = "*" +groups = ["main"] +files = [ + {file = "wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859"}, + {file = "wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5"}, +] [[package]] name = "werkzeug" -version = "1.0.1" +version = "3.1.3" description = "The comprehensive WSGI web application library." -category = "main" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" - -[package.extras] -dev = ["pytest", "pytest-timeout", "coverage", "tox", "sphinx", "pallets-sphinx-themes", "sphinx-issues"] -watchdog = ["watchdog"] +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "werkzeug-3.1.3-py3-none-any.whl", hash = "sha256:54b78bf3716d19a65be4fceccc0d1d7b89e608834989dfae50ea87564639213e"}, + {file = "werkzeug-3.1.3.tar.gz", hash = "sha256:60723ce945c19328679790e3282cc758aa4a6040e4bb330f53d30fa546d44746"}, +] -[[package]] -name = "zipp" -version = "3.6.0" -description = "Backport of pathlib-compatible object wrapper for zip files" -category = "main" -optional = false -python-versions = ">=3.6" +[package.dependencies] +MarkupSafe = ">=2.1.1" [package.extras] -docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] -testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"] +watchdog = ["watchdog (>=2.3)"] [metadata] -lock-version = "1.1" -python-versions = ">= 3.6, < 4" -content-hash = "d235e59f2ce17520b71b66f5a9f8eac11ff16c9f8629422c5a7d63b590d5fa15" - -[metadata.files] -amqp = [] -appdirs = [] -asgiref = [ - {file = "asgiref-3.4.1-py3-none-any.whl", hash = "sha256:ffc141aa908e6f175673e7b1b3b7af4fdb0ecb738fc5c8b88f69f055c2415214"}, - {file = "asgiref-3.4.1.tar.gz", hash = "sha256:4ef1ab46b484e3c706329cedeff284a5d40824200638503f5768edb6de7d58e9"}, -] -async-timeout = [] -atomicwrites = [] -attrs = [] -bamboo-engine = [] -billiard = [] -black = [] -boto3 = [] -botocore = [] -cached-property = [] -celery = [ - {file = "celery-5.1.2-py3-none-any.whl", hash = "sha256:9dab2170b4038f7bf10ef2861dbf486ddf1d20592290a1040f7b7a1259705d42"}, - {file = "celery-5.1.2.tar.gz", hash = "sha256:8d9a3de9162965e97f8e8cc584c67aad83b3f7a267584fa47701ed11c3e0d4b0"}, -] -certifi = [] -charset-normalizer = [] -click = [ - {file = "click-7.1.2-py2.py3-none-any.whl", hash = "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc"}, - {file = "click-7.1.2.tar.gz", hash = "sha256:d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a"}, -] -click-didyoumean = [] -click-plugins = [ - {file = "click-plugins-1.1.1.tar.gz", hash = "sha256:46ab999744a9d831159c3411bb0c79346d94a444df9a3a3742e9ed63645f264b"}, - {file = "click_plugins-1.1.1-py2.py3-none-any.whl", hash = "sha256:5d262006d3222f5057fd81e1623d4443e41dcda5dc815c06b442aa3c02889fc8"}, -] -click-repl = [] -colorama = [] -coverage = [] -dataclasses = [] -django = [ - {file = "Django-3.2.25-py3-none-any.whl", hash = "sha256:a52ea7fcf280b16f7b739cec38fa6d3f8953a5456986944c3ca97e79882b4e38"}, - {file = "Django-3.2.25.tar.gz", hash = "sha256:7ca38a78654aee72378594d63e51636c04b8e28574f5505dff630895b5472777"}, -] -django-celery-beat = [] -django-timezone-field = [] -factory-boy = [] -faker = [] -idna = [] -importlib-metadata = [] -iniconfig = [] -isodate = [] -jmespath = [] -jsonschema = [] -kombu = [] -mako = [] -markupsafe = [] -mock = [] -mypy-extensions = [] -mysqlclient = [] -packaging = [] -pathspec = [] -pluggy = [] -prometheus-client = [] -prompt-toolkit = [] -py = [] -pyparsing = [] -pytest = [] -pytest-django = [] -python-crontab = [] -python-dateutil = [] -pytz = [] -redis = [] -regex = [] -requests = [] -s3transfer = [] -six = [] -sqlparse = [] -toml = [] -typed-ast = [] -typing-extensions = [] -ujson = [ - {file = "ujson-4.3.0-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:3609e0514f6f721c6c9818b9374ec91b994e59fb193af2f924ca3f2f32009f1c"}, - {file = "ujson-4.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:de42986e2602b6a0baca452ff50e9cbe66faf256761295d5d07ae3f6757b487d"}, - {file = "ujson-4.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:843fd8b3246b2b20bbae48b2334d26507c9531b2b014533adfc6132e3ec8e60c"}, - {file = "ujson-4.3.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5d1083a0dcb39b43cfcd948f09e480c23eb4af66d7d08f6b36951f4c629c3bd1"}, - {file = "ujson-4.3.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:01d12df8eb25afb939a003284b5b5adca9788c1176c445641e5980fa892562ac"}, - {file = "ujson-4.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b0b9cde57eebaac26de040f8ebf0541e06fe9bcf7e42872dc036d2ced7d99ccf"}, - {file = "ujson-4.3.0-cp310-cp310-win32.whl", hash = "sha256:3d8eaab72ad8129c12ed90ebf310230bd014b6bbf99145ebf2bc890238e0254f"}, - {file = "ujson-4.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:85f28c38952b8a94183ab15ec6c6e89c117d00ceeae5d754ef1a33e01e28b845"}, - {file = "ujson-4.3.0-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:8a0d9dde58937976cd06cd776411b77b0e5d38db0a3c1be28ee8bb428ff5a42b"}, - {file = "ujson-4.3.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f4a34386785a33600ac7442fec34c3d8b2d7e5309cfc94bc7c9ba93f12640c2"}, - {file = "ujson-4.3.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8e2a52fbeee55db306b9306892f5cde7e78c56069c1212abf176d1886fff60a"}, - {file = "ujson-4.3.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9c5330692122b999997911252466a7d17e4e428d7d9a8db0b99ba81b8b9c010c"}, - {file = "ujson-4.3.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:9baa160ba1d3f712a356e77718251c9d9eee43ed548debdcc9d75b06a75b3e82"}, - {file = "ujson-4.3.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:a6c32356145d95a0403b5895d60c36798a48af13b8863e43ad7457a0361afad0"}, - {file = "ujson-4.3.0-cp36-cp36m-win32.whl", hash = "sha256:b72fadeea5727204674c9f77166da7feaafdf70f1ed50bb15bf321f7c39c7194"}, - {file = "ujson-4.3.0-cp36-cp36m-win_amd64.whl", hash = "sha256:1601354caaab0697a9b24815a31611ad013d29cf957d545fc1cd59835b82e3c1"}, - {file = "ujson-4.3.0-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:b80a35bad8fad1772f992bae8086b0cde788cd3b37f35d0d4506c93e6edad645"}, - {file = "ujson-4.3.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7a318df321d7adc3de876b29640cca8de1ad4d4e4fe7c4a76d64d9d6f1676304"}, - {file = "ujson-4.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc9a508efb829bf0542be9b2578d8da08f0ab1fa712e086ebb777d6ec9e6d8d2"}, - {file = "ujson-4.3.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:43d2403451d7bd27b6a600f89d4bd2cf6e1b3494254509d8b5ef3c8e94ae4d8e"}, - {file = "ujson-4.3.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:fd0901db652a58f46550074596227dbddb7a02d2de744d3cd2358101f78037bb"}, - {file = "ujson-4.3.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:00fd67952b1a8a46cf5b0a51b3838187332d13d2e8d178423c5a5405c21d9e7c"}, - {file = "ujson-4.3.0-cp37-cp37m-win32.whl", hash = "sha256:b0e9510e867c72a87db2d16377c2bef912f29afd8381d1fdae332b9b7f697efa"}, - {file = "ujson-4.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:294e907f134fb5d83e0a4439cf4040d74da77157938b4db5730cd174621dcf8b"}, - {file = "ujson-4.3.0-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:087cd977f4f63f885a49607244e7e157801a22aadcc075a262d3c3633138573c"}, - {file = "ujson-4.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f35dcf6d2a67e913a7135809006bd000d55ad5b5834b5dbe5b82dcf8db1ac05"}, - {file = "ujson-4.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f158fdb08e022f2f16f0fba317a80558b0cebc7e2c84ae783e5f75616d5c90d5"}, - {file = "ujson-4.3.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2a06006dad34c8cfaa734bd6458452e46702b368da53b56e7732351082aa0420"}, - {file = "ujson-4.3.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6df94e675b05ecf4e7a57883a73b916ffcb5872d7b1298ac5cef8ac1cbce73c6"}, - {file = "ujson-4.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:47af81df5d575e36d4be9396db94f35c8f62de3077a405f9af94f9756255cef5"}, - {file = "ujson-4.3.0-cp38-cp38-win32.whl", hash = "sha256:e46c1462761db518fae51ab0d89a6256aeac148a795f7244d9084c459b477af5"}, - {file = "ujson-4.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:bf199015910fcfa19b6e12881abeb462498791b2ab0111ff8b17095d0477e9d4"}, - {file = "ujson-4.3.0-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:32ee97ec37af31b35ca4395732d883bf74fb70309d38485f7fb9a5cc3332c53e"}, - {file = "ujson-4.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f211c7c0c9377cbf4650aa990118d0c2cce3c5fad476c39ecd35b6714ba4463"}, - {file = "ujson-4.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c81159d3f1bcb5729ba019e63e78ee6c91b556e1ac0e67c7579768720fd3c4e"}, - {file = "ujson-4.3.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b850029d64008e970cae04ada69aa33e1cd412106a1efde221269c1cda1b40cc"}, - {file = "ujson-4.3.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:327ec982bb89abe779fe463e1013c47aae6ed53b76600af7cb1e8b8cb0ee9f85"}, - {file = "ujson-4.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:103cbabe4e6fd70c957219519e37d65be612d7c74d91ef19022a2c8f8c5e4e82"}, - {file = "ujson-4.3.0-cp39-cp39-win32.whl", hash = "sha256:7b0a63865ec2978ebafb0906bf982eb52bea26fc98e2ae5e59b9d204afe2d762"}, - {file = "ujson-4.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:18040475d997d93a6851d8bee474fba2ec94869e8f826dddd66cdae4aa3fdb92"}, - {file = "ujson-4.3.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:df481d4e13ca34d870d1fdf387742867edff3f78a1eea1bbcd72ea2fa68d9a6e"}, - {file = "ujson-4.3.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e7e73ec5ba1b42c2027773f69b70eff28df132907aa98b28166c39d3ea45e85b"}, - {file = "ujson-4.3.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b270088e472f1d65a0a0aab3190010b9ac1a5b2969d39bf2b53c0fbf339bc87a"}, - {file = "ujson-4.3.0.tar.gz", hash = "sha256:baee56eca35cb5fbe02c28bd9c0936be41a96fa5c0812d9d4b7edeb5c3d568a0"}, -] -urllib3 = [] -vine = [ - {file = "vine-5.1.0-py3-none-any.whl", hash = "sha256:40fdf3c48b2cfe1c38a49e9ae2da6fda88e4794c810050a728bd7413811fb1dc"}, - {file = "vine-5.1.0.tar.gz", hash = "sha256:8b62e981d35c41049211cf62a0a1242d8c1ee9bd15bb196ce38aefd6799e61e0"}, -] -wcwidth = [] -werkzeug = [] -zipp = [] +lock-version = "2.1" +python-versions = "^3.11.10" +content-hash = "87be3531c3c6f12cf84646db292b197bbd9484400f326293ba87e9ce0c500e0b" diff --git a/runtime/bamboo-pipeline/pyproject.toml b/runtime/bamboo-pipeline/pyproject.toml index 35a8bdc9..5c2048fb 100644 --- a/runtime/bamboo-pipeline/pyproject.toml +++ b/runtime/bamboo-pipeline/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "bamboo-pipeline" -version = "3.29.5" +version = "4.0.0rc0" description = "runtime for bamboo-engine base on Django and Celery" authors = ["homholueng "] license = "MIT" @@ -9,32 +9,32 @@ packages = [ ] [tool.poetry.dependencies] -python = ">= 3.6, < 4" -celery = ">=4.4.0, <6" -Django = ">=2.2, <5" -requests = "^2.22" -django-celery-beat = "^2.1" -Mako = "^1.1.4" +python = "^3.11.10" +celery = ">=5.2.0, <6" +Django = ">=4.2.0, <5" +requests = "^2.31" +django-celery-beat = "^2.5" +Mako = "^1.3" pytz = ">=2019.3" -bamboo-engine = "^2.11.0" -jsonschema = "^2.5.1" -ujson = "^4" -pyparsing = "^2.2" -redis = ">=3.2.0, <6" -django-timezone-field = "^4" -Werkzeug = "^1" -prometheus-client = "^0.9" -boto3 = "^1.9.130" +bamboo-engine = {path = "../../../bamboo-engine" } +jsonschema = "^4.17.0" +ujson = "^5.9" +pyparsing = "^3" +redis = ">=5.0.3, <6" +django-timezone-field = "^5" +Werkzeug = "^3" +prometheus-client = "^0.20.0" +boto3 = "^1.34" isodate = "^0.6" -[tool.poetry.dev-dependencies] -pytest = "^6.2.2" -black = "^20.8b1" -mock = "^4.0.3" -factory_boy = "2.11.1" -pytest-django = "4.1.0" -mysqlclient = "2.0.3" -coverage = {extras = ["toml"], version = "^5.5"} +[tool.poetry.group.dev.dependencies] +pytest = "^7.0.0" +black = "^23" +mock = "^5.0.0" +factory_boy = "^3.0.0" +pytest-django = ">=4.2.0, <=4.5.2" +mysqlclient = "^2.1.0" +coverage = {extras = ["toml"], version = "^7.2.0"} [build-system] requires = ["poetry-core>=1.0.0"] @@ -56,3 +56,6 @@ exclude = ''' | dist )/ ''' + + + diff --git a/tox.ini b/tox.ini index 991f652b..320710ac 100644 --- a/tox.ini +++ b/tox.ini @@ -1,11 +1,10 @@ [gh-actions] python = - 3.6: py36 - 3.7: py37 + 3.11.10: py311 [tox] isolated_build = true -envlist = py36, py37 +envlist = py311 [testenv] allowlist_externals = poetry