Quellcode durchsuchen

bump ruff version to 0.9.3 (#4705)

* bump ruff version to 0.9.3

* relock poetry file

* poetry relock

* ignore RUF008 for now

* pass pre-commit

* update-pyi-files: require_serial to avoid mp explosion

---------

Co-authored-by: Masen Furer <m_github@0x26.net>
Thomas Brandého vor 3 Monaten
Ursprung
Commit
83e635de0e

+ 3 - 2
.pre-commit-config.yaml

@@ -3,7 +3,7 @@ fail_fast: true
 repos:
 repos:
 
 
   - repo: https://github.com/charliermarsh/ruff-pre-commit
   - repo: https://github.com/charliermarsh/ruff-pre-commit
-    rev: v0.8.2
+    rev: v0.9.3
     hooks:
     hooks:
       - id: ruff-format
       - id: ruff-format
         args: [reflex, tests]
         args: [reflex, tests]
@@ -24,11 +24,12 @@ repos:
         name: update-pyi-files
         name: update-pyi-files
         always_run: true
         always_run: true
         language: system
         language: system
+        require_serial: true
         description: 'Update pyi files as needed'
         description: 'Update pyi files as needed'
         entry: python3 scripts/make_pyi.py
         entry: python3 scripts/make_pyi.py
 
 
   - repo: https://github.com/RobertCraigie/pyright-python
   - repo: https://github.com/RobertCraigie/pyright-python
-    rev: v1.1.392
+    rev: v1.1.393
     hooks:
     hooks:
       - id: pyright
       - id: pyright
         args: [reflex, tests]
         args: [reflex, tests]

+ 51 - 51
poetry.lock

@@ -164,15 +164,15 @@ virtualenv = ["virtualenv (>=20.0.35)"]
 
 
 [[package]]
 [[package]]
 name = "certifi"
 name = "certifi"
-version = "2024.12.14"
+version = "2025.1.31"
 description = "Python package for providing Mozilla's CA Bundle."
 description = "Python package for providing Mozilla's CA Bundle."
 optional = false
 optional = false
 python-versions = ">=3.6"
 python-versions = ">=3.6"
 groups = ["main", "dev"]
 groups = ["main", "dev"]
 markers = "python_version <= \"3.11\" or python_version >= \"3.12\""
 markers = "python_version <= \"3.11\" or python_version >= \"3.12\""
 files = [
 files = [
-    {file = "certifi-2024.12.14-py3-none-any.whl", hash = "sha256:1275f7a45be9464efc1173084eaa30f866fe2e47d389406136d332ed4967ec56"},
-    {file = "certifi-2024.12.14.tar.gz", hash = "sha256:b650d30f370c2b724812bee08008be0c4163b163ddaec3f2546c1caf65f191db"},
+    {file = "certifi-2025.1.31-py3-none-any.whl", hash = "sha256:ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe"},
+    {file = "certifi-2025.1.31.tar.gz", hash = "sha256:3d5da6925056f6f18f119200434a4780a94263f10d1c21d032a6f6b2baa20651"},
 ]
 ]
 
 
 [[package]]
 [[package]]
@@ -618,15 +618,15 @@ test = ["pytest (>=6)"]
 
 
 [[package]]
 [[package]]
 name = "fastapi"
 name = "fastapi"
-version = "0.115.7"
+version = "0.115.8"
 description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production"
 description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production"
 optional = false
 optional = false
 python-versions = ">=3.8"
 python-versions = ">=3.8"
 groups = ["main"]
 groups = ["main"]
 markers = "python_version <= \"3.11\" or python_version >= \"3.12\""
 markers = "python_version <= \"3.11\" or python_version >= \"3.12\""
 files = [
 files = [
-    {file = "fastapi-0.115.7-py3-none-any.whl", hash = "sha256:eb6a8c8bf7f26009e8147111ff15b5177a0e19bb4a45bc3486ab14804539d21e"},
-    {file = "fastapi-0.115.7.tar.gz", hash = "sha256:0f106da6c01d88a6786b3248fb4d7a940d071f6f488488898ad5d354b25ed015"},
+    {file = "fastapi-0.115.8-py3-none-any.whl", hash = "sha256:753a96dd7e036b34eeef8babdfcfe3f28ff79648f86551eb36bfc1b0bf4a8cbf"},
+    {file = "fastapi-0.115.8.tar.gz", hash = "sha256:0ce9111231720190473e222cdf0f07f7206ad7e53ea02beb1d2dc36e2f0741e9"},
 ]
 ]
 
 
 [package.dependencies]
 [package.dependencies]
@@ -1876,15 +1876,15 @@ files = [
 
 
 [[package]]
 [[package]]
 name = "pyright"
 name = "pyright"
-version = "1.1.392.post0"
+version = "1.1.393"
 description = "Command line wrapper for pyright"
 description = "Command line wrapper for pyright"
 optional = false
 optional = false
 python-versions = ">=3.7"
 python-versions = ">=3.7"
 groups = ["dev"]
 groups = ["dev"]
 markers = "python_version <= \"3.11\" or python_version >= \"3.12\""
 markers = "python_version <= \"3.11\" or python_version >= \"3.12\""
 files = [
 files = [
-    {file = "pyright-1.1.392.post0-py3-none-any.whl", hash = "sha256:252f84458a46fa2f0fd4e2f91fc74f50b9ca52c757062e93f6c250c0d8329eb2"},
-    {file = "pyright-1.1.392.post0.tar.gz", hash = "sha256:3b7f88de74a28dcfa90c7d90c782b6569a48c2be5f9d4add38472bdaac247ebd"},
+    {file = "pyright-1.1.393-py3-none-any.whl", hash = "sha256:8320629bb7a44ca90944ba599390162bf59307f3d9fb6e27da3b7011b8c17ae5"},
+    {file = "pyright-1.1.393.tar.gz", hash = "sha256:aeeb7ff4e0364775ef416a80111613f91a05c8e01e58ecfefc370ca0db7aed9c"},
 ]
 ]
 
 
 [package.dependencies]
 [package.dependencies]
@@ -1998,25 +1998,25 @@ histogram = ["pygal", "pygaljs", "setuptools"]
 
 
 [[package]]
 [[package]]
 name = "pytest-codspeed"
 name = "pytest-codspeed"
-version = "3.1.2"
+version = "3.2.0"
 description = "Pytest plugin to create CodSpeed benchmarks"
 description = "Pytest plugin to create CodSpeed benchmarks"
 optional = false
 optional = false
 python-versions = ">=3.9"
 python-versions = ">=3.9"
 groups = ["dev"]
 groups = ["dev"]
 markers = "python_version <= \"3.11\" or python_version >= \"3.12\""
 markers = "python_version <= \"3.11\" or python_version >= \"3.12\""
 files = [
 files = [
-    {file = "pytest_codspeed-3.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:aed496f873670ce0ea8f980a7c1a2c6a08f415e0ebdf207bf651b2d922103374"},
-    {file = "pytest_codspeed-3.1.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ee45b0b763f6b5fa5d74c7b91d694a9615561c428b320383660672f4471756e3"},
-    {file = "pytest_codspeed-3.1.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c84e591a7a0f67d45e2dc9fd05b276971a3aabcab7478fe43363ebefec1358f4"},
-    {file = "pytest_codspeed-3.1.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c6ae6d094247156407770e6b517af70b98862dd59a3c31034aede11d5f71c32c"},
-    {file = "pytest_codspeed-3.1.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d0f264991de5b5cdc118b96fc671386cca3f0f34e411482939bf2459dc599097"},
-    {file = "pytest_codspeed-3.1.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c0695a4bcd5ff04e8379124dba5d9795ea5e0cadf38be7a0406432fc1467b555"},
-    {file = "pytest_codspeed-3.1.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6dc356c8dcaaa883af83310f397ac06c96fac9b8a1146e303d4b374b2cb46a18"},
-    {file = "pytest_codspeed-3.1.2-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cc8a5d0366322a75cf562f7d8d672d28c1cf6948695c4dddca50331e08f6b3d5"},
-    {file = "pytest_codspeed-3.1.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6c5fe7a19b72f54f217480b3b527102579547b1de9fe3acd9e66cb4629ff46c8"},
-    {file = "pytest_codspeed-3.1.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b67205755a665593f6521a98317d02a9d07d6fdc593f6634de2c94dea47a3055"},
-    {file = "pytest_codspeed-3.1.2-py3-none-any.whl", hash = "sha256:5e7ed0315e33496c5c07dba262b50303b8d0bc4c3d10bf1d422a41e70783f1cb"},
-    {file = "pytest_codspeed-3.1.2.tar.gz", hash = "sha256:09c1733af3aab35e94a621aa510f2d2114f65591e6f644c42ca3f67547edad4b"},
+    {file = "pytest_codspeed-3.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c5165774424c7ab8db7e7acdb539763a0e5657996effefdf0664d7fd95158d34"},
+    {file = "pytest_codspeed-3.2.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9bd55f92d772592c04a55209950c50880413ae46876e66bd349ef157075ca26c"},
+    {file = "pytest_codspeed-3.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4cf6f56067538f4892baa8d7ab5ef4e45bb59033be1ef18759a2c7fc55b32035"},
+    {file = "pytest_codspeed-3.2.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:39a687b05c3d145642061b45ea78e47e12f13ce510104d1a2cda00eee0e36f58"},
+    {file = "pytest_codspeed-3.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:46a1afaaa1ac4c2ca5b0700d31ac46d80a27612961d031067d73c6ccbd8d3c2b"},
+    {file = "pytest_codspeed-3.2.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c48ce3af3dfa78413ed3d69d1924043aa1519048dbff46edccf8f35a25dab3c2"},
+    {file = "pytest_codspeed-3.2.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:66692506d33453df48b36a84703448cb8b22953eea51f03fbb2eb758dc2bdc4f"},
+    {file = "pytest_codspeed-3.2.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:479774f80d0bdfafa16112700df4dbd31bf2a6757fac74795fd79c0a7b3c389b"},
+    {file = "pytest_codspeed-3.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:109f9f4dd1088019c3b3f887d003b7d65f98a7736ca1d457884f5aa293e8e81c"},
+    {file = "pytest_codspeed-3.2.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e2f69a03b52c9bb041aec1b8ee54b7b6c37a6d0a948786effa4c71157765b6da"},
+    {file = "pytest_codspeed-3.2.0-py3-none-any.whl", hash = "sha256:54b5c2e986d6a28e7b0af11d610ea57bd5531cec8326abe486f1b55b09d91c39"},
+    {file = "pytest_codspeed-3.2.0.tar.gz", hash = "sha256:f9d1b1a3b2c69cdc0490a1e8b1ced44bffbd0e8e21d81a7160cfdd923f6e8155"},
 ]
 ]
 
 
 [package.dependencies]
 [package.dependencies]
@@ -2070,15 +2070,15 @@ dev = ["pre-commit", "pytest-asyncio", "tox"]
 
 
 [[package]]
 [[package]]
 name = "pytest-playwright"
 name = "pytest-playwright"
-version = "0.6.2"
+version = "0.7.0"
 description = "A pytest wrapper with fixtures for Playwright to automate web browsers"
 description = "A pytest wrapper with fixtures for Playwright to automate web browsers"
 optional = false
 optional = false
 python-versions = ">=3.9"
 python-versions = ">=3.9"
 groups = ["dev"]
 groups = ["dev"]
 markers = "python_version <= \"3.11\" or python_version >= \"3.12\""
 markers = "python_version <= \"3.11\" or python_version >= \"3.12\""
 files = [
 files = [
-    {file = "pytest_playwright-0.6.2-py3-none-any.whl", hash = "sha256:0eff73bebe497b0158befed91e2f5fe94cfa17181f8b3acf575beed84e7e9043"},
-    {file = "pytest_playwright-0.6.2.tar.gz", hash = "sha256:ff4054b19aa05df096ac6f74f0572591566aaf0f6d97f6cb9674db8a4d4ed06c"},
+    {file = "pytest_playwright-0.7.0-py3-none-any.whl", hash = "sha256:2516d0871fa606634bfe32afbcc0342d68da2dbff97fe3459849e9c428486da2"},
+    {file = "pytest_playwright-0.7.0.tar.gz", hash = "sha256:b3f2ea514bbead96d26376fac182f68dcd6571e7cb41680a89ff1673c05d60b6"},
 ]
 ]
 
 
 [package.dependencies]
 [package.dependencies]
@@ -2180,15 +2180,15 @@ docs = ["sphinx"]
 
 
 [[package]]
 [[package]]
 name = "pytz"
 name = "pytz"
-version = "2024.2"
+version = "2025.1"
 description = "World timezone definitions, modern and historical"
 description = "World timezone definitions, modern and historical"
 optional = false
 optional = false
 python-versions = "*"
 python-versions = "*"
 groups = ["dev"]
 groups = ["dev"]
 markers = "python_version <= \"3.11\" or python_version >= \"3.12\""
 markers = "python_version <= \"3.11\" or python_version >= \"3.12\""
 files = [
 files = [
-    {file = "pytz-2024.2-py2.py3-none-any.whl", hash = "sha256:31c7c1817eb7fae7ca4b8c7ee50c72f93aa2dd863de768e1ef4245d426aa0725"},
-    {file = "pytz-2024.2.tar.gz", hash = "sha256:2aa355083c50a0f93fa581709deac0c9ad65cca8a9e9beac660adcbd493c798a"},
+    {file = "pytz-2025.1-py2.py3-none-any.whl", hash = "sha256:89dd22dca55b46eac6eda23b2d72721bf1bdfef212645d81513ef5d03038de57"},
+    {file = "pytz-2025.1.tar.gz", hash = "sha256:c2db42be2a2518b28e65f9207c4d05e6ff547d1efa4086469ef855e4ab70178e"},
 ]
 ]
 
 
 [[package]]
 [[package]]
@@ -2311,15 +2311,15 @@ ocsp = ["cryptography (>=36.0.1)", "pyopenssl (==23.2.1)", "requests (>=2.31.0)"
 
 
 [[package]]
 [[package]]
 name = "reflex-hosting-cli"
 name = "reflex-hosting-cli"
-version = "0.1.33"
+version = "0.1.34"
 description = "Reflex Hosting CLI"
 description = "Reflex Hosting CLI"
 optional = false
 optional = false
 python-versions = "<4.0,>=3.9"
 python-versions = "<4.0,>=3.9"
 groups = ["main"]
 groups = ["main"]
 markers = "python_version <= \"3.11\" or python_version >= \"3.12\""
 markers = "python_version <= \"3.11\" or python_version >= \"3.12\""
 files = [
 files = [
-    {file = "reflex_hosting_cli-0.1.33-py3-none-any.whl", hash = "sha256:3fe72fc448a231c61de4ac646f42c936c70e91330f616a23aec658f905d53bc4"},
-    {file = "reflex_hosting_cli-0.1.33.tar.gz", hash = "sha256:81c4a896b106eea99f1cab53ea23a6e19802592ce0468cc38d93d440bc95263a"},
+    {file = "reflex_hosting_cli-0.1.34-py3-none-any.whl", hash = "sha256:eabc4dc7bf68e022a9388614c1a35b5ab36b01021df063d0c3356eda0e245264"},
+    {file = "reflex_hosting_cli-0.1.34.tar.gz", hash = "sha256:07be37fda6dcede0a5d4bc1fd1786d9a3df5ad4e49dc1b6ba335418563cfecec"},
 ]
 ]
 
 
 [package.dependencies]
 [package.dependencies]
@@ -2410,31 +2410,31 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"]
 
 
 [[package]]
 [[package]]
 name = "ruff"
 name = "ruff"
-version = "0.8.2"
+version = "0.9.3"
 description = "An extremely fast Python linter and code formatter, written in Rust."
 description = "An extremely fast Python linter and code formatter, written in Rust."
 optional = false
 optional = false
 python-versions = ">=3.7"
 python-versions = ">=3.7"
 groups = ["dev"]
 groups = ["dev"]
 markers = "python_version <= \"3.11\" or python_version >= \"3.12\""
 markers = "python_version <= \"3.11\" or python_version >= \"3.12\""
 files = [
 files = [
-    {file = "ruff-0.8.2-py3-none-linux_armv6l.whl", hash = "sha256:c49ab4da37e7c457105aadfd2725e24305ff9bc908487a9bf8d548c6dad8bb3d"},
-    {file = "ruff-0.8.2-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:ec016beb69ac16be416c435828be702ee694c0d722505f9c1f35e1b9c0cc1bf5"},
-    {file = "ruff-0.8.2-py3-none-macosx_11_0_arm64.whl", hash = "sha256:f05cdf8d050b30e2ba55c9b09330b51f9f97d36d4673213679b965d25a785f3c"},
-    {file = "ruff-0.8.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:60f578c11feb1d3d257b2fb043ddb47501ab4816e7e221fbb0077f0d5d4e7b6f"},
-    {file = "ruff-0.8.2-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:cbd5cf9b0ae8f30eebc7b360171bd50f59ab29d39f06a670b3e4501a36ba5897"},
-    {file = "ruff-0.8.2-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b402ddee3d777683de60ff76da801fa7e5e8a71038f57ee53e903afbcefdaa58"},
-    {file = "ruff-0.8.2-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:705832cd7d85605cb7858d8a13d75993c8f3ef1397b0831289109e953d833d29"},
-    {file = "ruff-0.8.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:32096b41aaf7a5cc095fa45b4167b890e4c8d3fd217603f3634c92a541de7248"},
-    {file = "ruff-0.8.2-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e769083da9439508833cfc7c23e351e1809e67f47c50248250ce1ac52c21fb93"},
-    {file = "ruff-0.8.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5fe716592ae8a376c2673fdfc1f5c0c193a6d0411f90a496863c99cd9e2ae25d"},
-    {file = "ruff-0.8.2-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:81c148825277e737493242b44c5388a300584d73d5774defa9245aaef55448b0"},
-    {file = "ruff-0.8.2-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:d261d7850c8367704874847d95febc698a950bf061c9475d4a8b7689adc4f7fa"},
-    {file = "ruff-0.8.2-py3-none-musllinux_1_2_i686.whl", hash = "sha256:1ca4e3a87496dc07d2427b7dd7ffa88a1e597c28dad65ae6433ecb9f2e4f022f"},
-    {file = "ruff-0.8.2-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:729850feed82ef2440aa27946ab39c18cb4a8889c1128a6d589ffa028ddcfc22"},
-    {file = "ruff-0.8.2-py3-none-win32.whl", hash = "sha256:ac42caaa0411d6a7d9594363294416e0e48fc1279e1b0e948391695db2b3d5b1"},
-    {file = "ruff-0.8.2-py3-none-win_amd64.whl", hash = "sha256:2aae99ec70abf43372612a838d97bfe77d45146254568d94926e8ed5bbb409ea"},
-    {file = "ruff-0.8.2-py3-none-win_arm64.whl", hash = "sha256:fb88e2a506b70cfbc2de6fae6681c4f944f7dd5f2fe87233a7233d888bad73e8"},
-    {file = "ruff-0.8.2.tar.gz", hash = "sha256:b84f4f414dda8ac7f75075c1fa0b905ac0ff25361f42e6d5da681a465e0f78e5"},
+    {file = "ruff-0.9.3-py3-none-linux_armv6l.whl", hash = "sha256:7f39b879064c7d9670197d91124a75d118d00b0990586549949aae80cdc16624"},
+    {file = "ruff-0.9.3-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:a187171e7c09efa4b4cc30ee5d0d55a8d6c5311b3e1b74ac5cb96cc89bafc43c"},
+    {file = "ruff-0.9.3-py3-none-macosx_11_0_arm64.whl", hash = "sha256:c59ab92f8e92d6725b7ded9d4a31be3ef42688a115c6d3da9457a5bda140e2b4"},
+    {file = "ruff-0.9.3-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2dc153c25e715be41bb228bc651c1e9b1a88d5c6e5ed0194fa0dfea02b026439"},
+    {file = "ruff-0.9.3-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:646909a1e25e0dc28fbc529eab8eb7bb583079628e8cbe738192853dbbe43af5"},
+    {file = "ruff-0.9.3-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5a5a46e09355695fbdbb30ed9889d6cf1c61b77b700a9fafc21b41f097bfbba4"},
+    {file = "ruff-0.9.3-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:c4bb09d2bbb394e3730d0918c00276e79b2de70ec2a5231cd4ebb51a57df9ba1"},
+    {file = "ruff-0.9.3-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:96a87ec31dc1044d8c2da2ebbed1c456d9b561e7d087734336518181b26b3aa5"},
+    {file = "ruff-0.9.3-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9bb7554aca6f842645022fe2d301c264e6925baa708b392867b7a62645304df4"},
+    {file = "ruff-0.9.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cabc332b7075a914ecea912cd1f3d4370489c8018f2c945a30bcc934e3bc06a6"},
+    {file = "ruff-0.9.3-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:33866c3cc2a575cbd546f2cd02bdd466fed65118e4365ee538a3deffd6fcb730"},
+    {file = "ruff-0.9.3-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:006e5de2621304c8810bcd2ee101587712fa93b4f955ed0985907a36c427e0c2"},
+    {file = "ruff-0.9.3-py3-none-musllinux_1_2_i686.whl", hash = "sha256:ba6eea4459dbd6b1be4e6bfc766079fb9b8dd2e5a35aff6baee4d9b1514ea519"},
+    {file = "ruff-0.9.3-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:90230a6b8055ad47d3325e9ee8f8a9ae7e273078a66401ac66df68943ced029b"},
+    {file = "ruff-0.9.3-py3-none-win32.whl", hash = "sha256:eabe5eb2c19a42f4808c03b82bd313fc84d4e395133fb3fc1b1516170a31213c"},
+    {file = "ruff-0.9.3-py3-none-win_amd64.whl", hash = "sha256:040ceb7f20791dfa0e78b4230ee9dce23da3b64dd5848e40e3bf3ab76468dcf4"},
+    {file = "ruff-0.9.3-py3-none-win_arm64.whl", hash = "sha256:800d773f6d4d33b0a3c60e2c6ae8f4c202ea2de056365acfa519aa48acf28e0b"},
+    {file = "ruff-0.9.3.tar.gz", hash = "sha256:8293f89985a090ebc3ed1064df31f3b4b56320cdfcec8b60d3295bddb955c22a"},
 ]
 ]
 
 
 [[package]]
 [[package]]
@@ -3183,4 +3183,4 @@ type = ["pytest-mypy"]
 [metadata]
 [metadata]
 lock-version = "2.1"
 lock-version = "2.1"
 python-versions = ">=3.10, <4.0"
 python-versions = ">=3.10, <4.0"
-content-hash = "822150bcbf41e5cbb61da0a059b41d8971e3c6c974c8af4be7ef55126648aea1"
+content-hash = "25e6ea21f5acb616cbec4a7967bd6de619b684e6828f3d04381352353793e56b"

+ 2 - 2
pyproject.toml

@@ -61,7 +61,7 @@ dill = ">=0.3.8"
 toml = ">=0.10.2,<1.0"
 toml = ">=0.10.2,<1.0"
 pytest-asyncio = ">=0.24.0"
 pytest-asyncio = ">=0.24.0"
 pytest-cov = ">=4.0.0,<7.0"
 pytest-cov = ">=4.0.0,<7.0"
-ruff = "0.8.2"
+ruff = "0.9.3"
 pandas = ">=2.1.1,<3.0"
 pandas = ">=2.1.1,<3.0"
 pillow = ">=10.0.0,<12.0"
 pillow = ">=10.0.0,<12.0"
 plotly = ">=5.13.0,<6.0"
 plotly = ">=5.13.0,<6.0"
@@ -88,7 +88,7 @@ target-version = "py310"
 output-format = "concise"
 output-format = "concise"
 lint.isort.split-on-trailing-comma = false
 lint.isort.split-on-trailing-comma = false
 lint.select = ["ANN001","B", "C4", "D", "E", "ERA", "F", "FURB", "I", "N", "PERF", "PGH", "PTH", "RUF", "SIM", "T", "TRY", "W"]
 lint.select = ["ANN001","B", "C4", "D", "E", "ERA", "F", "FURB", "I", "N", "PERF", "PGH", "PTH", "RUF", "SIM", "T", "TRY", "W"]
-lint.ignore = ["B008", "D205", "E501", "F403", "SIM115", "RUF006", "RUF012", "TRY0"]
+lint.ignore = ["B008", "D205", "E501", "F403", "SIM115", "RUF006", "RUF008", "RUF012", "TRY0"]
 lint.pydocstyle.convention = "google"
 lint.pydocstyle.convention = "google"
 
 
 [tool.ruff.lint.per-file-ignores]
 [tool.ruff.lint.per-file-ignores]

+ 1 - 1
reflex/app.py

@@ -1310,7 +1310,7 @@ class App(MiddlewareMixin, LifespanMixin):
                 ):
                 ):
                     raise ValueError(
                     raise ValueError(
                         f"Provided custom {handler_domain} exception handler `{_fn_name}` has the wrong argument order."
                         f"Provided custom {handler_domain} exception handler `{_fn_name}` has the wrong argument order."
-                        f"Expected `{required_arg}` as the {required_arg_index+1} argument but got `{list(arg_annotations.keys())[required_arg_index]}`"
+                        f"Expected `{required_arg}` as the {required_arg_index + 1} argument but got `{list(arg_annotations.keys())[required_arg_index]}`"
                     )
                     )
 
 
                 if not issubclass(arg_annotations[required_arg], Exception):
                 if not issubclass(arg_annotations[required_arg], Exception):

+ 1 - 2
reflex/components/component.py

@@ -623,8 +623,7 @@ class Component(BaseComponent, ABC):
         if props is None:
         if props is None:
             # Add component props to the tag.
             # Add component props to the tag.
             props = {
             props = {
-                attr[:-1] if attr.endswith("_") else attr: getattr(self, attr)
-                for attr in self.get_props()
+                attr.removesuffix("_"): getattr(self, attr) for attr in self.get_props()
             }
             }
 
 
             # Add ref to element if `id` is not None.
             # Add ref to element if `id` is not None.

+ 1 - 1
reflex/components/datadisplay/dataeditor.py

@@ -347,7 +347,7 @@ class DataEditor(NoSSRComponent):
             data_callback = f"getData_{editor_id}"
             data_callback = f"getData_{editor_id}"
             self.get_cell_content = Var(_js_expr=data_callback)
             self.get_cell_content = Var(_js_expr=data_callback)
 
 
-        code = [f"function {data_callback}([col, row])" "{"]
+        code = [f"function {data_callback}([col, row]){{"]
 
 
         columns_path = str(self.columns)
         columns_path = str(self.columns)
         data_path = str(self.data)
         data_path = str(self.data)

+ 2 - 2
reflex/custom_components/custom_components.py

@@ -772,7 +772,7 @@ def _validate_project_info():
     pyproject_toml = _get_package_config()
     pyproject_toml = _get_package_config()
     project = pyproject_toml["project"]
     project = pyproject_toml["project"]
     console.print(
     console.print(
-        f'Double check the information before publishing: {project["name"]} version {project["version"]}'
+        f"Double check the information before publishing: {project['name']} version {project['version']}"
     )
     )
 
 
     console.print("Update or enter to keep the current information.")
     console.print("Update or enter to keep the current information.")
@@ -784,7 +784,7 @@ def _validate_project_info():
     author["name"] = console.ask("Author Name", default=author.get("name", ""))
     author["name"] = console.ask("Author Name", default=author.get("name", ""))
     author["email"] = console.ask("Author Email", default=author.get("email", ""))
     author["email"] = console.ask("Author Email", default=author.get("email", ""))
 
 
-    console.print(f'Current keywords are: {project.get("keywords") or []}')
+    console.print(f"Current keywords are: {project.get('keywords') or []}")
     keyword_action = console.ask(
     keyword_action = console.ask(
         "Keep, replace or append?", choices=["k", "r", "a"], default="k"
         "Keep, replace or append?", choices=["k", "r", "a"], default="k"
     )
     )

+ 1 - 1
reflex/event.py

@@ -332,7 +332,7 @@ class EventSpec(EventActionsMixin):
         arg = None
         arg = None
         try:
         try:
             for arg in args:
             for arg in args:
-                values.append(LiteralVar.create(value=arg))  # noqa: PERF401
+                values.append(LiteralVar.create(value=arg))  # noqa: PERF401, RUF100
         except TypeError as e:
         except TypeError as e:
             raise EventHandlerTypeError(
             raise EventHandlerTypeError(
                 f"Arguments to event handlers must be Vars or JSON-serializable. Got {arg} of type {type(arg)}."
                 f"Arguments to event handlers must be Vars or JSON-serializable. Got {arg} of type {type(arg)}."

+ 1 - 1
reflex/utils/prerequisites.py

@@ -1855,7 +1855,7 @@ def initialize_main_module_index_from_generation(app_name: str, generation_hash:
             [
             [
                 resp.text,
                 resp.text,
                 "",
                 "",
-                "" "def index() -> rx.Component:",
+                "def index() -> rx.Component:",
                 f"    return {render_func_name}()",
                 f"    return {render_func_name}()",
                 "",
                 "",
                 "",
                 "",

+ 2 - 2
reflex/utils/pyi_generator.py

@@ -622,7 +622,7 @@ def _generate_component_create_functiondef(
         defaults=[],
         defaults=[],
     )
     )
 
 
-    definition = ast.FunctionDef(
+    definition = ast.FunctionDef(  # pyright: ignore [reportCallIssue]
         name="create",
         name="create",
         args=create_args,
         args=create_args,
         body=[  # pyright: ignore [reportArgumentType]
         body=[  # pyright: ignore [reportArgumentType]
@@ -684,7 +684,7 @@ def _generate_staticmethod_call_functiondef(
             else []
             else []
         ),
         ),
     )
     )
-    definition = ast.FunctionDef(
+    definition = ast.FunctionDef(  # pyright: ignore [reportCallIssue]
         name="__call__",
         name="__call__",
         args=call_args,
         args=call_args,
         body=[
         body=[

+ 1 - 1
reflex/vars/datetime.py

@@ -184,7 +184,7 @@ def date_compare_operation(
         The result of the operation.
         The result of the operation.
     """
     """
     return var_operation_return(
     return var_operation_return(
-        f"({lhs} { '<' if strict else '<='} {rhs})",
+        f"({lhs} {'<' if strict else '<='} {rhs})",
         bool,
         bool,
     )
     )
 
 

+ 3 - 4
tests/integration/test_connection_banner.py

@@ -136,9 +136,9 @@ def _assert_token(connection_banner, driver):
         driver: Selenium webdriver instance.
         driver: Selenium webdriver instance.
     """
     """
     ss = SessionStorage(driver)
     ss = SessionStorage(driver)
-    assert connection_banner._poll_for(
-        lambda: ss.get("token") is not None
-    ), "token not found"
+    assert connection_banner._poll_for(lambda: ss.get("token") is not None), (
+        "token not found"
+    )
 
 
 
 
 @pytest.mark.asyncio
 @pytest.mark.asyncio
@@ -153,7 +153,6 @@ async def test_connection_banner(connection_banner: AppHarness):
     driver = connection_banner.frontend()
     driver = connection_banner.frontend()
 
 
     _assert_token(connection_banner, driver)
     _assert_token(connection_banner, driver)
-
     assert connection_banner._poll_for(lambda: not has_error_modal(driver))
     assert connection_banner._poll_for(lambda: not has_error_modal(driver))
 
 
     delay_button = driver.find_element(By.ID, "delay")
     delay_button = driver.find_element(By.ID, "delay")

+ 2 - 2
tests/units/components/core/test_colors.py

@@ -55,13 +55,13 @@ def create_color_var(color):
             Color,
             Color,
         ),
         ),
         (
         (
-            create_color_var(f'{rx.color(ColorState.color, f"{ColorState.shade}")}'),  # pyright: ignore [reportArgumentType]
+            create_color_var(f"{rx.color(ColorState.color, f'{ColorState.shade}')}"),  # pyright: ignore [reportArgumentType]
             f'("var(--"+{color_state_name!s}.color+"-"+{color_state_name!s}.shade+")")',
             f'("var(--"+{color_state_name!s}.color+"-"+{color_state_name!s}.shade+")")',
             str,
             str,
         ),
         ),
         (
         (
             create_color_var(
             create_color_var(
-                f'{rx.color(f"{ColorState.color}", f"{ColorState.shade}")}'  # pyright: ignore [reportArgumentType]
+                f"{rx.color(f'{ColorState.color}', f'{ColorState.shade}')}"  # pyright: ignore [reportArgumentType]
             ),
             ),
             f'("var(--"+{color_state_name!s}.color+"-"+{color_state_name!s}.shade+")")',
             f'("var(--"+{color_state_name!s}.color+"-"+{color_state_name!s}.shade+")")',
             str,
             str,