redis-lua-py 0.2.1__tar.gz → 0.3.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 (68) hide show
  1. {redis_lua_py-0.2.1 → redis_lua_py-0.3.0}/.github/workflows/ci.yml +16 -1
  2. redis_lua_py-0.3.0/.release-please-manifest.json +3 -0
  3. {redis_lua_py-0.2.1 → redis_lua_py-0.3.0}/CHANGELOG.md +7 -0
  4. {redis_lua_py-0.2.1 → redis_lua_py-0.3.0}/PKG-INFO +5 -4
  5. {redis_lua_py-0.2.1 → redis_lua_py-0.3.0}/README.md +1 -1
  6. {redis_lua_py-0.2.1 → redis_lua_py-0.3.0}/docs/installation.md +2 -2
  7. {redis_lua_py-0.2.1 → redis_lua_py-0.3.0}/pyproject.toml +8 -5
  8. {redis_lua_py-0.2.1 → redis_lua_py-0.3.0}/src/redis_lua_py/__init__.py +1 -1
  9. {redis_lua_py-0.2.1 → redis_lua_py-0.3.0}/src/redis_lua_py/_script.py +4 -3
  10. {redis_lua_py-0.2.1 → redis_lua_py-0.3.0}/tests/conftest.py +2 -2
  11. {redis_lua_py-0.2.1 → redis_lua_py-0.3.0}/tests/test_commands.py +6 -2
  12. {redis_lua_py-0.2.1 → redis_lua_py-0.3.0}/tests/test_typing.py +6 -1
  13. {redis_lua_py-0.2.1 → redis_lua_py-0.3.0}/uv.lock +75 -3
  14. redis_lua_py-0.2.1/.release-please-manifest.json +0 -3
  15. {redis_lua_py-0.2.1 → redis_lua_py-0.3.0}/.github/assets/README.md +0 -0
  16. {redis_lua_py-0.2.1 → redis_lua_py-0.3.0}/.github/assets/banner-dark.svg +0 -0
  17. {redis_lua_py-0.2.1 → redis_lua_py-0.3.0}/.github/assets/banner-light.svg +0 -0
  18. {redis_lua_py-0.2.1 → redis_lua_py-0.3.0}/.github/assets/generate.py +0 -0
  19. {redis_lua_py-0.2.1 → redis_lua_py-0.3.0}/.github/assets/logo.svg +0 -0
  20. {redis_lua_py-0.2.1 → redis_lua_py-0.3.0}/.github/assets/logomark.svg +0 -0
  21. {redis_lua_py-0.2.1 → redis_lua_py-0.3.0}/.github/assets/social-preview.png +0 -0
  22. {redis_lua_py-0.2.1 → redis_lua_py-0.3.0}/.github/assets/social-preview.svg +0 -0
  23. {redis_lua_py-0.2.1 → redis_lua_py-0.3.0}/.github/workflows/docs.yml +0 -0
  24. {redis_lua_py-0.2.1 → redis_lua_py-0.3.0}/.github/workflows/pr-title.yml +0 -0
  25. {redis_lua_py-0.2.1 → redis_lua_py-0.3.0}/.github/workflows/release.yml +0 -0
  26. {redis_lua_py-0.2.1 → redis_lua_py-0.3.0}/.gitignore +0 -0
  27. {redis_lua_py-0.2.1 → redis_lua_py-0.3.0}/.python-version +0 -0
  28. {redis_lua_py-0.2.1 → redis_lua_py-0.3.0}/CONTRIBUTING.md +0 -0
  29. {redis_lua_py-0.2.1 → redis_lua_py-0.3.0}/LICENSE +0 -0
  30. {redis_lua_py-0.2.1 → redis_lua_py-0.3.0}/docs/assets/logo.svg +0 -0
  31. {redis_lua_py-0.2.1 → redis_lua_py-0.3.0}/docs/contributing.md +0 -0
  32. {redis_lua_py-0.2.1 → redis_lua_py-0.3.0}/docs/development.md +0 -0
  33. {redis_lua_py-0.2.1 → redis_lua_py-0.3.0}/docs/examples.md +0 -0
  34. {redis_lua_py-0.2.1 → redis_lua_py-0.3.0}/docs/guide/async.md +0 -0
  35. {redis_lua_py-0.2.1 → redis_lua_py-0.3.0}/docs/guide/binary-values.md +0 -0
  36. {redis_lua_py-0.2.1 → redis_lua_py-0.3.0}/docs/guide/binding-a-client.md +0 -0
  37. {redis_lua_py-0.2.1 → redis_lua_py-0.3.0}/docs/guide/calling-redis-commands.md +0 -0
  38. {redis_lua_py-0.2.1 → redis_lua_py-0.3.0}/docs/guide/constants.md +0 -0
  39. {redis_lua_py-0.2.1 → redis_lua_py-0.3.0}/docs/guide/generated-lua.md +0 -0
  40. {redis_lua_py-0.2.1 → redis_lua_py-0.3.0}/docs/guide/keys-and-arguments.md +0 -0
  41. {redis_lua_py-0.2.1 → redis_lua_py-0.3.0}/docs/guide/return-values.md +0 -0
  42. {redis_lua_py-0.2.1 → redis_lua_py-0.3.0}/docs/guide/testing.md +0 -0
  43. {redis_lua_py-0.2.1 → redis_lua_py-0.3.0}/docs/index.md +0 -0
  44. {redis_lua_py-0.2.1 → redis_lua_py-0.3.0}/docs/quickstart.md +0 -0
  45. {redis_lua_py-0.2.1 → redis_lua_py-0.3.0}/docs/reference/api.md +0 -0
  46. {redis_lua_py-0.2.1 → redis_lua_py-0.3.0}/docs/reference/errors.md +0 -0
  47. {redis_lua_py-0.2.1 → redis_lua_py-0.3.0}/docs/reference/lua-vs-python.md +0 -0
  48. {redis_lua_py-0.2.1 → redis_lua_py-0.3.0}/docs/reference/supported-subset.md +0 -0
  49. {redis_lua_py-0.2.1 → redis_lua_py-0.3.0}/docs/stylesheets/extra.css +0 -0
  50. {redis_lua_py-0.2.1 → redis_lua_py-0.3.0}/release-please-config.json +0 -0
  51. {redis_lua_py-0.2.1 → redis_lua_py-0.3.0}/scripts/generate_commands.py +0 -0
  52. {redis_lua_py-0.2.1 → redis_lua_py-0.3.0}/src/redis_lua_py/_commands.py +0 -0
  53. {redis_lua_py-0.2.1 → redis_lua_py-0.3.0}/src/redis_lua_py/_compile.py +0 -0
  54. {redis_lua_py-0.2.1 → redis_lua_py-0.3.0}/src/redis_lua_py/_lua.py +0 -0
  55. {redis_lua_py-0.2.1 → redis_lua_py-0.3.0}/src/redis_lua_py/_runtime.py +0 -0
  56. {redis_lua_py-0.2.1 → redis_lua_py-0.3.0}/src/redis_lua_py/errors.py +0 -0
  57. {redis_lua_py-0.2.1 → redis_lua_py-0.3.0}/src/redis_lua_py/py.typed +0 -0
  58. {redis_lua_py-0.2.1 → redis_lua_py-0.3.0}/tests/module_with_client.py +0 -0
  59. {redis_lua_py-0.2.1 → redis_lua_py-0.3.0}/tests/module_without_import.py +0 -0
  60. {redis_lua_py-0.2.1 → redis_lua_py-0.3.0}/tests/test_binary.py +0 -0
  61. {redis_lua_py-0.2.1 → redis_lua_py-0.3.0}/tests/test_binding.py +0 -0
  62. {redis_lua_py-0.2.1 → redis_lua_py-0.3.0}/tests/test_compile.py +0 -0
  63. {redis_lua_py-0.2.1 → redis_lua_py-0.3.0}/tests/test_constants.py +0 -0
  64. {redis_lua_py-0.2.1 → redis_lua_py-0.3.0}/tests/test_errors.py +0 -0
  65. {redis_lua_py-0.2.1 → redis_lua_py-0.3.0}/tests/test_execute.py +0 -0
  66. {redis_lua_py-0.2.1 → redis_lua_py-0.3.0}/tests/test_namespace.py +0 -0
  67. {redis_lua_py-0.2.1 → redis_lua_py-0.3.0}/tests/test_semantics.py +0 -0
  68. {redis_lua_py-0.2.1 → redis_lua_py-0.3.0}/zensical.toml +0 -0
@@ -25,7 +25,7 @@ jobs:
25
25
  strategy:
26
26
  fail-fast: false
27
27
  matrix:
28
- python-version: ["3.11", "3.12", "3.13"]
28
+ python-version: ["3.10", "3.11", "3.12", "3.13"]
29
29
  steps:
30
30
  - uses: actions/checkout@v4
31
31
  - uses: astral-sh/setup-uv@v5
@@ -34,6 +34,21 @@ jobs:
34
34
  - run: uv sync --dev --python ${{ matrix.python-version }}
35
35
  - run: uv run pytest
36
36
 
37
+ oldest:
38
+ name: Tests (oldest supported Python and redis-py)
39
+ runs-on: ubuntu-latest
40
+ steps:
41
+ - uses: actions/checkout@v4
42
+ - uses: astral-sh/setup-uv@v5
43
+ with:
44
+ enable-cache: true
45
+ - run: uv sync --dev --python 3.10
46
+ # The floor in pyproject.toml is only a claim until something runs on it.
47
+ # fakeredis declares redis>=4.3 but works on 4.2, the first release with
48
+ # redis.asyncio, so the pin goes in after the resolver is done.
49
+ - run: uv pip install --no-deps "redis==4.2.0" async-timeout deprecated
50
+ - run: uv run --no-sync pytest
51
+
37
52
  live:
38
53
  name: Tests against a real Redis
39
54
  runs-on: ubuntu-latest
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "0.3.0"
3
+ }
@@ -7,6 +7,13 @@ are written by [release-please](https://github.com/googleapis/release-please)
7
7
  from the conventional commit subjects on `main`; see
8
8
  [CONTRIBUTING.md](CONTRIBUTING.md) for how a release is cut.
9
9
 
10
+ ## [0.3.0](https://github.com/IgnaceMaes/redis-lua-py/compare/v0.2.1...v0.3.0) (2026-09-12)
11
+
12
+
13
+ ### Added
14
+
15
+ * support python 3.10 and redis-py 4.2 ([#6](https://github.com/IgnaceMaes/redis-lua-py/issues/6)) ([6ce6249](https://github.com/IgnaceMaes/redis-lua-py/commit/6ce6249d219756a598e83f18f3bf44e8a58722eb))
16
+
10
17
  ## [0.2.1](https://github.com/IgnaceMaes/redis-lua-py/compare/v0.2.0...v0.2.1) (2026-09-12)
11
18
 
12
19
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: redis-lua-py
3
- Version: 0.2.1
3
+ Version: 0.3.0
4
4
  Summary: Write Redis Lua scripts as real Python functions, not strings.
5
5
  Project-URL: Homepage, https://ignacemaes.com/redis-lua-py/
6
6
  Project-URL: Documentation, https://ignacemaes.com/redis-lua-py/
@@ -14,13 +14,14 @@ Keywords: eval,evalsha,lua,redis,scripting,transpiler
14
14
  Classifier: Development Status :: 3 - Alpha
15
15
  Classifier: Intended Audience :: Developers
16
16
  Classifier: Programming Language :: Lua
17
+ Classifier: Programming Language :: Python :: 3.10
17
18
  Classifier: Programming Language :: Python :: 3.11
18
19
  Classifier: Programming Language :: Python :: 3.12
19
20
  Classifier: Programming Language :: Python :: 3.13
20
21
  Classifier: Topic :: Database
21
22
  Classifier: Typing :: Typed
22
- Requires-Python: >=3.11
23
- Requires-Dist: redis>=5.0
23
+ Requires-Python: >=3.10
24
+ Requires-Dist: redis>=4.2
24
25
  Description-Content-Type: text/markdown
25
26
 
26
27
  <p align="center">
@@ -88,7 +89,7 @@ for the script namespace, so the two never collide.
88
89
  uv add redis-lua-py
89
90
  ```
90
91
 
91
- Python 3.11+, and redis-py 5.0+ as the only dependency.
92
+ Python 3.10+, and redis-py 4.2+ as the only dependency.
92
93
 
93
94
  ## What it compiles to
94
95
 
@@ -63,7 +63,7 @@ for the script namespace, so the two never collide.
63
63
  uv add redis-lua-py
64
64
  ```
65
65
 
66
- Python 3.11+, and redis-py 5.0+ as the only dependency.
66
+ Python 3.10+, and redis-py 4.2+ as the only dependency.
67
67
 
68
68
  ## What it compiles to
69
69
 
@@ -12,8 +12,8 @@ pip install redis-lua-py
12
12
 
13
13
  ## Requirements
14
14
 
15
- - Python 3.11 or newer
16
- - [redis-py](https://github.com/redis/redis-py) 5.0 or newer — the only
15
+ - Python 3.10 or newer
16
+ - [redis-py](https://github.com/redis/redis-py) 4.2 or newer — the only
17
17
  dependency, and installed with the package
18
18
 
19
19
  Script caching, `EVALSHA` and the `NOSCRIPT` reload are handled by redis-py's
@@ -1,9 +1,9 @@
1
1
  [project]
2
2
  name = "redis-lua-py"
3
- version = "0.2.1"
3
+ version = "0.3.0"
4
4
  description = "Write Redis Lua scripts as real Python functions, not strings."
5
5
  readme = "README.md"
6
- requires-python = ">=3.11"
6
+ requires-python = ">=3.10"
7
7
  license = "MIT"
8
8
  license-files = ["LICENSE"]
9
9
  authors = [{ name = "Ignace Maes" }]
@@ -11,6 +11,7 @@ keywords = ["redis", "lua", "eval", "evalsha", "transpiler", "scripting"]
11
11
  classifiers = [
12
12
  "Development Status :: 3 - Alpha",
13
13
  "Intended Audience :: Developers",
14
+ "Programming Language :: Python :: 3.10",
14
15
  "Programming Language :: Python :: 3.11",
15
16
  "Programming Language :: Python :: 3.12",
16
17
  "Programming Language :: Python :: 3.13",
@@ -18,7 +19,7 @@ classifiers = [
18
19
  "Topic :: Database",
19
20
  "Typing :: Typed",
20
21
  ]
21
- dependencies = ["redis>=5.0"]
22
+ dependencies = ["redis>=4.2"]
22
23
 
23
24
  [project.urls]
24
25
  Homepage = "https://ignacemaes.com/redis-lua-py/"
@@ -35,6 +36,8 @@ dev = [
35
36
  "ruff>=0.16",
36
37
  "mypy>=1.15",
37
38
  "zensical>=0.0.61",
39
+ # typing.assert_type, for tests/test_typing.py, arrived in Python 3.11.
40
+ "typing_extensions>=4.2; python_version < '3.11'",
38
41
  ]
39
42
 
40
43
  [build-system]
@@ -52,7 +55,7 @@ addopts = "-q"
52
55
  [tool.ruff]
53
56
  src = ["src", "tests"]
54
57
  line-length = 100
55
- target-version = "py311"
58
+ target-version = "py310"
56
59
 
57
60
  [tool.ruff.lint]
58
61
  select = ["E", "F", "I", "UP", "B", "SIM", "RUF", "N", "C4", "PT"]
@@ -68,7 +71,7 @@ select = ["E", "F", "I", "UP", "B", "SIM", "RUF", "N", "C4", "PT"]
68
71
  "tests/*.py" = ["B007", "F841", "SIM108"]
69
72
 
70
73
  [tool.mypy]
71
- python_version = "3.11"
74
+ python_version = "3.10"
72
75
  strict = true
73
76
  # test_typing.py carries assert_type() claims about what a call returns, which
74
77
  # are only worth anything if mypy actually reads them.
@@ -62,7 +62,7 @@ __all__ = [
62
62
  "script",
63
63
  ]
64
64
 
65
- __version__ = "0.2.1" # x-release-please-version
65
+ __version__ = "0.3.0" # x-release-please-version
66
66
 
67
67
 
68
68
  @overload
@@ -21,11 +21,12 @@ T = TypeVar("T")
21
21
  class AsyncClient(Protocol):
22
22
  """Enough of an async redis-py client to tell it from a sync one.
23
23
 
24
- Only used to type the two shapes of call. ``aclose`` is the discriminator
25
- because every async client has one and no sync client does.
24
+ Only used to type the two shapes of call. ``__aenter__`` is the
25
+ discriminator because every async client has one and no sync client does,
26
+ on every supported redis-py -- ``aclose`` only arrived in redis-py 5.
26
27
  """
27
28
 
28
- async def aclose(self) -> None: ... # pragma: no cover - a typing shape
29
+ async def __aenter__(self) -> Any: ... # pragma: no cover - a typing shape
29
30
 
30
31
  def register_script(self, script: str) -> Any: ... # pragma: no cover
31
32
 
@@ -46,11 +46,11 @@ async def async_client() -> AsyncIterator[Any]:
46
46
  conn = redis.asyncio.Redis.from_url(REDIS_URL)
47
47
  await conn.flushdb()
48
48
  yield conn
49
- await conn.aclose()
50
49
  else:
51
50
  conn = fakeredis.aioredis.FakeRedis()
52
51
  yield conn
53
- await conn.aclose()
52
+ # aclose arrived in redis-py 5, and close is deprecated from then on.
53
+ await (conn.aclose() if hasattr(conn, "aclose") else conn.close())
54
54
 
55
55
 
56
56
  @pytest.fixture
@@ -170,13 +170,14 @@ def test_the_table_matches_the_commands_redis_py_exposes() -> None:
170
170
  } # fmt: skip
171
171
  # Namespaces for module commands, which are spelled with a dot (JSON.GET)
172
172
  # and so can only be reached through redis.call anyway.
173
- modules = {"bf", "cf", "cms", "ft", "json", "tdigest", "topk", "ts", "vset"}
173
+ modules = {"bf", "cf", "cms", "ft", "graph", "json", "tdigest", "topk", "ts", "vset"}
174
174
  # Container commands: valid as attributes only with a subcommand.
175
175
  containers = {"client", "cluster", "command", "object", "pubsub", "sentinel"}
176
176
  # redis-py helpers that are not commands, and STRALGO, gone since Redis 7.
177
177
  not_commands = {"keyspace_notifications", "stralgo"}
178
178
  expected_failures = modules | containers | not_commands
179
179
 
180
+ checked = set()
180
181
  refused = set()
181
182
  for name, member in inspect.getmembers(redis_py.Redis):
182
183
  if name.startswith("_") or not callable(member):
@@ -185,9 +186,12 @@ def test_the_table_matches_the_commands_redis_py_exposes() -> None:
185
186
  continue
186
187
  if name.startswith(("get_", "set_")):
187
188
  continue # get_encoder, set_response_callback and friends
189
+ checked.add(name)
188
190
  try:
189
191
  compiler.command_tokens(node, name) # type: ignore[arg-type]
190
192
  except UnsupportedSyntax:
191
193
  refused.add(name)
192
194
 
193
- assert refused == expected_failures
195
+ # Each redis-py release exposes a different set of these (graph left, vset
196
+ # arrived), so only the exceptions this one actually has are expected.
197
+ assert refused == expected_failures & checked
@@ -8,7 +8,7 @@ pyproject.toml, which lists this file alongside ``src``.
8
8
 
9
9
  from __future__ import annotations
10
10
 
11
- from typing import assert_type
11
+ import sys
12
12
 
13
13
  import redis
14
14
  import redis.asyncio
@@ -16,6 +16,11 @@ import redis.asyncio
16
16
  from redis_lua_py import BoundScript, CompiledScript, Key, script
17
17
  from redis_lua_py import redis as r
18
18
 
19
+ if sys.version_info >= (3, 11):
20
+ from typing import assert_type
21
+ else:
22
+ from typing_extensions import assert_type
23
+
19
24
 
20
25
  @script
21
26
  def counter(k: Key) -> int:
@@ -1,6 +1,6 @@
1
1
  version = 1
2
2
  revision = 3
3
- requires-python = ">=3.11"
3
+ requires-python = ">=3.10"
4
4
  resolution-markers = [
5
5
  "python_full_version >= '3.15'",
6
6
  "python_full_version < '3.15'",
@@ -79,6 +79,15 @@ wheels = [
79
79
  { url = "https://files.pythonhosted.org/packages/fe/ba/e2081de779ca30d473f21f5b30e0e737c438205440784c7dfc81efc2b029/async_timeout-5.0.1-py3-none-any.whl", hash = "sha256:39e3809566ff85354557ec2398b55e096c8364bacac9405a7a1fa429e77fe76c", size = 6233, upload-time = "2024-11-06T16:41:37.9Z" },
80
80
  ]
81
81
 
82
+ [[package]]
83
+ name = "backports-asyncio-runner"
84
+ version = "1.2.0"
85
+ source = { registry = "https://pypi.org/simple" }
86
+ sdist = { url = "https://files.pythonhosted.org/packages/8e/ff/70dca7d7cb1cbc0edb2c6cc0c38b65cba36cccc491eca64cabd5fe7f8670/backports_asyncio_runner-1.2.0.tar.gz", hash = "sha256:a5aa7b2b7d8f8bfcaa2b57313f70792df84e32a2a746f585213373f900b42162", size = 69893, upload-time = "2025-07-02T02:27:15.685Z" }
87
+ wheels = [
88
+ { url = "https://files.pythonhosted.org/packages/a0/59/76ab57e3fe74484f48a53f8e337171b4a2349e506eabe136d7e01d059086/backports_asyncio_runner-1.2.0-py3-none-any.whl", hash = "sha256:0da0a936a8aeb554eccb426dc55af3ba63bcdc69fa1a600b5bb305413a4477b5", size = 12313, upload-time = "2025-07-02T02:27:14.263Z" },
89
+ ]
90
+
82
91
  [[package]]
83
92
  name = "click"
84
93
  version = "8.5.0"
@@ -106,6 +115,18 @@ wheels = [
106
115
  { url = "https://files.pythonhosted.org/packages/20/91/600003aaad107e27553fbc9cbfc57e96fa37e0223d2ef9d7d3a0e8d8d070/deepmerge-3.0.1-py3-none-any.whl", hash = "sha256:35c96f6a68fcf90719a5b31d9f8042ecef6c00fb56836660d33455d0f5cfda65", size = 14909, upload-time = "2026-09-01T14:09:43.364Z" },
107
116
  ]
108
117
 
118
+ [[package]]
119
+ name = "exceptiongroup"
120
+ version = "1.3.1"
121
+ source = { registry = "https://pypi.org/simple" }
122
+ dependencies = [
123
+ { name = "typing-extensions" },
124
+ ]
125
+ sdist = { url = "https://files.pythonhosted.org/packages/50/79/66800aadf48771f6b62f7eb014e352e5d06856655206165d775e675a02c9/exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219", size = 30371, upload-time = "2025-11-21T23:01:54.787Z" }
126
+ wheels = [
127
+ { url = "https://files.pythonhosted.org/packages/8a/0e/97c33bf5009bdbac74fd2beace167cab3f978feb69cc36f1ef79360d6c4e/exceptiongroup-1.3.1-py3-none-any.whl", hash = "sha256:a7a39a3bd276781e98394987d3a5701d0c4edffb633bb7a5144577f82c773598", size = 16740, upload-time = "2025-11-21T23:01:53.443Z" },
128
+ ]
129
+
109
130
  [[package]]
110
131
  name = "fakeredis"
111
132
  version = "2.38.0"
@@ -113,6 +134,7 @@ source = { registry = "https://pypi.org/simple" }
113
134
  dependencies = [
114
135
  { name = "redis" },
115
136
  { name = "sortedcontainers" },
137
+ { name = "typing-extensions", marker = "python_full_version < '3.11'" },
116
138
  ]
117
139
  sdist = { url = "https://files.pythonhosted.org/packages/bf/6b/ad7db311fea3a62f7e359720cc8c064f06f8f0006e65272f50d3a23d37f6/fakeredis-2.38.0.tar.gz", hash = "sha256:d2abfd24652f86501044499bf08c9d639db050f695eefc06b8b8b6f0bb24dbd6", size = 271116, upload-time = "2026-09-08T21:15:04.806Z" }
118
140
  wheels = [
@@ -151,6 +173,20 @@ version = "0.15.0"
151
173
  source = { registry = "https://pypi.org/simple" }
152
174
  sdist = { url = "https://files.pythonhosted.org/packages/36/9b/356320fbae2ac8467e21c5e73e1389c80468e4998c62cc7d3536cc51b614/librt-0.15.0.tar.gz", hash = "sha256:4e66cbe84437497d951b799d3e1551291b6fb3d643820a7014b3655d57a59162", size = 214338, upload-time = "2026-08-07T10:49:42.663Z" }
153
175
  wheels = [
176
+ { url = "https://files.pythonhosted.org/packages/48/12/e2e9ca532cf5a0e08c9489826c4a35c6958c92ba0313fda70e8c6c3912be/librt-0.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e1a49adf16a7c9d9646816c2946135527197b6fcf4347c7b8b761cf1bfbf4489", size = 148673, upload-time = "2026-08-07T10:46:22.569Z" },
177
+ { url = "https://files.pythonhosted.org/packages/6d/7c/02005e23478bd5950618d9712e0fd2b4c511657857f3efd8ba6a5feabcdd/librt-0.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:81a398f45b45a59200e13cd5ad1ae1d3f44334de98b148331afe2cdfee701c52", size = 153547, upload-time = "2026-08-07T10:46:23.931Z" },
178
+ { url = "https://files.pythonhosted.org/packages/a0/90/d8848a735f5642077fc4b3b4bebcdb08edf10178e3add45597f5201a368f/librt-0.15.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4eafbaff06b9563f8b1c850621ce51605de05208e09d4d71ce490bc972b7b9e8", size = 494355, upload-time = "2026-08-07T10:46:25.122Z" },
179
+ { url = "https://files.pythonhosted.org/packages/e1/0b/8604f41ea02feace490e9e405a338a15f9905369f55b239a9ce31c946f24/librt-0.15.0-cp310-cp310-manylinux2014_i686.manylinux_2_17_i686.manylinux_2_28_i686.whl", hash = "sha256:b0411b4066db926b80258c60dcb0e6db4c9cee312eab45b7e8866b17ddf9ada1", size = 485459, upload-time = "2026-08-07T10:46:26.447Z" },
180
+ { url = "https://files.pythonhosted.org/packages/a0/ac/84153bda1ce0da609182527ab92b40d961809e544eefdc5a1c2422971416/librt-0.15.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:febb1ce6cac545a54e6b769982824e955a700fdd9fbf3a08a3d82c990968b57d", size = 498398, upload-time = "2026-08-07T10:46:27.701Z" },
181
+ { url = "https://files.pythonhosted.org/packages/2c/3a/5ca6cd282b2c244bec8ec84102e09773264e9c02891d56ab3a8f0e4d7083/librt-0.15.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b230acc1c3bfe2d6f2627ba2b95dc92e58aa494600e9722d0e6ccbc931e59702", size = 515474, upload-time = "2026-08-07T10:46:28.9Z" },
182
+ { url = "https://files.pythonhosted.org/packages/73/d3/bd34110234779eb843c6ed66aba7c9b2091d3dd85989f1fb9922f564cb7a/librt-0.15.0-cp310-cp310-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:6da110e5f314c19ab8478464d02ae18808ae73d522c15260fa4918acdcd64da9", size = 509484, upload-time = "2026-08-07T10:46:30.124Z" },
183
+ { url = "https://files.pythonhosted.org/packages/1b/6c/43c3f7f071d71631a7daa3b835ef2168ea39f20692d81464d4e47fbaa6d6/librt-0.15.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:eab9208b00ca55bf75983ec99f7bf13acc746a36102e98953addaad7f7ea1e1b", size = 532534, upload-time = "2026-08-07T10:46:31.511Z" },
184
+ { url = "https://files.pythonhosted.org/packages/c5/1c/b854adf036ea817c40408873a5b794d65a91d9f0f39826f2ad2a2d5d7f48/librt-0.15.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:6c013cd3a1721e69e14380ada97eaa4b7b0cdf1c6b96fa765d4ea47c875088db", size = 537087, upload-time = "2026-08-07T10:46:32.734Z" },
185
+ { url = "https://files.pythonhosted.org/packages/25/5c/c9a890e244e7dd725d3bd8b560e41f0aec787eaf343b46956a290ab7b841/librt-0.15.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:567b1c430f8bd560e689421468278ac5941bab4a05303b5d95b6ae10db03f451", size = 536575, upload-time = "2026-08-07T10:46:33.965Z" },
186
+ { url = "https://files.pythonhosted.org/packages/5f/c5/c8e70b60b704299555f55db468eb46b1c81bfc60201ffbfe20407d89870c/librt-0.15.0-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:29c4cab9df457b19672c39be7f384ebb2bc925c4e2684b8780c222b43eb36389", size = 517142, upload-time = "2026-08-07T10:46:35.577Z" },
187
+ { url = "https://files.pythonhosted.org/packages/56/d1/767a90c41f5d381b3195bc88ac0ec4afda35777c9c781e1f9848fedd965e/librt-0.15.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:bccbd8e5b0bffb7106cf18eb1baa3d7194b1cebb3b4b1cdbd4bdb19382a6ee6c", size = 558714, upload-time = "2026-08-07T10:46:36.829Z" },
188
+ { url = "https://files.pythonhosted.org/packages/f9/b4/3c0624b8dc8301ab808f2b3a910995bcabe28df070fb9a0e5505ae997dae/librt-0.15.0-cp310-cp310-win32.whl", hash = "sha256:8ae493ed5f659a7761c43d42f183db514536073ded9bcf671d2d1df47e29a07e", size = 104426, upload-time = "2026-08-07T10:46:38.594Z" },
189
+ { url = "https://files.pythonhosted.org/packages/31/98/e91c0382304bedb2db9c6801897319a9dcb68daac5e975819b562362f20d/librt-0.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:bc25fb356d0c7810bb49ff3df908ad1fda6995d660ab099ded69244ed7ab6053", size = 125057, upload-time = "2026-08-07T10:46:40.052Z" },
154
190
  { url = "https://files.pythonhosted.org/packages/59/52/06790ced2ac7117f890c21bda43c39c958ec82aa665c0718e821d33ff939/librt-0.15.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:823b92cf3c18ecd08afc70c42473888b41b6e8ef5046f3b82c05c154a2fa3d22", size = 148039, upload-time = "2026-08-07T10:46:41.165Z" },
155
191
  { url = "https://files.pythonhosted.org/packages/e7/1d/8e150b7fc449a1f33c8a760965cc1f43b14fc1577d9d0b50ab2701420e74/librt-0.15.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c70bc1b602cf59917e8f0c7a2cbc8bcc6fbc14d5486136b00707a79619121d63", size = 153067, upload-time = "2026-08-07T10:46:42.418Z" },
156
192
  { url = "https://files.pythonhosted.org/packages/51/87/a162bc5a66a35599dc619ecb215145f4de7d68e886b479b6d12593139f7c/librt-0.15.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:814ff83a25b5fce8b9c80c4dd803153fb5c5599fc74db9e022466938368957ef", size = 493087, upload-time = "2026-08-07T10:46:43.657Z" },
@@ -269,6 +305,10 @@ sdist = { url = "https://files.pythonhosted.org/packages/c3/a6/0f869fbb07c393f15
269
305
  wheels = [
270
306
  { url = "https://files.pythonhosted.org/packages/09/21/9be4516ddd22f8eadba336d9ba065d17d79108465ae1b7f71424ab99b9d0/lupa-2.8-cp310-abi3-win32.whl", hash = "sha256:c2a5fd15dc62374e1661a55f01744c9ec1c56f291ba4a0749d3af2174556e78f", size = 1594887, upload-time = "2026-04-15T20:05:23.377Z" },
271
307
  { url = "https://files.pythonhosted.org/packages/2d/99/1557c9685d7034d9ce8dd2b54c40a26d6deb7c67c1fdb5c801abd1a02c3f/lupa-2.8-cp310-abi3-win_arm64.whl", hash = "sha256:9e304fb1c50cf23fd8882afbe1aa87525ef8a72667bcab3b37b2bbb2bc542269", size = 1371742, upload-time = "2026-04-15T20:05:27.417Z" },
308
+ { url = "https://files.pythonhosted.org/packages/1c/34/05ce4745b191633f90ff1ab50f1a19a37da282bb0a41fb500d9157fc9b8f/lupa-2.8-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:97bd01e90b8031e56a5fd5bb70605aea09f1dba675c1140308a52780f93d06f1", size = 1202714, upload-time = "2026-04-15T20:05:31.088Z" },
309
+ { url = "https://files.pythonhosted.org/packages/7d/d2/f70fdbeec2d4c69ee6a469e6cddde9635fff4af4e13fb652e6a1229eef51/lupa-2.8-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0b5ebe1a13c45767919c86750b84fe2da9f6288b6f3cea4ce7660bb2abc9d921", size = 1857453, upload-time = "2026-04-15T20:05:34.611Z" },
310
+ { url = "https://files.pythonhosted.org/packages/97/dc/6fcda0e36e75eb6cb98dc9190fa4737d727eeae29e58f892980b2c96b656/lupa-2.8-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:097e7d0f1719a88020b67c82e05d53d7973c166952393afcecfd8434c7e19a15", size = 2408890, upload-time = "2026-04-15T20:05:37.994Z" },
311
+ { url = "https://files.pythonhosted.org/packages/58/29/7ea176eac3c1dac83d059762daa875ad1390decc0bf2c3b4c7bbfc1f1665/lupa-2.8-cp310-cp310-win_amd64.whl", hash = "sha256:7bb223ee8f72d0dc076b0d65296ee72f1c69450f9d2fed5315f7707d98c4a03d", size = 1910396, upload-time = "2026-04-15T20:05:41.163Z" },
272
312
  { url = "https://files.pythonhosted.org/packages/b7/0a/5a740717f27aa77481e6a61b97cf79d1e0c1ede729b1268caacded915326/lupa-2.8-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b12e43c1fb787189dfc28cd604aef0baa2cb95e27da19498d520361d0ace070a", size = 1202376, upload-time = "2026-04-15T20:05:44.049Z" },
273
313
  { url = "https://files.pythonhosted.org/packages/1b/75/6b64d0098c64275a801896cb7a6a30e7e653d25fa102c64e747292afcdbb/lupa-2.8-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f6f603391dffb256e36a79fd2044084d5f4b8a0a4c0e5ad291cd3ab3aaf1fd0a", size = 1839271, upload-time = "2026-04-15T20:05:47.399Z" },
274
314
  { url = "https://files.pythonhosted.org/packages/7b/2f/0d4f00563046ff616ef6a421f8b776a5ffb327f7b32ed69e856d52b917a8/lupa-2.8-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9f6f41c91366e7d0d474f87d81c1274af861f40812bf729c9f97ab4c8f3c7ac8", size = 2376251, upload-time = "2026-04-15T20:05:49.891Z" },
@@ -335,6 +375,17 @@ version = "3.0.3"
335
375
  source = { registry = "https://pypi.org/simple" }
336
376
  sdist = { url = "https://files.pythonhosted.org/packages/7e/99/7690b6d4034fffd95959cbe0c02de8deb3098cc577c67bb6a24fe5d7caa7/markupsafe-3.0.3.tar.gz", hash = "sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698", size = 80313, upload-time = "2025-09-27T18:37:40.426Z" }
337
377
  wheels = [
378
+ { url = "https://files.pythonhosted.org/packages/e8/4b/3541d44f3937ba468b75da9eebcae497dcf67adb65caa16760b0a6807ebb/markupsafe-3.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2f981d352f04553a7171b8e44369f2af4055f888dfb147d55e42d29e29e74559", size = 11631, upload-time = "2025-09-27T18:36:05.558Z" },
379
+ { url = "https://files.pythonhosted.org/packages/98/1b/fbd8eed11021cabd9226c37342fa6ca4e8a98d8188a8d9b66740494960e4/markupsafe-3.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e1c1493fb6e50ab01d20a22826e57520f1284df32f2d8601fdd90b6304601419", size = 12057, upload-time = "2025-09-27T18:36:07.165Z" },
380
+ { url = "https://files.pythonhosted.org/packages/40/01/e560d658dc0bb8ab762670ece35281dec7b6c1b33f5fbc09ebb57a185519/markupsafe-3.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1ba88449deb3de88bd40044603fafffb7bc2b055d626a330323a9ed736661695", size = 22050, upload-time = "2025-09-27T18:36:08.005Z" },
381
+ { url = "https://files.pythonhosted.org/packages/af/cd/ce6e848bbf2c32314c9b237839119c5a564a59725b53157c856e90937b7a/markupsafe-3.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f42d0984e947b8adf7dd6dde396e720934d12c506ce84eea8476409563607591", size = 20681, upload-time = "2025-09-27T18:36:08.881Z" },
382
+ { url = "https://files.pythonhosted.org/packages/c9/2a/b5c12c809f1c3045c4d580b035a743d12fcde53cf685dbc44660826308da/markupsafe-3.0.3-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c0c0b3ade1c0b13b936d7970b1d37a57acde9199dc2aecc4c336773e1d86049c", size = 20705, upload-time = "2025-09-27T18:36:10.131Z" },
383
+ { url = "https://files.pythonhosted.org/packages/cf/e3/9427a68c82728d0a88c50f890d0fc072a1484de2f3ac1ad0bfc1a7214fd5/markupsafe-3.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:0303439a41979d9e74d18ff5e2dd8c43ed6c6001fd40e5bf2e43f7bd9bbc523f", size = 21524, upload-time = "2025-09-27T18:36:11.324Z" },
384
+ { url = "https://files.pythonhosted.org/packages/bc/36/23578f29e9e582a4d0278e009b38081dbe363c5e7165113fad546918a232/markupsafe-3.0.3-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:d2ee202e79d8ed691ceebae8e0486bd9a2cd4794cec4824e1c99b6f5009502f6", size = 20282, upload-time = "2025-09-27T18:36:12.573Z" },
385
+ { url = "https://files.pythonhosted.org/packages/56/21/dca11354e756ebd03e036bd8ad58d6d7168c80ce1fe5e75218e4945cbab7/markupsafe-3.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:177b5253b2834fe3678cb4a5f0059808258584c559193998be2601324fdeafb1", size = 20745, upload-time = "2025-09-27T18:36:13.504Z" },
386
+ { url = "https://files.pythonhosted.org/packages/87/99/faba9369a7ad6e4d10b6a5fbf71fa2a188fe4a593b15f0963b73859a1bbd/markupsafe-3.0.3-cp310-cp310-win32.whl", hash = "sha256:2a15a08b17dd94c53a1da0438822d70ebcd13f8c3a95abe3a9ef9f11a94830aa", size = 14571, upload-time = "2025-09-27T18:36:14.779Z" },
387
+ { url = "https://files.pythonhosted.org/packages/d6/25/55dc3ab959917602c96985cb1253efaa4ff42f71194bddeb61eb7278b8be/markupsafe-3.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:c4ffb7ebf07cfe8931028e3e4c85f0357459a3f9f9490886198848f4fa002ec8", size = 15056, upload-time = "2025-09-27T18:36:16.125Z" },
388
+ { url = "https://files.pythonhosted.org/packages/d0/9e/0a02226640c255d1da0b8d12e24ac2aa6734da68bff14c05dd53b94a0fc3/markupsafe-3.0.3-cp310-cp310-win_arm64.whl", hash = "sha256:e2103a929dfa2fcaf9bb4e7c091983a49c9ac3b19c9061b6d5427dd7d14d81a1", size = 13932, upload-time = "2025-09-27T18:36:17.311Z" },
338
389
  { url = "https://files.pythonhosted.org/packages/08/db/fefacb2136439fc8dd20e797950e749aa1f4997ed584c62cfb8ef7c2be0e/markupsafe-3.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1cc7ea17a6824959616c525620e387f6dd30fec8cb44f649e31712db02123dad", size = 11631, upload-time = "2025-09-27T18:36:18.185Z" },
339
390
  { url = "https://files.pythonhosted.org/packages/e1/2e/5898933336b61975ce9dc04decbc0a7f2fee78c30353c5efba7f2d6ff27a/markupsafe-3.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4bd4cd07944443f5a265608cc6aab442e4f74dff8088b0dfc8238647b8f6ae9a", size = 12058, upload-time = "2025-09-27T18:36:19.444Z" },
340
391
  { url = "https://files.pythonhosted.org/packages/1d/09/adf2df3699d87d1d8184038df46a9c80d78c0148492323f4693df54e17bb/markupsafe-3.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b5420a1d9450023228968e7e6a9ce57f65d148ab56d2313fcd589eee96a7a50", size = 24287, upload-time = "2025-09-27T18:36:20.768Z" },
@@ -412,10 +463,17 @@ dependencies = [
412
463
  { name = "librt", marker = "platform_python_implementation != 'PyPy'" },
413
464
  { name = "mypy-extensions" },
414
465
  { name = "pathspec" },
466
+ { name = "tomli", marker = "python_full_version < '3.11'" },
415
467
  { name = "typing-extensions" },
416
468
  ]
417
469
  sdist = { url = "https://files.pythonhosted.org/packages/82/6a/878cc1097d4035f82bd516658d0c528d2a9955bc7b363afcbd0b07fea11b/mypy-2.3.1.tar.gz", hash = "sha256:47c1b1207258513a9d93495f69c8be9de73916186f0e52703e8c461b7a623419", size = 3992554, upload-time = "2026-08-15T03:03:38.549Z" }
418
470
  wheels = [
471
+ { url = "https://files.pythonhosted.org/packages/eb/b9/de8f67e12d721cdcc8ba6cfc440b989a4ba4dfabe4402ae94dfdd8bb30a4/mypy-2.3.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:57a936373fc690c43a8cd7e7e12a35148e4ec5aa7698ad7fc0a9f918bdc5be41", size = 14015541, upload-time = "2026-08-15T03:01:53.104Z" },
472
+ { url = "https://files.pythonhosted.org/packages/f1/8a/9e746ab012c67ed8ea3232a613716c306ee8c0b5682c80d8103b4f04568e/mypy-2.3.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d00d769056bde2f4e69c175071eba45cfb44fa1ed92bdfbfe64a93e0543b0cf0", size = 14248142, upload-time = "2026-08-15T03:02:43.201Z" },
473
+ { url = "https://files.pythonhosted.org/packages/f7/5c/c99ff2d8d0e2c53393e32dfe22d9aa43a5d959d30db46c786dafd24527d3/mypy-2.3.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2166b29228835e1f88ff411e96639e6ca3c7fdde84b62ec211f70f86b4051167", size = 15193309, upload-time = "2026-08-15T03:01:28.714Z" },
474
+ { url = "https://files.pythonhosted.org/packages/64/39/124638f745243faae1ff4b37d5426fe41c0f0454535edc82fe8102b56a3c/mypy-2.3.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:83d36c2924df7426333abe7faf4724a7e1aab0d9fd41625e81b4683034b80c13", size = 15498246, upload-time = "2026-08-15T03:02:46.29Z" },
475
+ { url = "https://files.pythonhosted.org/packages/b2/83/31c0781e243836505c0fb5f4e865487d6df1023e4ad959f4ebd4b84a0226/mypy-2.3.1-cp310-cp310-win_amd64.whl", hash = "sha256:f12fdb70459d0060dea40b29e52163a961b156106d68d57882a6a9f648983a53", size = 11155028, upload-time = "2026-08-15T03:01:39.08Z" },
476
+ { url = "https://files.pythonhosted.org/packages/a0/ab/bc2eb0129e72d7d7d93d5e981a78084a9abefda7efa732a7e02f97d6e27d/mypy-2.3.1-cp310-cp310-win_arm64.whl", hash = "sha256:e099200a1b1b1223a4951f0a90cbff1b8c91b250ba599dab1f7217a628144d90", size = 10151438, upload-time = "2026-08-15T03:02:19.04Z" },
419
477
  { url = "https://files.pythonhosted.org/packages/a4/be/c624d4241484f37dc62839e177ab607a9b8b3e96f0866544ca99e8e41d51/mypy-2.3.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:94f04929f1c44c35fb0061e912087edaf504acede963a4a7d00680bd089d8531", size = 13936739, upload-time = "2026-08-15T03:03:26.475Z" },
420
478
  { url = "https://files.pythonhosted.org/packages/53/84/e3cf72f90dce5960871c82551c8fba6da05fc1018f79be41c047bd126bdd/mypy-2.3.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f5d716048611e85ca9eefb2e1baa5d73ede389b5820ded260ea27c757d667af8", size = 14166460, upload-time = "2026-08-15T03:01:50.565Z" },
421
479
  { url = "https://files.pythonhosted.org/packages/4a/ff/6b97d58aa0f79a5ab9b472db1f6d6df1b11a51d74d0c08ab3760d3a613ba/mypy-2.3.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b091a455111214cb5c9d54a57b9618e9a49f9fe2a42e4e1ac86e9d104ed96ce8", size = 15100476, upload-time = "2026-08-15T03:03:12.079Z" },
@@ -527,10 +585,12 @@ version = "9.1.1"
527
585
  source = { registry = "https://pypi.org/simple" }
528
586
  dependencies = [
529
587
  { name = "colorama", marker = "sys_platform == 'win32'" },
588
+ { name = "exceptiongroup", marker = "python_full_version < '3.11'" },
530
589
  { name = "iniconfig" },
531
590
  { name = "packaging" },
532
591
  { name = "pluggy" },
533
592
  { name = "pygments" },
593
+ { name = "tomli", marker = "python_full_version < '3.11'" },
534
594
  ]
535
595
  sdist = { url = "https://files.pythonhosted.org/packages/e4/47/b9efed96c114afcfa3c9d3fe98a76a1d14c74a9e266d397cf6eb64be5e01/pytest-9.1.1.tar.gz", hash = "sha256:1088fbde8f2b49d95a549a195707afa7a76a3ce9bcadc26b6d71f0ffda5fe313", size = 1636369, upload-time = "2026-06-19T10:58:32.857Z" }
536
596
  wheels = [
@@ -542,6 +602,7 @@ name = "pytest-asyncio"
542
602
  version = "1.4.0"
543
603
  source = { registry = "https://pypi.org/simple" }
544
604
  dependencies = [
605
+ { name = "backports-asyncio-runner", marker = "python_full_version < '3.11'" },
545
606
  { name = "pytest" },
546
607
  { name = "typing-extensions", marker = "python_full_version < '3.13'" },
547
608
  ]
@@ -556,6 +617,15 @@ version = "6.0.3"
556
617
  source = { registry = "https://pypi.org/simple" }
557
618
  sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960, upload-time = "2025-09-25T21:33:16.546Z" }
558
619
  wheels = [
620
+ { url = "https://files.pythonhosted.org/packages/f4/a0/39350dd17dd6d6c6507025c0e53aef67a9293a6d37d3511f23ea510d5800/pyyaml-6.0.3-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:214ed4befebe12df36bcc8bc2b64b396ca31be9304b8f59e25c11cf94a4c033b", size = 184227, upload-time = "2025-09-25T21:31:46.04Z" },
621
+ { url = "https://files.pythonhosted.org/packages/05/14/52d505b5c59ce73244f59c7a50ecf47093ce4765f116cdb98286a71eeca2/pyyaml-6.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02ea2dfa234451bbb8772601d7b8e426c2bfa197136796224e50e35a78777956", size = 174019, upload-time = "2025-09-25T21:31:47.706Z" },
622
+ { url = "https://files.pythonhosted.org/packages/43/f7/0e6a5ae5599c838c696adb4e6330a59f463265bfa1e116cfd1fbb0abaaae/pyyaml-6.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b30236e45cf30d2b8e7b3e85881719e98507abed1011bf463a8fa23e9c3e98a8", size = 740646, upload-time = "2025-09-25T21:31:49.21Z" },
623
+ { url = "https://files.pythonhosted.org/packages/2f/3a/61b9db1d28f00f8fd0ae760459a5c4bf1b941baf714e207b6eb0657d2578/pyyaml-6.0.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:66291b10affd76d76f54fad28e22e51719ef9ba22b29e1d7d03d6777a9174198", size = 840793, upload-time = "2025-09-25T21:31:50.735Z" },
624
+ { url = "https://files.pythonhosted.org/packages/7a/1e/7acc4f0e74c4b3d9531e24739e0ab832a5edf40e64fbae1a9c01941cabd7/pyyaml-6.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9c7708761fccb9397fe64bbc0395abcae8c4bf7b0eac081e12b809bf47700d0b", size = 770293, upload-time = "2025-09-25T21:31:51.828Z" },
625
+ { url = "https://files.pythonhosted.org/packages/8b/ef/abd085f06853af0cd59fa5f913d61a8eab65d7639ff2a658d18a25d6a89d/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:418cf3f2111bc80e0933b2cd8cd04f286338bb88bdc7bc8e6dd775ebde60b5e0", size = 732872, upload-time = "2025-09-25T21:31:53.282Z" },
626
+ { url = "https://files.pythonhosted.org/packages/1f/15/2bc9c8faf6450a8b3c9fc5448ed869c599c0a74ba2669772b1f3a0040180/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5e0b74767e5f8c593e8c9b5912019159ed0533c70051e9cce3e8b6aa699fcd69", size = 758828, upload-time = "2025-09-25T21:31:54.807Z" },
627
+ { url = "https://files.pythonhosted.org/packages/a3/00/531e92e88c00f4333ce359e50c19b8d1de9fe8d581b1534e35ccfbc5f393/pyyaml-6.0.3-cp310-cp310-win32.whl", hash = "sha256:28c8d926f98f432f88adc23edf2e6d4921ac26fb084b028c733d01868d19007e", size = 142415, upload-time = "2025-09-25T21:31:55.885Z" },
628
+ { url = "https://files.pythonhosted.org/packages/2a/fa/926c003379b19fca39dd4634818b00dec6c62d87faf628d1394e137354d4/pyyaml-6.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:bdb2c67c6c1390b63c6ff89f210c8fd09d9a1217a465701eac7316313c915e4c", size = 158561, upload-time = "2025-09-25T21:31:57.406Z" },
559
629
  { url = "https://files.pythonhosted.org/packages/6d/16/a95b6757765b7b031c9374925bb718d55e0a9ba8a1b6a12d25962ea44347/pyyaml-6.0.3-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:44edc647873928551a01e7a563d7452ccdebee747728c1080d881d68af7b997e", size = 185826, upload-time = "2025-09-25T21:31:58.655Z" },
560
630
  { url = "https://files.pythonhosted.org/packages/16/19/13de8e4377ed53079ee996e1ab0a9c33ec2faf808a4647b7b4c0d46dd239/pyyaml-6.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:652cb6edd41e718550aad172851962662ff2681490a8a711af6a4d288dd96824", size = 175577, upload-time = "2025-09-25T21:32:00.088Z" },
561
631
  { url = "https://files.pythonhosted.org/packages/0c/62/d2eb46264d4b157dae1275b573017abec435397aa59cbcdab6fc978a8af4/pyyaml-6.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:10892704fc220243f5305762e276552a0395f7beb4dbf9b14ec8fd43b57f126c", size = 775556, upload-time = "2025-09-25T21:32:01.31Z" },
@@ -619,7 +689,7 @@ wheels = [
619
689
 
620
690
  [[package]]
621
691
  name = "redis-lua-py"
622
- version = "0.2.0"
692
+ version = "0.2.1"
623
693
  source = { editable = "." }
624
694
  dependencies = [
625
695
  { name = "redis" },
@@ -632,11 +702,12 @@ dev = [
632
702
  { name = "pytest" },
633
703
  { name = "pytest-asyncio" },
634
704
  { name = "ruff" },
705
+ { name = "typing-extensions", marker = "python_full_version < '3.11'" },
635
706
  { name = "zensical" },
636
707
  ]
637
708
 
638
709
  [package.metadata]
639
- requires-dist = [{ name = "redis", specifier = ">=5.0" }]
710
+ requires-dist = [{ name = "redis", specifier = ">=4.2" }]
640
711
 
641
712
  [package.metadata.requires-dev]
642
713
  dev = [
@@ -645,6 +716,7 @@ dev = [
645
716
  { name = "pytest", specifier = ">=8.3" },
646
717
  { name = "pytest-asyncio", specifier = ">=1.0" },
647
718
  { name = "ruff", specifier = ">=0.16" },
719
+ { name = "typing-extensions", marker = "python_full_version < '3.11'", specifier = ">=4.2" },
648
720
  { name = "zensical", specifier = ">=0.0.61" },
649
721
  ]
650
722
 
@@ -1,3 +0,0 @@
1
- {
2
- ".": "0.2.1"
3
- }
File without changes
File without changes
File without changes
File without changes