deepl-haystack 0.3.1__tar.gz → 0.4.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (22) hide show
  1. {deepl_haystack-0.3.1 → deepl_haystack-0.4.0}/.github/workflows/bump.yml +4 -4
  2. {deepl_haystack-0.3.1 → deepl_haystack-0.4.0}/.github/workflows/lint.yml +1 -1
  3. {deepl_haystack-0.3.1 → deepl_haystack-0.4.0}/.github/workflows/publish.yml +1 -1
  4. {deepl_haystack-0.3.1 → deepl_haystack-0.4.0}/.github/workflows/release.yml +2 -2
  5. {deepl_haystack-0.3.1 → deepl_haystack-0.4.0}/.github/workflows/test.yml +3 -3
  6. {deepl_haystack-0.3.1 → deepl_haystack-0.4.0}/PKG-INFO +2 -2
  7. {deepl_haystack-0.3.1 → deepl_haystack-0.4.0}/pyproject.toml +4 -4
  8. {deepl_haystack-0.3.1 → deepl_haystack-0.4.0}/tests/test_deepl_document_translator.py +27 -1
  9. {deepl_haystack-0.3.1 → deepl_haystack-0.4.0}/tests/test_deepl_text_translator.py +25 -0
  10. {deepl_haystack-0.3.1 → deepl_haystack-0.4.0}/uv.lock +35 -36
  11. {deepl_haystack-0.3.1 → deepl_haystack-0.4.0}/.github/CODEOWNERS +0 -0
  12. {deepl_haystack-0.3.1 → deepl_haystack-0.4.0}/.github/dependabot.yml +0 -0
  13. {deepl_haystack-0.3.1 → deepl_haystack-0.4.0}/.gitignore +0 -0
  14. {deepl_haystack-0.3.1 → deepl_haystack-0.4.0}/.pre-commit-config.yaml +0 -0
  15. {deepl_haystack-0.3.1 → deepl_haystack-0.4.0}/LICENSE +0 -0
  16. {deepl_haystack-0.3.1 → deepl_haystack-0.4.0}/Makefile +0 -0
  17. {deepl_haystack-0.3.1 → deepl_haystack-0.4.0}/README.md +0 -0
  18. {deepl_haystack-0.3.1 → deepl_haystack-0.4.0}/deepl_haystack/__init__.py +0 -0
  19. {deepl_haystack-0.3.1 → deepl_haystack-0.4.0}/deepl_haystack/components.py +0 -0
  20. {deepl_haystack-0.3.1 → deepl_haystack-0.4.0}/tests/__init__.py +0 -0
  21. {deepl_haystack-0.3.1 → deepl_haystack-0.4.0}/tests/conftest.py +0 -0
  22. {deepl_haystack-0.3.1 → deepl_haystack-0.4.0}/tests/test_deepl_haystack_init.py +0 -0
@@ -20,7 +20,7 @@ jobs:
20
20
  contents: 'write'
21
21
  id-token: 'write'
22
22
  steps:
23
- - uses: actions/checkout@v6
23
+ - uses: actions/checkout@v7
24
24
  - name: Install uv
25
25
  uses: astral-sh/setup-uv@v7
26
26
  with:
@@ -64,7 +64,7 @@ jobs:
64
64
  ENCRYPTED_SECRET=${{ needs.create-release-branch.outputs.encrypted-version }};
65
65
  VERSION=$(echo -n "$ENCRYPTED_SECRET" | base64 --decode | openssl enc -d -a -k "password");
66
66
  echo "version=$VERSION" >> $GITHUB_OUTPUT
67
- - uses: actions/checkout@v6
67
+ - uses: actions/checkout@v7
68
68
  with:
69
69
  ref: main
70
70
  - name: Reset release branch
@@ -72,7 +72,7 @@ jobs:
72
72
  git fetch origin release/${{ steps.decrypt-tag.outputs.version }}:release/${{ steps.decrypt-tag.outputs.version }}
73
73
  git reset --hard release/${{ steps.decrypt-tag.outputs.version }}
74
74
  - name: Generate token for release bot
75
- uses: actions/create-github-app-token@v2
75
+ uses: actions/create-github-app-token@v3
76
76
  id: generate-token
77
77
  with:
78
78
  app-id: ${{ secrets.RELEASE_BOT_APP_ID }}
@@ -105,7 +105,7 @@ jobs:
105
105
  ENCRYPTED_SECRET=${{ needs.create-release-branch.outputs.encrypted-version }};
106
106
  VERSION=$(echo -n "$ENCRYPTED_SECRET" | base64 --decode | openssl enc -d -a -k "password");
107
107
  echo "version=$VERSION" >> $GITHUB_OUTPUT
108
- - uses: actions/checkout@v6
108
+ - uses: actions/checkout@v7
109
109
  with:
110
110
  fetch-depth: 0
111
111
  - name: Delete release branch
@@ -13,7 +13,7 @@ jobs:
13
13
  lint:
14
14
  runs-on: ubuntu-latest
15
15
  steps:
16
- - uses: actions/checkout@v6
16
+ - uses: actions/checkout@v7
17
17
  - name: Install uv
18
18
  uses: astral-sh/setup-uv@v7
19
19
  with:
@@ -9,7 +9,7 @@ jobs:
9
9
  publish:
10
10
  runs-on: ubuntu-latest
11
11
  steps:
12
- - uses: actions/checkout@v6
12
+ - uses: actions/checkout@v7
13
13
  - name: Install uv
14
14
  uses: astral-sh/setup-uv@v7
15
15
  with:
@@ -13,14 +13,14 @@ jobs:
13
13
  contents: 'write'
14
14
  steps:
15
15
  - name: Checkout
16
- uses: actions/checkout@v6
16
+ uses: actions/checkout@v7
17
17
  - name: Get release tag
18
18
  id: get-tag
19
19
  run: |
20
20
  TAG=$(echo "${{ github.event.head_commit.message }}" | head -n1 | cut -d" " -f7);
21
21
  echo "tag=$TAG" >> $GITHUB_OUTPUT
22
22
  - name: Release
23
- uses: softprops/action-gh-release@v2
23
+ uses: softprops/action-gh-release@v3
24
24
  with:
25
25
  generate_release_notes: true
26
26
  make_latest: true
@@ -19,7 +19,7 @@ jobs:
19
19
  fail-fast: false
20
20
  runs-on: ${{ matrix.os }}
21
21
  steps:
22
- - uses: actions/checkout@v6
22
+ - uses: actions/checkout@v7
23
23
  - name: Install uv
24
24
  uses: astral-sh/setup-uv@v7
25
25
  with:
@@ -29,7 +29,7 @@ jobs:
29
29
  run: uv sync --no-default-groups --group ci --group test
30
30
  - name: Test
31
31
  run: make test-unit
32
- - uses: codecov/codecov-action@v5
32
+ - uses: codecov/codecov-action@v7
33
33
  with:
34
34
  fail_ci_if_error: true
35
35
  token: ${{ secrets.CODECOV_TOKEN }}
@@ -45,7 +45,7 @@ jobs:
45
45
  env:
46
46
  DEEPL_API_KEY: ${{ secrets.DEEPL_API_KEY }}
47
47
  steps:
48
- - uses: actions/checkout@v6
48
+ - uses: actions/checkout@v7
49
49
  - name: Install uv
50
50
  uses: astral-sh/setup-uv@v7
51
51
  with:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: deepl-haystack
3
- Version: 0.3.1
3
+ Version: 0.4.0
4
4
  Summary: Haystack integration with DeepL translation services provider.
5
5
  Project-URL: Homepage, https://github.com/dribia/deepl-haystack
6
6
  Project-URL: Repository, https://github.com/dribia/deepl-haystack
@@ -23,7 +23,7 @@ Classifier: Programming Language :: Python :: 3.13
23
23
  Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
24
24
  Requires-Python: <3.14,>=3.9
25
25
  Requires-Dist: deepl<2,>=1.19.1
26
- Requires-Dist: haystack-ai<3,>=2.0.0
26
+ Requires-Dist: haystack-ai<4,>=2.0.0
27
27
  Description-Content-Type: text/markdown
28
28
 
29
29
  DeepL Haystack Integration
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "deepl-haystack"
3
- version = "0.3.1"
3
+ version = "0.4.0"
4
4
  description = "Haystack integration with DeepL translation services provider."
5
5
  authors = [{ name = "Albert Iribarne", email = "iribarne@dribia.com" }]
6
6
  requires-python = ">=3.9,<3.14"
@@ -30,7 +30,7 @@ classifiers = [
30
30
  ]
31
31
  dependencies = [
32
32
  "deepl>=1.19.1,<2",
33
- "haystack-ai>=2.0.0,<3",
33
+ "haystack-ai>=2.0.0,<4",
34
34
  ]
35
35
 
36
36
  [project.urls]
@@ -41,7 +41,7 @@ Repository = "https://github.com/dribia/deepl-haystack"
41
41
  [dependency-groups]
42
42
  dev = ["pre-commit>=4.3.0,<5"]
43
43
  ci = [
44
- "setuptools>=80.9.0,<81",
44
+ "setuptools>=80.9.0,<83",
45
45
  ]
46
46
  test = [
47
47
  "pytest>=8.3.5,<9",
@@ -50,7 +50,7 @@ test = [
50
50
  "pytest-dotenv>=0.5.2,<0.6",
51
51
  ]
52
52
  lint = [
53
- "ruff==0.14.10",
53
+ "ruff==0.15.10",
54
54
  "mypy==1.19.1",
55
55
  ]
56
56
 
@@ -1,11 +1,12 @@
1
1
  """Test cases for DeepL translator components."""
2
2
 
3
+ import inspect
3
4
  import os
4
5
  from typing import Any
5
6
 
6
7
  import pytest
7
8
  from deepl import DeepLException, Formality, SplitSentences, Translator
8
- from haystack import Document
9
+ from haystack import Document, Pipeline
9
10
  from haystack.utils import Secret
10
11
 
11
12
  from deepl_haystack import DeepLDocumentTranslator
@@ -218,6 +219,31 @@ class TestDeepLDocumentTranslator:
218
219
  ):
219
220
  DeepLDocumentTranslator.from_dict(data)
220
221
 
222
+ def test_pipeline_serialization_roundtrip(self, monkeypatch):
223
+ """The component survives a pipeline serialization round-trip.
224
+
225
+ Haystack 3.x gates pipeline deserialization through a trusted-module
226
+ allowlist that only covers Haystack's own namespaces, so loading a
227
+ pipeline that contains a component from this package requires listing
228
+ it in ``allowed_modules``. Haystack 2.x has no such parameter, so it is
229
+ only passed when supported.
230
+ """
231
+ monkeypatch.setenv("DEEPL_API_KEY", "test-api-key")
232
+ pipeline = Pipeline()
233
+ pipeline.add_component(
234
+ "translator", DeepLDocumentTranslator(target_lang=["ES", "FR"])
235
+ )
236
+
237
+ dumped = pipeline.dumps()
238
+ if "allowed_modules" in inspect.signature(Pipeline.loads).parameters:
239
+ loaded = Pipeline.loads(dumped, allowed_modules=["deepl_haystack"])
240
+ else:
241
+ loaded = Pipeline.loads(dumped)
242
+
243
+ component = loaded.get_component("translator")
244
+ assert isinstance(component, DeepLDocumentTranslator)
245
+ assert component.target_lang == ["ES", "FR"]
246
+
221
247
  def test_run_one_doc(self, monkeypatch, mock_translation, caplog):
222
248
  """Test the run method of the DeepLDocumentTranslator class.
223
249
 
@@ -1,11 +1,13 @@
1
1
  """Test cases for DeepL translator components."""
2
2
 
3
+ import inspect
3
4
  import os
4
5
  from typing import Any
5
6
  from unittest.mock import patch
6
7
 
7
8
  import pytest
8
9
  from deepl import DeepLException, Formality, SplitSentences, Translator
10
+ from haystack import Pipeline
9
11
  from haystack.utils import Secret
10
12
 
11
13
  from deepl_haystack import DeepLTextTranslator
@@ -211,6 +213,29 @@ class TestDeepLTextTranslator:
211
213
  ):
212
214
  DeepLTextTranslator.from_dict(data)
213
215
 
216
+ def test_pipeline_serialization_roundtrip(self, monkeypatch):
217
+ """The component survives a pipeline serialization round-trip.
218
+
219
+ Haystack 3.x gates pipeline deserialization through a trusted-module
220
+ allowlist that only covers Haystack's own namespaces, so loading a
221
+ pipeline that contains a component from this package requires listing
222
+ it in ``allowed_modules``. Haystack 2.x has no such parameter, so it is
223
+ only passed when supported.
224
+ """
225
+ monkeypatch.setenv("DEEPL_API_KEY", "test-api-key")
226
+ pipeline = Pipeline()
227
+ pipeline.add_component("translator", DeepLTextTranslator(target_lang="ES"))
228
+
229
+ dumped = pipeline.dumps()
230
+ if "allowed_modules" in inspect.signature(Pipeline.loads).parameters:
231
+ loaded = Pipeline.loads(dumped, allowed_modules=["deepl_haystack"])
232
+ else:
233
+ loaded = Pipeline.loads(dumped)
234
+
235
+ component = loaded.get_component("translator")
236
+ assert isinstance(component, DeepLTextTranslator)
237
+ assert component.target_lang == "ES"
238
+
214
239
  def test_run(self, monkeypatch, mock_translation):
215
240
  """Test the run method of the DeepLTextTranslator class."""
216
241
  monkeypatch.setenv("DEEPL_API_KEY", "fake-api-key")
@@ -220,19 +220,19 @@ toml = [
220
220
 
221
221
  [[package]]
222
222
  name = "deepl"
223
- version = "1.27.0"
223
+ version = "1.30.0"
224
224
  source = { registry = "https://pypi.org/simple" }
225
225
  dependencies = [
226
226
  { name = "requests" },
227
227
  ]
228
- sdist = { url = "https://files.pythonhosted.org/packages/15/19/0a4ac6b1a6fbe964d786b418f8d7ce5d4e920e296cc0721370dc6e9b4785/deepl-1.27.0.tar.gz", hash = "sha256:8d83a53d958ffa96388f5ecd6425a9d9d931144c16c05c7a84eceb9a1454bb92", size = 51263, upload-time = "2025-12-11T13:13:48.633Z" }
228
+ sdist = { url = "https://files.pythonhosted.org/packages/a6/f2/87bf02eb97d20695bd39e1f8b33563bb85fc86301241c33f1c5e1a6dab86/deepl-1.30.0.tar.gz", hash = "sha256:491da545da6f6145db69a19bc4460a8fb66b29307c68d55f9297910cdcb577d9", size = 56527, upload-time = "2026-04-09T18:38:50.727Z" }
229
229
  wheels = [
230
- { url = "https://files.pythonhosted.org/packages/26/98/95d6219e102a8a6be2310c3076599e0678b862dc642c25a117335b9a3998/deepl-1.27.0-py3-none-any.whl", hash = "sha256:97cca5ed3be23353c199889c442ca7bda4c3f03327e92d7797c077d5cfc9b61f", size = 46267, upload-time = "2025-12-11T13:13:47.493Z" },
230
+ { url = "https://files.pythonhosted.org/packages/b2/41/1174945272c2d5331d5e49d29110c95e24458d681d4949ffef3b67210745/deepl-1.30.0-py3-none-any.whl", hash = "sha256:b4e08ef484522ba62ba4895a9c43a980981b07d2e989cc99b5ee68e00d3675c3", size = 49903, upload-time = "2026-04-09T18:38:49.481Z" },
231
231
  ]
232
232
 
233
233
  [[package]]
234
234
  name = "deepl-haystack"
235
- version = "0.3.1"
235
+ version = "0.4.0"
236
236
  source = { editable = "." }
237
237
  dependencies = [
238
238
  { name = "deepl" },
@@ -260,15 +260,15 @@ test = [
260
260
  [package.metadata]
261
261
  requires-dist = [
262
262
  { name = "deepl", specifier = ">=1.19.1,<2" },
263
- { name = "haystack-ai", specifier = ">=2.0.0,<3" },
263
+ { name = "haystack-ai", specifier = ">=2.0.0,<4" },
264
264
  ]
265
265
 
266
266
  [package.metadata.requires-dev]
267
- ci = [{ name = "setuptools", specifier = ">=80.9.0,<81" }]
267
+ ci = [{ name = "setuptools", specifier = ">=80.9.0,<83" }]
268
268
  dev = [{ name = "pre-commit", specifier = ">=4.3.0,<5" }]
269
269
  lint = [
270
270
  { name = "mypy", specifier = "==1.19.1" },
271
- { name = "ruff", specifier = "==0.14.10" },
271
+ { name = "ruff", specifier = "==0.15.10" },
272
272
  ]
273
273
  test = [
274
274
  { name = "pytest", specifier = ">=8.3.5,<9" },
@@ -309,7 +309,7 @@ name = "exceptiongroup"
309
309
  version = "1.3.0"
310
310
  source = { registry = "https://pypi.org/simple" }
311
311
  dependencies = [
312
- { name = "typing-extensions", marker = "python_full_version < '3.11'" },
312
+ { name = "typing-extensions" },
313
313
  ]
314
314
  sdist = { url = "https://files.pythonhosted.org/packages/0b/9f/a65090624ecf468cdca03533906e7c69ed7588582240cfe7cc9e770b50eb/exceptiongroup-1.3.0.tar.gz", hash = "sha256:b241f5885f560bc56a59ee63ca4c6a8bfa46ae4ad651af316d4e81817bb9fd88", size = 29749, upload-time = "2025-05-10T17:42:51.123Z" }
315
315
  wheels = [
@@ -1224,16 +1224,16 @@ wheels = [
1224
1224
 
1225
1225
  [[package]]
1226
1226
  name = "pytest-cov"
1227
- version = "7.0.0"
1227
+ version = "7.1.0"
1228
1228
  source = { registry = "https://pypi.org/simple" }
1229
1229
  dependencies = [
1230
1230
  { name = "coverage", extra = ["toml"] },
1231
1231
  { name = "pluggy" },
1232
1232
  { name = "pytest" },
1233
1233
  ]
1234
- sdist = { url = "https://files.pythonhosted.org/packages/5e/f7/c933acc76f5208b3b00089573cf6a2bc26dc80a8aece8f52bb7d6b1855ca/pytest_cov-7.0.0.tar.gz", hash = "sha256:33c97eda2e049a0c5298e91f519302a1334c26ac65c1a483d6206fd458361af1", size = 54328, upload-time = "2025-09-09T10:57:02.113Z" }
1234
+ sdist = { url = "https://files.pythonhosted.org/packages/b1/51/a849f96e117386044471c8ec2bd6cfebacda285da9525c9106aeb28da671/pytest_cov-7.1.0.tar.gz", hash = "sha256:30674f2b5f6351aa09702a9c8c364f6a01c27aae0c1366ae8016160d1efc56b2", size = 55592, upload-time = "2026-03-21T20:11:16.284Z" }
1235
1235
  wheels = [
1236
- { url = "https://files.pythonhosted.org/packages/ee/49/1377b49de7d0c1ce41292161ea0f721913fa8722c19fb9c1e3aa0367eecb/pytest_cov-7.0.0-py3-none-any.whl", hash = "sha256:3b8e9558b16cc1479da72058bdecf8073661c7f57f7d3c5f22a1c23507f2d861", size = 22424, upload-time = "2025-09-09T10:57:00.695Z" },
1236
+ { url = "https://files.pythonhosted.org/packages/9d/7a/d968e294073affff457b041c2be9868a40c1c71f4a35fcc1e45e5493067b/pytest_cov-7.1.0-py3-none-any.whl", hash = "sha256:a0461110b7865f9a271aa1b51e516c9a95de9d696734a2f71e3e78f46e1d4678", size = 22876, upload-time = "2026-03-21T20:11:14.438Z" },
1237
1237
  ]
1238
1238
 
1239
1239
  [[package]]
@@ -1499,37 +1499,36 @@ wheels = [
1499
1499
 
1500
1500
  [[package]]
1501
1501
  name = "ruff"
1502
- version = "0.14.10"
1503
- source = { registry = "https://pypi.org/simple" }
1504
- sdist = { url = "https://files.pythonhosted.org/packages/57/08/52232a877978dd8f9cf2aeddce3e611b40a63287dfca29b6b8da791f5e8d/ruff-0.14.10.tar.gz", hash = "sha256:9a2e830f075d1a42cd28420d7809ace390832a490ed0966fe373ba288e77aaf4", size = 5859763, upload-time = "2025-12-18T19:28:57.98Z" }
1505
- wheels = [
1506
- { url = "https://files.pythonhosted.org/packages/60/01/933704d69f3f05ee16ef11406b78881733c186fe14b6a46b05cfcaf6d3b2/ruff-0.14.10-py3-none-linux_armv6l.whl", hash = "sha256:7a3ce585f2ade3e1f29ec1b92df13e3da262178df8c8bdf876f48fa0e8316c49", size = 13527080, upload-time = "2025-12-18T19:29:25.642Z" },
1507
- { url = "https://files.pythonhosted.org/packages/df/58/a0349197a7dfa603ffb7f5b0470391efa79ddc327c1e29c4851e85b09cc5/ruff-0.14.10-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:674f9be9372907f7257c51f1d4fc902cb7cf014b9980152b802794317941f08f", size = 13797320, upload-time = "2025-12-18T19:29:02.571Z" },
1508
- { url = "https://files.pythonhosted.org/packages/7b/82/36be59f00a6082e38c23536df4e71cdbc6af8d7c707eade97fcad5c98235/ruff-0.14.10-py3-none-macosx_11_0_arm64.whl", hash = "sha256:d85713d522348837ef9df8efca33ccb8bd6fcfc86a2cde3ccb4bc9d28a18003d", size = 12918434, upload-time = "2025-12-18T19:28:51.202Z" },
1509
- { url = "https://files.pythonhosted.org/packages/a6/00/45c62a7f7e34da92a25804f813ebe05c88aa9e0c25e5cb5a7d23dd7450e3/ruff-0.14.10-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6987ebe0501ae4f4308d7d24e2d0fe3d7a98430f5adfd0f1fead050a740a3a77", size = 13371961, upload-time = "2025-12-18T19:29:04.991Z" },
1510
- { url = "https://files.pythonhosted.org/packages/40/31/a5906d60f0405f7e57045a70f2d57084a93ca7425f22e1d66904769d1628/ruff-0.14.10-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:16a01dfb7b9e4eee556fbfd5392806b1b8550c9b4a9f6acd3dbe6812b193c70a", size = 13275629, upload-time = "2025-12-18T19:29:21.381Z" },
1511
- { url = "https://files.pythonhosted.org/packages/3e/60/61c0087df21894cf9d928dc04bcd4fb10e8b2e8dca7b1a276ba2155b2002/ruff-0.14.10-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7165d31a925b7a294465fa81be8c12a0e9b60fb02bf177e79067c867e71f8b1f", size = 14029234, upload-time = "2025-12-18T19:29:00.132Z" },
1512
- { url = "https://files.pythonhosted.org/packages/44/84/77d911bee3b92348b6e5dab5a0c898d87084ea03ac5dc708f46d88407def/ruff-0.14.10-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:c561695675b972effb0c0a45db233f2c816ff3da8dcfbe7dfc7eed625f218935", size = 15449890, upload-time = "2025-12-18T19:28:53.573Z" },
1513
- { url = "https://files.pythonhosted.org/packages/e9/36/480206eaefa24a7ec321582dda580443a8f0671fdbf6b1c80e9c3e93a16a/ruff-0.14.10-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4bb98fcbbc61725968893682fd4df8966a34611239c9fd07a1f6a07e7103d08e", size = 15123172, upload-time = "2025-12-18T19:29:23.453Z" },
1514
- { url = "https://files.pythonhosted.org/packages/5c/38/68e414156015ba80cef5473d57919d27dfb62ec804b96180bafdeaf0e090/ruff-0.14.10-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f24b47993a9d8cb858429e97bdf8544c78029f09b520af615c1d261bf827001d", size = 14460260, upload-time = "2025-12-18T19:29:27.808Z" },
1515
- { url = "https://files.pythonhosted.org/packages/b3/19/9e050c0dca8aba824d67cc0db69fb459c28d8cd3f6855b1405b3f29cc91d/ruff-0.14.10-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59aabd2e2c4fd614d2862e7939c34a532c04f1084476d6833dddef4afab87e9f", size = 14229978, upload-time = "2025-12-18T19:29:11.32Z" },
1516
- { url = "https://files.pythonhosted.org/packages/51/eb/e8dd1dd6e05b9e695aa9dd420f4577debdd0f87a5ff2fedda33c09e9be8c/ruff-0.14.10-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:213db2b2e44be8625002dbea33bb9c60c66ea2c07c084a00d55732689d697a7f", size = 14338036, upload-time = "2025-12-18T19:29:09.184Z" },
1517
- { url = "https://files.pythonhosted.org/packages/6a/12/f3e3a505db7c19303b70af370d137795fcfec136d670d5de5391e295c134/ruff-0.14.10-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:b914c40ab64865a17a9a5b67911d14df72346a634527240039eb3bd650e5979d", size = 13264051, upload-time = "2025-12-18T19:29:13.431Z" },
1518
- { url = "https://files.pythonhosted.org/packages/08/64/8c3a47eaccfef8ac20e0484e68e0772013eb85802f8a9f7603ca751eb166/ruff-0.14.10-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:1484983559f026788e3a5c07c81ef7d1e97c1c78ed03041a18f75df104c45405", size = 13283998, upload-time = "2025-12-18T19:29:06.994Z" },
1519
- { url = "https://files.pythonhosted.org/packages/12/84/534a5506f4074e5cc0529e5cd96cfc01bb480e460c7edf5af70d2bcae55e/ruff-0.14.10-py3-none-musllinux_1_2_i686.whl", hash = "sha256:c70427132db492d25f982fffc8d6c7535cc2fd2c83fc8888f05caaa248521e60", size = 13601891, upload-time = "2025-12-18T19:28:55.811Z" },
1520
- { url = "https://files.pythonhosted.org/packages/0d/1e/14c916087d8598917dbad9b2921d340f7884824ad6e9c55de948a93b106d/ruff-0.14.10-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:5bcf45b681e9f1ee6445d317ce1fa9d6cba9a6049542d1c3d5b5958986be8830", size = 14336660, upload-time = "2025-12-18T19:29:16.531Z" },
1521
- { url = "https://files.pythonhosted.org/packages/f2/1c/d7b67ab43f30013b47c12b42d1acd354c195351a3f7a1d67f59e54227ede/ruff-0.14.10-py3-none-win32.whl", hash = "sha256:104c49fc7ab73f3f3a758039adea978869a918f31b73280db175b43a2d9b51d6", size = 13196187, upload-time = "2025-12-18T19:29:19.006Z" },
1522
- { url = "https://files.pythonhosted.org/packages/fb/9c/896c862e13886fae2af961bef3e6312db9ebc6adc2b156fe95e615dee8c1/ruff-0.14.10-py3-none-win_amd64.whl", hash = "sha256:466297bd73638c6bdf06485683e812db1c00c7ac96d4ddd0294a338c62fdc154", size = 14661283, upload-time = "2025-12-18T19:29:30.16Z" },
1523
- { url = "https://files.pythonhosted.org/packages/74/31/b0e29d572670dca3674eeee78e418f20bdf97fa8aa9ea71380885e175ca0/ruff-0.14.10-py3-none-win_arm64.whl", hash = "sha256:e51d046cf6dda98a4633b8a8a771451107413b0f07183b2bef03f075599e44e6", size = 13729839, upload-time = "2025-12-18T19:28:48.636Z" },
1502
+ version = "0.15.10"
1503
+ source = { registry = "https://pypi.org/simple" }
1504
+ sdist = { url = "https://files.pythonhosted.org/packages/e7/d9/aa3f7d59a10ef6b14fe3431706f854dbf03c5976be614a9796d36326810c/ruff-0.15.10.tar.gz", hash = "sha256:d1f86e67ebfdef88e00faefa1552b5e510e1d35f3be7d423dc7e84e63788c94e", size = 4631728, upload-time = "2026-04-09T14:06:09.884Z" }
1505
+ wheels = [
1506
+ { url = "https://files.pythonhosted.org/packages/eb/00/a1c2fdc9939b2c03691edbda290afcd297f1f389196172826b03d6b6a595/ruff-0.15.10-py3-none-linux_armv6l.whl", hash = "sha256:0744e31482f8f7d0d10a11fcbf897af272fefdfcb10f5af907b18c2813ff4d5f", size = 10563362, upload-time = "2026-04-09T14:06:21.189Z" },
1507
+ { url = "https://files.pythonhosted.org/packages/5c/15/006990029aea0bebe9d33c73c3e28c80c391ebdba408d1b08496f00d422d/ruff-0.15.10-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:b1e7c16ea0ff5a53b7c2df52d947e685973049be1cdfe2b59a9c43601897b22e", size = 10951122, upload-time = "2026-04-09T14:06:02.236Z" },
1508
+ { url = "https://files.pythonhosted.org/packages/f2/c0/4ac978fe874d0618c7da647862afe697b281c2806f13ce904ad652fa87e4/ruff-0.15.10-py3-none-macosx_11_0_arm64.whl", hash = "sha256:93cc06a19e5155b4441dd72808fdf84290d84ad8a39ca3b0f994363ade4cebb1", size = 10314005, upload-time = "2026-04-09T14:06:00.026Z" },
1509
+ { url = "https://files.pythonhosted.org/packages/da/73/c209138a5c98c0d321266372fc4e33ad43d506d7e5dd817dd89b60a8548f/ruff-0.15.10-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:83e1dd04312997c99ea6965df66a14fb4f03ba978564574ffc68b0d61fd3989e", size = 10643450, upload-time = "2026-04-09T14:05:42.137Z" },
1510
+ { url = "https://files.pythonhosted.org/packages/ec/76/0deec355d8ec10709653635b1f90856735302cb8e149acfdf6f82a5feb70/ruff-0.15.10-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8154d43684e4333360fedd11aaa40b1b08a4e37d8ffa9d95fee6fa5b37b6fab1", size = 10379597, upload-time = "2026-04-09T14:05:49.984Z" },
1511
+ { url = "https://files.pythonhosted.org/packages/dc/be/86bba8fc8798c081e28a4b3bb6d143ccad3fd5f6f024f02002b8f08a9fa3/ruff-0.15.10-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8ab88715f3a6deb6bde6c227f3a123410bec7b855c3ae331b4c006189e895cef", size = 11146645, upload-time = "2026-04-09T14:06:12.246Z" },
1512
+ { url = "https://files.pythonhosted.org/packages/a8/89/140025e65911b281c57be1d385ba1d932c2366ca88ae6663685aed8d4881/ruff-0.15.10-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a768ff5969b4f44c349d48edf4ab4f91eddb27fd9d77799598e130fb628aa158", size = 12030289, upload-time = "2026-04-09T14:06:04.776Z" },
1513
+ { url = "https://files.pythonhosted.org/packages/88/de/ddacca9545a5e01332567db01d44bd8cf725f2db3b3d61a80550b48308ea/ruff-0.15.10-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ee3ef42dab7078bda5ff6a1bcba8539e9857deb447132ad5566a038674540d0", size = 11496266, upload-time = "2026-04-09T14:05:55.485Z" },
1514
+ { url = "https://files.pythonhosted.org/packages/bc/bb/7ddb00a83760ff4a83c4e2fc231fd63937cc7317c10c82f583302e0f6586/ruff-0.15.10-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:51cb8cc943e891ba99989dd92d61e29b1d231e14811db9be6440ecf25d5c1609", size = 11256418, upload-time = "2026-04-09T14:05:57.69Z" },
1515
+ { url = "https://files.pythonhosted.org/packages/dc/8d/55de0d35aacf6cd50b6ee91ee0f291672080021896543776f4170fc5c454/ruff-0.15.10-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:e59c9bdc056a320fb9ea1700a8d591718b8faf78af065484e801258d3a76bc3f", size = 11288416, upload-time = "2026-04-09T14:05:44.695Z" },
1516
+ { url = "https://files.pythonhosted.org/packages/68/cf/9438b1a27426ec46a80e0a718093c7f958ef72f43eb3111862949ead3cc1/ruff-0.15.10-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:136c00ca2f47b0018b073f28cb5c1506642a830ea941a60354b0e8bc8076b151", size = 10621053, upload-time = "2026-04-09T14:05:52.782Z" },
1517
+ { url = "https://files.pythonhosted.org/packages/4c/50/e29be6e2c135e9cd4cb15fbade49d6a2717e009dff3766dd080fcb82e251/ruff-0.15.10-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:8b80a2f3c9c8a950d6237f2ca12b206bccff626139be9fa005f14feb881a1ae8", size = 10378302, upload-time = "2026-04-09T14:06:14.361Z" },
1518
+ { url = "https://files.pythonhosted.org/packages/18/2f/e0b36a6f99c51bb89f3a30239bc7bf97e87a37ae80aa2d6542d6e5150364/ruff-0.15.10-py3-none-musllinux_1_2_i686.whl", hash = "sha256:e3e53c588164dc025b671c9df2462429d60357ea91af7e92e9d56c565a9f1b07", size = 10850074, upload-time = "2026-04-09T14:06:16.581Z" },
1519
+ { url = "https://files.pythonhosted.org/packages/11/08/874da392558ce087a0f9b709dc6ec0d60cbc694c1c772dab8d5f31efe8cb/ruff-0.15.10-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:b0c52744cf9f143a393e284125d2576140b68264a93c6716464e129a3e9adb48", size = 11358051, upload-time = "2026-04-09T14:06:18.948Z" },
1520
+ { url = "https://files.pythonhosted.org/packages/e4/46/602938f030adfa043e67112b73821024dc79f3ab4df5474c25fa4c1d2d14/ruff-0.15.10-py3-none-win32.whl", hash = "sha256:d4272e87e801e9a27a2e8df7b21011c909d9ddd82f4f3281d269b6ba19789ca5", size = 10588964, upload-time = "2026-04-09T14:06:07.14Z" },
1521
+ { url = "https://files.pythonhosted.org/packages/25/b6/261225b875d7a13b33a6d02508c39c28450b2041bb01d0f7f1a83d569512/ruff-0.15.10-py3-none-win_amd64.whl", hash = "sha256:28cb32d53203242d403d819fd6983152489b12e4a3ae44993543d6fe62ab42ed", size = 11745044, upload-time = "2026-04-09T14:05:39.473Z" },
1522
+ { url = "https://files.pythonhosted.org/packages/58/ed/dea90a65b7d9e69888890fb14c90d7f51bf0c1e82ad800aeb0160e4bacfd/ruff-0.15.10-py3-none-win_arm64.whl", hash = "sha256:601d1610a9e1f1c2165a4f561eeaa2e2ea1e97f3287c5aa258d3dab8b57c6188", size = 11035607, upload-time = "2026-04-09T14:05:47.593Z" },
1524
1523
  ]
1525
1524
 
1526
1525
  [[package]]
1527
1526
  name = "setuptools"
1528
- version = "80.9.0"
1527
+ version = "82.0.1"
1529
1528
  source = { registry = "https://pypi.org/simple" }
1530
- sdist = { url = "https://files.pythonhosted.org/packages/18/5d/3bf57dcd21979b887f014ea83c24ae194cfcd12b9e0fda66b957c69d1fca/setuptools-80.9.0.tar.gz", hash = "sha256:f36b47402ecde768dbfafc46e8e4207b4360c654f1f3bb84475f0a28628fb19c", size = 1319958, upload-time = "2025-05-27T00:56:51.443Z" }
1529
+ sdist = { url = "https://files.pythonhosted.org/packages/4f/db/cfac1baf10650ab4d1c111714410d2fbb77ac5a616db26775db562c8fab2/setuptools-82.0.1.tar.gz", hash = "sha256:7d872682c5d01cfde07da7bccc7b65469d3dca203318515ada1de5eda35efbf9", size = 1152316, upload-time = "2026-03-09T12:47:17.221Z" }
1531
1530
  wheels = [
1532
- { url = "https://files.pythonhosted.org/packages/a3/dc/17031897dae0efacfea57dfd3a82fdd2a2aeb58e0ff71b77b87e44edc772/setuptools-80.9.0-py3-none-any.whl", hash = "sha256:062d34222ad13e0cc312a4c02d73f059e86a4acbfbdea8f8f76b28c99f306922", size = 1201486, upload-time = "2025-05-27T00:56:49.664Z" },
1531
+ { url = "https://files.pythonhosted.org/packages/9d/76/f789f7a86709c6b087c5a2f52f911838cad707cc613162401badc665acfe/setuptools-82.0.1-py3-none-any.whl", hash = "sha256:a59e362652f08dcd477c78bb6e7bd9d80a7995bc73ce773050228a348ce2e5bb", size = 1006223, upload-time = "2026-03-09T12:47:15.026Z" },
1533
1532
  ]
1534
1533
 
1535
1534
  [[package]]
File without changes
File without changes
File without changes