enable PGH, bump pyright and fix all #type: ignore (#4699)

* enable PGH, bump pyright and fix  all #type: ignore

* relock poetry file

* ignore incompatible override

* fix varop tests

* ignore missing imports

* fix

* fix stuff

* fix tests

* rechange tests

* relock with poetry 2.0
This commit is contained in:
Thomas Brandého 2025-01-28 22:11:05 +01:00 committed by GitHub
parent 64fb78ac5e
commit 42e6dfa40d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
117 changed files with 731 additions and 828 deletions

View File

@ -28,7 +28,7 @@ repos:
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.334 rev: v1.1.392
hooks: hooks:
- id: pyright - id: pyright
args: [reflex, tests] args: [reflex, tests]

View File

@ -34,13 +34,13 @@ def render_component(num: int):
rx.box( rx.box(
rx.accordion.root( rx.accordion.root(
rx.accordion.item( rx.accordion.item(
header="Full Ingredients", # type: ignore header="Full Ingredients",
content="Yes. It's built with accessibility in mind.", # type: ignore content="Yes. It's built with accessibility in mind.",
font_size="3em", font_size="3em",
), ),
rx.accordion.item( rx.accordion.item(
header="Applications", # type: ignore header="Applications",
content="Yes. It's unstyled by default, giving you freedom over the look and feel.", # type: ignore content="Yes. It's unstyled by default, giving you freedom over the look and feel.",
), ),
collapsible=True, collapsible=True,
variant="ghost", variant="ghost",
@ -166,9 +166,9 @@ def app_with_10_components(
root=root, root=root,
app_source=functools.partial( app_source=functools.partial(
AppWithTenComponentsOnePage, AppWithTenComponentsOnePage,
render_component=render_component, # type: ignore render_component=render_component, # pyright: ignore [reportCallIssue]
), ),
) # type: ignore )
@pytest.fixture(scope="session") @pytest.fixture(scope="session")
@ -189,9 +189,9 @@ def app_with_100_components(
root=root, root=root,
app_source=functools.partial( app_source=functools.partial(
AppWithHundredComponentOnePage, AppWithHundredComponentOnePage,
render_component=render_component, # type: ignore render_component=render_component, # pyright: ignore [reportCallIssue]
), ),
) # type: ignore )
@pytest.fixture(scope="session") @pytest.fixture(scope="session")
@ -212,9 +212,9 @@ def app_with_1000_components(
root=root, root=root,
app_source=functools.partial( app_source=functools.partial(
AppWithThousandComponentsOnePage, AppWithThousandComponentsOnePage,
render_component=render_component, # type: ignore render_component=render_component, # pyright: ignore [reportCallIssue]
), ),
) # type: ignore )
@pytest.mark.skipif(constants.IS_WINDOWS, reason=WINDOWS_SKIP_REASON) @pytest.mark.skipif(constants.IS_WINDOWS, reason=WINDOWS_SKIP_REASON)

View File

@ -28,7 +28,7 @@ def render_multiple_pages(app, num: int):
""" """
from typing import Tuple from typing import Tuple
from rxconfig import config # type: ignore from rxconfig import config # pyright: ignore [reportMissingImports]
import reflex as rx import reflex as rx
@ -74,13 +74,13 @@ def render_multiple_pages(app, num: int):
rx.select( rx.select(
["C", "PF", "SF", "PG", "SG"], ["C", "PF", "SF", "PG", "SG"],
placeholder="Select a position. (All)", placeholder="Select a position. (All)",
on_change=State.set_position, # type: ignore on_change=State.set_position, # pyright: ignore [reportAttributeAccessIssue]
size="3", size="3",
), ),
rx.select( rx.select(
college, college,
placeholder="Select a college. (All)", placeholder="Select a college. (All)",
on_change=State.set_college, # type: ignore on_change=State.set_college, # pyright: ignore [reportAttributeAccessIssue]
size="3", size="3",
), ),
), ),
@ -95,7 +95,7 @@ def render_multiple_pages(app, num: int):
default_value=[18, 50], default_value=[18, 50],
min=18, min=18,
max=50, max=50,
on_value_commit=State.set_age, # type: ignore on_value_commit=State.set_age, # pyright: ignore [reportAttributeAccessIssue]
), ),
align_items="left", align_items="left",
width="100%", width="100%",
@ -110,7 +110,7 @@ def render_multiple_pages(app, num: int):
default_value=[0, 25000000], default_value=[0, 25000000],
min=0, min=0,
max=25000000, max=25000000,
on_value_commit=State.set_salary, # type: ignore on_value_commit=State.set_salary, # pyright: ignore [reportAttributeAccessIssue]
), ),
align_items="left", align_items="left",
width="100%", width="100%",
@ -130,7 +130,7 @@ def render_multiple_pages(app, num: int):
def AppWithOnePage(): def AppWithOnePage():
"""A reflex app with one page.""" """A reflex app with one page."""
from rxconfig import config # type: ignore from rxconfig import config # pyright: ignore [reportMissingImports]
import reflex as rx import reflex as rx
@ -232,7 +232,7 @@ def app_with_ten_pages(
root=root, root=root,
app_source=functools.partial( app_source=functools.partial(
AppWithTenPages, AppWithTenPages,
render_comp=render_multiple_pages, # type: ignore render_comp=render_multiple_pages, # pyright: ignore [reportCallIssue]
), ),
) )
@ -255,9 +255,9 @@ def app_with_hundred_pages(
root=root, root=root,
app_source=functools.partial( app_source=functools.partial(
AppWithHundredPages, AppWithHundredPages,
render_comp=render_multiple_pages, # type: ignore render_comp=render_multiple_pages, # pyright: ignore [reportCallIssue]
), ),
) # type: ignore )
@pytest.fixture(scope="session") @pytest.fixture(scope="session")
@ -278,9 +278,9 @@ def app_with_thousand_pages(
root=root, root=root,
app_source=functools.partial( app_source=functools.partial(
AppWithThousandPages, AppWithThousandPages,
render_comp=render_multiple_pages, # type: ignore render_comp=render_multiple_pages, # pyright: ignore [reportCallIssue]
), ),
) # type: ignore )
@pytest.fixture(scope="session") @pytest.fixture(scope="session")
@ -301,9 +301,9 @@ def app_with_ten_thousand_pages(
root=root, root=root,
app_source=functools.partial( app_source=functools.partial(
AppWithTenThousandPages, AppWithTenThousandPages,
render_comp=render_multiple_pages, # type: ignore render_comp=render_multiple_pages, # pyright: ignore [reportCallIssue]
), ),
) # type: ignore )
@pytest.mark.skipif(constants.IS_WINDOWS, reason=WINDOWS_SKIP_REASON) @pytest.mark.skipif(constants.IS_WINDOWS, reason=WINDOWS_SKIP_REASON)

192
poetry.lock generated
View File

@ -1,4 +1,4 @@
# This file is automatically @generated by Poetry 2.0.0 and should not be changed by hand. # This file is automatically @generated by Poetry 2.0.1 and should not be changed by hand.
[[package]] [[package]]
name = "alembic" name = "alembic"
@ -86,15 +86,15 @@ files = [
[[package]] [[package]]
name = "attrs" name = "attrs"
version = "24.3.0" version = "25.1.0"
description = "Classes Without Boilerplate" description = "Classes Without Boilerplate"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
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 = "attrs-24.3.0-py3-none-any.whl", hash = "sha256:ac96cd038792094f438ad1f6ff80837353805ac950cd2aa0e0625ef19850c308"}, {file = "attrs-25.1.0-py3-none-any.whl", hash = "sha256:c75a69e28a550a7e93789579c22aa26b0f5b83b75dc4e08fe092980051e1090a"},
{file = "attrs-24.3.0.tar.gz", hash = "sha256:8f5c07333d543103541ba7be0e2ce16eeee8130cb0b3f9238ab904ce1e85baff"}, {file = "attrs-25.1.0.tar.gz", hash = "sha256:1c97078a80c814273a76b2a298a932eb681c87415c11dee0a6921de7f1b02c3e"},
] ]
[package.extras] [package.extras]
@ -620,25 +620,25 @@ test = ["pytest (>=6)"]
[[package]] [[package]]
name = "fastapi" name = "fastapi"
version = "0.115.6" version = "0.115.7"
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.6-py3-none-any.whl", hash = "sha256:e9240b29e36fa8f4bb7290316988e90c381e5092e0cbe84e7818cc3713bcf305"}, {file = "fastapi-0.115.7-py3-none-any.whl", hash = "sha256:eb6a8c8bf7f26009e8147111ff15b5177a0e19bb4a45bc3486ab14804539d21e"},
{file = "fastapi-0.115.6.tar.gz", hash = "sha256:9ec46f7addc14ea472958a96aae5b5de65f39721a46aaf5705c480d9a8b76654"}, {file = "fastapi-0.115.7.tar.gz", hash = "sha256:0f106da6c01d88a6786b3248fb4d7a940d071f6f488488898ad5d354b25ed015"},
] ]
[package.dependencies] [package.dependencies]
pydantic = ">=1.7.4,<1.8 || >1.8,<1.8.1 || >1.8.1,<2.0.0 || >2.0.0,<2.0.1 || >2.0.1,<2.1.0 || >2.1.0,<3.0.0" pydantic = ">=1.7.4,<1.8 || >1.8,<1.8.1 || >1.8.1,<2.0.0 || >2.0.0,<2.0.1 || >2.0.1,<2.1.0 || >2.1.0,<3.0.0"
starlette = ">=0.40.0,<0.42.0" starlette = ">=0.40.0,<0.46.0"
typing-extensions = ">=4.8.0" typing-extensions = ">=4.8.0"
[package.extras] [package.extras]
all = ["email-validator (>=2.0.0)", "fastapi-cli[standard] (>=0.0.5)", "httpx (>=0.23.0)", "itsdangerous (>=1.1.0)", "jinja2 (>=2.11.2)", "orjson (>=3.2.1)", "pydantic-extra-types (>=2.0.0)", "pydantic-settings (>=2.0.0)", "python-multipart (>=0.0.7)", "pyyaml (>=5.3.1)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0)", "uvicorn[standard] (>=0.12.0)"] all = ["email-validator (>=2.0.0)", "fastapi-cli[standard] (>=0.0.5)", "httpx (>=0.23.0)", "itsdangerous (>=1.1.0)", "jinja2 (>=3.1.5)", "orjson (>=3.2.1)", "pydantic-extra-types (>=2.0.0)", "pydantic-settings (>=2.0.0)", "python-multipart (>=0.0.18)", "pyyaml (>=5.3.1)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0)", "uvicorn[standard] (>=0.12.0)"]
standard = ["email-validator (>=2.0.0)", "fastapi-cli[standard] (>=0.0.5)", "httpx (>=0.23.0)", "jinja2 (>=2.11.2)", "python-multipart (>=0.0.7)", "uvicorn[standard] (>=0.12.0)"] standard = ["email-validator (>=2.0.0)", "fastapi-cli[standard] (>=0.0.5)", "httpx (>=0.23.0)", "jinja2 (>=3.1.5)", "python-multipart (>=0.0.18)", "uvicorn[standard] (>=0.12.0)"]
[[package]] [[package]]
name = "filelock" name = "filelock"
@ -740,7 +740,7 @@ files = [
{file = "greenlet-3.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:3319aa75e0e0639bc15ff54ca327e8dc7a6fe404003496e3c6925cd3142e0e22"}, {file = "greenlet-3.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:3319aa75e0e0639bc15ff54ca327e8dc7a6fe404003496e3c6925cd3142e0e22"},
{file = "greenlet-3.1.1.tar.gz", hash = "sha256:4ce3ac6cdb6adf7946475d7ef31777c26d94bccc377e070a7986bd2d5c515467"}, {file = "greenlet-3.1.1.tar.gz", hash = "sha256:4ce3ac6cdb6adf7946475d7ef31777c26d94bccc377e070a7986bd2d5c515467"},
] ]
markers = {main = "python_version < \"3.14\" and (platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\") and (python_version <= \"3.11\" or python_version >= \"3.12\")", dev = "python_version <= \"3.11\" or python_version >= \"3.12\""} markers = {main = "(python_version <= \"3.11\" or python_version >= \"3.12\") and (platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\") and python_version < \"3.14\"", dev = "python_version <= \"3.11\" or python_version >= \"3.12\""}
[package.extras] [package.extras]
docs = ["Sphinx", "furo"] docs = ["Sphinx", "furo"]
@ -1540,39 +1540,6 @@ tests = ["check-manifest", "coverage (>=7.4.2)", "defusedxml", "markdown2", "ole
typing = ["typing-extensions"] typing = ["typing-extensions"]
xmp = ["defusedxml"] xmp = ["defusedxml"]
[[package]]
name = "pip"
version = "24.3.1"
description = "The PyPA recommended tool for installing Python packages."
optional = false
python-versions = ">=3.8"
groups = ["main"]
markers = "python_version <= \"3.11\" or python_version >= \"3.12\""
files = [
{file = "pip-24.3.1-py3-none-any.whl", hash = "sha256:3790624780082365f47549d032f3770eeb2b1e8bd1f7b2e02dace1afa361b4ed"},
{file = "pip-24.3.1.tar.gz", hash = "sha256:ebcb60557f2aefabc2e0f918751cd24ea0d56d8ec5445fe1807f1d2109660b99"},
]
[[package]]
name = "pipdeptree"
version = "2.16.2"
description = "Command line utility to show dependency tree of packages."
optional = false
python-versions = ">=3.8"
groups = ["main"]
markers = "python_version <= \"3.11\" or python_version >= \"3.12\""
files = [
{file = "pipdeptree-2.16.2-py3-none-any.whl", hash = "sha256:4b60a20f632aa3449880141d1cd0bc99cb5f93ed46d54d689fd1c9b95f0e53d0"},
{file = "pipdeptree-2.16.2.tar.gz", hash = "sha256:96ecde8e6f40c95998491a385e4af56d387f94ff7d3b8f209aa34982a721bc43"},
]
[package.dependencies]
pip = ">=23.1.2"
[package.extras]
graphviz = ["graphviz (>=0.20.1)"]
test = ["covdefaults (>=2.3)", "diff-cover (>=8.0.1)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "virtualenv (>=20.25,<21)"]
[[package]] [[package]]
name = "platformdirs" name = "platformdirs"
version = "4.3.6" version = "4.3.6"
@ -1727,15 +1694,15 @@ markers = {main = "(platform_machine != \"ppc64le\" and platform_machine != \"s3
[[package]] [[package]]
name = "pydantic" name = "pydantic"
version = "2.10.5" version = "2.10.6"
description = "Data validation using Python type hints" description = "Data validation using Python type hints"
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 = "pydantic-2.10.5-py3-none-any.whl", hash = "sha256:4dd4e322dbe55472cb7ca7e73f4b63574eecccf2835ffa2af9021ce113c83c53"}, {file = "pydantic-2.10.6-py3-none-any.whl", hash = "sha256:427d664bf0b8a2b34ff5dd0f5a18df00591adcee7198fbd71981054cef37b584"},
{file = "pydantic-2.10.5.tar.gz", hash = "sha256:278b38dbbaec562011d659ee05f63346951b3a248a6f3642e1bc68894ea2b4ff"}, {file = "pydantic-2.10.6.tar.gz", hash = "sha256:ca5daa827cce33de7a42be142548b0096bf05a7e7b365aebfa5f8eeec7128236"},
] ]
[package.dependencies] [package.dependencies]
@ -1911,23 +1878,25 @@ files = [
[[package]] [[package]]
name = "pyright" name = "pyright"
version = "1.1.334" version = "1.1.392.post0"
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.334-py3-none-any.whl", hash = "sha256:dcb13e8358e021189672c4d6ebcad192ab061e4c7225036973ec493183c6da68"}, {file = "pyright-1.1.392.post0-py3-none-any.whl", hash = "sha256:252f84458a46fa2f0fd4e2f91fc74f50b9ca52c757062e93f6c250c0d8329eb2"},
{file = "pyright-1.1.334.tar.gz", hash = "sha256:3adaf10f1f4209575dc022f9c897f7ef024639b7ea5b3cbe49302147e6949cd4"}, {file = "pyright-1.1.392.post0.tar.gz", hash = "sha256:3b7f88de74a28dcfa90c7d90c782b6569a48c2be5f9d4add38472bdaac247ebd"},
] ]
[package.dependencies] [package.dependencies]
nodeenv = ">=1.6.0" nodeenv = ">=1.6.0"
typing-extensions = ">=4.1"
[package.extras] [package.extras]
all = ["twine (>=3.4.1)"] all = ["nodejs-wheel-binaries", "twine (>=3.4.1)"]
dev = ["twine (>=3.4.1)"] dev = ["twine (>=3.4.1)"]
nodejs = ["nodejs-wheel-binaries"]
[[package]] [[package]]
name = "pysocks" name = "pysocks"
@ -1969,15 +1938,15 @@ dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments
[[package]] [[package]]
name = "pytest-asyncio" name = "pytest-asyncio"
version = "0.25.2" version = "0.25.3"
description = "Pytest support for asyncio" description = "Pytest support for asyncio"
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_asyncio-0.25.2-py3-none-any.whl", hash = "sha256:0d0bb693f7b99da304a0634afc0a4b19e49d5e0de2d670f38dc4bfa5727c5075"}, {file = "pytest_asyncio-0.25.3-py3-none-any.whl", hash = "sha256:9e89518e0f9bd08928f97a3482fdc4e244df17529460bc038291ccaf8f85c7c3"},
{file = "pytest_asyncio-0.25.2.tar.gz", hash = "sha256:3f8ef9a98f45948ea91a0ed3dc4268b5326c0e7bce73892acc654df4262ad45f"}, {file = "pytest_asyncio-0.25.3.tar.gz", hash = "sha256:fc1da2cf9f125ada7e710b4ddad05518d4cee187ae9412e9ac9271003497f07a"},
] ]
[package.dependencies] [package.dependencies]
@ -2093,7 +2062,7 @@ version = "2.9.0.post0"
description = "Extensions to the standard Python datetime module" description = "Extensions to the standard Python datetime module"
optional = false optional = false
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7"
groups = ["main", "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 = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"},
@ -2311,29 +2280,26 @@ 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.32" version = "0.1.33"
description = "Reflex Hosting CLI" description = "Reflex Hosting CLI"
optional = false optional = false
python-versions = "<4.0,>=3.8" 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.32-py3-none-any.whl", hash = "sha256:86b4222f3e99d949a209be7de8c457ededebc1f12a721ee6669c6c35fdecc508"}, {file = "reflex_hosting_cli-0.1.33-py3-none-any.whl", hash = "sha256:3fe72fc448a231c61de4ac646f42c936c70e91330f616a23aec658f905d53bc4"},
{file = "reflex_hosting_cli-0.1.32.tar.gz", hash = "sha256:0b8e4b4b30d9261bf6d720265f1c428b2840bb630896e60a1a2faa095901ed59"}, {file = "reflex_hosting_cli-0.1.33.tar.gz", hash = "sha256:81c4a896b106eea99f1cab53ea23a6e19802592ce0468cc38d93d440bc95263a"},
] ]
[package.dependencies] [package.dependencies]
charset-normalizer = ">=3.3.2,<4.0.0" charset-normalizer = ">=3.3.2,<4.0.0"
httpx = ">=0.25.1,<1.0" httpx = ">=0.25.1,<1.0"
pipdeptree = ">=2.13.1,<2.17.0"
platformdirs = ">=3.10.0,<5.0" platformdirs = ">=3.10.0,<5.0"
pydantic = ">=1.10.2,<3.0" pydantic = ">=1.10.2,<3.0"
python-dateutil = ">=2.8.1"
pyyaml = ">=6.0.2,<7.0.0" pyyaml = ">=6.0.2,<7.0.0"
rich = ">=13.0.0,<14.0" rich = ">=13.0.0,<14.0"
tabulate = ">=0.9.0,<0.10.0" tabulate = ">=0.9.0,<0.10.0"
typer = ">=0.15.0,<1" typer = ">=0.15.0,<1"
websockets = ">=10.4"
[[package]] [[package]]
name = "requests" name = "requests"
@ -2459,15 +2425,15 @@ jeepney = ">=0.6"
[[package]] [[package]]
name = "selenium" name = "selenium"
version = "4.28.0" version = "4.28.1"
description = "Official Python bindings for Selenium WebDriver" description = "Official Python bindings for Selenium WebDriver"
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 = "selenium-4.28.0-py3-none-any.whl", hash = "sha256:3d6a2e8e1b850a1078884ea19f4e011ecdc12263434d87a0b78769836fb82dd8"}, {file = "selenium-4.28.1-py3-none-any.whl", hash = "sha256:4238847e45e24e4472cfcf3554427512c7aab9443396435b1623ef406fff1cc1"},
{file = "selenium-4.28.0.tar.gz", hash = "sha256:a9fae6eef48d470a1b0c6e45185d96f0dafb025e8da4b346cc41e4da3ac54fa0"}, {file = "selenium-4.28.1.tar.gz", hash = "sha256:0072d08670d7ec32db901bd0107695a330cecac9f196e3afb3fa8163026e022a"},
] ]
[package.dependencies] [package.dependencies]
@ -2539,7 +2505,7 @@ version = "1.17.0"
description = "Python 2 and 3 compatibility utilities" description = "Python 2 and 3 compatibility utilities"
optional = false optional = false
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7"
groups = ["main", "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 = "six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"}, {file = "six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"},
@ -2688,22 +2654,22 @@ SQLAlchemy = ">=2.0.14,<2.1.0"
[[package]] [[package]]
name = "starlette" name = "starlette"
version = "0.41.3" version = "0.45.3"
description = "The little ASGI library that shines." description = "The little ASGI library that shines."
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=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 = "starlette-0.41.3-py3-none-any.whl", hash = "sha256:44cedb2b7c77a9de33a8b74b2b90e9f50d11fcf25d8270ea525ad71a25374ff7"}, {file = "starlette-0.45.3-py3-none-any.whl", hash = "sha256:dfb6d332576f136ec740296c7e8bb8c8a7125044e7c6da30744718880cdd059d"},
{file = "starlette-0.41.3.tar.gz", hash = "sha256:0e4ab3d16522a255be6b28260b938eae2482f98ce5cc934cb08dce8dc3ba5835"}, {file = "starlette-0.45.3.tar.gz", hash = "sha256:2cbcba2a75806f8a41c722141486f37c28e30a0921c5f6fe4346cb0dcee1302f"},
] ]
[package.dependencies] [package.dependencies]
anyio = ">=3.4.0,<5" anyio = ">=3.6.2,<5"
[package.extras] [package.extras]
full = ["httpx (>=0.22.0)", "itsdangerous", "jinja2", "python-multipart (>=0.0.7)", "pyyaml"] full = ["httpx (>=0.27.0,<0.29.0)", "itsdangerous", "jinja2", "python-multipart (>=0.0.18)", "pyyaml"]
[[package]] [[package]]
name = "starlette-admin" name = "starlette-admin"
@ -3040,86 +3006,6 @@ docs = ["Sphinx (>=6.0)", "myst-parser (>=2.0.0)", "sphinx-rtd-theme (>=1.1.0)"]
optional = ["python-socks", "wsaccel"] optional = ["python-socks", "wsaccel"]
test = ["websockets"] test = ["websockets"]
[[package]]
name = "websockets"
version = "14.2"
description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)"
optional = false
python-versions = ">=3.9"
groups = ["main"]
markers = "python_version <= \"3.11\" or python_version >= \"3.12\""
files = [
{file = "websockets-14.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e8179f95323b9ab1c11723e5d91a89403903f7b001828161b480a7810b334885"},
{file = "websockets-14.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0d8c3e2cdb38f31d8bd7d9d28908005f6fa9def3324edb9bf336d7e4266fd397"},
{file = "websockets-14.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:714a9b682deb4339d39ffa674f7b674230227d981a37d5d174a4a83e3978a610"},
{file = "websockets-14.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2e53c72052f2596fb792a7acd9704cbc549bf70fcde8a99e899311455974ca3"},
{file = "websockets-14.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e3fbd68850c837e57373d95c8fe352203a512b6e49eaae4c2f4088ef8cf21980"},
{file = "websockets-14.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b27ece32f63150c268593d5fdb82819584831a83a3f5809b7521df0685cd5d8"},
{file = "websockets-14.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4daa0faea5424d8713142b33825fff03c736f781690d90652d2c8b053345b0e7"},
{file = "websockets-14.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:bc63cee8596a6ec84d9753fd0fcfa0452ee12f317afe4beae6b157f0070c6c7f"},
{file = "websockets-14.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7a570862c325af2111343cc9b0257b7119b904823c675b22d4ac547163088d0d"},
{file = "websockets-14.2-cp310-cp310-win32.whl", hash = "sha256:75862126b3d2d505e895893e3deac0a9339ce750bd27b4ba515f008b5acf832d"},
{file = "websockets-14.2-cp310-cp310-win_amd64.whl", hash = "sha256:cc45afb9c9b2dc0852d5c8b5321759cf825f82a31bfaf506b65bf4668c96f8b2"},
{file = "websockets-14.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:3bdc8c692c866ce5fefcaf07d2b55c91d6922ac397e031ef9b774e5b9ea42166"},
{file = "websockets-14.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c93215fac5dadc63e51bcc6dceca72e72267c11def401d6668622b47675b097f"},
{file = "websockets-14.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1c9b6535c0e2cf8a6bf938064fb754aaceb1e6a4a51a80d884cd5db569886910"},
{file = "websockets-14.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a52a6d7cf6938e04e9dceb949d35fbdf58ac14deea26e685ab6368e73744e4c"},
{file = "websockets-14.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9f05702e93203a6ff5226e21d9b40c037761b2cfb637187c9802c10f58e40473"},
{file = "websockets-14.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:22441c81a6748a53bfcb98951d58d1af0661ab47a536af08920d129b4d1c3473"},
{file = "websockets-14.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:efd9b868d78b194790e6236d9cbc46d68aba4b75b22497eb4ab64fa640c3af56"},
{file = "websockets-14.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:1a5a20d5843886d34ff8c57424cc65a1deda4375729cbca4cb6b3353f3ce4142"},
{file = "websockets-14.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:34277a29f5303d54ec6468fb525d99c99938607bc96b8d72d675dee2b9f5bf1d"},
{file = "websockets-14.2-cp311-cp311-win32.whl", hash = "sha256:02687db35dbc7d25fd541a602b5f8e451a238ffa033030b172ff86a93cb5dc2a"},
{file = "websockets-14.2-cp311-cp311-win_amd64.whl", hash = "sha256:862e9967b46c07d4dcd2532e9e8e3c2825e004ffbf91a5ef9dde519ee2effb0b"},
{file = "websockets-14.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:1f20522e624d7ffbdbe259c6b6a65d73c895045f76a93719aa10cd93b3de100c"},
{file = "websockets-14.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:647b573f7d3ada919fd60e64d533409a79dcf1ea21daeb4542d1d996519ca967"},
{file = "websockets-14.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6af99a38e49f66be5a64b1e890208ad026cda49355661549c507152113049990"},
{file = "websockets-14.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:091ab63dfc8cea748cc22c1db2814eadb77ccbf82829bac6b2fbe3401d548eda"},
{file = "websockets-14.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b374e8953ad477d17e4851cdc66d83fdc2db88d9e73abf755c94510ebddceb95"},
{file = "websockets-14.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a39d7eceeea35db85b85e1169011bb4321c32e673920ae9c1b6e0978590012a3"},
{file = "websockets-14.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0a6f3efd47ffd0d12080594f434faf1cd2549b31e54870b8470b28cc1d3817d9"},
{file = "websockets-14.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:065ce275e7c4ffb42cb738dd6b20726ac26ac9ad0a2a48e33ca632351a737267"},
{file = "websockets-14.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e9d0e53530ba7b8b5e389c02282f9d2aa47581514bd6049d3a7cffe1385cf5fe"},
{file = "websockets-14.2-cp312-cp312-win32.whl", hash = "sha256:20e6dd0984d7ca3037afcb4494e48c74ffb51e8013cac71cf607fffe11df7205"},
{file = "websockets-14.2-cp312-cp312-win_amd64.whl", hash = "sha256:44bba1a956c2c9d268bdcdf234d5e5ff4c9b6dc3e300545cbe99af59dda9dcce"},
{file = "websockets-14.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:6f1372e511c7409a542291bce92d6c83320e02c9cf392223272287ce55bc224e"},
{file = "websockets-14.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:4da98b72009836179bb596a92297b1a61bb5a830c0e483a7d0766d45070a08ad"},
{file = "websockets-14.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8a86a269759026d2bde227652b87be79f8a734e582debf64c9d302faa1e9f03"},
{file = "websockets-14.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:86cf1aaeca909bf6815ea714d5c5736c8d6dd3a13770e885aafe062ecbd04f1f"},
{file = "websockets-14.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9b0f6c3ba3b1240f602ebb3971d45b02cc12bd1845466dd783496b3b05783a5"},
{file = "websockets-14.2-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:669c3e101c246aa85bc8534e495952e2ca208bd87994650b90a23d745902db9a"},
{file = "websockets-14.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:eabdb28b972f3729348e632ab08f2a7b616c7e53d5414c12108c29972e655b20"},
{file = "websockets-14.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2066dc4cbcc19f32c12a5a0e8cc1b7ac734e5b64ac0a325ff8353451c4b15ef2"},
{file = "websockets-14.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ab95d357cd471df61873dadf66dd05dd4709cae001dd6342edafc8dc6382f307"},
{file = "websockets-14.2-cp313-cp313-win32.whl", hash = "sha256:a9e72fb63e5f3feacdcf5b4ff53199ec8c18d66e325c34ee4c551ca748623bbc"},
{file = "websockets-14.2-cp313-cp313-win_amd64.whl", hash = "sha256:b439ea828c4ba99bb3176dc8d9b933392a2413c0f6b149fdcba48393f573377f"},
{file = "websockets-14.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7cd5706caec1686c5d233bc76243ff64b1c0dc445339bd538f30547e787c11fe"},
{file = "websockets-14.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ec607328ce95a2f12b595f7ae4c5d71bf502212bddcea528290b35c286932b12"},
{file = "websockets-14.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:da85651270c6bfb630136423037dd4975199e5d4114cae6d3066641adcc9d1c7"},
{file = "websockets-14.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c3ecadc7ce90accf39903815697917643f5b7cfb73c96702318a096c00aa71f5"},
{file = "websockets-14.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1979bee04af6a78608024bad6dfcc0cc930ce819f9e10342a29a05b5320355d0"},
{file = "websockets-14.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2dddacad58e2614a24938a50b85969d56f88e620e3f897b7d80ac0d8a5800258"},
{file = "websockets-14.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:89a71173caaf75fa71a09a5f614f450ba3ec84ad9fca47cb2422a860676716f0"},
{file = "websockets-14.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:6af6a4b26eea4fc06c6818a6b962a952441e0e39548b44773502761ded8cc1d4"},
{file = "websockets-14.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:80c8efa38957f20bba0117b48737993643204645e9ec45512579132508477cfc"},
{file = "websockets-14.2-cp39-cp39-win32.whl", hash = "sha256:2e20c5f517e2163d76e2729104abc42639c41cf91f7b1839295be43302713661"},
{file = "websockets-14.2-cp39-cp39-win_amd64.whl", hash = "sha256:b4c8cef610e8d7c70dea92e62b6814a8cd24fbd01d7103cc89308d2bfe1659ef"},
{file = "websockets-14.2-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:d7d9cafbccba46e768be8a8ad4635fa3eae1ffac4c6e7cb4eb276ba41297ed29"},
{file = "websockets-14.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:c76193c1c044bd1e9b3316dcc34b174bbf9664598791e6fb606d8d29000e070c"},
{file = "websockets-14.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fd475a974d5352390baf865309fe37dec6831aafc3014ffac1eea99e84e83fc2"},
{file = "websockets-14.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2c6c0097a41968b2e2b54ed3424739aab0b762ca92af2379f152c1aef0187e1c"},
{file = "websockets-14.2-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d7ff794c8b36bc402f2e07c0b2ceb4a2424147ed4785ff03e2a7af03711d60a"},
{file = "websockets-14.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:dec254fcabc7bd488dab64846f588fc5b6fe0d78f641180030f8ea27b76d72c3"},
{file = "websockets-14.2-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:bbe03eb853e17fd5b15448328b4ec7fb2407d45fb0245036d06a3af251f8e48f"},
{file = "websockets-14.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:a3c4aa3428b904d5404a0ed85f3644d37e2cb25996b7f096d77caeb0e96a3b42"},
{file = "websockets-14.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:577a4cebf1ceaf0b65ffc42c54856214165fb8ceeba3935852fc33f6b0c55e7f"},
{file = "websockets-14.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ad1c1d02357b7665e700eca43a31d52814ad9ad9b89b58118bdabc365454b574"},
{file = "websockets-14.2-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f390024a47d904613577df83ba700bd189eedc09c57af0a904e5c39624621270"},
{file = "websockets-14.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:3c1426c021c38cf92b453cdf371228d3430acd775edee6bac5a4d577efc72365"},
{file = "websockets-14.2-py3-none-any.whl", hash = "sha256:7a6ceec4ea84469f15cf15807a747e9efe57e369c384fa86e022b3bea679b79b"},
{file = "websockets-14.2.tar.gz", hash = "sha256:5059ed9c54945efb321f097084b4c7e52c246f2c869815876a69d1efc4ad6eb5"},
]
[[package]] [[package]]
name = "wheel" name = "wheel"
version = "0.45.1" version = "0.45.1"
@ -3266,4 +3152,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 = "376707066a00c43aef555c6db2ccb0ddfde0ee9011e8f20110d728fb723f1662" content-hash = "35c503a68e87896b4f7d7c209dd3fe6d707ebcc1702377cab0a1339554c6ad77"

View File

@ -55,7 +55,7 @@ typing_extensions = ">=4.6.0"
[tool.poetry.group.dev.dependencies] [tool.poetry.group.dev.dependencies]
pytest = ">=7.1.2,<9.0" pytest = ">=7.1.2,<9.0"
pytest-mock = ">=3.10.0,<4.0" pytest-mock = ">=3.10.0,<4.0"
pyright = ">=1.1.229,<1.1.335" pyright = ">=1.1.392, <1.2"
darglint = ">=1.8.1,<2.0" darglint = ">=1.8.1,<2.0"
dill = ">=0.3.8" dill = ">=0.3.8"
toml = ">=0.10.2,<1.0" toml = ">=0.10.2,<1.0"
@ -80,12 +80,13 @@ requires = ["poetry-core>=1.5.1"]
build-backend = "poetry.core.masonry.api" build-backend = "poetry.core.masonry.api"
[tool.pyright] [tool.pyright]
reportIncompatibleMethodOverride = false
[tool.ruff] [tool.ruff]
target-version = "py310" 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 = ["B", "C4", "D", "E", "ERA", "F", "FURB", "I", "N", "PERF", "PTH", "RUF", "SIM", "T", "TRY", "W"] lint.select = ["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", "RUF012", "TRY0"]
lint.pydocstyle.convention = "google" lint.pydocstyle.convention = "google"
@ -94,7 +95,7 @@ lint.pydocstyle.convention = "google"
"tests/*.py" = ["D100", "D103", "D104", "B018", "PERF", "T", "N"] "tests/*.py" = ["D100", "D103", "D104", "B018", "PERF", "T", "N"]
"benchmarks/*.py" = ["D100", "D103", "D104", "B018", "PERF", "T", "N"] "benchmarks/*.py" = ["D100", "D103", "D104", "B018", "PERF", "T", "N"]
"reflex/.templates/*.py" = ["D100", "D103", "D104"] "reflex/.templates/*.py" = ["D100", "D103", "D104"]
"*.pyi" = ["D301", "D415", "D417", "D418", "E742", "N"] "*.pyi" = ["D301", "D415", "D417", "D418", "E742", "N", "PGH"]
"pyi_generator.py" = ["N802"] "pyi_generator.py" = ["N802"]
"reflex/constants/*.py" = ["N"] "reflex/constants/*.py" = ["N"]
"*/blank.py" = ["I001"] "*/blank.py" = ["I001"]

View File

@ -131,7 +131,7 @@ from .components.radix.themes.layout.container import container as container
from .components.radix.themes.layout.flex import flex as flex from .components.radix.themes.layout.flex import flex as flex
from .components.radix.themes.layout.grid import grid as grid from .components.radix.themes.layout.grid import grid as grid
from .components.radix.themes.layout.list import list_item as list_item from .components.radix.themes.layout.list import list_item as list_item
from .components.radix.themes.layout.list import list_ns as list # noqa from .components.radix.themes.layout.list import list_ns as list # noqa: F401
from .components.radix.themes.layout.list import ordered_list as ordered_list from .components.radix.themes.layout.list import ordered_list as ordered_list
from .components.radix.themes.layout.list import unordered_list as unordered_list from .components.radix.themes.layout.list import unordered_list as unordered_list
from .components.radix.themes.layout.section import section as section from .components.radix.themes.layout.section import section as section

View File

@ -146,7 +146,7 @@ def default_backend_exception_handler(exception: Exception) -> EventSpec:
position="top-center", position="top-center",
id="backend_error", id="backend_error",
style={"width": "500px"}, style={"width": "500px"},
) # type: ignore ) # pyright: ignore [reportReturnType]
else: else:
error_message.insert(0, "An error occurred.") error_message.insert(0, "An error occurred.")
return window_alert("\n".join(error_message)) return window_alert("\n".join(error_message))
@ -780,7 +780,7 @@ class App(MiddlewareMixin, LifespanMixin):
frontend_packages = get_config().frontend_packages frontend_packages = get_config().frontend_packages
_frontend_packages = [] _frontend_packages = []
for package in frontend_packages: for package in frontend_packages:
if package in (get_config().tailwind or {}).get("plugins", []): # type: ignore if package in (get_config().tailwind or {}).get("plugins", []):
console.warn( console.warn(
f"Tailwind packages are inferred from 'plugins', remove `{package}` from `frontend_packages`" f"Tailwind packages are inferred from 'plugins', remove `{package}` from `frontend_packages`"
) )
@ -1025,7 +1025,7 @@ class App(MiddlewareMixin, LifespanMixin):
compiler.compile_document_root( compiler.compile_document_root(
self.head_components, self.head_components,
html_lang=self.html_lang, html_lang=self.html_lang,
html_custom_attrs=self.html_custom_attrs, # type: ignore html_custom_attrs=self.html_custom_attrs, # pyright: ignore [reportArgumentType]
) )
) )

View File

@ -32,7 +32,7 @@ class LifespanMixin(AppMixin):
try: try:
async with contextlib.AsyncExitStack() as stack: async with contextlib.AsyncExitStack() as stack:
for task in self.lifespan_tasks: for task in self.lifespan_tasks:
run_msg = f"Started lifespan task: {task.__name__} as {{type}}" # type: ignore run_msg = f"Started lifespan task: {task.__name__} as {{type}}" # pyright: ignore [reportAttributeAccessIssue]
if isinstance(task, asyncio.Task): if isinstance(task, asyncio.Task):
running_tasks.append(task) running_tasks.append(task)
else: else:
@ -73,7 +73,7 @@ class LifespanMixin(AppMixin):
if task_kwargs: if task_kwargs:
original_task = task original_task = task
task = functools.partial(task, **task_kwargs) # type: ignore task = functools.partial(task, **task_kwargs) # pyright: ignore [reportArgumentType]
functools.update_wrapper(task, original_task) # type: ignore functools.update_wrapper(task, original_task) # pyright: ignore [reportArgumentType]
self.lifespan_tasks.add(task) # type: ignore self.lifespan_tasks.add(task)
console.debug(f"Registered lifespan task: {task.__name__}") # type: ignore console.debug(f"Registered lifespan task: {task.__name__}") # pyright: ignore [reportAttributeAccessIssue]

View File

@ -53,11 +53,11 @@ class MiddlewareMixin(AppMixin):
""" """
for middleware in self.middleware: for middleware in self.middleware:
if asyncio.iscoroutinefunction(middleware.preprocess): if asyncio.iscoroutinefunction(middleware.preprocess):
out = await middleware.preprocess(app=self, state=state, event=event) # type: ignore out = await middleware.preprocess(app=self, state=state, event=event) # pyright: ignore [reportArgumentType]
else: else:
out = middleware.preprocess(app=self, state=state, event=event) # type: ignore out = middleware.preprocess(app=self, state=state, event=event) # pyright: ignore [reportArgumentType]
if out is not None: if out is not None:
return out # type: ignore return out # pyright: ignore [reportReturnType]
async def _postprocess( async def _postprocess(
self, state: BaseState, event: Event, update: StateUpdate self, state: BaseState, event: Event, update: StateUpdate
@ -78,18 +78,18 @@ class MiddlewareMixin(AppMixin):
for middleware in self.middleware: for middleware in self.middleware:
if asyncio.iscoroutinefunction(middleware.postprocess): if asyncio.iscoroutinefunction(middleware.postprocess):
out = await middleware.postprocess( out = await middleware.postprocess(
app=self, # type: ignore app=self, # pyright: ignore [reportArgumentType]
state=state, state=state,
event=event, event=event,
update=update, update=update,
) )
else: else:
out = middleware.postprocess( out = middleware.postprocess(
app=self, # type: ignore app=self, # pyright: ignore [reportArgumentType]
state=state, state=state,
event=event, event=event,
update=update, update=update,
) )
if out is not None: if out is not None:
return out # type: ignore return out # pyright: ignore [reportReturnType]
return update return update

View File

@ -13,7 +13,7 @@ except ModuleNotFoundError:
if not TYPE_CHECKING: if not TYPE_CHECKING:
import pydantic.main as pydantic_main import pydantic.main as pydantic_main
from pydantic import BaseModel from pydantic import BaseModel
from pydantic.fields import ModelField # type: ignore from pydantic.fields import ModelField
def validate_field_name(bases: List[Type["BaseModel"]], field_name: str) -> None: def validate_field_name(bases: List[Type["BaseModel"]], field_name: str) -> None:
@ -44,13 +44,13 @@ def validate_field_name(bases: List[Type["BaseModel"]], field_name: str) -> None
# monkeypatch pydantic validate_field_name method to skip validating # monkeypatch pydantic validate_field_name method to skip validating
# shadowed state vars when reloading app via utils.prerequisites.get_app(reload=True) # shadowed state vars when reloading app via utils.prerequisites.get_app(reload=True)
pydantic_main.validate_field_name = validate_field_name # type: ignore pydantic_main.validate_field_name = validate_field_name # pyright: ignore [reportPossiblyUnboundVariable, reportPrivateImportUsage]
if TYPE_CHECKING: if TYPE_CHECKING:
from reflex.vars import Var from reflex.vars import Var
class Base(BaseModel): # pyright: ignore [reportUnboundVariable] class Base(BaseModel): # pyright: ignore [reportPossiblyUnboundVariable]
"""The base class subclassed by all Reflex classes. """The base class subclassed by all Reflex classes.
This class wraps Pydantic and provides common methods such as This class wraps Pydantic and provides common methods such as
@ -75,7 +75,7 @@ class Base(BaseModel): # pyright: ignore [reportUnboundVariable]
""" """
from reflex.utils.serializers import serialize from reflex.utils.serializers import serialize
return self.__config__.json_dumps( # type: ignore return self.__config__.json_dumps(
self.dict(), self.dict(),
default=serialize, default=serialize,
) )
@ -113,12 +113,12 @@ class Base(BaseModel): # pyright: ignore [reportUnboundVariable]
default_value: The default value of the field default_value: The default value of the field
""" """
var_name = var._var_field_name var_name = var._var_field_name
new_field = ModelField.infer( new_field = ModelField.infer( # pyright: ignore [reportPossiblyUnboundVariable]
name=var_name, name=var_name,
value=default_value, value=default_value,
annotation=var._var_type, annotation=var._var_type,
class_validators=None, class_validators=None,
config=cls.__config__, # type: ignore config=cls.__config__,
) )
cls.__fields__.update({var_name: new_field}) cls.__fields__.update({var_name: new_field})

View File

@ -12,7 +12,9 @@ from reflex.vars.base import Var
try: try:
from pydantic.v1.fields import ModelField from pydantic.v1.fields import ModelField
except ModuleNotFoundError: except ModuleNotFoundError:
from pydantic.fields import ModelField # type: ignore from pydantic.fields import (
ModelField, # pyright: ignore [reportAttributeAccessIssue]
)
from reflex import constants from reflex import constants
from reflex.components.base import ( from reflex.components.base import (
@ -115,7 +117,7 @@ def compile_imports(import_dict: ParsedImportDict) -> list[dict]:
default, rest = compile_import_statement(fields) default, rest = compile_import_statement(fields)
# prevent lib from being rendered on the page if all imports are non rendered kind # prevent lib from being rendered on the page if all imports are non rendered kind
if not any(f.render for f in fields): # type: ignore if not any(f.render for f in fields):
continue continue
if not lib: if not lib:

View File

@ -31,7 +31,7 @@ class Bare(Component):
return cls(contents=contents) return cls(contents=contents)
else: else:
contents = str(contents) if contents is not None else "" contents = str(contents) if contents is not None else ""
return cls(contents=contents) # type: ignore return cls(contents=contents)
def _get_all_hooks_internal(self) -> dict[str, VarData | None]: def _get_all_hooks_internal(self) -> dict[str, VarData | None]:
"""Include the hooks for the component. """Include the hooks for the component.

View File

@ -53,11 +53,11 @@ class Description(Meta):
"""A component that displays the title of the current page.""" """A component that displays the title of the current page."""
# The type of the description. # The type of the description.
name: str = "description" name: str | None = "description"
class Image(Meta): class Image(Meta):
"""A component that displays the title of the current page.""" """A component that displays the title of the current page."""
# The type of the image. # The type of the image.
property: str = "og:image" property: str | None = "og:image"

View File

@ -150,7 +150,7 @@ class BaseComponent(Base, ABC):
class ComponentNamespace(SimpleNamespace): class ComponentNamespace(SimpleNamespace):
"""A namespace to manage components with subcomponents.""" """A namespace to manage components with subcomponents."""
def __hash__(self) -> int: def __hash__(self) -> int: # pyright: ignore [reportIncompatibleVariableOverride]
"""Get the hash of the namespace. """Get the hash of the namespace.
Returns: Returns:
@ -462,9 +462,7 @@ class Component(BaseComponent, ABC):
if types.is_union(passed_type): if types.is_union(passed_type):
# We need to check all possible types in the union. # We need to check all possible types in the union.
passed_types = ( passed_types = (
arg arg for arg in passed_type.__args__ if arg is not type(None)
for arg in passed_type.__args__ # type: ignore
if arg is not type(None)
) )
if ( if (
# If the passed var is a union, check if all possible types are valid. # If the passed var is a union, check if all possible types are valid.
@ -491,7 +489,7 @@ class Component(BaseComponent, ABC):
# Check if the key is an event trigger. # Check if the key is an event trigger.
if key in component_specific_triggers: if key in component_specific_triggers:
kwargs["event_triggers"][key] = EventChain.create( kwargs["event_triggers"][key] = EventChain.create(
value=value, # type: ignore value=value,
args_spec=component_specific_triggers[key], args_spec=component_specific_triggers[key],
key=key, key=key,
) )
@ -578,7 +576,7 @@ class Component(BaseComponent, ABC):
annotation = field.annotation annotation = field.annotation
if (metadata := getattr(annotation, "__metadata__", None)) is not None: if (metadata := getattr(annotation, "__metadata__", None)) is not None:
args_spec = metadata[0] args_spec = metadata[0]
default_triggers[field.name] = args_spec or (no_args_event_spec) # type: ignore default_triggers[field.name] = args_spec or (no_args_event_spec)
return default_triggers return default_triggers
def __repr__(self) -> str: def __repr__(self) -> str:
@ -761,7 +759,7 @@ class Component(BaseComponent, ABC):
# Walk the MRO to call all `add_style` methods. # Walk the MRO to call all `add_style` methods.
for base in self._iter_parent_classes_with_method("add_style"): for base in self._iter_parent_classes_with_method("add_style"):
s = base.add_style(self) # type: ignore s = base.add_style(self)
if s is not None: if s is not None:
styles.append(s) styles.append(s)
@ -1674,7 +1672,7 @@ class CustomComponent(Component):
if base_value is not None and isinstance(value, Component): if base_value is not None and isinstance(value, Component):
self.component_props[key] = value self.component_props[key] = value
value = base_value._replace( value = base_value._replace(
merge_var_data=VarData( # type: ignore merge_var_data=VarData(
imports=value._get_all_imports(), imports=value._get_all_imports(),
hooks=value._get_all_hooks(), hooks=value._get_all_hooks(),
) )
@ -1707,7 +1705,7 @@ class CustomComponent(Component):
return hash(self.tag) return hash(self.tag)
@classmethod @classmethod
def get_props(cls) -> Set[str]: def get_props(cls) -> Set[str]: # pyright: ignore [reportIncompatibleVariableOverride]
"""Get the props for the component. """Get the props for the component.
Returns: Returns:
@ -1802,7 +1800,7 @@ class CustomComponent(Component):
include_children=include_children, ignore_ids=ignore_ids include_children=include_children, ignore_ids=ignore_ids
) )
@lru_cache(maxsize=None) # noqa @lru_cache(maxsize=None) # noqa: B019
def get_component(self) -> Component: def get_component(self) -> Component:
"""Render the component. """Render the component.

View File

@ -25,7 +25,7 @@ from reflex.vars.function import FunctionStringVar
from reflex.vars.number import BooleanVar from reflex.vars.number import BooleanVar
from reflex.vars.sequence import LiteralArrayVar from reflex.vars.sequence import LiteralArrayVar
connect_error_var_data: VarData = VarData( # type: ignore connect_error_var_data: VarData = VarData(
imports=Imports.EVENTS, imports=Imports.EVENTS,
hooks={Hooks.EVENTS: None}, hooks={Hooks.EVENTS: None},
) )
@ -99,14 +99,14 @@ class ConnectionToaster(Toaster):
""" """
toast_id = "websocket-error" toast_id = "websocket-error"
target_url = WebsocketTargetURL.create() target_url = WebsocketTargetURL.create()
props = ToastProps( # type: ignore props = ToastProps(
description=LiteralVar.create( description=LiteralVar.create(
f"Check if server is reachable at {target_url}", f"Check if server is reachable at {target_url}",
), ),
close_button=True, close_button=True,
duration=120000, duration=120000,
id=toast_id, id=toast_id,
) ) # pyright: ignore [reportCallIssue]
individual_hooks = [ individual_hooks = [
f"const toast_props = {LiteralVar.create(props)!s};", f"const toast_props = {LiteralVar.create(props)!s};",
@ -116,7 +116,7 @@ class ConnectionToaster(Toaster):
_var_data=VarData( _var_data=VarData(
imports={ imports={
"react": ["useEffect", "useState"], "react": ["useEffect", "useState"],
**dict(target_url._get_all_var_data().imports), # type: ignore **dict(target_url._get_all_var_data().imports), # pyright: ignore [reportArgumentType, reportOptionalMemberAccess]
} }
), ),
).call( ).call(

View File

@ -26,10 +26,9 @@ class Cond(MemoizationLeaf):
cond: Var[Any] cond: Var[Any]
# The component to render if the cond is true. # The component to render if the cond is true.
comp1: BaseComponent = None # type: ignore comp1: BaseComponent | None = None
# The component to render if the cond is false. # The component to render if the cond is false.
comp2: BaseComponent = None # type: ignore comp2: BaseComponent | None = None
@classmethod @classmethod
def create( def create(
@ -73,8 +72,8 @@ class Cond(MemoizationLeaf):
def _render(self) -> Tag: def _render(self) -> Tag:
return CondTag( return CondTag(
cond=self.cond, cond=self.cond,
true_value=self.comp1.render(), true_value=self.comp1.render(), # pyright: ignore [reportOptionalMemberAccess]
false_value=self.comp2.render(), false_value=self.comp2.render(), # pyright: ignore [reportOptionalMemberAccess]
) )
def render(self) -> Dict: def render(self) -> Dict:
@ -111,7 +110,7 @@ class Cond(MemoizationLeaf):
@overload @overload
def cond(condition: Any, c1: Component, c2: Any) -> Component: ... def cond(condition: Any, c1: Component, c2: Any) -> Component: ... # pyright: ignore [reportOverlappingOverload]
@overload @overload
@ -163,16 +162,16 @@ def cond(condition: Any, c1: Any, c2: Any = None) -> Component | Var:
# Create the conditional var. # Create the conditional var.
return ternary_operation( return ternary_operation(
cond_var.bool()._replace( # type: ignore cond_var.bool()._replace(
merge_var_data=VarData(imports=_IS_TRUE_IMPORT), merge_var_data=VarData(imports=_IS_TRUE_IMPORT),
), # type: ignore ),
c1, c1,
c2, c2,
) )
@overload @overload
def color_mode_cond(light: Component, dark: Component | None = None) -> Component: ... # type: ignore def color_mode_cond(light: Component, dark: Component | None = None) -> Component: ... # pyright: ignore [reportOverlappingOverload]
@overload @overload

View File

@ -28,7 +28,7 @@ class DebounceInput(Component):
min_length: Var[int] min_length: Var[int]
# Time to wait between end of input and triggering on_change # Time to wait between end of input and triggering on_change
debounce_timeout: Var[int] = DEFAULT_DEBOUNCE_TIMEOUT # type: ignore debounce_timeout: Var[int] = Var.create(DEFAULT_DEBOUNCE_TIMEOUT)
# If true, notify when Enter key is pressed # If true, notify when Enter key is pressed
force_notify_by_enter: Var[bool] force_notify_by_enter: Var[bool]

View File

@ -222,7 +222,7 @@ class Match(MemoizationLeaf):
cond=match_cond_var, cond=match_cond_var,
match_cases=match_cases, match_cases=match_cases,
default=default, default=default,
children=[case[-1] for case in match_cases] + [default], # type: ignore children=[case[-1] for case in match_cases] + [default], # pyright: ignore [reportArgumentType]
) )
) )
@ -236,13 +236,13 @@ class Match(MemoizationLeaf):
_js_expr=format.format_match( _js_expr=format.format_match(
cond=str(match_cond_var), cond=str(match_cond_var),
match_cases=match_cases, match_cases=match_cases,
default=default, # type: ignore default=default, # pyright: ignore [reportArgumentType]
), ),
_var_type=default._var_type, # type: ignore _var_type=default._var_type, # pyright: ignore [reportAttributeAccessIssue,reportOptionalMemberAccess]
_var_data=VarData.merge( _var_data=VarData.merge(
match_cond_var._get_all_var_data(), match_cond_var._get_all_var_data(),
*[el._get_all_var_data() for case in match_cases for el in case], *[el._get_all_var_data() for case in match_cases for el in case],
default._get_all_var_data(), # type: ignore default._get_all_var_data(), # pyright: ignore [reportAttributeAccessIssue, reportOptionalMemberAccess]
), ),
) )

View File

@ -269,7 +269,7 @@ class Upload(MemoizationLeaf):
on_drop = upload_props["on_drop"] on_drop = upload_props["on_drop"]
if isinstance(on_drop, Callable): if isinstance(on_drop, Callable):
# Call the lambda to get the event chain. # Call the lambda to get the event chain.
on_drop = call_event_fn(on_drop, _on_drop_spec) # type: ignore on_drop = call_event_fn(on_drop, _on_drop_spec)
if isinstance(on_drop, EventSpec): if isinstance(on_drop, EventSpec):
# Update the provided args for direct use with on_drop. # Update the provided args for direct use with on_drop.
on_drop = on_drop.with_args( on_drop = on_drop.with_args(

View File

@ -449,7 +449,7 @@ class CodeBlock(Component, MarkdownComponentMap):
if can_copy: if can_copy:
code = children[0] code = children[0]
copy_button = ( # type: ignore copy_button = (
copy_button copy_button
if copy_button is not None if copy_button is not None
else Button.create( else Button.create(

View File

@ -165,7 +165,7 @@ class DataEditor(NoSSRComponent):
tag = "DataEditor" tag = "DataEditor"
is_default = True is_default = True
library: str = "@glideapps/glide-data-grid@^6.0.3" library: str | None = "@glideapps/glide-data-grid@^6.0.3"
lib_dependencies: List[str] = [ lib_dependencies: List[str] = [
"lodash@^4.17.21", "lodash@^4.17.21",
"react-responsive-carousel@^3.2.7", "react-responsive-carousel@^3.2.7",
@ -321,6 +321,8 @@ class DataEditor(NoSSRComponent):
Returns: Returns:
The import dict. The import dict.
""" """
if self.library is None:
return {}
return { return {
"": f"{format.format_library_name(self.library)}/dist/index.css", "": f"{format.format_library_name(self.library)}/dist/index.css",
self.library: "GridCellKind", self.library: "GridCellKind",
@ -343,7 +345,7 @@ class DataEditor(NoSSRComponent):
data_callback = self.get_cell_content._js_expr data_callback = self.get_cell_content._js_expr
else: else:
data_callback = f"getData_{editor_id}" data_callback = f"getData_{editor_id}"
self.get_cell_content = Var(_js_expr=data_callback) # type: ignore self.get_cell_content = Var(_js_expr=data_callback)
code = [f"function {data_callback}([col, row])" "{"] code = [f"function {data_callback}([col, row])" "{"]

View File

@ -602,7 +602,7 @@ class ShikiCodeBlock(Component, MarkdownComponentMap):
transformer_styles = {} transformer_styles = {}
# Collect styles from transformers and wrapper # Collect styles from transformers and wrapper
for transformer in code_block.transformers._var_value: # type: ignore for transformer in code_block.transformers._var_value: # pyright: ignore [reportAttributeAccessIssue]
if isinstance(transformer, ShikiBaseTransformers) and transformer.style: if isinstance(transformer, ShikiBaseTransformers) and transformer.style:
transformer_styles.update(transformer.style) transformer_styles.update(transformer.style)
transformer_styles.update(code_wrapper_props.pop("style", {})) transformer_styles.update(code_wrapper_props.pop("style", {}))
@ -653,8 +653,9 @@ class ShikiCodeBlock(Component, MarkdownComponentMap):
raise ValueError( raise ValueError(
f"the function names should be str names of functions in the specified transformer: {library!r}" f"the function names should be str names of functions in the specified transformer: {library!r}"
) )
return ShikiBaseTransformers( # type: ignore return ShikiBaseTransformers(
library=library, fns=[FunctionStringVar.create(fn) for fn in fns] library=library,
fns=[FunctionStringVar.create(fn) for fn in fns], # pyright: ignore [reportCallIssue]
) )
def _render(self, props: dict[str, Any] | None = None): def _render(self, props: dict[str, Any] | None = None):
@ -757,13 +758,13 @@ class ShikiHighLevelCodeBlock(ShikiCodeBlock):
if can_copy: if can_copy:
code = children[0] code = children[0]
copy_button = ( # type: ignore copy_button = (
copy_button copy_button
if copy_button is not None if copy_button is not None
else Button.create( else Button.create(
Icon.create(tag="copy", size=16, color=color("gray", 11)), Icon.create(tag="copy", size=16, color=color("gray", 11)),
on_click=[ on_click=[
set_clipboard(cls._strip_transformer_triggers(code)), # type: ignore set_clipboard(cls._strip_transformer_triggers(code)),
copy_script(), copy_script(),
], ],
style=Style( style=Style(

View File

@ -48,4 +48,4 @@ PROP_TO_ELEMENTS = {
ELEMENT_TO_PROPS = defaultdict(list) ELEMENT_TO_PROPS = defaultdict(list)
for prop, elements in PROP_TO_ELEMENTS.items(): for prop, elements in PROP_TO_ELEMENTS.items():
for el in elements: for el in elements:
ELEMENT_TO_PROPS[el].append(prop) # type: ignore ELEMENT_TO_PROPS[el].append(prop)

View File

@ -153,7 +153,7 @@ class Form(BaseHTML):
target: Var[Union[str, int, bool]] target: Var[Union[str, int, bool]]
# If true, the form will be cleared after submit. # If true, the form will be cleared after submit.
reset_on_submit: Var[bool] = False # type: ignore reset_on_submit: Var[bool] = Var.create(False)
# The name used to make this form's submit handler function unique. # The name used to make this form's submit handler function unique.
handle_submit_unique_name: Var[str] handle_submit_unique_name: Var[str]
@ -405,7 +405,7 @@ class Input(BaseHTML):
(value_var := Var.create(value))._var_type (value_var := Var.create(value))._var_type
): ):
props["value"] = ternary_operation( props["value"] = ternary_operation(
(value_var != Var.create(None)) # pyright: ignore [reportGeneralTypeIssues] (value_var != Var.create(None)) # pyright: ignore [reportArgumentType]
& (value_var != Var(_js_expr="undefined")), & (value_var != Var(_js_expr="undefined")),
value, value,
Var.create(""), Var.create(""),

View File

@ -65,8 +65,8 @@ def get_base_component_map() -> dict[str, Callable]:
"h5": lambda value: Heading.create(value, as_="h5", size="2", margin_y="0.5em"), "h5": lambda value: Heading.create(value, as_="h5", size="2", margin_y="0.5em"),
"h6": lambda value: Heading.create(value, as_="h6", size="1", margin_y="0.5em"), "h6": lambda value: Heading.create(value, as_="h6", size="1", margin_y="0.5em"),
"p": lambda value: Text.create(value, margin_y="1em"), "p": lambda value: Text.create(value, margin_y="1em"),
"ul": lambda value: UnorderedList.create(value, margin_y="1em"), # type: ignore "ul": lambda value: UnorderedList.create(value, margin_y="1em"),
"ol": lambda value: OrderedList.create(value, margin_y="1em"), # type: ignore "ol": lambda value: OrderedList.create(value, margin_y="1em"),
"li": lambda value: ListItem.create(value, margin_y="0.5em"), "li": lambda value: ListItem.create(value, margin_y="0.5em"),
"a": lambda value: Link.create(value), "a": lambda value: Link.create(value),
"code": lambda value: Code.create(value), "code": lambda value: Code.create(value),
@ -236,7 +236,7 @@ class Markdown(Component):
), ),
}, },
*[ *[
component(_MOCK_ARG)._get_all_imports() # type: ignore component(_MOCK_ARG)._get_all_imports()
for component in self.component_map.values() for component in self.component_map.values()
], ],
] ]
@ -327,7 +327,7 @@ const {_LANGUAGE!s} = match ? match[1] : '';
if tag != "codeblock" if tag != "codeblock"
# For codeblock, the mapping for some cases returns an array of elements. Let's join them into a string. # For codeblock, the mapping for some cases returns an array of elements. Let's join them into a string.
else ternary_operation( else ternary_operation(
ARRAY_ISARRAY.call(_CHILDREN), # type: ignore ARRAY_ISARRAY.call(_CHILDREN), # pyright: ignore [reportArgumentType]
_CHILDREN.to(list).join("\n"), _CHILDREN.to(list).join("\n"),
_CHILDREN, _CHILDREN,
).to(str) ).to(str)
@ -425,7 +425,7 @@ const {_LANGUAGE!s} = match ? match[1] : '';
for _component in self.component_map.values(): for _component in self.component_map.values():
comp = _component(_MOCK_ARG) comp = _component(_MOCK_ARG)
hooks.update(comp._get_all_hooks()) hooks.update(comp._get_all_hooks())
formatted_hooks = MACROS.module.renderHooks(hooks) # type: ignore formatted_hooks = MACROS.module.renderHooks(hooks) # pyright: ignore [reportAttributeAccessIssue]
return f""" return f"""
function {self._get_component_map_name()} () {{ function {self._get_component_map_name()} () {{
{formatted_hooks} {formatted_hooks}

View File

@ -28,9 +28,9 @@ class MomentDelta:
class Moment(NoSSRComponent): class Moment(NoSSRComponent):
"""The Moment component.""" """The Moment component."""
tag: str = "Moment" tag: str | None = "Moment"
is_default = True is_default = True
library: str = "react-moment" library: str | None = "react-moment"
lib_dependencies: List[str] = ["moment"] lib_dependencies: List[str] = ["moment"]
# How often the date update (how often time update / 0 to disable). # How often the date update (how often time update / 0 to disable).

View File

@ -17,4 +17,4 @@ class NextLink(Component):
href: Var[str] href: Var[str]
# Whether to pass the href prop to the child. # Whether to pass the href prop to the child.
pass_href: Var[bool] = True # type: ignore pass_href: Var[bool] = Var.create(True)

View File

@ -18,8 +18,8 @@ try:
Template = layout.Template Template = layout.Template
except ImportError: except ImportError:
console.warn("Plotly is not installed. Please run `pip install plotly`.") console.warn("Plotly is not installed. Please run `pip install plotly`.")
Figure = Any # type: ignore Figure = Any
Template = Any # type: ignore Template = Any
def _event_points_data_signature(e0: Var) -> Tuple[Var[List[Point]]]: def _event_points_data_signature(e0: Var) -> Tuple[Var[List[Point]]]:
@ -102,13 +102,13 @@ class Plotly(NoSSRComponent):
is_default = True is_default = True
# The figure to display. This can be a plotly figure or a plotly data json. # The figure to display. This can be a plotly figure or a plotly data json.
data: Var[Figure] # type: ignore data: Var[Figure] # pyright: ignore [reportInvalidTypeForm]
# The layout of the graph. # The layout of the graph.
layout: Var[Dict] layout: Var[Dict]
# The template for visual appearance of the graph. # The template for visual appearance of the graph.
template: Var[Template] # type: ignore template: Var[Template] # pyright: ignore [reportInvalidTypeForm]
# The config of the graph. # The config of the graph.
config: Var[Dict] config: Var[Dict]

View File

@ -62,13 +62,13 @@ class NoExtrasAllowedProps(Base):
try: try:
super().__init__(**kwargs) super().__init__(**kwargs)
except ValidationError as e: except ValidationError as e:
invalid_fields = ", ".join([error["loc"][0] for error in e.errors()]) # type: ignore invalid_fields = ", ".join([error["loc"][0] for error in e.errors()]) # pyright: ignore [reportCallIssue, reportArgumentType]
supported_props_str = ", ".join(f'"{field}"' for field in self.get_fields()) supported_props_str = ", ".join(f'"{field}"' for field in self.get_fields())
raise InvalidPropValueError( raise InvalidPropValueError(
f"Invalid prop(s) {invalid_fields} for {component_name!r}. Supported props are {supported_props_str}" f"Invalid prop(s) {invalid_fields} for {component_name!r}. Supported props are {supported_props_str}"
) from None ) from None
class Config: class Config: # pyright: ignore [reportIncompatibleVariableOverride]
"""Pydantic config.""" """Pydantic config."""
arbitrary_types_allowed = True arbitrary_types_allowed = True

View File

@ -55,7 +55,7 @@ from .themes.layout.container import container as container
from .themes.layout.flex import flex as flex from .themes.layout.flex import flex as flex
from .themes.layout.grid import grid as grid from .themes.layout.grid import grid as grid
from .themes.layout.list import list_item as list_item from .themes.layout.list import list_item as list_item
from .themes.layout.list import list_ns as list # noqa from .themes.layout.list import list_ns as list # noqa: F401
from .themes.layout.list import ordered_list as ordered_list from .themes.layout.list import ordered_list as ordered_list
from .themes.layout.list import unordered_list as unordered_list from .themes.layout.list import unordered_list as unordered_list
from .themes.layout.section import section as section from .themes.layout.section import section as section

View File

@ -83,7 +83,7 @@ class DrawerTrigger(DrawerComponent):
alias = "Vaul" + tag alias = "Vaul" + tag
# Defaults to true, if the first child acts as the trigger. # Defaults to true, if the first child acts as the trigger.
as_child: Var[bool] = True # type: ignore as_child: Var[bool] = Var.create(True)
@classmethod @classmethod
def create(cls, *children: Any, **props: Any) -> Component: def create(cls, *children: Any, **props: Any) -> Component:

View File

@ -83,7 +83,7 @@ class ProgressIndicator(ProgressComponent):
"&[data_state='loading']": { "&[data_state='loading']": {
"transition": f"transform {DEFAULT_ANIMATION_DURATION}ms linear", "transition": f"transform {DEFAULT_ANIMATION_DURATION}ms linear",
}, },
"transform": f"translateX(calc(-100% + ({self.value} / {self.max} * 100%)))", # type: ignore "transform": f"translateX(calc(-100% + ({self.value} / {self.max} * 100%)))",
"boxShadow": "inset 0 0 0 1px var(--gray-a5)", "boxShadow": "inset 0 0 0 1px var(--gray-a5)",
} }

View File

@ -30,7 +30,7 @@ def on_value_event_spec(
Returns: Returns:
The event handler spec. The event handler spec.
""" """
return (value,) # type: ignore return (value,)
class SliderRoot(SliderComponent): class SliderRoot(SliderComponent):

View File

@ -115,12 +115,12 @@ class ColorModeIconButton(IconButton):
Returns: Returns:
The button component. The button component.
""" """
position = props.pop("position", None) position: str | Var = props.pop("position", None)
allow_system = props.pop("allow_system", False) allow_system = props.pop("allow_system", False)
# position is used to set nice defaults for positioning the icon button # position is used to set nice defaults for positioning the icon button
if isinstance(position, Var): if isinstance(position, Var):
_set_var_default(props, position, "position", "fixed", position) # type: ignore _set_var_default(props, position, "position", "fixed", position) # pyright: ignore [reportArgumentType]
_set_var_default(props, position, "bottom", "2rem") _set_var_default(props, position, "bottom", "2rem")
_set_var_default(props, position, "top", "2rem") _set_var_default(props, position, "top", "2rem")
_set_var_default(props, position, "left", "2rem") _set_var_default(props, position, "left", "2rem")

View File

@ -155,7 +155,7 @@ class HighLevelRadioGroup(RadixThemesComponent):
if isinstance(default_value, str) or ( if isinstance(default_value, str) or (
isinstance(default_value, Var) and default_value._var_type is str isinstance(default_value, Var) and default_value._var_type is str
): ):
default_value = LiteralVar.create(default_value) # type: ignore default_value = LiteralVar.create(default_value)
else: else:
default_value = LiteralVar.create(default_value).to_string() default_value = LiteralVar.create(default_value).to_string()

View File

@ -105,7 +105,7 @@ class TextFieldRoot(elements.Input, RadixThemesComponent):
(value_var := Var.create(value))._var_type (value_var := Var.create(value))._var_type
): ):
props["value"] = ternary_operation( props["value"] = ternary_operation(
(value_var != Var.create(None)) # pyright: ignore [reportGeneralTypeIssues] (value_var != Var.create(None)) # pyright: ignore [reportArgumentType]
& (value_var != Var(_js_expr="undefined")), & (value_var != Var(_js_expr="undefined")),
value, value,
Var.create(""), Var.create(""),

View File

@ -9,7 +9,7 @@ from .container import container as container
from .flex import flex as flex from .flex import flex as flex
from .grid import grid as grid from .grid import grid as grid
from .list import list_item as list_item from .list import list_item as list_item
from .list import list_ns as list # noqa from .list import list_ns as list # noqa: F401
from .list import ordered_list as ordered_list from .list import ordered_list as ordered_list
from .list import unordered_list as unordered_list from .list import unordered_list as unordered_list
from .section import section as section from .section import section as section

View File

@ -72,7 +72,7 @@ class BaseList(Component, MarkdownComponentMap):
if isinstance(items, Var): if isinstance(items, Var):
children = [Foreach.create(items, ListItem.create)] children = [Foreach.create(items, ListItem.create)]
else: else:
children = [ListItem.create(item) for item in items] # type: ignore children = [ListItem.create(item) for item in items]
props["direction"] = "column" props["direction"] = "column"
style = props.setdefault("style", {}) style = props.setdefault("style", {})
style["list_style_type"] = list_style_type style["list_style_type"] = list_style_type

View File

@ -49,14 +49,14 @@ class VStack(Stack):
"""A vertical stack component.""" """A vertical stack component."""
# The direction of the stack. # The direction of the stack.
direction: Var[LiteralFlexDirection] = "column" # type: ignore direction: Var[LiteralFlexDirection] = Var.create("column")
class HStack(Stack): class HStack(Stack):
"""A horizontal stack component.""" """A horizontal stack component."""
# The direction of the stack. # The direction of the stack.
direction: Var[LiteralFlexDirection] = "row" # type: ignore direction: Var[LiteralFlexDirection] = Var.create("row")
stack = Stack.create stack = Stack.create

View File

@ -60,7 +60,7 @@ class Link(RadixThemesComponent, A, MemoizationLeaf, MarkdownComponentMap):
Returns: Returns:
The import dict. The import dict.
""" """
return next_link._get_imports() # type: ignore return next_link._get_imports() # pyright: ignore [reportReturnType]
@classmethod @classmethod
def create(cls, *children, **props) -> Component: def create(cls, *children, **props) -> Component:

View File

@ -47,7 +47,7 @@ class Text(elements.Span, RadixThemesComponent, MarkdownComponentMap):
as_child: Var[bool] as_child: Var[bool]
# Change the default rendered element into a semantically appropriate alternative (cannot be used with asChild) # Change the default rendered element into a semantically appropriate alternative (cannot be used with asChild)
as_: Var[LiteralType] = "p" # type: ignore as_: Var[LiteralType] = Var.create("p")
# Text size: "1" - "9" # Text size: "1" - "9"
size: Var[Responsive[LiteralTextSize]] size: Var[Responsive[LiteralTextSize]]
@ -71,7 +71,7 @@ class Text(elements.Span, RadixThemesComponent, MarkdownComponentMap):
class Span(Text): class Span(Text):
"""A variant of text rendering as <span> element.""" """A variant of text rendering as <span> element."""
as_: Var[LiteralType] = "span" # type: ignore as_: Var[LiteralType] = Var.create("span")
class Em(elements.Em, RadixThemesComponent): class Em(elements.Em, RadixThemesComponent):

View File

@ -39,7 +39,7 @@ class ReactPlayer(NoSSRComponent):
loop: Var[bool] loop: Var[bool]
# Set to true or false to display native player controls. # Set to true or false to display native player controls.
controls: Var[bool] = True # type: ignore controls: Var[bool] = Var.create(True)
# Set to true to show just the video thumbnail, which loads the full player on click # Set to true to show just the video thumbnail, which loads the full player on click
light: Var[bool] light: Var[bool]

View File

@ -25,10 +25,10 @@ class ChartBase(RechartsCharts):
"""A component that wraps a Recharts charts.""" """A component that wraps a Recharts charts."""
# The width of chart container. String or Integer # The width of chart container. String or Integer
width: Var[Union[str, int]] = "100%" # type: ignore width: Var[Union[str, int]] = Var.create("100%")
# The height of chart container. # The height of chart container.
height: Var[Union[str, int]] = "100%" # type: ignore height: Var[Union[str, int]] = Var.create("100%")
# The customized event handler of click on the component in this chart # The customized event handler of click on the component in this chart
on_click: EventHandler[no_args_event_spec] on_click: EventHandler[no_args_event_spec]
@ -84,21 +84,19 @@ class ChartBase(RechartsCharts):
cls._ensure_valid_dimension("width", width) cls._ensure_valid_dimension("width", width)
cls._ensure_valid_dimension("height", height) cls._ensure_valid_dimension("height", height)
dim_props = {
"width": width if width is not None else "100%",
"height": height if height is not None else "100%",
}
# Ensure that the min_height and min_width are set to prevent the chart from collapsing. # Ensure that the min_height and min_width are set to prevent the chart from collapsing.
# We are using small values so that height and width can still be used over min_height and min_width. # We are using small values so that height and width can still be used over min_height and min_width.
# Without this, sometimes the chart will not be visible. Causing confusion to the user. # Without this, sometimes the chart will not be visible. Causing confusion to the user.
# With this, the user will see a small chart and can adjust the height and width and can figure out that the issue is with the size. # With this, the user will see a small chart and can adjust the height and width and can figure out that the issue is with the size.
dim_props["min_height"] = props.pop("min_height", 10) min_height = props.pop("min_height", 10)
dim_props["min_width"] = props.pop("min_width", 10) min_width = props.pop("min_width", 10)
return ResponsiveContainer.create( return ResponsiveContainer.create(
super().create(*children, **props), super().create(*children, **props),
**dim_props, # type: ignore width=width if width is not None else "100%",
height=height if height is not None else "100%",
min_width=min_width,
min_height=min_height,
) )
@ -460,10 +458,10 @@ class Treemap(RechartsCharts):
alias = "RechartsTreemap" alias = "RechartsTreemap"
# The width of chart container. String or Integer. Default: "100%" # The width of chart container. String or Integer. Default: "100%"
width: Var[Union[str, int]] = "100%" # type: ignore width: Var[Union[str, int]] = Var.create("100%")
# The height of chart container. String or Integer. Default: "100%" # The height of chart container. String or Integer. Default: "100%"
height: Var[Union[str, int]] = "100%" # type: ignore height: Var[Union[str, int]] = Var.create("100%")
# data of treemap. Array # data of treemap. Array
data: Var[List[Dict[str, Any]]] data: Var[List[Dict[str, Any]]]

View File

@ -64,7 +64,7 @@ class Pie(Recharts):
legend_type: Var[LiteralLegendType] legend_type: Var[LiteralLegendType]
# If false set, labels will not be drawn. If true set, labels will be drawn which have the props calculated internally. Default: False # If false set, labels will not be drawn. If true set, labels will be drawn which have the props calculated internally. Default: False
label: Var[bool] = False # type: ignore label: Var[bool] = Var.create(False)
# If false set, label lines will not be drawn. If true set, label lines will be drawn which have the props calculated internally. Default: False # If false set, label lines will not be drawn. If true set, label lines will be drawn which have the props calculated internally. Default: False
label_line: Var[bool] label_line: Var[bool]

View File

@ -142,7 +142,7 @@ class ToastProps(PropsBase, NoExtrasAllowedProps):
Returns: Returns:
The object as a dictionary with ToastAction fields intact. The object as a dictionary with ToastAction fields intact.
""" """
kwargs.setdefault("exclude_none", True) # type: ignore kwargs.setdefault("exclude_none", True)
d = super().dict(*args, **kwargs) d = super().dict(*args, **kwargs)
# Keep these fields as ToastAction so they can be serialized specially # Keep these fields as ToastAction so they can be serialized specially
if "action" in d: if "action" in d:
@ -167,7 +167,7 @@ class ToastProps(PropsBase, NoExtrasAllowedProps):
class Toaster(Component): class Toaster(Component):
"""A Toaster Component for displaying toast notifications.""" """A Toaster Component for displaying toast notifications."""
library: str = "sonner@1.7.2" library: str | None = "sonner@1.7.2"
tag = "Toaster" tag = "Toaster"
@ -222,6 +222,8 @@ class Toaster(Component):
Returns: Returns:
The hooks for the toaster component. The hooks for the toaster component.
""" """
if self.library is None:
return []
hook = Var( hook = Var(
_js_expr=f"{toast_ref} = toast", _js_expr=f"{toast_ref} = toast",
_var_data=VarData( _var_data=VarData(
@ -266,7 +268,7 @@ class Toaster(Component):
raise ValueError("Toast message or title or description must be provided.") raise ValueError("Toast message or title or description must be provided.")
if props: if props:
args = LiteralVar.create(ToastProps(component_name="rx.toast", **props)) # pyright: ignore [reportCallIssue, reportGeneralTypeIssues] args = LiteralVar.create(ToastProps(component_name="rx.toast", **props)) # pyright: ignore [reportCallIssue]
toast = toast_command.call(message, args) toast = toast_command.call(message, args)
else: else:
toast = toast_command.call(message) toast = toast_command.call(message)

View File

@ -41,14 +41,14 @@ class IterTag(Tag):
try: try:
if iterable._var_type.mro()[0] is dict: if iterable._var_type.mro()[0] is dict:
# Arg is a tuple of (key, value). # Arg is a tuple of (key, value).
return Tuple[get_args(iterable._var_type)] # type: ignore return Tuple[get_args(iterable._var_type)] # pyright: ignore [reportReturnType]
elif iterable._var_type.mro()[0] is tuple: elif iterable._var_type.mro()[0] is tuple:
# Arg is a union of any possible values in the tuple. # Arg is a union of any possible values in the tuple.
return Union[get_args(iterable._var_type)] # type: ignore return Union[get_args(iterable._var_type)] # pyright: ignore [reportReturnType]
else: else:
return get_args(iterable._var_type)[0] return get_args(iterable._var_type)[0]
except Exception: except Exception:
return Any return Any # pyright: ignore [reportReturnType]
def get_index_var(self) -> Var: def get_index_var(self) -> Var:
"""Get the index var for the tag (with curly braces). """Get the index var for the tag (with curly braces).

View File

@ -390,7 +390,7 @@ class EnvVar(Generic[T]):
os.environ[self.name] = str(value) os.environ[self.name] = str(value)
class env_var: # type: ignore # noqa: N801 class env_var: # noqa: N801 # pyright: ignore [reportRedeclaration]
"""Descriptor for environment variables.""" """Descriptor for environment variables."""
name: str name: str
@ -600,7 +600,7 @@ class Config(Base):
See the [configuration](https://reflex.dev/docs/getting-started/configuration/) docs for more info. See the [configuration](https://reflex.dev/docs/getting-started/configuration/) docs for more info.
""" """
class Config: class Config: # pyright: ignore [reportIncompatibleVariableOverride]
"""Pydantic config for the config.""" """Pydantic config for the config."""
validate_assignment = True validate_assignment = True
@ -766,7 +766,7 @@ class Config(Base):
""" """
if self.env_file: if self.env_file:
try: try:
from dotenv import load_dotenv # type: ignore from dotenv import load_dotenv # pyright: ignore [reportMissingImports]
# load env file if exists # load env file if exists
load_dotenv(self.env_file, override=True) load_dotenv(self.env_file, override=True)

View File

@ -925,7 +925,7 @@ def _get_file_from_prompt_in_loop() -> Tuple[bytes, str] | None:
image_file = file_extension = None image_file = file_extension = None
while image_file is None: while image_file is None:
image_filepath = Path( image_filepath = Path(
console.ask("Upload a preview image of your demo app (enter to skip)") console.ask("Upload a preview image of your demo app (enter to skip)") # pyright: ignore [reportArgumentType]
) )
if not image_filepath: if not image_filepath:
break break

View File

@ -263,7 +263,7 @@ class EventSpec(EventActionsMixin):
""" """
# The event handler. # The event handler.
handler: EventHandler = dataclasses.field(default=None) # type: ignore handler: EventHandler = dataclasses.field(default=None) # pyright: ignore [reportAssignmentType]
# The handler on the client to process event. # The handler on the client to process event.
client_handler_name: str = dataclasses.field(default="") client_handler_name: str = dataclasses.field(default="")
@ -589,7 +589,7 @@ def no_args_event_spec() -> Tuple[()]:
Returns: Returns:
An empty tuple. An empty tuple.
""" """
return () # type: ignore return ()
# These chains can be used for their side effects when no other events are desired. # These chains can be used for their side effects when no other events are desired.
@ -617,9 +617,9 @@ class IdentityEventReturn(Generic[T], Protocol):
@overload @overload
def passthrough_event_spec( def passthrough_event_spec( # pyright: ignore [reportOverlappingOverload]
event_type: Type[T], / event_type: Type[T], /
) -> Callable[[Var[T]], Tuple[Var[T]]]: ... # type: ignore ) -> Callable[[Var[T]], Tuple[Var[T]]]: ...
@overload @overload
@ -632,7 +632,7 @@ def passthrough_event_spec(
def passthrough_event_spec(*event_types: Type[T]) -> IdentityEventReturn[T]: ... def passthrough_event_spec(*event_types: Type[T]) -> IdentityEventReturn[T]: ...
def passthrough_event_spec(*event_types: Type[T]) -> IdentityEventReturn[T]: # type: ignore def passthrough_event_spec(*event_types: Type[T]) -> IdentityEventReturn[T]: # pyright: ignore [reportInconsistentOverload]
"""A helper function that returns the input event as output. """A helper function that returns the input event as output.
Args: Args:
@ -646,9 +646,9 @@ def passthrough_event_spec(*event_types: Type[T]) -> IdentityEventReturn[T]: #
return values return values
inner_type = tuple(Var[event_type] for event_type in event_types) inner_type = tuple(Var[event_type] for event_type in event_types)
return_annotation = Tuple[inner_type] # type: ignore return_annotation = Tuple[inner_type]
inner.__signature__ = inspect.signature(inner).replace( # type: ignore inner.__signature__ = inspect.signature(inner).replace( # pyright: ignore [reportFunctionMemberAccess]
parameters=[ parameters=[
inspect.Parameter( inspect.Parameter(
f"ev_{i}", f"ev_{i}",
@ -730,7 +730,7 @@ class FileUpload:
# Call the lambda to get the event chain. # Call the lambda to get the event chain.
events = call_event_fn( events = call_event_fn(
on_upload_progress, self.on_upload_progress_args_spec on_upload_progress, self.on_upload_progress_args_spec
) # type: ignore )
else: else:
raise ValueError(f"{on_upload_progress} is not a valid event handler.") raise ValueError(f"{on_upload_progress} is not a valid event handler.")
if isinstance(events, Var): if isinstance(events, Var):
@ -777,7 +777,7 @@ def server_side(name: str, sig: inspect.Signature, **kwargs) -> EventSpec:
return None return None
fn.__qualname__ = name fn.__qualname__ = name
fn.__signature__ = sig fn.__signature__ = sig # pyright: ignore [reportFunctionMemberAccess]
return EventSpec( return EventSpec(
handler=EventHandler(fn=fn, state_full_name=FRONTEND_EVENT_STATE), handler=EventHandler(fn=fn, state_full_name=FRONTEND_EVENT_STATE),
args=tuple( args=tuple(
@ -1050,13 +1050,13 @@ def download(
is_data_url = (data.js_type() == "string") & ( is_data_url = (data.js_type() == "string") & (
data.to(str).startswith("data:") data.to(str).startswith("data:")
) # type: ignore )
# If it's a data: URI, use it as is, otherwise convert the Var to JSON in a data: URI. # If it's a data: URI, use it as is, otherwise convert the Var to JSON in a data: URI.
url = cond( # type: ignore url = cond(
is_data_url, is_data_url,
data.to(str), data.to(str),
"data:text/plain," + data.to_string(), # type: ignore "data:text/plain," + data.to_string(),
) )
elif isinstance(data, bytes): elif isinstance(data, bytes):
# Caller provided bytes, so base64 encode it as a data: URI. # Caller provided bytes, so base64 encode it as a data: URI.
@ -1230,7 +1230,7 @@ def call_event_handler(
#noqa: DAR401 #noqa: DAR401
""" """
event_spec_args = parse_args_spec(event_spec) # type: ignore event_spec_args = parse_args_spec(event_spec)
if isinstance(event_callback, EventSpec): if isinstance(event_callback, EventSpec):
check_fn_match_arg_spec( check_fn_match_arg_spec(
@ -1340,7 +1340,7 @@ def call_event_handler(
if delayed_exceptions: if delayed_exceptions:
raise delayed_exceptions[0] raise delayed_exceptions[0]
return event_callback(*event_spec_args) # type: ignore return event_callback(*event_spec_args)
def unwrap_var_annotation(annotation: GenericType): def unwrap_var_annotation(annotation: GenericType):
@ -1574,7 +1574,7 @@ def fix_events(
if not isinstance(e, EventSpec): if not isinstance(e, EventSpec):
raise ValueError(f"Unexpected event type, {type(e)}.") raise ValueError(f"Unexpected event type, {type(e)}.")
name = format.format_event_handler(e.handler) name = format.format_event_handler(e.handler)
payload = {k._js_expr: v._decode() for k, v in e.args} # type: ignore payload = {k._js_expr: v._decode() for k, v in e.args}
# Filter router_data to reduce payload size # Filter router_data to reduce payload size
event_router_data = { event_router_data = {
@ -1623,7 +1623,7 @@ class EventVar(ObjectVar, python_types=EventSpec):
class LiteralEventVar(VarOperationCall, LiteralVar, EventVar): class LiteralEventVar(VarOperationCall, LiteralVar, EventVar):
"""A literal event var.""" """A literal event var."""
_var_value: EventSpec = dataclasses.field(default=None) # type: ignore _var_value: EventSpec = dataclasses.field(default=None) # pyright: ignore [reportAssignmentType]
def __hash__(self) -> int: def __hash__(self) -> int:
"""Get the hash of the var. """Get the hash of the var.
@ -1687,7 +1687,7 @@ class EventChainVar(BuilderFunctionVar, python_types=EventChain):
class LiteralEventChainVar(ArgsFunctionOperationBuilder, LiteralVar, EventChainVar): class LiteralEventChainVar(ArgsFunctionOperationBuilder, LiteralVar, EventChainVar):
"""A literal event chain var.""" """A literal event chain var."""
_var_value: EventChain = dataclasses.field(default=None) # type: ignore _var_value: EventChain = dataclasses.field(default=None) # pyright: ignore [reportAssignmentType]
def __hash__(self) -> int: def __hash__(self) -> int:
"""Get the hash of the var. """Get the hash of the var.
@ -1717,7 +1717,7 @@ class LiteralEventChainVar(ArgsFunctionOperationBuilder, LiteralVar, EventChainV
if isinstance(value.args_spec, Sequence) if isinstance(value.args_spec, Sequence)
else value.args_spec else value.args_spec
) )
sig = inspect.signature(arg_spec) # type: ignore sig = inspect.signature(arg_spec) # pyright: ignore [reportArgumentType]
if sig.parameters: if sig.parameters:
arg_def = tuple((f"_{p}" for p in sig.parameters)) arg_def = tuple((f"_{p}" for p in sig.parameters))
arg_def_expr = LiteralVar.create([Var(_js_expr=arg) for arg in arg_def]) arg_def_expr = LiteralVar.create([Var(_js_expr=arg) for arg in arg_def])
@ -1819,7 +1819,7 @@ class EventCallback(Generic[P, T]):
value4: V4 | Var[V4], value4: V4 | Var[V4],
) -> EventCallback[Q, T]: ... ) -> EventCallback[Q, T]: ...
def __call__(self, *values) -> EventCallback: # type: ignore def __call__(self, *values) -> EventCallback: # pyright: ignore [reportInconsistentOverload]
"""Call the function with the values. """Call the function with the values.
Args: Args:
@ -1828,7 +1828,7 @@ class EventCallback(Generic[P, T]):
Returns: Returns:
The function with the values. The function with the values.
""" """
return self.func(*values) # type: ignore return self.func(*values) # pyright: ignore [reportCallIssue, reportReturnType]
@overload @overload
def __get__( def __get__(
@ -1838,7 +1838,7 @@ class EventCallback(Generic[P, T]):
@overload @overload
def __get__(self, instance, owner) -> Callable[P, T]: ... def __get__(self, instance, owner) -> Callable[P, T]: ...
def __get__(self, instance, owner) -> Callable: # type: ignore def __get__(self, instance, owner) -> Callable:
"""Get the function with the instance bound to it. """Get the function with the instance bound to it.
Args: Args:
@ -1849,9 +1849,9 @@ class EventCallback(Generic[P, T]):
The function with the instance bound to it The function with the instance bound to it
""" """
if instance is None: if instance is None:
return self.func # type: ignore return self.func
return partial(self.func, instance) # type: ignore return partial(self.func, instance)
G = ParamSpec("G") G = ParamSpec("G")
@ -1902,7 +1902,7 @@ class EventNamespace(types.SimpleNamespace):
@staticmethod @staticmethod
def __call__( def __call__(
func: None = None, *, background: bool | None = None func: None = None, *, background: bool | None = None
) -> Callable[[Callable[Concatenate[BASE_STATE, P], T]], EventCallback[P, T]]: ... ) -> Callable[[Callable[Concatenate[BASE_STATE, P], T]], EventCallback[P, T]]: ... # pyright: ignore [reportInvalidTypeVarUse]
@overload @overload
@staticmethod @staticmethod
@ -1945,7 +1945,7 @@ class EventNamespace(types.SimpleNamespace):
"Background task must be async function or generator." "Background task must be async function or generator."
) )
setattr(func, BACKGROUND_TASK_MARKER, True) setattr(func, BACKGROUND_TASK_MARKER, True)
return func # type: ignore return func # pyright: ignore [reportReturnType]
if func is not None: if func is not None:
return wrapper(func) return wrapper(func)

View File

@ -201,9 +201,7 @@ class ClientStateVar(Var):
) )
.to(self._var_type) .to(self._var_type)
._replace( ._replace(
merge_var_data=VarData( # type: ignore merge_var_data=VarData(imports=_refs_import if self._global_ref else {})
imports=_refs_import if self._global_ref else {}
)
) )
) )

View File

@ -44,10 +44,10 @@ class Sidebar(Box, MemoizationLeaf):
Returns: Returns:
The style of the component. The style of the component.
""" """
sidebar: Component = self.children[-2] # type: ignore sidebar: Component = self.children[-2] # pyright: ignore [reportAssignmentType]
spacer: Component = self.children[-1] # type: ignore spacer: Component = self.children[-1] # pyright: ignore [reportAssignmentType]
open = ( open = (
self.State.open # type: ignore self.State.open # pyright: ignore [reportAttributeAccessIssue]
if self.State if self.State
else Var(_js_expr="open") else Var(_js_expr="open")
) )
@ -159,11 +159,11 @@ class SidebarTrigger(Fragment):
""" """
trigger_props = {**props, **sidebar_trigger_style} trigger_props = {**props, **sidebar_trigger_style}
inner_sidebar: Component = sidebar.children[0] # type: ignore inner_sidebar: Component = sidebar.children[0] # pyright: ignore [reportAssignmentType]
sidebar_width = inner_sidebar.style.get("width") sidebar_width = inner_sidebar.style.get("width")
if sidebar.State: if sidebar.State:
open, toggle = sidebar.State.open, sidebar.State.toggle # type: ignore open, toggle = sidebar.State.open, sidebar.State.toggle # pyright: ignore [reportAttributeAccessIssue]
else: else:
open, toggle = ( open, toggle = (
Var(_js_expr="open"), Var(_js_expr="open"),

View File

@ -242,7 +242,7 @@ class ModelRegistry:
return metadata return metadata
class Model(Base, sqlmodel.SQLModel): # pyright: ignore [reportGeneralTypeIssues] class Model(Base, sqlmodel.SQLModel): # pyright: ignore [reportGeneralTypeIssues,reportIncompatibleVariableOverride]
"""Base class to define a table in the database.""" """Base class to define a table in the database."""
# The primary key for the table. # The primary key for the table.
@ -415,7 +415,7 @@ class Model(Base, sqlmodel.SQLModel): # pyright: ignore [reportGeneralTypeIssue
connection=connection, connection=connection,
target_metadata=ModelRegistry.get_metadata(), target_metadata=ModelRegistry.get_metadata(),
render_item=cls._alembic_render_item, render_item=cls._alembic_render_item,
process_revision_directives=writer, # type: ignore process_revision_directives=writer,
compare_type=False, compare_type=False,
render_as_batch=True, # for sqlite compatibility render_as_batch=True, # for sqlite compatibility
) )

View File

@ -17,7 +17,7 @@ from reflex.state import reset_disk_state_manager
from reflex.utils import console, telemetry from reflex.utils import console, telemetry
# Disable typer+rich integration for help panels # Disable typer+rich integration for help panels
typer.core.rich = None # type: ignore typer.core.rich = None # pyright: ignore [reportPrivateImportUsage]
# Create the app. # Create the app.
try: try:
@ -355,7 +355,7 @@ def logout(
check_version() check_version()
logout(loglevel) # type: ignore logout(loglevel) # pyright: ignore [reportArgumentType]
db_cli = typer.Typer() db_cli = typer.Typer()

View File

@ -587,7 +587,7 @@ class BaseState(Base, ABC, extra=pydantic.Extra.allow):
if cls._item_is_event_handler(name, fn) if cls._item_is_event_handler(name, fn)
} }
for mixin in cls._mixins(): for mixin in cls._mixins(): # pyright: ignore [reportAssignmentType]
for name, value in mixin.__dict__.items(): for name, value in mixin.__dict__.items():
if name in cls.inherited_vars: if name in cls.inherited_vars:
continue continue
@ -599,7 +599,7 @@ class BaseState(Base, ABC, extra=pydantic.Extra.allow):
cls.computed_vars[newcv._js_expr] = newcv cls.computed_vars[newcv._js_expr] = newcv
cls.vars[newcv._js_expr] = newcv cls.vars[newcv._js_expr] = newcv
continue continue
if types.is_backend_base_variable(name, mixin): if types.is_backend_base_variable(name, mixin): # pyright: ignore [reportArgumentType]
cls.backend_vars[name] = copy.deepcopy(value) cls.backend_vars[name] = copy.deepcopy(value)
continue continue
if events.get(name) is not None: if events.get(name) is not None:
@ -899,7 +899,7 @@ class BaseState(Base, ABC, extra=pydantic.Extra.allow):
] ]
if len(parent_states) >= 2: if len(parent_states) >= 2:
raise ValueError(f"Only one parent state is allowed {parent_states}.") raise ValueError(f"Only one parent state is allowed {parent_states}.")
return parent_states[0] if len(parent_states) == 1 else None # type: ignore return parent_states[0] if len(parent_states) == 1 else None
@classmethod @classmethod
def get_substates(cls) -> set[Type[BaseState]]: def get_substates(cls) -> set[Type[BaseState]]:
@ -1268,8 +1268,8 @@ class BaseState(Base, ABC, extra=pydantic.Extra.allow):
fn = _no_chain_background_task(type(self), name, handler.fn) fn = _no_chain_background_task(type(self), name, handler.fn)
else: else:
fn = functools.partial(handler.fn, self) fn = functools.partial(handler.fn, self)
fn.__module__ = handler.fn.__module__ # type: ignore fn.__module__ = handler.fn.__module__
fn.__qualname__ = handler.fn.__qualname__ # type: ignore fn.__qualname__ = handler.fn.__qualname__
return fn return fn
backend_vars = super().__getattribute__("_backend_vars") backend_vars = super().__getattribute__("_backend_vars")
@ -1634,7 +1634,7 @@ class BaseState(Base, ABC, extra=pydantic.Extra.allow):
""" """
# Oopsie case: you didn't give me a Var... so get what you give. # Oopsie case: you didn't give me a Var... so get what you give.
if not isinstance(var, Var): if not isinstance(var, Var):
return var # type: ignore return var
# Fast case: this is a literal var and the value is known. # Fast case: this is a literal var and the value is known.
if hasattr(var, "_var_value"): if hasattr(var, "_var_value"):
@ -2453,7 +2453,7 @@ class OnLoadInternalState(State):
self.router.session.client_token, self.router.session.client_token,
router_data=self.router_data, router_data=self.router_data,
), ),
State.set_is_hydrated(True), # type: ignore State.set_is_hydrated(True), # pyright: ignore [reportAttributeAccessIssue]
] ]
@ -2737,7 +2737,7 @@ class StateProxy(wrapt.ObjectProxy):
# ensure mutations to these containers are blocked unless proxy is _mutable # ensure mutations to these containers are blocked unless proxy is _mutable
return ImmutableMutableProxy( return ImmutableMutableProxy(
wrapped=value.__wrapped__, wrapped=value.__wrapped__,
state=self, # type: ignore state=self,
field_name=value._self_field_name, field_name=value._self_field_name,
) )
if isinstance(value, functools.partial) and value.args[0] is self.__wrapped__: if isinstance(value, functools.partial) and value.args[0] is self.__wrapped__:
@ -2750,7 +2750,7 @@ class StateProxy(wrapt.ObjectProxy):
) )
if isinstance(value, MethodType) and value.__self__ is self.__wrapped__: if isinstance(value, MethodType) and value.__self__ is self.__wrapped__:
# Rebind methods to the proxy instance # Rebind methods to the proxy instance
value = type(value)(value.__func__, self) # type: ignore value = type(value)(value.__func__, self)
return value return value
def __setattr__(self, name: str, value: Any) -> None: def __setattr__(self, name: str, value: Any) -> None:
@ -2950,7 +2950,7 @@ class StateManagerMemory(StateManager):
# The dict of mutexes for each client # The dict of mutexes for each client
_states_locks: Dict[str, asyncio.Lock] = pydantic.PrivateAttr({}) _states_locks: Dict[str, asyncio.Lock] = pydantic.PrivateAttr({})
class Config: class Config: # pyright: ignore [reportIncompatibleVariableOverride]
"""The Pydantic config.""" """The Pydantic config."""
fields = { fields = {
@ -3068,7 +3068,7 @@ class StateManagerDisk(StateManager):
# The token expiration time (s). # The token expiration time (s).
token_expiration: int = pydantic.Field(default_factory=_default_token_expiration) token_expiration: int = pydantic.Field(default_factory=_default_token_expiration)
class Config: class Config: # pyright: ignore [reportIncompatibleVariableOverride]
"""The Pydantic config.""" """The Pydantic config."""
fields = { fields = {
@ -3776,9 +3776,9 @@ class MutableProxy(wrapt.ObjectProxy):
wrapper_cls_name, wrapper_cls_name,
(cls,), (cls,),
{ {
dataclasses._FIELDS: getattr( # pyright: ignore [reportGeneralTypeIssues] dataclasses._FIELDS: getattr( # pyright: ignore [reportAttributeAccessIssue]
wrapped_cls, wrapped_cls,
dataclasses._FIELDS, # pyright: ignore [reportGeneralTypeIssues] dataclasses._FIELDS, # pyright: ignore [reportAttributeAccessIssue]
), ),
}, },
) )
@ -3931,7 +3931,7 @@ class MutableProxy(wrapt.ObjectProxy):
): ):
# Wrap methods called on Base subclasses, which might do _anything_ # Wrap methods called on Base subclasses, which might do _anything_
return wrapt.FunctionWrapper( return wrapt.FunctionWrapper(
functools.partial(value.__func__, self), functools.partial(value.__func__, self), # pyright: ignore [reportFunctionMemberAccess]
self._wrap_recursive_decorator, self._wrap_recursive_decorator,
) )

View File

@ -78,7 +78,7 @@ def set_color_mode(
_var_data=VarData.merge( _var_data=VarData.merge(
base_setter._get_all_var_data(), new_color_mode._get_all_var_data() base_setter._get_all_var_data(), new_color_mode._get_all_var_data()
), ),
).to(FunctionVar, EventChain) # type: ignore ).to(FunctionVar, EventChain)
# Var resolves to the current color mode for the app ("light", "dark" or "system") # Var resolves to the current color mode for the app ("light", "dark" or "system")

View File

@ -80,7 +80,7 @@ T = TypeVar("T")
TimeoutType = Optional[Union[int, float]] TimeoutType = Optional[Union[int, float]]
if platform.system() == "Windows": if platform.system() == "Windows":
FRONTEND_POPEN_ARGS["creationflags"] = subprocess.CREATE_NEW_PROCESS_GROUP # type: ignore FRONTEND_POPEN_ARGS["creationflags"] = subprocess.CREATE_NEW_PROCESS_GROUP # pyright: ignore [reportAttributeAccessIssue]
FRONTEND_POPEN_ARGS["shell"] = True FRONTEND_POPEN_ARGS["shell"] = True
else: else:
FRONTEND_POPEN_ARGS["start_new_session"] = True FRONTEND_POPEN_ARGS["start_new_session"] = True
@ -258,7 +258,7 @@ class AppHarness:
if self.app_source is not None: if self.app_source is not None:
app_globals = self._get_globals_from_signature(self.app_source) app_globals = self._get_globals_from_signature(self.app_source)
if isinstance(self.app_source, functools.partial): if isinstance(self.app_source, functools.partial):
self.app_source = self.app_source.func # type: ignore self.app_source = self.app_source.func
# get the source from a function or module object # get the source from a function or module object
source_code = "\n".join( source_code = "\n".join(
[ [
@ -294,11 +294,15 @@ class AppHarness:
if p not in before_decorated_pages if p not in before_decorated_pages
] ]
self.app_instance = self.app_module.app self.app_instance = self.app_module.app
if isinstance(self.app_instance._state_manager, StateManagerRedis): if self.app_instance and isinstance(
self.app_instance._state_manager, StateManagerRedis
):
# Create our own redis connection for testing. # Create our own redis connection for testing.
self.state_manager = StateManagerRedis.create(self.app_instance._state) self.state_manager = StateManagerRedis.create(self.app_instance._state) # pyright: ignore [reportArgumentType]
else: else:
self.state_manager = self.app_instance._state_manager self.state_manager = (
self.app_instance._state_manager if self.app_instance else None
)
def _reload_state_module(self): def _reload_state_module(self):
"""Reload the rx.State module to avoid conflict when reloading.""" """Reload the rx.State module to avoid conflict when reloading."""
@ -621,23 +625,23 @@ class AppHarness:
want_headless = True want_headless = True
if driver_clz is None: if driver_clz is None:
requested_driver = environment.APP_HARNESS_DRIVER.get() requested_driver = environment.APP_HARNESS_DRIVER.get()
driver_clz = getattr(webdriver, requested_driver) driver_clz = getattr(webdriver, requested_driver) # pyright: ignore [reportPossiblyUnboundVariable]
if driver_options is None: if driver_options is None:
driver_options = getattr(webdriver, f"{requested_driver}Options")() driver_options = getattr(webdriver, f"{requested_driver}Options")() # pyright: ignore [reportPossiblyUnboundVariable]
if driver_clz is webdriver.Chrome: if driver_clz is webdriver.Chrome: # pyright: ignore [reportPossiblyUnboundVariable]
if driver_options is None: if driver_options is None:
driver_options = webdriver.ChromeOptions() driver_options = webdriver.ChromeOptions() # pyright: ignore [reportPossiblyUnboundVariable]
driver_options.add_argument("--class=AppHarness") driver_options.add_argument("--class=AppHarness")
if want_headless: if want_headless:
driver_options.add_argument("--headless=new") driver_options.add_argument("--headless=new")
elif driver_clz is webdriver.Firefox: elif driver_clz is webdriver.Firefox: # pyright: ignore [reportPossiblyUnboundVariable]
if driver_options is None: if driver_options is None:
driver_options = webdriver.FirefoxOptions() driver_options = webdriver.FirefoxOptions() # pyright: ignore [reportPossiblyUnboundVariable]
if want_headless: if want_headless:
driver_options.add_argument("-headless") driver_options.add_argument("-headless")
elif driver_clz is webdriver.Edge: elif driver_clz is webdriver.Edge: # pyright: ignore [reportPossiblyUnboundVariable]
if driver_options is None: if driver_options is None:
driver_options = webdriver.EdgeOptions() driver_options = webdriver.EdgeOptions() # pyright: ignore [reportPossiblyUnboundVariable]
if want_headless: if want_headless:
driver_options.add_argument("headless") driver_options.add_argument("headless")
if driver_options is None: if driver_options is None:
@ -653,7 +657,7 @@ class AppHarness:
driver_options.set_capability(key, value) driver_options.set_capability(key, value)
if driver_kwargs is None: if driver_kwargs is None:
driver_kwargs = {} driver_kwargs = {}
driver = driver_clz(options=driver_options, **driver_kwargs) # type: ignore driver = driver_clz(options=driver_options, **driver_kwargs) # pyright: ignore [reportOptionalCall, reportArgumentType]
driver.get(self.frontend_url) driver.get(self.frontend_url)
self._frontends.append(driver) self._frontends.append(driver)
return driver return driver
@ -885,8 +889,8 @@ class Subdir404TCPServer(socketserver.TCPServer):
request, request,
client_address, client_address,
self, self,
directory=str(self.root), # type: ignore directory=str(self.root), # pyright: ignore [reportCallIssue]
error_page_map=self.error_page_map, # type: ignore error_page_map=self.error_page_map, # pyright: ignore [reportCallIssue]
) )

View File

@ -50,11 +50,11 @@ def pydantic_v1_patch():
] ]
originals = {module: sys.modules.get(module) for module in patched_modules} originals = {module: sys.modules.get(module) for module in patched_modules}
try: try:
import pydantic.v1 # type: ignore import pydantic.v1
sys.modules["pydantic.fields"] = pydantic.v1.fields # type: ignore sys.modules["pydantic.fields"] = pydantic.v1.fields # pyright: ignore [reportAttributeAccessIssue]
sys.modules["pydantic.main"] = pydantic.v1.main # type: ignore sys.modules["pydantic.main"] = pydantic.v1.main # pyright: ignore [reportAttributeAccessIssue]
sys.modules["pydantic.errors"] = pydantic.v1.errors # type: ignore sys.modules["pydantic.errors"] = pydantic.v1.errors # pyright: ignore [reportAttributeAccessIssue]
sys.modules["pydantic"] = pydantic.v1 sys.modules["pydantic"] = pydantic.v1
yield yield
except (ImportError, AttributeError): except (ImportError, AttributeError):

View File

@ -196,7 +196,7 @@ def _get_first_non_framework_frame() -> FrameType | None:
exclude_modules = [click, rx, typer, typing_extensions] exclude_modules = [click, rx, typer, typing_extensions]
exclude_roots = [ exclude_roots = [
p.parent.resolve() p.parent.resolve()
if (p := Path(m.__file__)).name == "__init__.py" if (p := Path(m.__file__)).name == "__init__.py" # pyright: ignore [reportArgumentType]
else p.resolve() else p.resolve()
for m in exclude_modules for m in exclude_modules
] ]
@ -275,7 +275,7 @@ def ask(
choices: list[str] | None = None, choices: list[str] | None = None,
default: str | None = None, default: str | None = None,
show_choices: bool = True, show_choices: bool = True,
) -> str: ) -> str | None:
"""Takes a prompt question and optionally a list of choices """Takes a prompt question and optionally a list of choices
and returns the user input. and returns the user input.
@ -290,7 +290,7 @@ def ask(
""" """
return Prompt.ask( return Prompt.ask(
question, choices=choices, default=default, show_choices=show_choices question, choices=choices, default=default, show_choices=show_choices
) # type: ignore )
def progress(): def progress():

View File

@ -71,7 +71,7 @@ def notify_backend():
# run_process_and_launch_url is assumed to be used # run_process_and_launch_url is assumed to be used
# only to launch the frontend # only to launch the frontend
# If this is not the case, might have to change the logic # If this is not the case, might have to change the logic
def run_process_and_launch_url(run_command: list[str], backend_present=True): def run_process_and_launch_url(run_command: list[str | None], backend_present=True):
"""Run the process and launch the URL. """Run the process and launch the URL.
Args: Args:
@ -89,7 +89,7 @@ def run_process_and_launch_url(run_command: list[str], backend_present=True):
if process is None: if process is None:
kwargs = {} kwargs = {}
if constants.IS_WINDOWS and backend_present: if constants.IS_WINDOWS and backend_present:
kwargs["creationflags"] = subprocess.CREATE_NEW_PROCESS_GROUP # type: ignore kwargs["creationflags"] = subprocess.CREATE_NEW_PROCESS_GROUP # pyright: ignore [reportAttributeAccessIssue]
process = processes.new_process( process = processes.new_process(
run_command, run_command,
cwd=get_web_dir(), cwd=get_web_dir(),
@ -151,7 +151,7 @@ def run_frontend(root: Path, port: str, backend_present=True):
console.rule("[bold green]App Running") console.rule("[bold green]App Running")
os.environ["PORT"] = str(get_config().frontend_port if port is None else port) os.environ["PORT"] = str(get_config().frontend_port if port is None else port)
run_process_and_launch_url( run_process_and_launch_url(
[prerequisites.get_package_manager(), "run", "dev"], # type: ignore [prerequisites.get_package_manager(), "run", "dev"],
backend_present, backend_present,
) )
@ -173,7 +173,7 @@ def run_frontend_prod(root: Path, port: str, backend_present=True):
# Run the frontend in production mode. # Run the frontend in production mode.
console.rule("[bold green]App Running") console.rule("[bold green]App Running")
run_process_and_launch_url( run_process_and_launch_url(
[prerequisites.get_package_manager(), "run", "prod"], # type: ignore [prerequisites.get_package_manager(), "run", "prod"],
backend_present, backend_present,
) )
@ -295,9 +295,11 @@ def run_granian_backend(host, port, loglevel: LogLevel):
""" """
console.debug("Using Granian for backend") console.debug("Using Granian for backend")
try: try:
from granian import Granian # type: ignore from granian import Granian # pyright: ignore [reportMissingImports]
from granian.constants import Interfaces # type: ignore from granian.constants import ( # pyright: ignore [reportMissingImports]
from granian.log import LogLevels # type: ignore Interfaces,
)
from granian.log import LogLevels # pyright: ignore [reportMissingImports]
Granian( Granian(
target=get_granian_target(), target=get_granian_target(),
@ -413,7 +415,9 @@ def run_granian_backend_prod(host, port, loglevel):
from reflex.utils import processes from reflex.utils import processes
try: try:
from granian.constants import Interfaces # type: ignore from granian.constants import ( # pyright: ignore [reportMissingImports]
Interfaces,
)
command = [ command = [
"granian", "granian",
@ -482,7 +486,7 @@ def output_system_info():
dependencies.append(fnm_info) dependencies.append(fnm_info)
if system == "Linux": if system == "Linux":
import distro # type: ignore import distro
os_version = distro.name(pretty=True) os_version = distro.name(pretty=True)
else: else:
@ -494,11 +498,11 @@ def output_system_info():
console.debug(f"{dep}") console.debug(f"{dep}")
console.debug( console.debug(
f"Using package installer at: {prerequisites.get_install_package_manager(on_failure_return_none=True)}" # type: ignore f"Using package installer at: {prerequisites.get_install_package_manager(on_failure_return_none=True)}"
) )
console.debug( console.debug(
f"Using package executer at: {prerequisites.get_package_manager(on_failure_return_none=True)}" f"Using package executer at: {prerequisites.get_package_manager(on_failure_return_none=True)}"
) # type: ignore )
if system != "Windows": if system != "Windows":
console.debug(f"Unzip path: {path_ops.which('unzip')}") console.debug(f"Unzip path: {path_ops.which('unzip')}")

View File

@ -377,7 +377,7 @@ def format_prop(
# For dictionaries, convert any properties to strings. # For dictionaries, convert any properties to strings.
elif isinstance(prop, dict): elif isinstance(prop, dict):
prop = serializers.serialize_dict(prop) # type: ignore prop = serializers.serialize_dict(prop) # pyright: ignore [reportAttributeAccessIssue]
else: else:
# Dump the prop as JSON. # Dump the prop as JSON.
@ -533,14 +533,14 @@ def format_queue_events(
from reflex.vars import FunctionVar, Var from reflex.vars import FunctionVar, Var
if not events: if not events:
return Var("(() => null)").to(FunctionVar, EventChain) # type: ignore return Var("(() => null)").to(FunctionVar, EventChain)
# If no spec is provided, the function will take no arguments. # If no spec is provided, the function will take no arguments.
def _default_args_spec(): def _default_args_spec():
return [] return []
# Construct the arguments that the function accepts. # Construct the arguments that the function accepts.
sig = inspect.signature(args_spec or _default_args_spec) # type: ignore sig = inspect.signature(args_spec or _default_args_spec)
if sig.parameters: if sig.parameters:
arg_def = ",".join(f"_{p}" for p in sig.parameters) arg_def = ",".join(f"_{p}" for p in sig.parameters)
arg_def = f"({arg_def})" arg_def = f"({arg_def})"
@ -557,7 +557,7 @@ def format_queue_events(
if isinstance(spec, (EventHandler, EventSpec)): if isinstance(spec, (EventHandler, EventSpec)):
specs = [call_event_handler(spec, args_spec or _default_args_spec)] specs = [call_event_handler(spec, args_spec or _default_args_spec)]
elif isinstance(spec, type(lambda: None)): elif isinstance(spec, type(lambda: None)):
specs = call_event_fn(spec, args_spec or _default_args_spec) # type: ignore specs = call_event_fn(spec, args_spec or _default_args_spec) # pyright: ignore [reportAssignmentType, reportArgumentType]
if isinstance(specs, Var): if isinstance(specs, Var):
raise ValueError( raise ValueError(
f"Invalid event spec: {specs}. Expected a list of EventSpecs." f"Invalid event spec: {specs}. Expected a list of EventSpecs."
@ -569,7 +569,7 @@ def format_queue_events(
return Var( return Var(
f"{arg_def} => {{queueEvents([{','.join(payloads)}], {constants.CompileVars.SOCKET}); " f"{arg_def} => {{queueEvents([{','.join(payloads)}], {constants.CompileVars.SOCKET}); "
f"processEvent({constants.CompileVars.SOCKET})}}", f"processEvent({constants.CompileVars.SOCKET})}}",
).to(FunctionVar, EventChain) # type: ignore ).to(FunctionVar, EventChain)
def format_query_params(router_data: dict[str, Any]) -> dict[str, str]: def format_query_params(router_data: dict[str, Any]) -> dict[str, str]:

View File

@ -122,7 +122,7 @@ class ImportVar:
""" """
if self.alias: if self.alias:
return ( return (
self.alias if self.is_default else " as ".join([self.tag, self.alias]) # type: ignore self.alias if self.is_default else " as ".join([self.tag, self.alias]) # pyright: ignore [reportCallIssue,reportArgumentType]
) )
else: else:
return self.tag or "" return self.tag or ""

View File

@ -176,7 +176,7 @@ def get_node_version() -> version.Version | None:
try: try:
result = processes.new_process([node_path, "-v"], run=True) result = processes.new_process([node_path, "-v"], run=True)
# The output will be in the form "vX.Y.Z", but version.parse() can handle it # The output will be in the form "vX.Y.Z", but version.parse() can handle it
return version.parse(result.stdout) # type: ignore return version.parse(result.stdout) # pyright: ignore [reportArgumentType]
except (FileNotFoundError, TypeError): except (FileNotFoundError, TypeError):
return None return None
@ -189,7 +189,7 @@ def get_fnm_version() -> version.Version | None:
""" """
try: try:
result = processes.new_process([constants.Fnm.EXE, "--version"], run=True) result = processes.new_process([constants.Fnm.EXE, "--version"], run=True)
return version.parse(result.stdout.split(" ")[1]) # type: ignore return version.parse(result.stdout.split(" ")[1]) # pyright: ignore [reportOptionalMemberAccess, reportAttributeAccessIssue]
except (FileNotFoundError, TypeError): except (FileNotFoundError, TypeError):
return None return None
except version.InvalidVersion as e: except version.InvalidVersion as e:
@ -211,7 +211,7 @@ def get_bun_version() -> version.Version | None:
try: try:
# Run the bun -v command and capture the output # Run the bun -v command and capture the output
result = processes.new_process([str(bun_path), "-v"], run=True) result = processes.new_process([str(bun_path), "-v"], run=True)
return version.parse(str(result.stdout)) return version.parse(str(result.stdout)) # pyright: ignore [reportArgumentType]
except FileNotFoundError: except FileNotFoundError:
return None return None
except version.InvalidVersion as e: except version.InvalidVersion as e:
@ -1188,7 +1188,7 @@ def install_frontend_packages(packages: set[str], config: Config):
) )
processes.run_process_with_fallback( processes.run_process_with_fallback(
[install_package_manager, "install"], # type: ignore [install_package_manager, "install"],
fallback=fallback_command, fallback=fallback_command,
analytics_enabled=True, analytics_enabled=True,
show_status_message="Installing base frontend packages", show_status_message="Installing base frontend packages",
@ -1481,7 +1481,7 @@ def prompt_for_template_options(templates: list[Template]) -> str:
) )
# Return the template. # Return the template.
return templates[int(template)].name return templates[int(template)].name # pyright: ignore [reportArgumentType]
def fetch_app_templates(version: str) -> dict[str, Template]: def fetch_app_templates(version: str) -> dict[str, Template]:

View File

@ -62,7 +62,7 @@ def get_process_on_port(port) -> Optional[psutil.Process]:
psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess
): ):
if importlib.metadata.version("psutil") >= "6.0.0": if importlib.metadata.version("psutil") >= "6.0.0":
conns = proc.net_connections(kind="inet") # type: ignore conns = proc.net_connections(kind="inet")
else: else:
conns = proc.connections(kind="inet") conns = proc.connections(kind="inet")
for conn in conns: for conn in conns:
@ -91,7 +91,7 @@ def kill_process_on_port(port):
""" """
if get_process_on_port(port) is not None: if get_process_on_port(port) is not None:
with contextlib.suppress(psutil.AccessDenied): with contextlib.suppress(psutil.AccessDenied):
get_process_on_port(port).kill() # type: ignore get_process_on_port(port).kill() # pyright: ignore [reportOptionalMemberAccess]
def change_port(port: str, _type: str) -> str: def change_port(port: str, _type: str) -> str:
@ -212,14 +212,14 @@ def run_concurrently_context(
return return
# Convert the functions to tuples. # Convert the functions to tuples.
fns = [fn if isinstance(fn, tuple) else (fn,) for fn in fns] # type: ignore fns = [fn if isinstance(fn, tuple) else (fn,) for fn in fns] # pyright: ignore [reportAssignmentType]
# Run the functions concurrently. # Run the functions concurrently.
executor = None executor = None
try: try:
executor = futures.ThreadPoolExecutor(max_workers=len(fns)) executor = futures.ThreadPoolExecutor(max_workers=len(fns))
# Submit the tasks. # Submit the tasks.
tasks = [executor.submit(*fn) for fn in fns] # type: ignore tasks = [executor.submit(*fn) for fn in fns] # pyright: ignore [reportArgumentType]
# Yield control back to the main thread while tasks are running. # Yield control back to the main thread while tasks are running.
yield tasks yield tasks

View File

@ -229,7 +229,7 @@ def _generate_imports(
""" """
return [ return [
*[ *[
ast.ImportFrom(module=name, names=[ast.alias(name=val) for val in values]) ast.ImportFrom(module=name, names=[ast.alias(name=val) for val in values]) # pyright: ignore [reportCallIssue]
for name, values in DEFAULT_IMPORTS.items() for name, values in DEFAULT_IMPORTS.items()
], ],
ast.Import([ast.alias("reflex")]), ast.Import([ast.alias("reflex")]),
@ -367,7 +367,7 @@ def _extract_class_props_as_ast_nodes(
# Try to get default from pydantic field definition. # Try to get default from pydantic field definition.
default = target_class.__fields__[name].default default = target_class.__fields__[name].default
if isinstance(default, Var): if isinstance(default, Var):
default = default._decode() # type: ignore default = default._decode()
kwargs.append( kwargs.append(
( (
@ -434,10 +434,12 @@ def type_to_ast(typ, cls: type) -> ast.AST:
if len(arg_nodes) == 1: if len(arg_nodes) == 1:
slice_value = arg_nodes[0] slice_value = arg_nodes[0]
else: else:
slice_value = ast.Tuple(elts=arg_nodes, ctx=ast.Load()) slice_value = ast.Tuple(elts=arg_nodes, ctx=ast.Load()) # pyright: ignore [reportArgumentType]
return ast.Subscript( return ast.Subscript(
value=ast.Name(id=base_name), slice=ast.Index(value=slice_value), ctx=ast.Load() value=ast.Name(id=base_name),
slice=ast.Index(value=slice_value), # pyright: ignore [reportArgumentType]
ctx=ast.Load(),
) )
@ -575,7 +577,7 @@ def _generate_component_create_functiondef(
arg=trigger, arg=trigger,
annotation=ast.Subscript( annotation=ast.Subscript(
ast.Name("Optional"), ast.Name("Optional"),
ast.Index( # type: ignore ast.Index( # pyright: ignore [reportArgumentType]
value=ast.Name( value=ast.Name(
id=ast.unparse( id=ast.unparse(
figure_out_return_type( figure_out_return_type(
@ -621,7 +623,7 @@ def _generate_component_create_functiondef(
definition = ast.FunctionDef( definition = ast.FunctionDef(
name="create", name="create",
args=create_args, args=create_args,
body=[ body=[ # pyright: ignore [reportArgumentType]
ast.Expr( ast.Expr(
value=ast.Constant( value=ast.Constant(
value=_generate_docstrings( value=_generate_docstrings(
@ -630,7 +632,7 @@ def _generate_component_create_functiondef(
), ),
), ),
ast.Expr( ast.Expr(
value=ast.Ellipsis(), value=ast.Constant(value=Ellipsis),
), ),
], ],
decorator_list=[ decorator_list=[
@ -641,7 +643,7 @@ def _generate_component_create_functiondef(
else [ast.Name(id="classmethod")] else [ast.Name(id="classmethod")]
), ),
], ],
lineno=node.lineno if node is not None else None, lineno=node.lineno if node is not None else None, # pyright: ignore [reportArgumentType]
returns=ast.Constant(value=clz.__name__), returns=ast.Constant(value=clz.__name__),
) )
return definition return definition
@ -690,7 +692,7 @@ def _generate_staticmethod_call_functiondef(
), ),
], ],
decorator_list=[ast.Name(id="staticmethod")], decorator_list=[ast.Name(id="staticmethod")],
lineno=node.lineno if node is not None else None, lineno=node.lineno if node is not None else None, # pyright: ignore [reportArgumentType]
returns=ast.Constant( returns=ast.Constant(
value=_get_type_hint( value=_get_type_hint(
typing.get_type_hints(clz.__call__).get("return", None), typing.get_type_hints(clz.__call__).get("return", None),
@ -726,17 +728,17 @@ def _generate_namespace_call_functiondef(
clz = classes[clz_name] clz = classes[clz_name]
if not hasattr(clz.__call__, "__self__"): if not hasattr(clz.__call__, "__self__"):
return _generate_staticmethod_call_functiondef(node, clz, type_hint_globals) # type: ignore return _generate_staticmethod_call_functiondef(node, clz, type_hint_globals) # pyright: ignore [reportArgumentType]
# Determine which class is wrapped by the namespace __call__ method # Determine which class is wrapped by the namespace __call__ method
component_clz = clz.__call__.__self__ component_clz = clz.__call__.__self__
if clz.__call__.__func__.__name__ != "create": if clz.__call__.__func__.__name__ != "create": # pyright: ignore [reportFunctionMemberAccess]
return None return None
definition = _generate_component_create_functiondef( definition = _generate_component_create_functiondef(
node=None, node=None,
clz=component_clz, # type: ignore clz=component_clz, # pyright: ignore [reportArgumentType]
type_hint_globals=type_hint_globals, type_hint_globals=type_hint_globals,
) )
definition.name = "__call__" definition.name = "__call__"
@ -816,7 +818,7 @@ class StubGenerator(ast.NodeTransformer):
The modified Module node. The modified Module node.
""" """
self.generic_visit(node) self.generic_visit(node)
return self._remove_docstring(node) # type: ignore return self._remove_docstring(node) # pyright: ignore [reportReturnType]
def visit_Import( def visit_Import(
self, node: ast.Import | ast.ImportFrom self, node: ast.Import | ast.ImportFrom
@ -914,7 +916,7 @@ class StubGenerator(ast.NodeTransformer):
node.body.append(call_definition) node.body.append(call_definition)
if not node.body: if not node.body:
# We should never return an empty body. # We should never return an empty body.
node.body.append(ast.Expr(value=ast.Ellipsis())) node.body.append(ast.Expr(value=ast.Constant(value=Ellipsis)))
self.current_class = None self.current_class = None
return node return node
@ -941,9 +943,9 @@ class StubGenerator(ast.NodeTransformer):
if node.name.startswith("_") and node.name != "__call__": if node.name.startswith("_") and node.name != "__call__":
return None # remove private methods return None # remove private methods
if node.body[-1] != ast.Expr(value=ast.Ellipsis()): if node.body[-1] != ast.Expr(value=ast.Constant(value=Ellipsis)):
# Blank out the function body for public functions. # Blank out the function body for public functions.
node.body = [ast.Expr(value=ast.Ellipsis())] node.body = [ast.Expr(value=ast.Constant(value=Ellipsis))]
return node return node
def visit_Assign(self, node: ast.Assign) -> ast.Assign | None: def visit_Assign(self, node: ast.Assign) -> ast.Assign | None:
@ -1077,7 +1079,7 @@ class PyiGenerator:
+ ( + (
" # type: ignore" " # type: ignore"
if mod in pyright_ignore_imports if mod in pyright_ignore_imports
else " # noqa" # ignore ruff formatting here for cases like rx.list. else " # noqa: F401" # ignore ruff formatting here for cases like rx.list.
if isinstance(mod, tuple) if isinstance(mod, tuple)
else "" else ""
) )

View File

@ -476,7 +476,7 @@ try:
base64_image = base64.b64encode(image_bytes).decode("utf-8") base64_image = base64.b64encode(image_bytes).decode("utf-8")
try: try:
# Newer method to get the mime type, but does not always work. # Newer method to get the mime type, but does not always work.
mime_type = image.get_format_mimetype() # type: ignore mime_type = image.get_format_mimetype() # pyright: ignore [reportAttributeAccessIssue]
except AttributeError: except AttributeError:
try: try:
# Fallback method # Fallback method

View File

@ -24,7 +24,7 @@ from typing import (
Tuple, Tuple,
Type, Type,
Union, Union,
_GenericAlias, # type: ignore _GenericAlias, # pyright: ignore [reportAttributeAccessIssue]
get_args, get_args,
get_type_hints, get_type_hints,
) )
@ -39,7 +39,9 @@ from reflex.components.core.breakpoints import Breakpoints
try: try:
from pydantic.v1.fields import ModelField from pydantic.v1.fields import ModelField
except ModuleNotFoundError: except ModuleNotFoundError:
from pydantic.fields import ModelField # type: ignore from pydantic.fields import (
ModelField, # pyright: ignore [reportAttributeAccessIssue]
)
from sqlalchemy.ext.associationproxy import AssociationProxyInstance from sqlalchemy.ext.associationproxy import AssociationProxyInstance
from sqlalchemy.ext.hybrid import hybrid_property from sqlalchemy.ext.hybrid import hybrid_property
@ -70,13 +72,15 @@ GenericAliasTypes = [_GenericAlias]
with contextlib.suppress(ImportError): with contextlib.suppress(ImportError):
# For newer versions of Python. # For newer versions of Python.
from types import GenericAlias # type: ignore from types import GenericAlias
GenericAliasTypes.append(GenericAlias) GenericAliasTypes.append(GenericAlias)
with contextlib.suppress(ImportError): with contextlib.suppress(ImportError):
# For older versions of Python. # For older versions of Python.
from typing import _SpecialGenericAlias # type: ignore from typing import (
_SpecialGenericAlias, # pyright: ignore [reportAttributeAccessIssue]
)
GenericAliasTypes.append(_SpecialGenericAlias) GenericAliasTypes.append(_SpecialGenericAlias)
@ -175,7 +179,7 @@ def is_generic_alias(cls: GenericType) -> bool:
Returns: Returns:
Whether the class is a generic alias. Whether the class is a generic alias.
""" """
return isinstance(cls, GenericAliasTypes) return isinstance(cls, GenericAliasTypes) # pyright: ignore [reportArgumentType]
def unionize(*args: GenericType) -> Type: def unionize(*args: GenericType) -> Type:
@ -188,14 +192,14 @@ def unionize(*args: GenericType) -> Type:
The unionized types. The unionized types.
""" """
if not args: if not args:
return Any return Any # pyright: ignore [reportReturnType]
if len(args) == 1: if len(args) == 1:
return args[0] return args[0]
# We are bisecting the args list here to avoid hitting the recursion limit # We are bisecting the args list here to avoid hitting the recursion limit
# In Python versions >= 3.11, we can simply do `return Union[*args]` # In Python versions >= 3.11, we can simply do `return Union[*args]`
midpoint = len(args) // 2 midpoint = len(args) // 2
first_half, second_half = args[:midpoint], args[midpoint:] first_half, second_half = args[:midpoint], args[midpoint:]
return Union[unionize(*first_half), unionize(*second_half)] return Union[unionize(*first_half), unionize(*second_half)] # pyright: ignore [reportReturnType]
def is_none(cls: GenericType) -> bool: def is_none(cls: GenericType) -> bool:
@ -351,13 +355,13 @@ def get_attribute_access_type(cls: GenericType, name: str) -> GenericType | None
if type_ is not None: if type_ is not None:
if hasattr(column_type, "item_type"): if hasattr(column_type, "item_type"):
try: try:
item_type = column_type.item_type.python_type # type: ignore item_type = column_type.item_type.python_type # pyright: ignore [reportAttributeAccessIssue]
except NotImplementedError: except NotImplementedError:
item_type = None item_type = None
if item_type is not None: if item_type is not None:
if type_ in PrimitiveToAnnotation: if type_ in PrimitiveToAnnotation:
type_ = PrimitiveToAnnotation[type_] # type: ignore type_ = PrimitiveToAnnotation[type_]
type_ = type_[item_type] # type: ignore type_ = type_[item_type] # pyright: ignore [reportIndexIssue]
if column.nullable: if column.nullable:
type_ = Optional[type_] type_ = Optional[type_]
return type_ return type_
@ -432,7 +436,7 @@ def get_base_class(cls: GenericType) -> Type:
return type(get_args(cls)[0]) return type(get_args(cls)[0])
if is_union(cls): if is_union(cls):
return tuple(get_base_class(arg) for arg in get_args(cls)) return tuple(get_base_class(arg) for arg in get_args(cls)) # pyright: ignore [reportReturnType]
return get_base_class(cls.__origin__) if is_generic_alias(cls) else cls return get_base_class(cls.__origin__) if is_generic_alias(cls) else cls

View File

@ -662,7 +662,7 @@ class Var(Generic[VAR_TYPE]):
return self.to(var_subclass.var_subclass, output) return self.to(var_subclass.var_subclass, output)
if fixed_output_type is None: if fixed_output_type is None:
return get_to_operation(NoneVar).create(self) # type: ignore return get_to_operation(NoneVar).create(self) # pyright: ignore [reportReturnType]
# Handle fixed_output_type being Base or a dataclass. # Handle fixed_output_type being Base or a dataclass.
if can_use_in_object_var(fixed_output_type): if can_use_in_object_var(fixed_output_type):
@ -679,7 +679,7 @@ class Var(Generic[VAR_TYPE]):
to_operation_return = var_subclass.to_var_subclass.create( to_operation_return = var_subclass.to_var_subclass.create(
value=self, _var_type=new_var_type value=self, _var_type=new_var_type
) )
return to_operation_return # type: ignore return to_operation_return # pyright: ignore [reportReturnType]
# If we can't determine the first argument, we just replace the _var_type. # If we can't determine the first argument, we just replace the _var_type.
if not issubclass(output, Var) or var_type is None: if not issubclass(output, Var) or var_type is None:
@ -1095,7 +1095,7 @@ class Var(Generic[VAR_TYPE]):
The decoded value or the Var name. The decoded value or the Var name.
""" """
if isinstance(self, LiteralVar): if isinstance(self, LiteralVar):
return self._var_value # type: ignore return self._var_value
try: try:
return json.loads(str(self)) return json.loads(str(self))
except ValueError: except ValueError:
@ -1222,7 +1222,7 @@ class ToOperation:
""" """
return VarData.merge( return VarData.merge(
self._original._get_all_var_data(), self._original._get_all_var_data(),
self._var_data, # type: ignore self._var_data,
) )
@classmethod @classmethod
@ -1243,10 +1243,10 @@ class ToOperation:
The ToOperation. The ToOperation.
""" """
return cls( return cls(
_js_expr="", # type: ignore _js_expr="", # pyright: ignore [reportCallIssue]
_var_data=_var_data, # type: ignore _var_data=_var_data, # pyright: ignore [reportCallIssue]
_var_type=_var_type or cls._default_var_type, # type: ignore _var_type=_var_type or cls._default_var_type, # pyright: ignore [reportCallIssue, reportAttributeAccessIssue]
_original=value, # type: ignore _original=value, # pyright: ignore [reportCallIssue]
) )
@ -1435,7 +1435,7 @@ T = TypeVar("T")
# NoReturn is used to match CustomVarOperationReturn with no type hint. # NoReturn is used to match CustomVarOperationReturn with no type hint.
@overload @overload
def var_operation( def var_operation( # pyright: ignore [reportOverlappingOverload]
func: Callable[P, CustomVarOperationReturn[NoReturn]], func: Callable[P, CustomVarOperationReturn[NoReturn]],
) -> Callable[P, Var]: ... ) -> Callable[P, Var]: ...
@ -1485,7 +1485,7 @@ def var_operation(
) -> Callable[P, Var[T]]: ... ) -> Callable[P, Var[T]]: ...
def var_operation( def var_operation( # pyright: ignore [reportInconsistentOverload]
func: Callable[P, CustomVarOperationReturn[T]], func: Callable[P, CustomVarOperationReturn[T]],
) -> Callable[P, Var[T]]: ) -> Callable[P, Var[T]]:
"""Decorator for creating a var operation. """Decorator for creating a var operation.
@ -1519,7 +1519,7 @@ def var_operation(
return CustomVarOperation.create( return CustomVarOperation.create(
name=func.__name__, name=func.__name__,
args=tuple(list(args_vars.items()) + list(kwargs_vars.items())), args=tuple(list(args_vars.items()) + list(kwargs_vars.items())),
return_var=func(*args_vars.values(), **kwargs_vars), # type: ignore return_var=func(*args_vars.values(), **kwargs_vars), # pyright: ignore [reportCallIssue, reportReturnType]
).guess_type() ).guess_type()
return wrapper return wrapper
@ -1589,7 +1589,7 @@ class CachedVarOperation:
next_class = parent_classes[parent_classes.index(CachedVarOperation) + 1] next_class = parent_classes[parent_classes.index(CachedVarOperation) + 1]
return next_class.__getattr__(self, name) # type: ignore return next_class.__getattr__(self, name)
def _get_all_var_data(self) -> VarData | None: def _get_all_var_data(self) -> VarData | None:
"""Get all VarData associated with the Var. """Get all VarData associated with the Var.
@ -1611,7 +1611,7 @@ class CachedVarOperation:
value._get_all_var_data() if isinstance(value, Var) else None value._get_all_var_data() if isinstance(value, Var) else None
for value in ( for value in (
getattr(self, field.name) getattr(self, field.name)
for field in dataclasses.fields(self) # type: ignore for field in dataclasses.fields(self) # pyright: ignore [reportArgumentType]
) )
), ),
self._var_data, self._var_data,
@ -1628,7 +1628,7 @@ class CachedVarOperation:
type(self).__name__, type(self).__name__,
*[ *[
getattr(self, field.name) getattr(self, field.name)
for field in dataclasses.fields(self) # type: ignore for field in dataclasses.fields(self) # pyright: ignore [reportArgumentType]
if field.name not in ["_js_expr", "_var_data", "_var_type"] if field.name not in ["_js_expr", "_var_data", "_var_type"]
], ],
) )
@ -1645,7 +1645,7 @@ def and_operation(a: Var | Any, b: Var | Any) -> Var:
Returns: Returns:
The result of the logical AND operation. The result of the logical AND operation.
""" """
return _and_operation(a, b) # type: ignore return _and_operation(a, b)
@var_operation @var_operation
@ -1675,7 +1675,7 @@ def or_operation(a: Var | Any, b: Var | Any) -> Var:
Returns: Returns:
The result of the logical OR operation. The result of the logical OR operation.
""" """
return _or_operation(a, b) # type: ignore return _or_operation(a, b)
@var_operation @var_operation
@ -1804,7 +1804,7 @@ class ComputedVar(Var[RETURN_TYPE]):
_fget: Callable[[BaseState], RETURN_TYPE] = dataclasses.field( _fget: Callable[[BaseState], RETURN_TYPE] = dataclasses.field(
default_factory=lambda: lambda _: None default_factory=lambda: lambda _: None
) # type: ignore ) # pyright: ignore [reportAssignmentType]
def __init__( def __init__(
self, self,
@ -2088,10 +2088,10 @@ class ComputedVar(Var[RETURN_TYPE]):
return set() return set()
with contextlib.suppress(AttributeError): with contextlib.suppress(AttributeError):
# unbox functools.partial # unbox functools.partial
obj = cast(FunctionType, obj.func) # type: ignore obj = cast(FunctionType, obj.func) # pyright: ignore [reportAttributeAccessIssue]
with contextlib.suppress(AttributeError): with contextlib.suppress(AttributeError):
# unbox EventHandler # unbox EventHandler
obj = cast(FunctionType, obj.fn) # type: ignore obj = cast(FunctionType, obj.fn) # pyright: ignore [reportAttributeAccessIssue]
if self_name is None and isinstance(obj, FunctionType): if self_name is None and isinstance(obj, FunctionType):
try: try:
@ -2131,7 +2131,7 @@ class ComputedVar(Var[RETURN_TYPE]):
d.update( d.update(
self._deps( self._deps(
objclass=objclass, objclass=objclass,
obj=ref_obj, obj=ref_obj, # pyright: ignore [reportArgumentType]
) )
) )
# recurse into property fget functions # recurse into property fget functions
@ -2141,7 +2141,7 @@ class ComputedVar(Var[RETURN_TYPE]):
d.update( d.update(
self._deps( self._deps(
objclass=objclass, objclass=objclass,
obj=ref_obj.fget, # type: ignore obj=ref_obj.fget, # pyright: ignore [reportArgumentType]
) )
) )
elif ( elif (
@ -2183,7 +2183,7 @@ class ComputedVar(Var[RETURN_TYPE]):
hints = get_type_hints(self._fget) hints = get_type_hints(self._fget)
if "return" in hints: if "return" in hints:
return hints["return"] return hints["return"]
return Any return Any # pyright: ignore [reportReturnType]
@property @property
def __class__(self) -> Type: def __class__(self) -> Type:
@ -2224,7 +2224,7 @@ def computed_var(
interval: Optional[Union[datetime.timedelta, int]] = None, interval: Optional[Union[datetime.timedelta, int]] = None,
backend: bool | None = None, backend: bool | None = None,
**kwargs, **kwargs,
) -> Callable[[Callable[[BASE_STATE], RETURN_TYPE]], ComputedVar[RETURN_TYPE]]: ... ) -> Callable[[Callable[[BASE_STATE], RETURN_TYPE]], ComputedVar[RETURN_TYPE]]: ... # pyright: ignore [reportInvalidTypeVarUse]
@overload @overload
@ -2553,7 +2553,7 @@ def get_uuid_string_var() -> Var:
unique_uuid_var = get_unique_variable_name() unique_uuid_var = get_unique_variable_name()
unique_uuid_var_data = VarData( unique_uuid_var_data = VarData(
imports={ imports={
f"$/{constants.Dirs.STATE_PATH}": {ImportVar(tag="generateUUID")}, # type: ignore f"$/{constants.Dirs.STATE_PATH}": {ImportVar(tag="generateUUID")}, # pyright: ignore [reportArgumentType]
"react": "useMemo", "react": "useMemo",
}, },
hooks={f"const {unique_uuid_var} = useMemo(generateUUID, [])": None}, hooks={f"const {unique_uuid_var} = useMemo(generateUUID, [])": None},
@ -2613,7 +2613,7 @@ def _extract_var_data(value: Iterable) -> list[VarData | None]:
elif not isinstance(sub, str): elif not isinstance(sub, str):
# Recurse into dict values. # Recurse into dict values.
if hasattr(sub, "values") and callable(sub.values): if hasattr(sub, "values") and callable(sub.values):
var_datas.extend(_extract_var_data(sub.values())) var_datas.extend(_extract_var_data(sub.values())) # pyright: ignore [reportArgumentType]
# Recurse into iterable values (or dict keys). # Recurse into iterable values (or dict keys).
var_datas.extend(_extract_var_data(sub)) var_datas.extend(_extract_var_data(sub))
@ -2624,7 +2624,7 @@ def _extract_var_data(value: Iterable) -> list[VarData | None]:
# Recurse when value is a dict itself. # Recurse when value is a dict itself.
values = getattr(value, "values", None) values = getattr(value, "values", None)
if callable(values): if callable(values):
var_datas.extend(_extract_var_data(values())) var_datas.extend(_extract_var_data(values())) # pyright: ignore [reportArgumentType]
return var_datas return var_datas
@ -2932,7 +2932,7 @@ class Field(Generic[FIELD_TYPE]):
@overload @overload
def __get__(self, instance, owner) -> FIELD_TYPE: ... def __get__(self, instance, owner) -> FIELD_TYPE: ...
def __get__(self, instance, owner): # type: ignore def __get__(self, instance, owner): # pyright: ignore [reportInconsistentOverload]
"""Get the Var. """Get the Var.
Args: Args:
@ -2950,4 +2950,4 @@ def field(value: FIELD_TYPE) -> Field[FIELD_TYPE]:
Returns: Returns:
The Field. The Field.
""" """
return value # type: ignore return value # pyright: ignore [reportReturnType]

View File

@ -40,7 +40,7 @@ class DateTimeVar(Var[DATETIME_T], python_types=(datetime, date)):
def __lt__(self, other: datetime_types) -> BooleanVar: ... def __lt__(self, other: datetime_types) -> BooleanVar: ...
@overload @overload
def __lt__(self, other: NoReturn) -> NoReturn: ... def __lt__(self, other: NoReturn) -> NoReturn: ... # pyright: ignore [reportOverlappingOverload]
def __lt__(self, other: Any): def __lt__(self, other: Any):
"""Less than comparison. """Less than comparison.
@ -59,7 +59,7 @@ class DateTimeVar(Var[DATETIME_T], python_types=(datetime, date)):
def __le__(self, other: datetime_types) -> BooleanVar: ... def __le__(self, other: datetime_types) -> BooleanVar: ...
@overload @overload
def __le__(self, other: NoReturn) -> NoReturn: ... def __le__(self, other: NoReturn) -> NoReturn: ... # pyright: ignore [reportOverlappingOverload]
def __le__(self, other: Any): def __le__(self, other: Any):
"""Less than or equal comparison. """Less than or equal comparison.
@ -78,7 +78,7 @@ class DateTimeVar(Var[DATETIME_T], python_types=(datetime, date)):
def __gt__(self, other: datetime_types) -> BooleanVar: ... def __gt__(self, other: datetime_types) -> BooleanVar: ...
@overload @overload
def __gt__(self, other: NoReturn) -> NoReturn: ... def __gt__(self, other: NoReturn) -> NoReturn: ... # pyright: ignore [reportOverlappingOverload]
def __gt__(self, other: Any): def __gt__(self, other: Any):
"""Greater than comparison. """Greater than comparison.
@ -97,7 +97,7 @@ class DateTimeVar(Var[DATETIME_T], python_types=(datetime, date)):
def __ge__(self, other: datetime_types) -> BooleanVar: ... def __ge__(self, other: datetime_types) -> BooleanVar: ...
@overload @overload
def __ge__(self, other: NoReturn) -> NoReturn: ... def __ge__(self, other: NoReturn) -> NoReturn: ... # pyright: ignore [reportOverlappingOverload]
def __ge__(self, other: Any): def __ge__(self, other: Any):
"""Greater than or equal comparison. """Greater than or equal comparison.

View File

@ -100,7 +100,7 @@ class FunctionVar(Var[CALLABLE_TYPE], default_type=ReflexCallable[Any, Any]):
@overload @overload
def partial(self, *args: Var | Any) -> FunctionVar: ... def partial(self, *args: Var | Any) -> FunctionVar: ...
def partial(self, *args: Var | Any) -> FunctionVar: # type: ignore def partial(self, *args: Var | Any) -> FunctionVar: # pyright: ignore [reportInconsistentOverload]
"""Partially apply the function with the given arguments. """Partially apply the function with the given arguments.
Args: Args:
@ -174,7 +174,7 @@ class FunctionVar(Var[CALLABLE_TYPE], default_type=ReflexCallable[Any, Any]):
@overload @overload
def call(self, *args: Var | Any) -> Var: ... def call(self, *args: Var | Any) -> Var: ...
def call(self, *args: Var | Any) -> Var: # type: ignore def call(self, *args: Var | Any) -> Var: # pyright: ignore [reportInconsistentOverload]
"""Call the function with the given arguments. """Call the function with the given arguments.
Args: Args:

View File

@ -61,7 +61,7 @@ class NumberVar(Var[NUMBER_T], python_types=(int, float)):
def __add__(self, other: number_types) -> NumberVar: ... def __add__(self, other: number_types) -> NumberVar: ...
@overload @overload
def __add__(self, other: NoReturn) -> NoReturn: ... def __add__(self, other: NoReturn) -> NoReturn: ... # pyright: ignore [reportOverlappingOverload]
def __add__(self, other: Any): def __add__(self, other: Any):
"""Add two numbers. """Add two numbers.
@ -80,7 +80,7 @@ class NumberVar(Var[NUMBER_T], python_types=(int, float)):
def __radd__(self, other: number_types) -> NumberVar: ... def __radd__(self, other: number_types) -> NumberVar: ...
@overload @overload
def __radd__(self, other: NoReturn) -> NoReturn: ... def __radd__(self, other: NoReturn) -> NoReturn: ... # pyright: ignore [reportOverlappingOverload]
def __radd__(self, other: Any): def __radd__(self, other: Any):
"""Add two numbers. """Add two numbers.
@ -99,7 +99,7 @@ class NumberVar(Var[NUMBER_T], python_types=(int, float)):
def __sub__(self, other: number_types) -> NumberVar: ... def __sub__(self, other: number_types) -> NumberVar: ...
@overload @overload
def __sub__(self, other: NoReturn) -> NoReturn: ... def __sub__(self, other: NoReturn) -> NoReturn: ... # pyright: ignore [reportOverlappingOverload]
def __sub__(self, other: Any): def __sub__(self, other: Any):
"""Subtract two numbers. """Subtract two numbers.
@ -119,7 +119,7 @@ class NumberVar(Var[NUMBER_T], python_types=(int, float)):
def __rsub__(self, other: number_types) -> NumberVar: ... def __rsub__(self, other: number_types) -> NumberVar: ...
@overload @overload
def __rsub__(self, other: NoReturn) -> NoReturn: ... def __rsub__(self, other: NoReturn) -> NoReturn: ... # pyright: ignore [reportOverlappingOverload]
def __rsub__(self, other: Any): def __rsub__(self, other: Any):
"""Subtract two numbers. """Subtract two numbers.
@ -201,7 +201,7 @@ class NumberVar(Var[NUMBER_T], python_types=(int, float)):
def __truediv__(self, other: number_types) -> NumberVar: ... def __truediv__(self, other: number_types) -> NumberVar: ...
@overload @overload
def __truediv__(self, other: NoReturn) -> NoReturn: ... def __truediv__(self, other: NoReturn) -> NoReturn: ... # pyright: ignore [reportOverlappingOverload]
def __truediv__(self, other: Any): def __truediv__(self, other: Any):
"""Divide two numbers. """Divide two numbers.
@ -221,7 +221,7 @@ class NumberVar(Var[NUMBER_T], python_types=(int, float)):
def __rtruediv__(self, other: number_types) -> NumberVar: ... def __rtruediv__(self, other: number_types) -> NumberVar: ...
@overload @overload
def __rtruediv__(self, other: NoReturn) -> NoReturn: ... def __rtruediv__(self, other: NoReturn) -> NoReturn: ... # pyright: ignore [reportOverlappingOverload]
def __rtruediv__(self, other: Any): def __rtruediv__(self, other: Any):
"""Divide two numbers. """Divide two numbers.
@ -241,7 +241,7 @@ class NumberVar(Var[NUMBER_T], python_types=(int, float)):
def __floordiv__(self, other: number_types) -> NumberVar: ... def __floordiv__(self, other: number_types) -> NumberVar: ...
@overload @overload
def __floordiv__(self, other: NoReturn) -> NoReturn: ... def __floordiv__(self, other: NoReturn) -> NoReturn: ... # pyright: ignore [reportOverlappingOverload]
def __floordiv__(self, other: Any): def __floordiv__(self, other: Any):
"""Floor divide two numbers. """Floor divide two numbers.
@ -261,7 +261,7 @@ class NumberVar(Var[NUMBER_T], python_types=(int, float)):
def __rfloordiv__(self, other: number_types) -> NumberVar: ... def __rfloordiv__(self, other: number_types) -> NumberVar: ...
@overload @overload
def __rfloordiv__(self, other: NoReturn) -> NoReturn: ... def __rfloordiv__(self, other: NoReturn) -> NoReturn: ... # pyright: ignore [reportOverlappingOverload]
def __rfloordiv__(self, other: Any): def __rfloordiv__(self, other: Any):
"""Floor divide two numbers. """Floor divide two numbers.
@ -281,7 +281,7 @@ class NumberVar(Var[NUMBER_T], python_types=(int, float)):
def __mod__(self, other: number_types) -> NumberVar: ... def __mod__(self, other: number_types) -> NumberVar: ...
@overload @overload
def __mod__(self, other: NoReturn) -> NoReturn: ... def __mod__(self, other: NoReturn) -> NoReturn: ... # pyright: ignore [reportOverlappingOverload]
def __mod__(self, other: Any): def __mod__(self, other: Any):
"""Modulo two numbers. """Modulo two numbers.
@ -301,7 +301,7 @@ class NumberVar(Var[NUMBER_T], python_types=(int, float)):
def __rmod__(self, other: number_types) -> NumberVar: ... def __rmod__(self, other: number_types) -> NumberVar: ...
@overload @overload
def __rmod__(self, other: NoReturn) -> NoReturn: ... def __rmod__(self, other: NoReturn) -> NoReturn: ... # pyright: ignore [reportOverlappingOverload]
def __rmod__(self, other: Any): def __rmod__(self, other: Any):
"""Modulo two numbers. """Modulo two numbers.
@ -321,7 +321,7 @@ class NumberVar(Var[NUMBER_T], python_types=(int, float)):
def __pow__(self, other: number_types) -> NumberVar: ... def __pow__(self, other: number_types) -> NumberVar: ...
@overload @overload
def __pow__(self, other: NoReturn) -> NoReturn: ... def __pow__(self, other: NoReturn) -> NoReturn: ... # pyright: ignore [reportOverlappingOverload]
def __pow__(self, other: Any): def __pow__(self, other: Any):
"""Exponentiate two numbers. """Exponentiate two numbers.
@ -341,7 +341,7 @@ class NumberVar(Var[NUMBER_T], python_types=(int, float)):
def __rpow__(self, other: number_types) -> NumberVar: ... def __rpow__(self, other: number_types) -> NumberVar: ...
@overload @overload
def __rpow__(self, other: NoReturn) -> NoReturn: ... def __rpow__(self, other: NoReturn) -> NoReturn: ... # pyright: ignore [reportOverlappingOverload]
def __rpow__(self, other: Any): def __rpow__(self, other: Any):
"""Exponentiate two numbers. """Exponentiate two numbers.
@ -417,7 +417,7 @@ class NumberVar(Var[NUMBER_T], python_types=(int, float)):
def __lt__(self, other: number_types) -> BooleanVar: ... def __lt__(self, other: number_types) -> BooleanVar: ...
@overload @overload
def __lt__(self, other: NoReturn) -> NoReturn: ... def __lt__(self, other: NoReturn) -> NoReturn: ... # pyright: ignore [reportOverlappingOverload]
def __lt__(self, other: Any): def __lt__(self, other: Any):
"""Less than comparison. """Less than comparison.
@ -436,7 +436,7 @@ class NumberVar(Var[NUMBER_T], python_types=(int, float)):
def __le__(self, other: number_types) -> BooleanVar: ... def __le__(self, other: number_types) -> BooleanVar: ...
@overload @overload
def __le__(self, other: NoReturn) -> NoReturn: ... def __le__(self, other: NoReturn) -> NoReturn: ... # pyright: ignore [reportOverlappingOverload]
def __le__(self, other: Any): def __le__(self, other: Any):
"""Less than or equal comparison. """Less than or equal comparison.
@ -481,7 +481,7 @@ class NumberVar(Var[NUMBER_T], python_types=(int, float)):
def __gt__(self, other: number_types) -> BooleanVar: ... def __gt__(self, other: number_types) -> BooleanVar: ...
@overload @overload
def __gt__(self, other: NoReturn) -> NoReturn: ... def __gt__(self, other: NoReturn) -> NoReturn: ... # pyright: ignore [reportOverlappingOverload]
def __gt__(self, other: Any): def __gt__(self, other: Any):
"""Greater than comparison. """Greater than comparison.
@ -500,7 +500,7 @@ class NumberVar(Var[NUMBER_T], python_types=(int, float)):
def __ge__(self, other: number_types) -> BooleanVar: ... def __ge__(self, other: number_types) -> BooleanVar: ...
@overload @overload
def __ge__(self, other: NoReturn) -> NoReturn: ... def __ge__(self, other: NoReturn) -> NoReturn: ... # pyright: ignore [reportOverlappingOverload]
def __ge__(self, other: Any): def __ge__(self, other: Any):
"""Greater than or equal comparison. """Greater than or equal comparison.
@ -561,7 +561,7 @@ def binary_number_operation(
Returns: Returns:
The binary number operation. The binary number operation.
""" """
return operation(lhs, rhs) # type: ignore return operation(lhs, rhs) # pyright: ignore [reportReturnType, reportArgumentType]
return wrapper return wrapper

View File

@ -75,9 +75,9 @@ class ObjectVar(Var[OBJECT_TYPE], python_types=Mapping):
""" """
fixed_type = get_origin(self._var_type) or self._var_type fixed_type = get_origin(self._var_type) or self._var_type
if not isclass(fixed_type): if not isclass(fixed_type):
return Any return Any # pyright: ignore [reportReturnType]
args = get_args(self._var_type) if issubclass(fixed_type, Mapping) else () args = get_args(self._var_type) if issubclass(fixed_type, Mapping) else ()
return args[1] if args else Any return args[1] if args else Any # pyright: ignore [reportReturnType]
def keys(self) -> ArrayVar[List[str]]: def keys(self) -> ArrayVar[List[str]]:
"""Get the keys of the object. """Get the keys of the object.
@ -134,7 +134,7 @@ class ObjectVar(Var[OBJECT_TYPE], python_types=Mapping):
# NoReturn is used here to catch when key value is Any # NoReturn is used here to catch when key value is Any
@overload @overload
def __getitem__( def __getitem__( # pyright: ignore [reportOverlappingOverload]
self: ObjectVar[Mapping[Any, NoReturn]], self: ObjectVar[Mapping[Any, NoReturn]],
key: Var | Any, key: Var | Any,
) -> Var: ... ) -> Var: ...
@ -202,7 +202,7 @@ class ObjectVar(Var[OBJECT_TYPE], python_types=Mapping):
# NoReturn is used here to catch when key value is Any # NoReturn is used here to catch when key value is Any
@overload @overload
def __getattr__( def __getattr__( # pyright: ignore [reportOverlappingOverload]
self: ObjectVar[Mapping[Any, NoReturn]], self: ObjectVar[Mapping[Any, NoReturn]],
name: str, name: str,
) -> Var: ... ) -> Var: ...
@ -321,7 +321,7 @@ class LiteralObjectVar(CachedVarOperation, ObjectVar[OBJECT_TYPE], LiteralVar):
The type of the keys of the object. The type of the keys of the object.
""" """
args_list = typing.get_args(self._var_type) args_list = typing.get_args(self._var_type)
return args_list[0] if args_list else Any return args_list[0] if args_list else Any # pyright: ignore [reportReturnType]
def _value_type(self) -> Type: def _value_type(self) -> Type:
"""Get the type of the values of the object. """Get the type of the values of the object.
@ -330,7 +330,7 @@ class LiteralObjectVar(CachedVarOperation, ObjectVar[OBJECT_TYPE], LiteralVar):
The type of the values of the object. The type of the values of the object.
""" """
args_list = typing.get_args(self._var_type) args_list = typing.get_args(self._var_type)
return args_list[1] if args_list else Any return args_list[1] if args_list else Any # pyright: ignore [reportReturnType]
@cached_property_no_lock @cached_property_no_lock
def _cached_var_name(self) -> str: def _cached_var_name(self) -> str:

View File

@ -66,7 +66,7 @@ class StringVar(Var[STRING_TYPE], python_types=str):
def __add__(self, other: StringVar | str) -> ConcatVarOperation: ... def __add__(self, other: StringVar | str) -> ConcatVarOperation: ...
@overload @overload
def __add__(self, other: NoReturn) -> NoReturn: ... def __add__(self, other: NoReturn) -> NoReturn: ... # pyright: ignore [reportOverlappingOverload]
def __add__(self, other: Any) -> ConcatVarOperation: def __add__(self, other: Any) -> ConcatVarOperation:
"""Concatenate two strings. """Concatenate two strings.
@ -86,7 +86,7 @@ class StringVar(Var[STRING_TYPE], python_types=str):
def __radd__(self, other: StringVar | str) -> ConcatVarOperation: ... def __radd__(self, other: StringVar | str) -> ConcatVarOperation: ...
@overload @overload
def __radd__(self, other: NoReturn) -> NoReturn: ... def __radd__(self, other: NoReturn) -> NoReturn: ... # pyright: ignore [reportOverlappingOverload]
def __radd__(self, other: Any) -> ConcatVarOperation: def __radd__(self, other: Any) -> ConcatVarOperation:
"""Concatenate two strings. """Concatenate two strings.
@ -106,7 +106,7 @@ class StringVar(Var[STRING_TYPE], python_types=str):
def __mul__(self, other: NumberVar | int) -> StringVar: ... def __mul__(self, other: NumberVar | int) -> StringVar: ...
@overload @overload
def __mul__(self, other: NoReturn) -> NoReturn: ... def __mul__(self, other: NoReturn) -> NoReturn: ... # pyright: ignore [reportOverlappingOverload]
def __mul__(self, other: Any) -> StringVar: def __mul__(self, other: Any) -> StringVar:
"""Multiply the sequence by a number or an integer. """Multiply the sequence by a number or an integer.
@ -126,7 +126,7 @@ class StringVar(Var[STRING_TYPE], python_types=str):
def __rmul__(self, other: NumberVar | int) -> StringVar: ... def __rmul__(self, other: NumberVar | int) -> StringVar: ...
@overload @overload
def __rmul__(self, other: NoReturn) -> NoReturn: ... def __rmul__(self, other: NoReturn) -> NoReturn: ... # pyright: ignore [reportOverlappingOverload]
def __rmul__(self, other: Any) -> StringVar: def __rmul__(self, other: Any) -> StringVar:
"""Multiply the sequence by a number or an integer. """Multiply the sequence by a number or an integer.
@ -211,7 +211,7 @@ class StringVar(Var[STRING_TYPE], python_types=str):
) -> BooleanVar: ... ) -> BooleanVar: ...
@overload @overload
def contains( def contains( # pyright: ignore [reportOverlappingOverload]
self, other: NoReturn, field: StringVar | str | None = None self, other: NoReturn, field: StringVar | str | None = None
) -> NoReturn: ... ) -> NoReturn: ...
@ -237,7 +237,7 @@ class StringVar(Var[STRING_TYPE], python_types=str):
def split(self, separator: StringVar | str = "") -> ArrayVar[List[str]]: ... def split(self, separator: StringVar | str = "") -> ArrayVar[List[str]]: ...
@overload @overload
def split(self, separator: NoReturn) -> NoReturn: ... def split(self, separator: NoReturn) -> NoReturn: ... # pyright: ignore [reportOverlappingOverload]
def split(self, separator: Any = "") -> ArrayVar[List[str]]: def split(self, separator: Any = "") -> ArrayVar[List[str]]:
"""Split the string. """Split the string.
@ -256,7 +256,7 @@ class StringVar(Var[STRING_TYPE], python_types=str):
def startswith(self, prefix: StringVar | str) -> BooleanVar: ... def startswith(self, prefix: StringVar | str) -> BooleanVar: ...
@overload @overload
def startswith(self, prefix: NoReturn) -> NoReturn: ... def startswith(self, prefix: NoReturn) -> NoReturn: ... # pyright: ignore [reportOverlappingOverload]
def startswith(self, prefix: Any) -> BooleanVar: def startswith(self, prefix: Any) -> BooleanVar:
"""Check if the string starts with a prefix. """Check if the string starts with a prefix.
@ -275,7 +275,7 @@ class StringVar(Var[STRING_TYPE], python_types=str):
def endswith(self, suffix: StringVar | str) -> BooleanVar: ... def endswith(self, suffix: StringVar | str) -> BooleanVar: ...
@overload @overload
def endswith(self, suffix: NoReturn) -> NoReturn: ... def endswith(self, suffix: NoReturn) -> NoReturn: ... # pyright: ignore [reportOverlappingOverload]
def endswith(self, suffix: Any) -> BooleanVar: def endswith(self, suffix: Any) -> BooleanVar:
"""Check if the string ends with a suffix. """Check if the string ends with a suffix.
@ -294,7 +294,7 @@ class StringVar(Var[STRING_TYPE], python_types=str):
def __lt__(self, other: StringVar | str) -> BooleanVar: ... def __lt__(self, other: StringVar | str) -> BooleanVar: ...
@overload @overload
def __lt__(self, other: NoReturn) -> NoReturn: ... def __lt__(self, other: NoReturn) -> NoReturn: ... # pyright: ignore [reportOverlappingOverload]
def __lt__(self, other: Any): def __lt__(self, other: Any):
"""Check if the string is less than another string. """Check if the string is less than another string.
@ -314,7 +314,7 @@ class StringVar(Var[STRING_TYPE], python_types=str):
def __gt__(self, other: StringVar | str) -> BooleanVar: ... def __gt__(self, other: StringVar | str) -> BooleanVar: ...
@overload @overload
def __gt__(self, other: NoReturn) -> NoReturn: ... def __gt__(self, other: NoReturn) -> NoReturn: ... # pyright: ignore [reportOverlappingOverload]
def __gt__(self, other: Any): def __gt__(self, other: Any):
"""Check if the string is greater than another string. """Check if the string is greater than another string.
@ -334,7 +334,7 @@ class StringVar(Var[STRING_TYPE], python_types=str):
def __le__(self, other: StringVar | str) -> BooleanVar: ... def __le__(self, other: StringVar | str) -> BooleanVar: ...
@overload @overload
def __le__(self, other: NoReturn) -> NoReturn: ... def __le__(self, other: NoReturn) -> NoReturn: ... # pyright: ignore [reportOverlappingOverload]
def __le__(self, other: Any): def __le__(self, other: Any):
"""Check if the string is less than or equal to another string. """Check if the string is less than or equal to another string.
@ -354,7 +354,7 @@ class StringVar(Var[STRING_TYPE], python_types=str):
def __ge__(self, other: StringVar | str) -> BooleanVar: ... def __ge__(self, other: StringVar | str) -> BooleanVar: ...
@overload @overload
def __ge__(self, other: NoReturn) -> NoReturn: ... def __ge__(self, other: NoReturn) -> NoReturn: ... # pyright: ignore [reportOverlappingOverload]
def __ge__(self, other: Any): def __ge__(self, other: Any):
"""Check if the string is greater than or equal to another string. """Check if the string is greater than or equal to another string.
@ -811,7 +811,7 @@ class ArrayVar(Var[ARRAY_VAR_TYPE], python_types=(list, tuple, set)):
def join(self, sep: StringVar | str = "") -> StringVar: ... def join(self, sep: StringVar | str = "") -> StringVar: ...
@overload @overload
def join(self, sep: NoReturn) -> NoReturn: ... def join(self, sep: NoReturn) -> NoReturn: ... # pyright: ignore [reportOverlappingOverload]
def join(self, sep: Any = "") -> StringVar: def join(self, sep: Any = "") -> StringVar:
"""Join the elements of the array. """Join the elements of the array.
@ -858,7 +858,7 @@ class ArrayVar(Var[ARRAY_VAR_TYPE], python_types=(list, tuple, set)):
def __add__(self, other: ArrayVar[ARRAY_VAR_TYPE]) -> ArrayVar[ARRAY_VAR_TYPE]: ... def __add__(self, other: ArrayVar[ARRAY_VAR_TYPE]) -> ArrayVar[ARRAY_VAR_TYPE]: ...
@overload @overload
def __add__(self, other: NoReturn) -> NoReturn: ... def __add__(self, other: NoReturn) -> NoReturn: ... # pyright: ignore [reportOverlappingOverload]
def __add__(self, other: Any) -> ArrayVar[ARRAY_VAR_TYPE]: def __add__(self, other: Any) -> ArrayVar[ARRAY_VAR_TYPE]:
"""Concatenate two arrays. """Concatenate two arrays.
@ -1089,7 +1089,7 @@ class ArrayVar(Var[ARRAY_VAR_TYPE], python_types=(list, tuple, set)):
def __mul__(self, other: NumberVar | int) -> ArrayVar[ARRAY_VAR_TYPE]: ... def __mul__(self, other: NumberVar | int) -> ArrayVar[ARRAY_VAR_TYPE]: ...
@overload @overload
def __mul__(self, other: NoReturn) -> NoReturn: ... def __mul__(self, other: NoReturn) -> NoReturn: ... # pyright: ignore [reportOverlappingOverload]
def __mul__(self, other: Any) -> ArrayVar[ARRAY_VAR_TYPE]: def __mul__(self, other: Any) -> ArrayVar[ARRAY_VAR_TYPE]:
"""Multiply the sequence by a number or integer. """Multiply the sequence by a number or integer.
@ -1107,7 +1107,7 @@ class ArrayVar(Var[ARRAY_VAR_TYPE], python_types=(list, tuple, set)):
return repeat_array_operation(self, other) return repeat_array_operation(self, other)
__rmul__ = __mul__ # type: ignore __rmul__ = __mul__
@overload @overload
def __lt__(self, other: ArrayVar[ARRAY_VAR_TYPE]) -> BooleanVar: ... def __lt__(self, other: ArrayVar[ARRAY_VAR_TYPE]) -> BooleanVar: ...
@ -1691,7 +1691,7 @@ def array_concat_operation(
""" """
return var_operation_return( return var_operation_return(
js_expression=f"[...{lhs}, ...{rhs}]", js_expression=f"[...{lhs}, ...{rhs}]",
var_type=Union[lhs._var_type, rhs._var_type], var_type=Union[lhs._var_type, rhs._var_type], # pyright: ignore [reportArgumentType]
) )

View File

@ -37,9 +37,9 @@ def BackgroundTask():
self._task_id += 1 self._task_id += 1
for ix in range(int(self.iterations)): for ix in range(int(self.iterations)):
if ix % 2 == 0: if ix % 2 == 0:
yield State.increment_arbitrary(1) # type: ignore yield State.increment_arbitrary(1)
else: else:
yield State.increment() # type: ignore yield State.increment()
await asyncio.sleep(0.005) await asyncio.sleep(0.005)
@rx.event @rx.event
@ -125,8 +125,8 @@ def BackgroundTask():
rx.input( rx.input(
id="iterations", id="iterations",
placeholder="Iterations", placeholder="Iterations",
value=State.iterations.to_string(), # type: ignore value=State.iterations.to_string(), # pyright: ignore [reportAttributeAccessIssue]
on_change=State.set_iterations, # type: ignore on_change=State.set_iterations, # pyright: ignore [reportAttributeAccessIssue]
), ),
rx.button( rx.button(
"Delayed Increment", "Delayed Increment",
@ -288,7 +288,7 @@ def test_background_task(
assert background_task._poll_for(lambda: counter.text == "620", timeout=40) assert background_task._poll_for(lambda: counter.text == "620", timeout=40)
# all tasks should have exited and cleaned up # all tasks should have exited and cleaned up
assert background_task._poll_for( assert background_task._poll_for(
lambda: not background_task.app_instance._background_tasks # type: ignore lambda: not background_task.app_instance._background_tasks # pyright: ignore [reportOptionalMemberAccess]
) )

View File

@ -30,7 +30,7 @@ def ComponentStateApp():
@rx.event @rx.event
def increment(self): def increment(self):
self.count += 1 self.count += 1
self._be = self.count # type: ignore self._be = self.count # pyright: ignore [reportAttributeAccessIssue]
@classmethod @classmethod
def get_component(cls, *children, **props): def get_component(cls, *children, **props):
@ -72,7 +72,7 @@ def ComponentStateApp():
State=_Counter, State=_Counter,
) )
app = rx.App(_state=rx.State) # noqa app = rx.App(_state=rx.State) # noqa: F841
@rx.page() @rx.page()
def index(): def index():
@ -89,7 +89,7 @@ def ComponentStateApp():
mc_d, mc_d,
rx.button( rx.button(
"Inc A", "Inc A",
on_click=mc_a.State.increment, # type: ignore on_click=mc_a.State.increment, # pyright: ignore [reportAttributeAccessIssue, reportOptionalMemberAccess]
id="inc-a", id="inc-a",
), ),
rx.text( rx.text(

View File

@ -31,7 +31,7 @@ def ConnectionBanner():
rx.button( rx.button(
"Increment", "Increment",
id="increment", id="increment",
on_click=State.set_foo(State.foo + 1), # type: ignore on_click=State.set_foo(State.foo + 1), # pyright: ignore [reportAttributeAccessIssue]
), ),
rx.button("Delay", id="delay", on_click=State.delay), rx.button("Delay", id="delay", on_click=State.delay),
) )

View File

@ -19,7 +19,7 @@ def DeployUrlSample() -> None:
class State(rx.State): class State(rx.State):
@rx.event @rx.event
def goto_self(self): def goto_self(self):
return rx.redirect(rx.config.get_config().deploy_url) # type: ignore return rx.redirect(rx.config.get_config().deploy_url) # pyright: ignore [reportArgumentType]
def index(): def index():
return rx.fragment( return rx.fragment(

View File

@ -49,7 +49,7 @@ def DynamicRoute():
read_only=True, read_only=True,
id="token", id="token",
), ),
rx.input(value=rx.State.page_id, read_only=True, id="page_id"), # type: ignore rx.input(value=rx.State.page_id, read_only=True, id="page_id"), # pyright: ignore [reportAttributeAccessIssue]
rx.input( rx.input(
value=DynamicState.router.page.raw_path, value=DynamicState.router.page.raw_path,
read_only=True, read_only=True,
@ -60,12 +60,12 @@ def DynamicRoute():
rx.link( rx.link(
"next", "next",
href="/page/" + DynamicState.next_page, href="/page/" + DynamicState.next_page,
id="link_page_next", # type: ignore id="link_page_next",
), ),
rx.link("missing", href="/missing", id="link_missing"), rx.link("missing", href="/missing", id="link_missing"),
rx.list( # type: ignore rx.list( # pyright: ignore [reportAttributeAccessIssue]
rx.foreach( rx.foreach(
DynamicState.order, # type: ignore DynamicState.order, # pyright: ignore [reportAttributeAccessIssue]
lambda i: rx.list_item(rx.text(i)), lambda i: rx.list_item(rx.text(i)),
), ),
), ),
@ -98,11 +98,11 @@ def DynamicRoute():
rx.data_list.root( rx.data_list.root(
rx.data_list.item( rx.data_list.item(
rx.data_list.label("rx.State.arg_str (dynamic)"), rx.data_list.label("rx.State.arg_str (dynamic)"),
rx.data_list.value(rx.State.arg_str, id="state-arg_str"), # type: ignore rx.data_list.value(rx.State.arg_str, id="state-arg_str"), # pyright: ignore [reportAttributeAccessIssue]
), ),
rx.data_list.item( rx.data_list.item(
rx.data_list.label("ArgState.arg_str (dynamic) (inherited)"), rx.data_list.label("ArgState.arg_str (dynamic) (inherited)"),
rx.data_list.value(ArgState.arg_str, id="argstate-arg_str"), # type: ignore rx.data_list.value(ArgState.arg_str, id="argstate-arg_str"), # pyright: ignore [reportAttributeAccessIssue]
), ),
rx.data_list.item( rx.data_list.item(
rx.data_list.label("ArgState.arg"), rx.data_list.label("ArgState.arg"),
@ -110,7 +110,7 @@ def DynamicRoute():
), ),
rx.data_list.item( rx.data_list.item(
rx.data_list.label("ArgSubState.arg_str (dynamic) (inherited)"), rx.data_list.label("ArgSubState.arg_str (dynamic) (inherited)"),
rx.data_list.value(ArgSubState.arg_str, id="argsubstate-arg_str"), # type: ignore rx.data_list.value(ArgSubState.arg_str, id="argsubstate-arg_str"), # pyright: ignore [reportAttributeAccessIssue]
), ),
rx.data_list.item( rx.data_list.item(
rx.data_list.label("ArgSubState.arg (inherited)"), rx.data_list.label("ArgSubState.arg (inherited)"),
@ -134,15 +134,15 @@ def DynamicRoute():
height="100vh", height="100vh",
) )
@rx.page(route="/redirect-page/[page_id]", on_load=DynamicState.on_load_redir) # type: ignore @rx.page(route="/redirect-page/[page_id]", on_load=DynamicState.on_load_redir)
def redirect_page(): def redirect_page():
return rx.fragment(rx.text("redirecting...")) return rx.fragment(rx.text("redirecting..."))
app = rx.App(_state=rx.State) app = rx.App(_state=rx.State)
app.add_page(index, route="/page/[page_id]", on_load=DynamicState.on_load) # type: ignore app.add_page(index, route="/page/[page_id]", on_load=DynamicState.on_load)
app.add_page(index, route="/static/x", on_load=DynamicState.on_load) # type: ignore app.add_page(index, route="/static/x", on_load=DynamicState.on_load)
app.add_page(index) app.add_page(index)
app.add_custom_404_page(on_load=DynamicState.on_load) # type: ignore app.add_custom_404_page(on_load=DynamicState.on_load)
@pytest.fixture(scope="module") @pytest.fixture(scope="module")

View File

@ -63,16 +63,16 @@ def TestEventAction():
rx.button( rx.button(
"Stop Prop Only", "Stop Prop Only",
id="btn-stop-prop-only", id="btn-stop-prop-only",
on_click=rx.stop_propagation, # type: ignore on_click=rx.stop_propagation, # pyright: ignore [reportArgumentType]
), ),
rx.button( rx.button(
"Click event", "Click event",
on_click=EventActionState.on_click("no_event_actions"), # type: ignore on_click=EventActionState.on_click("no_event_actions"), # pyright: ignore [reportCallIssue]
id="btn-click-event", id="btn-click-event",
), ),
rx.button( rx.button(
"Click stop propagation", "Click stop propagation",
on_click=EventActionState.on_click("stop_propagation").stop_propagation, # type: ignore on_click=EventActionState.on_click("stop_propagation").stop_propagation, # pyright: ignore [reportCallIssue]
id="btn-click-stop-propagation", id="btn-click-stop-propagation",
), ),
rx.button( rx.button(
@ -88,13 +88,13 @@ def TestEventAction():
rx.link( rx.link(
"Link", "Link",
href="#", href="#",
on_click=EventActionState.on_click("link_no_event_actions"), # type: ignore on_click=EventActionState.on_click("link_no_event_actions"), # pyright: ignore [reportCallIssue]
id="link", id="link",
), ),
rx.link( rx.link(
"Link Stop Propagation", "Link Stop Propagation",
href="#", href="#",
on_click=EventActionState.on_click( # type: ignore on_click=EventActionState.on_click( # pyright: ignore [reportCallIssue]
"link_stop_propagation" "link_stop_propagation"
).stop_propagation, ).stop_propagation,
id="link-stop-propagation", id="link-stop-propagation",
@ -102,13 +102,13 @@ def TestEventAction():
rx.link( rx.link(
"Link Prevent Default Only", "Link Prevent Default Only",
href="/invalid", href="/invalid",
on_click=rx.prevent_default, # type: ignore on_click=rx.prevent_default, # pyright: ignore [reportArgumentType]
id="link-prevent-default-only", id="link-prevent-default-only",
), ),
rx.link( rx.link(
"Link Prevent Default", "Link Prevent Default",
href="/invalid", href="/invalid",
on_click=EventActionState.on_click( # type: ignore on_click=EventActionState.on_click( # pyright: ignore [reportCallIssue]
"link_prevent_default" "link_prevent_default"
).prevent_default, ).prevent_default,
id="link-prevent-default", id="link-prevent-default",
@ -116,44 +116,44 @@ def TestEventAction():
rx.link( rx.link(
"Link Both", "Link Both",
href="/invalid", href="/invalid",
on_click=EventActionState.on_click( # type: ignore on_click=EventActionState.on_click( # pyright: ignore [reportCallIssue]
"link_both" "link_both"
).stop_propagation.prevent_default, ).stop_propagation.prevent_default,
id="link-stop-propagation-prevent-default", id="link-stop-propagation-prevent-default",
), ),
EventFiringComponent.create( EventFiringComponent.create(
id="custom-stop-propagation", id="custom-stop-propagation",
on_click=EventActionState.on_click( # type: ignore on_click=EventActionState.on_click( # pyright: ignore [reportCallIssue]
"custom-stop-propagation" "custom-stop-propagation"
).stop_propagation, ).stop_propagation,
), ),
EventFiringComponent.create( EventFiringComponent.create(
id="custom-prevent-default", id="custom-prevent-default",
on_click=EventActionState.on_click( # type: ignore on_click=EventActionState.on_click( # pyright: ignore [reportCallIssue]
"custom-prevent-default" "custom-prevent-default"
).prevent_default, ).prevent_default,
), ),
rx.button( rx.button(
"Throttle", "Throttle",
id="btn-throttle", id="btn-throttle",
on_click=lambda: EventActionState.on_click_throttle.throttle( on_click=lambda: EventActionState.on_click_throttle.throttle( # pyright: ignore [reportFunctionMemberAccess]
200 200
).stop_propagation, ).stop_propagation,
), ),
rx.button( rx.button(
"Debounce", "Debounce",
id="btn-debounce", id="btn-debounce",
on_click=EventActionState.on_click_debounce.debounce( on_click=EventActionState.on_click_debounce.debounce( # pyright: ignore [reportFunctionMemberAccess]
200 200
).stop_propagation, ).stop_propagation,
), ),
rx.list( # type: ignore rx.list( # pyright: ignore [reportAttributeAccessIssue]
rx.foreach( rx.foreach(
EventActionState.order, # type: ignore EventActionState.order,
rx.list_item, rx.list_item,
), ),
), ),
on_click=EventActionState.on_click("outer"), # type: ignore on_click=EventActionState.on_click("outer"), # pyright: ignore [reportCallIssue]
) )
app = rx.App(_state=rx.State) app = rx.App(_state=rx.State)

View File

@ -43,32 +43,32 @@ def EventChain():
def event_nested_1(self): def event_nested_1(self):
self.event_order.append("event_nested_1") self.event_order.append("event_nested_1")
yield State.event_nested_2 yield State.event_nested_2
yield State.event_arg("nested_1") # type: ignore yield State.event_arg("nested_1")
@rx.event @rx.event
def event_nested_2(self): def event_nested_2(self):
self.event_order.append("event_nested_2") self.event_order.append("event_nested_2")
yield State.event_nested_3 yield State.event_nested_3
yield rx.console_log("event_nested_2") yield rx.console_log("event_nested_2")
yield State.event_arg("nested_2") # type: ignore yield State.event_arg("nested_2")
@rx.event @rx.event
def event_nested_3(self): def event_nested_3(self):
self.event_order.append("event_nested_3") self.event_order.append("event_nested_3")
yield State.event_no_args yield State.event_no_args
yield State.event_arg("nested_3") # type: ignore yield State.event_arg("nested_3")
@rx.event @rx.event
def on_load_return_chain(self): def on_load_return_chain(self):
self.event_order.append("on_load_return_chain") self.event_order.append("on_load_return_chain")
return [State.event_arg(1), State.event_arg(2), State.event_arg(3)] # type: ignore return [State.event_arg(1), State.event_arg(2), State.event_arg(3)]
@rx.event @rx.event
def on_load_yield_chain(self): def on_load_yield_chain(self):
self.event_order.append("on_load_yield_chain") self.event_order.append("on_load_yield_chain")
yield State.event_arg(4) # type: ignore yield State.event_arg(4)
yield State.event_arg(5) # type: ignore yield State.event_arg(5)
yield State.event_arg(6) # type: ignore yield State.event_arg(6)
@rx.event @rx.event
def click_return_event(self): def click_return_event(self):
@ -79,28 +79,28 @@ def EventChain():
def click_return_events(self): def click_return_events(self):
self.event_order.append("click_return_events") self.event_order.append("click_return_events")
return [ return [
State.event_arg(7), # type: ignore State.event_arg(7),
rx.console_log("click_return_events"), rx.console_log("click_return_events"),
State.event_arg(8), # type: ignore State.event_arg(8),
State.event_arg(9), # type: ignore State.event_arg(9),
] ]
@rx.event @rx.event
def click_yield_chain(self): def click_yield_chain(self):
self.event_order.append("click_yield_chain:0") self.event_order.append("click_yield_chain:0")
yield State.event_arg(10) # type: ignore yield State.event_arg(10)
self.event_order.append("click_yield_chain:1") self.event_order.append("click_yield_chain:1")
yield rx.console_log("click_yield_chain") yield rx.console_log("click_yield_chain")
yield State.event_arg(11) # type: ignore yield State.event_arg(11)
self.event_order.append("click_yield_chain:2") self.event_order.append("click_yield_chain:2")
yield State.event_arg(12) # type: ignore yield State.event_arg(12)
self.event_order.append("click_yield_chain:3") self.event_order.append("click_yield_chain:3")
@rx.event @rx.event
def click_yield_many_events(self): def click_yield_many_events(self):
self.event_order.append("click_yield_many_events") self.event_order.append("click_yield_many_events")
for ix in range(MANY_EVENTS): for ix in range(MANY_EVENTS):
yield State.event_arg(ix) # type: ignore yield State.event_arg(ix)
yield rx.console_log(f"many_events_{ix}") yield rx.console_log(f"many_events_{ix}")
self.event_order.append("click_yield_many_events_done") self.event_order.append("click_yield_many_events_done")
@ -108,7 +108,7 @@ def EventChain():
def click_yield_nested(self): def click_yield_nested(self):
self.event_order.append("click_yield_nested") self.event_order.append("click_yield_nested")
yield State.event_nested_1 yield State.event_nested_1
yield State.event_arg("yield_nested") # type: ignore yield State.event_arg("yield_nested")
@rx.event @rx.event
def redirect_return_chain(self): def redirect_return_chain(self):
@ -123,12 +123,12 @@ def EventChain():
@rx.event @rx.event
def click_return_int_type(self): def click_return_int_type(self):
self.event_order.append("click_return_int_type") self.event_order.append("click_return_int_type")
return State.event_arg_repr_type(1) # type: ignore return State.event_arg_repr_type(1)
@rx.event @rx.event
def click_return_dict_type(self): def click_return_dict_type(self):
self.event_order.append("click_return_dict_type") self.event_order.append("click_return_dict_type")
return State.event_arg_repr_type({"a": 1}) # type: ignore return State.event_arg_repr_type({"a": 1})
@rx.event @rx.event
async def click_yield_interim_value_async(self): async def click_yield_interim_value_async(self):
@ -193,12 +193,12 @@ def EventChain():
rx.button( rx.button(
"Click Int Type", "Click Int Type",
id="click_int_type", id="click_int_type",
on_click=lambda: State.event_arg_repr_type(1), # type: ignore on_click=lambda: State.event_arg_repr_type(1),
), ),
rx.button( rx.button(
"Click Dict Type", "Click Dict Type",
id="click_dict_type", id="click_dict_type",
on_click=lambda: State.event_arg_repr_type({"a": 1}), # type: ignore on_click=lambda: State.event_arg_repr_type({"a": 1}),
), ),
rx.button( rx.button(
"Return Chain Int Type", "Return Chain Int Type",
@ -239,7 +239,7 @@ def EventChain():
rx.text( rx.text(
"return", "return",
on_mount=State.on_load_return_chain, on_mount=State.on_load_return_chain,
on_unmount=lambda: State.event_arg("unmount"), # type: ignore on_unmount=lambda: State.event_arg("unmount"),
), ),
token_input, token_input,
rx.button("Unmount", on_click=rx.redirect("/"), id="unmount"), rx.button("Unmount", on_click=rx.redirect("/"), id="unmount"),
@ -251,7 +251,7 @@ def EventChain():
"yield", "yield",
on_mount=[ on_mount=[
State.on_load_yield_chain, State.on_load_yield_chain,
lambda: State.event_arg("mount"), # type: ignore lambda: State.event_arg("mount"),
], ],
on_unmount=State.event_no_args, on_unmount=State.event_no_args,
), ),
@ -259,8 +259,8 @@ def EventChain():
rx.button("Unmount", on_click=rx.redirect("/"), id="unmount"), rx.button("Unmount", on_click=rx.redirect("/"), id="unmount"),
) )
app.add_page(on_load_return_chain, on_load=State.on_load_return_chain) # type: ignore app.add_page(on_load_return_chain, on_load=State.on_load_return_chain)
app.add_page(on_load_yield_chain, on_load=State.on_load_yield_chain) # type: ignore app.add_page(on_load_yield_chain, on_load=State.on_load_yield_chain)
app.add_page(on_mount_return_chain) app.add_page(on_mount_return_chain)
app.add_page(on_mount_yield_chain) app.add_page(on_mount_yield_chain)

View File

@ -51,12 +51,12 @@ def TestApp():
), ),
rx.button( rx.button(
"induce_backend_error", "induce_backend_error",
on_click=lambda: TestAppState.divide_by_number(0), # type: ignore on_click=lambda: TestAppState.divide_by_number(0), # pyright: ignore [reportCallIssue]
id="induce-backend-error-btn", id="induce-backend-error-btn",
), ),
rx.button( rx.button(
"induce_react_error", "induce_react_error",
on_click=TestAppState.set_react_error(True), # type: ignore on_click=TestAppState.set_react_error(True), # pyright: ignore [reportAttributeAccessIssue]
id="induce-react-error-btn", id="induce-react-error-btn",
), ),
rx.box( rx.box(

View File

@ -26,11 +26,11 @@ def FullyControlledInput():
), ),
rx.input( rx.input(
id="debounce_input_input", id="debounce_input_input",
on_change=State.set_text, # type: ignore on_change=State.set_text, # pyright: ignore [reportAttributeAccessIssue]
value=State.text, value=State.text,
), ),
rx.input(value=State.text, id="value_input", is_read_only=True), rx.input(value=State.text, id="value_input", is_read_only=True),
rx.input(on_change=State.set_text, id="on_change_input"), # type: ignore rx.input(on_change=State.set_text, id="on_change_input"), # pyright: ignore [reportAttributeAccessIssue]
rx.el.input( rx.el.input(
value=State.text, value=State.text,
id="plain_value_input", id="plain_value_input",

View File

@ -65,7 +65,7 @@ def LifespanApp():
rx.moment( rx.moment(
interval=LifespanState.interval, on_change=LifespanState.tick interval=LifespanState.interval, on_change=LifespanState.tick
), ),
on_click=LifespanState.set_interval( # type: ignore on_click=LifespanState.set_interval( # pyright: ignore [reportAttributeAccessIssue]
rx.cond(LifespanState.interval, 0, 100) rx.cond(LifespanState.interval, 0, 100)
), ),
id="toggle-tick", id="toggle-tick",
@ -113,13 +113,13 @@ async def test_lifespan(lifespan_app: AppHarness):
task_global = driver.find_element(By.ID, "task_global") task_global = driver.find_element(By.ID, "task_global")
assert context_global.text == "2" assert context_global.text == "2"
assert lifespan_app.app_module.lifespan_context_global == 2 # type: ignore assert lifespan_app.app_module.lifespan_context_global == 2
original_task_global_text = task_global.text original_task_global_text = task_global.text
original_task_global_value = int(original_task_global_text) original_task_global_value = int(original_task_global_text)
lifespan_app.poll_for_content(task_global, exp_not_equal=original_task_global_text) lifespan_app.poll_for_content(task_global, exp_not_equal=original_task_global_text)
driver.find_element(By.ID, "toggle-tick").click() # avoid teardown errors driver.find_element(By.ID, "toggle-tick").click() # avoid teardown errors
assert lifespan_app.app_module.lifespan_task_global > original_task_global_value # type: ignore assert lifespan_app.app_module.lifespan_task_global > original_task_global_value
assert int(task_global.text) > original_task_global_value assert int(task_global.text) > original_task_global_value
# Kill the backend # Kill the backend

View File

@ -31,8 +31,8 @@ def LoginSample():
yield rx.redirect("/") yield rx.redirect("/")
def index(): def index():
return rx.cond( return rx.cond( # pyright: ignore [reportCallIssue]
State.is_hydrated & State.auth_token, # type: ignore State.is_hydrated & State.auth_token, # pyright: ignore [reportOperatorIssue]
rx.vstack( rx.vstack(
rx.heading(State.auth_token, id="auth-token"), rx.heading(State.auth_token, id="auth-token"),
rx.button("Logout", on_click=State.logout, id="logout"), rx.button("Logout", on_click=State.logout, id="logout"),

View File

@ -19,7 +19,7 @@ def MediaApp():
def _blue(self, format=None) -> Image.Image: def _blue(self, format=None) -> Image.Image:
img = Image.new("RGB", (200, 200), "blue") img = Image.new("RGB", (200, 200), "blue")
if format is not None: if format is not None:
img.format = format # type: ignore img.format = format
return img return img
@rx.var @rx.var
@ -50,7 +50,7 @@ def MediaApp():
def img_from_url(self) -> Image.Image: def img_from_url(self) -> Image.Image:
img_url = "https://picsum.photos/id/1/200/300" img_url = "https://picsum.photos/id/1/200/300"
img_resp = httpx.get(img_url, follow_redirects=True) img_resp = httpx.get(img_url, follow_redirects=True)
return Image.open(img_resp) # type: ignore return Image.open(img_resp) # pyright: ignore [reportArgumentType]
app = rx.App() app = rx.App()

View File

@ -131,7 +131,7 @@ def StateInheritance():
rx.heading(Base1.child_mixin, id="base1-child-mixin"), rx.heading(Base1.child_mixin, id="base1-child-mixin"),
rx.button( rx.button(
"Base1.on_click_mixin", "Base1.on_click_mixin",
on_click=Base1.on_click_mixin, # type: ignore on_click=Base1.on_click_mixin,
id="base1-mixin-btn", id="base1-mixin-btn",
), ),
rx.heading( rx.heading(
@ -153,7 +153,7 @@ def StateInheritance():
rx.heading(Child1.child_mixin, id="child1-child-mixin"), rx.heading(Child1.child_mixin, id="child1-child-mixin"),
rx.button( rx.button(
"Child1.on_click_other_mixin", "Child1.on_click_other_mixin",
on_click=Child1.on_click_other_mixin, # type: ignore on_click=Child1.on_click_other_mixin,
id="child1-other-mixin-btn", id="child1-other-mixin-btn",
), ),
# Child 2 (Mixin, ChildMixin, OtherMixin) # Child 2 (Mixin, ChildMixin, OtherMixin)
@ -166,12 +166,12 @@ def StateInheritance():
rx.heading(Child2.child_mixin, id="child2-child-mixin"), rx.heading(Child2.child_mixin, id="child2-child-mixin"),
rx.button( rx.button(
"Child2.on_click_mixin", "Child2.on_click_mixin",
on_click=Child2.on_click_mixin, # type: ignore on_click=Child2.on_click_mixin,
id="child2-mixin-btn", id="child2-mixin-btn",
), ),
rx.button( rx.button(
"Child2.on_click_other_mixin", "Child2.on_click_other_mixin",
on_click=Child2.on_click_other_mixin, # type: ignore on_click=Child2.on_click_other_mixin,
id="child2-other-mixin-btn", id="child2-other-mixin-btn",
), ),
# Child 3 (Mixin, ChildMixin, OtherMixin) # Child 3 (Mixin, ChildMixin, OtherMixin)
@ -186,12 +186,12 @@ def StateInheritance():
rx.heading(Child3.child_mixin, id="child3-child-mixin"), rx.heading(Child3.child_mixin, id="child3-child-mixin"),
rx.button( rx.button(
"Child3.on_click_mixin", "Child3.on_click_mixin",
on_click=Child3.on_click_mixin, # type: ignore on_click=Child3.on_click_mixin,
id="child3-mixin-btn", id="child3-mixin-btn",
), ),
rx.button( rx.button(
"Child3.on_click_other_mixin", "Child3.on_click_other_mixin",
on_click=Child3.on_click_other_mixin, # type: ignore on_click=Child3.on_click_other_mixin,
id="child3-other-mixin-btn", id="child3-other-mixin-btn",
), ),
rx.heading( rx.heading(

View File

@ -80,7 +80,7 @@ def UploadFile():
), ),
rx.button( rx.button(
"Upload", "Upload",
on_click=lambda: UploadState.handle_upload(rx.upload_files()), # type: ignore on_click=lambda: UploadState.handle_upload(rx.upload_files()), # pyright: ignore [reportCallIssue]
id="upload_button", id="upload_button",
), ),
rx.box( rx.box(
@ -105,7 +105,7 @@ def UploadFile():
), ),
rx.button( rx.button(
"Upload", "Upload",
on_click=UploadState.handle_upload_secondary( # type: ignore on_click=UploadState.handle_upload_secondary( # pyright: ignore [reportCallIssue]
rx.upload_files( rx.upload_files(
upload_id="secondary", upload_id="secondary",
on_upload_progress=UploadState.upload_progress, on_upload_progress=UploadState.upload_progress,
@ -127,7 +127,7 @@ def UploadFile():
), ),
rx.vstack( rx.vstack(
rx.foreach( rx.foreach(
UploadState.progress_dicts, # type: ignore UploadState.progress_dicts,
lambda d: rx.text(d.to_string()), lambda d: rx.text(d.to_string()),
) )
), ),
@ -146,7 +146,7 @@ def UploadFile():
), ),
rx.button( rx.button(
"Upload", "Upload",
on_click=UploadState.handle_upload_tertiary( # type: ignore on_click=UploadState.handle_upload_tertiary( # pyright: ignore [reportCallIssue]
rx.upload_files( rx.upload_files(
upload_id="tertiary", upload_id="tertiary",
), ),

View File

@ -7,42 +7,38 @@ from selenium.webdriver.common.by import By
from reflex.testing import AppHarness from reflex.testing import AppHarness
# pyright: reportOptionalMemberAccess=false, reportGeneralTypeIssues=false, reportUnknownMemberType=false
def VarOperations(): def VarOperations():
"""App with var operations.""" """App with var operations."""
from typing import Dict, List
import reflex as rx import reflex as rx
from reflex.vars.base import LiteralVar from reflex.vars.base import LiteralVar
from reflex.vars.sequence import ArrayVar from reflex.vars.sequence import ArrayVar
class Object(rx.Base): class Object(rx.Base):
str: str = "hello" name: str = "hello"
class VarOperationState(rx.State): class VarOperationState(rx.State):
int_var1: int = 10 int_var1: rx.Field[int] = rx.field(10)
int_var2: int = 5 int_var2: rx.Field[int] = rx.field(5)
int_var3: int = 7 int_var3: rx.Field[int] = rx.field(7)
float_var1: float = 10.5 float_var1: rx.Field[float] = rx.field(10.5)
float_var2: float = 5.5 float_var2: rx.Field[float] = rx.field(5.5)
list1: List = [1, 2] list1: rx.Field[list] = rx.field([1, 2])
list2: List = [3, 4] list2: rx.Field[list] = rx.field([3, 4])
list3: List = ["first", "second", "third"] list3: rx.Field[list] = rx.field(["first", "second", "third"])
list4: List = [Object(name="obj_1"), Object(name="obj_2")] list4: rx.Field[list] = rx.field([Object(name="obj_1"), Object(name="obj_2")])
str_var1: str = "first" str_var1: rx.Field[str] = rx.field("first")
str_var2: str = "second" str_var2: rx.Field[str] = rx.field("second")
str_var3: str = "ThIrD" str_var3: rx.Field[str] = rx.field("ThIrD")
str_var4: str = "a long string" str_var4: rx.Field[str] = rx.field("a long string")
dict1: Dict[int, int] = {1: 2} dict1: rx.Field[dict[int, int]] = rx.field({1: 2})
dict2: Dict[int, int] = {3: 4} dict2: rx.Field[dict[int, int]] = rx.field({3: 4})
html_str: str = "<div>hello</div>" html_str: rx.Field[str] = rx.field("<div>hello</div>")
app = rx.App(_state=rx.State) app = rx.App(_state=rx.State)
@rx.memo @rx.memo
def memo_comp(list1: List[int], int_var1: int, id: str): def memo_comp(list1: list[int], int_var1: int, id: str):
return rx.text(list1, int_var1, id=id) return rx.text(list1, int_var1, id=id)
@rx.memo @rx.memo
@ -378,7 +374,8 @@ def VarOperations():
id="str_contains", id="str_contains",
), ),
rx.text( rx.text(
VarOperationState.str_var1 | VarOperationState.str_var1, id="str_or_str" VarOperationState.str_var1 | VarOperationState.str_var1,
id="str_or_str",
), ),
rx.text( rx.text(
VarOperationState.str_var1 & VarOperationState.str_var2, VarOperationState.str_var1 & VarOperationState.str_var2,
@ -394,7 +391,8 @@ def VarOperations():
id="str_and_int", id="str_and_int",
), ),
rx.text( rx.text(
VarOperationState.str_var1 | VarOperationState.int_var2, id="str_or_int" VarOperationState.str_var1 | VarOperationState.int_var2,
id="str_or_int",
), ),
rx.text( rx.text(
(VarOperationState.str_var1 == VarOperationState.int_var1).to_string(), (VarOperationState.str_var1 == VarOperationState.int_var1).to_string(),
@ -406,7 +404,8 @@ def VarOperations():
), ),
# STR, LIST # STR, LIST
rx.text( rx.text(
VarOperationState.str_var1 | VarOperationState.list1, id="str_or_list" VarOperationState.str_var1 | VarOperationState.list1,
id="str_or_list",
), ),
rx.text( rx.text(
(VarOperationState.str_var1 & VarOperationState.list1).to_string(), (VarOperationState.str_var1 & VarOperationState.list1).to_string(),
@ -422,7 +421,8 @@ def VarOperations():
), ),
# STR, DICT # STR, DICT
rx.text( rx.text(
VarOperationState.str_var1 | VarOperationState.dict1, id="str_or_dict" VarOperationState.str_var1 | VarOperationState.dict1,
id="str_or_dict",
), ),
rx.text( rx.text(
(VarOperationState.str_var1 & VarOperationState.dict1).to_string(), (VarOperationState.str_var1 & VarOperationState.dict1).to_string(),
@ -474,7 +474,8 @@ def VarOperations():
id="list_neq_list", id="list_neq_list",
), ),
rx.text( rx.text(
VarOperationState.list1.contains(1).to_string(), id="list_contains" VarOperationState.list1.contains(1).to_string(),
id="list_contains",
), ),
rx.text(VarOperationState.list4.pluck("name").to_string(), id="list_pluck"), rx.text(VarOperationState.list4.pluck("name").to_string(), id="list_pluck"),
rx.text(VarOperationState.list1.reverse().to_string(), id="list_reverse"), rx.text(VarOperationState.list1.reverse().to_string(), id="list_reverse"),
@ -534,7 +535,8 @@ def VarOperations():
id="dict_neq_dict", id="dict_neq_dict",
), ),
rx.text( rx.text(
VarOperationState.dict1.contains(1).to_string(), id="dict_contains" VarOperationState.dict1.contains(1).to_string(),
id="dict_contains",
), ),
rx.text(VarOperationState.str_var3.lower(), id="str_lower"), rx.text(VarOperationState.str_var3.lower(), id="str_lower"),
rx.text(VarOperationState.str_var3.upper(), id="str_upper"), rx.text(VarOperationState.str_var3.upper(), id="str_upper"),
@ -571,7 +573,7 @@ def VarOperations():
), ),
rx.box( rx.box(
rx.foreach( rx.foreach(
LiteralVar.create(list(range(0, 3))).to(ArrayVar, List[int]), LiteralVar.create(list(range(0, 3))).to(ArrayVar, list[int]),
lambda x: rx.foreach( lambda x: rx.foreach(
ArrayVar.range(x), ArrayVar.range(x),
lambda y: rx.text(VarOperationState.list1[y], as_="p"), lambda y: rx.text(VarOperationState.list1[y], as_="p"),

View File

@ -85,7 +85,7 @@ def light_mode_app(tmp_path_factory) -> Generator[AppHarness, None, None]:
""" """
with AppHarness.create( with AppHarness.create(
root=tmp_path_factory.mktemp("appearance_app"), root=tmp_path_factory.mktemp("appearance_app"),
app_source=DefaultLightModeApp, # type: ignore app_source=DefaultLightModeApp,
) as harness: ) as harness:
assert harness.app_instance is not None, "app is not running" assert harness.app_instance is not None, "app is not running"
yield harness yield harness
@ -104,7 +104,7 @@ def dark_mode_app(tmp_path_factory) -> Generator[AppHarness, None, None]:
""" """
with AppHarness.create( with AppHarness.create(
root=tmp_path_factory.mktemp("appearance_app"), root=tmp_path_factory.mktemp("appearance_app"),
app_source=DefaultDarkModeApp, # type: ignore app_source=DefaultDarkModeApp,
) as harness: ) as harness:
assert harness.app_instance is not None, "app is not running" assert harness.app_instance is not None, "app is not running"
yield harness yield harness
@ -123,7 +123,7 @@ def system_mode_app(tmp_path_factory) -> Generator[AppHarness, None, None]:
""" """
with AppHarness.create( with AppHarness.create(
root=tmp_path_factory.mktemp("appearance_app"), root=tmp_path_factory.mktemp("appearance_app"),
app_source=DefaultSystemModeApp, # type: ignore app_source=DefaultSystemModeApp,
) as harness: ) as harness:
assert harness.app_instance is not None, "app is not running" assert harness.app_instance is not None, "app is not running"
yield harness yield harness
@ -142,7 +142,7 @@ def color_toggle_app(tmp_path_factory) -> Generator[AppHarness, None, None]:
""" """
with AppHarness.create( with AppHarness.create(
root=tmp_path_factory.mktemp("appearance_app"), root=tmp_path_factory.mktemp("appearance_app"),
app_source=ColorToggleApp, # type: ignore app_source=ColorToggleApp,
) as harness: ) as harness:
assert harness.app_instance is not None, "app is not running" assert harness.app_instance is not None, "app is not running"
yield harness yield harness

View File

@ -54,7 +54,7 @@ def datetime_operations_app(tmp_path_factory) -> Generator[AppHarness, None, Non
""" """
with AppHarness.create( with AppHarness.create(
root=tmp_path_factory.mktemp("datetime_operations_app"), root=tmp_path_factory.mktemp("datetime_operations_app"),
app_source=DatetimeOperationsApp, # type: ignore app_source=DatetimeOperationsApp,
) as harness: ) as harness:
assert harness.app_instance is not None, "app is not running" assert harness.app_instance is not None, "app is not running"
yield harness yield harness

View File

@ -29,7 +29,7 @@ def LinkApp():
def link_app(tmp_path_factory) -> Generator[AppHarness, None, None]: def link_app(tmp_path_factory) -> Generator[AppHarness, None, None]:
with AppHarness.create( with AppHarness.create(
root=tmp_path_factory.mktemp("link_app"), root=tmp_path_factory.mktemp("link_app"),
app_source=LinkApp, # type: ignore app_source=LinkApp,
) as harness: ) as harness:
assert harness.app_instance is not None, "app is not running" assert harness.app_instance is not None, "app is not running"
yield harness yield harness

View File

@ -92,7 +92,7 @@ def test_compile_import_statement(
), ),
], ],
) )
def test_compile_imports(import_dict: ParsedImportDict, test_dicts: List[dict]): def test_compile_imports(import_dict: ParsedImportDict, test_dicts: list[dict]):
"""Test the compile_imports function. """Test the compile_imports function.
Args: Args:
@ -103,7 +103,7 @@ def test_compile_imports(import_dict: ParsedImportDict, test_dicts: List[dict]):
for import_dict, test_dict in zip(imports, test_dicts, strict=True): for import_dict, test_dict in zip(imports, test_dicts, strict=True):
assert import_dict["lib"] == test_dict["lib"] assert import_dict["lib"] == test_dict["lib"]
assert import_dict["default"] == test_dict["default"] assert import_dict["default"] == test_dict["default"]
assert sorted(import_dict["rest"]) == test_dict["rest"] # type: ignore assert sorted(import_dict["rest"]) == test_dict["rest"] # pyright: ignore [reportArgumentType]
def test_compile_stylesheets(tmp_path, mocker): def test_compile_stylesheets(tmp_path, mocker):
@ -198,7 +198,7 @@ def test_create_document_root():
assert isinstance(root, utils.Html) assert isinstance(root, utils.Html)
assert isinstance(root.children[0], utils.DocumentHead) assert isinstance(root.children[0], utils.DocumentHead)
# Default language. # Default language.
assert root.lang == "en" # type: ignore assert root.lang == "en" # pyright: ignore [reportAttributeAccessIssue]
# No children in head. # No children in head.
assert len(root.children[0].children) == 0 assert len(root.children[0].children) == 0
@ -208,13 +208,13 @@ def test_create_document_root():
utils.NextScript.create(src="bar.js"), utils.NextScript.create(src="bar.js"),
] ]
root = utils.create_document_root( root = utils.create_document_root(
head_components=comps, # type: ignore head_components=comps, # pyright: ignore [reportArgumentType]
html_lang="rx", html_lang="rx",
html_custom_attrs={"project": "reflex"}, html_custom_attrs={"project": "reflex"},
) )
# Two children in head. # Two children in head.
assert isinstance(root, utils.Html) assert isinstance(root, utils.Html)
assert len(root.children[0].children) == 2 assert len(root.children[0].children) == 2
assert root.lang == "rx" # type: ignore assert root.lang == "rx" # pyright: ignore [reportAttributeAccessIssue]
assert isinstance(root.custom_attrs, dict) assert isinstance(root.custom_attrs, dict)
assert root.custom_attrs == {"project": "reflex"} assert root.custom_attrs == {"project": "reflex"}

View File

@ -31,37 +31,37 @@ def create_color_var(color):
(create_color_var(rx.color("mint", 3)), '"var(--mint-3)"', Color), (create_color_var(rx.color("mint", 3)), '"var(--mint-3)"', Color),
(create_color_var(rx.color("mint", 3, True)), '"var(--mint-a3)"', Color), (create_color_var(rx.color("mint", 3, True)), '"var(--mint-a3)"', Color),
( (
create_color_var(rx.color(ColorState.color, ColorState.shade)), # type: ignore create_color_var(rx.color(ColorState.color, ColorState.shade)), # pyright: ignore [reportArgumentType]
f'("var(--"+{color_state_name!s}.color+"-"+(((__to_string) => __to_string.toString())({color_state_name!s}.shade))+")")', f'("var(--"+{color_state_name!s}.color+"-"+(((__to_string) => __to_string.toString())({color_state_name!s}.shade))+")")',
Color, Color,
), ),
( (
create_color_var( create_color_var(
rx.color(ColorState.color, ColorState.shade, ColorState.alpha) # type: ignore rx.color(ColorState.color, ColorState.shade, ColorState.alpha) # pyright: ignore [reportArgumentType]
), ),
f'("var(--"+{color_state_name!s}.color+"-"+({color_state_name!s}.alpha ? "a" : "")+(((__to_string) => __to_string.toString())({color_state_name!s}.shade))+")")', f'("var(--"+{color_state_name!s}.color+"-"+({color_state_name!s}.alpha ? "a" : "")+(((__to_string) => __to_string.toString())({color_state_name!s}.shade))+")")',
Color, Color,
), ),
( (
create_color_var(rx.color(f"{ColorState.color}", f"{ColorState.shade}")), # type: ignore create_color_var(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+")")',
Color, Color,
), ),
( (
create_color_var( create_color_var(
rx.color(f"{ColorState.color_part}ato", f"{ColorState.shade}") # type: ignore rx.color(f"{ColorState.color_part}ato", f"{ColorState.shade}") # pyright: ignore [reportArgumentType]
), ),
f'("var(--"+({color_state_name!s}.color_part+"ato")+"-"+{color_state_name!s}.shade+")")', f'("var(--"+({color_state_name!s}.color_part+"ato")+"-"+{color_state_name!s}.shade+")")',
Color, Color,
), ),
( (
create_color_var(f'{rx.color(ColorState.color, f"{ColorState.shade}")}'), # type: ignore 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}")}' # type: ignore 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,
@ -81,7 +81,7 @@ def test_color(color, expected, expected_type: Union[Type[str], Type[Color]]):
'(true ? "var(--mint-7)" : "var(--tomato-5)")', '(true ? "var(--mint-7)" : "var(--tomato-5)")',
), ),
( (
rx.cond(True, rx.color(ColorState.color), rx.color(ColorState.color, 5)), # type: ignore rx.cond(True, rx.color(ColorState.color), rx.color(ColorState.color, 5)), # pyright: ignore [reportArgumentType, reportCallIssue]
f'(true ? ("var(--"+{color_state_name!s}.color+"-7)") : ("var(--"+{color_state_name!s}.color+"-5)"))', f'(true ? ("var(--"+{color_state_name!s}.color+"-7)") : ("var(--"+{color_state_name!s}.color+"-5)"))',
), ),
( (
@ -89,7 +89,7 @@ def test_color(color, expected, expected_type: Union[Type[str], Type[Color]]):
"condition", "condition",
("first", rx.color("mint")), ("first", rx.color("mint")),
("second", rx.color("tomato", 5)), ("second", rx.color("tomato", 5)),
rx.color(ColorState.color, 2), # type: ignore rx.color(ColorState.color, 2), # pyright: ignore [reportArgumentType]
), ),
'(() => { switch (JSON.stringify("condition")) {case JSON.stringify("first"): return ("var(--mint-7)");' '(() => { switch (JSON.stringify("condition")) {case JSON.stringify("first"): return ("var(--mint-7)");'
' break;case JSON.stringify("second"): return ("var(--tomato-5)"); break;default: ' ' break;case JSON.stringify("second"): return ("var(--tomato-5)"); break;default: '
@ -98,9 +98,9 @@ def test_color(color, expected, expected_type: Union[Type[str], Type[Color]]):
( (
rx.match( rx.match(
"condition", "condition",
("first", rx.color(ColorState.color)), # type: ignore ("first", rx.color(ColorState.color)), # pyright: ignore [reportArgumentType]
("second", rx.color(ColorState.color, 5)), # type: ignore ("second", rx.color(ColorState.color, 5)), # pyright: ignore [reportArgumentType]
rx.color(ColorState.color, 2), # type: ignore rx.color(ColorState.color, 2), # pyright: ignore [reportArgumentType]
), ),
'(() => { switch (JSON.stringify("condition")) {case JSON.stringify("first"): ' '(() => { switch (JSON.stringify("condition")) {case JSON.stringify("first"): '
f'return (("var(--"+{color_state_name!s}.color+"-7)")); break;case JSON.stringify("second"): ' f'return (("var(--"+{color_state_name!s}.color+"-7)")); break;case JSON.stringify("second"): '
@ -133,4 +133,4 @@ def test_radix_color(color, expected):
expected (str): The expected custom_style string, radix or literal expected (str): The expected custom_style string, radix or literal
""" """
code_block = CodeBlock.create("Hello World", background_color=color) code_block = CodeBlock.create("Hello World", background_color=color)
assert str(code_block.custom_style["backgroundColor"]) == expected # type: ignore assert str(code_block.custom_style["backgroundColor"]) == expected # pyright: ignore [reportAttributeAccessIssue]

View File

@ -14,7 +14,7 @@ from reflex.vars.base import LiteralVar, Var, computed_var
@pytest.fixture @pytest.fixture
def cond_state(request): def cond_state(request):
class CondState(BaseState): class CondState(BaseState):
value: request.param["value_type"] = request.param["value"] # noqa value: request.param["value_type"] = request.param["value"] # pyright: ignore [reportInvalidTypeForm, reportUndefinedVariable] # noqa: F821
return CondState return CondState
@ -112,13 +112,13 @@ def test_cond_no_else():
assert isinstance(comp, Fragment) assert isinstance(comp, Fragment)
comp = comp.children[0] comp = comp.children[0]
assert isinstance(comp, Cond) assert isinstance(comp, Cond)
assert comp.cond._decode() is True # type: ignore assert comp.cond._decode() is True
assert comp.comp1.render() == Fragment.create(Text.create("hello")).render() assert comp.comp1.render() == Fragment.create(Text.create("hello")).render() # pyright: ignore [reportOptionalMemberAccess]
assert comp.comp2 == Fragment.create() assert comp.comp2 == Fragment.create()
# Props do not support the use of cond without else # Props do not support the use of cond without else
with pytest.raises(ValueError): with pytest.raises(ValueError):
cond(True, "hello") # type: ignore cond(True, "hello") # pyright: ignore [reportArgumentType]
def test_cond_computed_var(): def test_cond_computed_var():

View File

@ -16,7 +16,7 @@ def test_html_many_children():
def test_html_create(): def test_html_create():
html = Html.create("<p>Hello !</p>") html = Html.create("<p>Hello !</p>")
assert str(html.dangerouslySetInnerHTML) == '({ ["__html"] : "<p>Hello !</p>" })' # type: ignore assert str(html.dangerouslySetInnerHTML) == '({ ["__html"] : "<p>Hello !</p>" })' # pyright: ignore [reportAttributeAccessIssue]
assert ( assert (
str(html) str(html)
== '<div className={"rx-Html"} dangerouslySetInnerHTML={({ ["__html"] : "<p>Hello !</p>" })}/>' == '<div className={"rx-Html"} dangerouslySetInnerHTML={({ ["__html"] : "<p>Hello !</p>" })}/>'
@ -32,10 +32,10 @@ def test_html_fstring_create():
html = Html.create(f"<p>Hello {TestState.myvar}!</p>") html = Html.create(f"<p>Hello {TestState.myvar}!</p>")
assert ( assert (
str(html.dangerouslySetInnerHTML) # type: ignore str(html.dangerouslySetInnerHTML) # pyright: ignore [reportAttributeAccessIssue]
== f'({{ ["__html"] : ("<p>Hello "+{TestState.myvar!s}+"!</p>") }})' == f'({{ ["__html"] : ("<p>Hello "+{TestState.myvar!s}+"!</p>") }})'
) )
assert ( assert (
str(html) str(html)
== f'<div className={{"rx-Html"}} dangerouslySetInnerHTML={{{html.dangerouslySetInnerHTML!s}}}/>' # type: ignore == f'<div className={{"rx-Html"}} dangerouslySetInnerHTML={{{html.dangerouslySetInnerHTML!s}}}/>' # pyright: ignore [reportAttributeAccessIssue]
) )

View File

@ -29,7 +29,7 @@ def test_match_components():
rx.text("default value"), rx.text("default value"),
) )
match_comp = Match.create(MatchState.value, *match_case_tuples) match_comp = Match.create(MatchState.value, *match_case_tuples)
match_dict = match_comp.render() # type: ignore match_dict = match_comp.render()
assert match_dict["name"] == "Fragment" assert match_dict["name"] == "Fragment"
[match_child] = match_dict["children"] [match_child] = match_dict["children"]
@ -151,7 +151,7 @@ def test_match_on_component_without_default():
) )
match_comp = Match.create(MatchState.value, *match_case_tuples) match_comp = Match.create(MatchState.value, *match_case_tuples)
default = match_comp.render()["children"][0]["default"] # type: ignore default = match_comp.render()["children"][0]["default"]
assert isinstance(default, Fragment) assert isinstance(default, Fragment)

View File

@ -5,7 +5,7 @@ from reflex.components.core.upload import (
StyledUpload, StyledUpload,
Upload, Upload,
UploadNamespace, UploadNamespace,
_on_drop_spec, # type: ignore _on_drop_spec, # pyright: ignore [reportAttributeAccessIssue]
cancel_upload, cancel_upload,
get_upload_url, get_upload_url,
) )
@ -60,7 +60,7 @@ def test_upload_create():
up_comp_2 = Upload.create( up_comp_2 = Upload.create(
id="foo_id", id="foo_id",
on_drop=UploadStateTest.drop_handler([]), # type: ignore on_drop=UploadStateTest.drop_handler([]),
) )
assert isinstance(up_comp_2, Upload) assert isinstance(up_comp_2, Upload)
assert up_comp_2.is_used assert up_comp_2.is_used
@ -80,7 +80,7 @@ def test_upload_create():
up_comp_4 = Upload.create( up_comp_4 = Upload.create(
id="foo_id", id="foo_id",
on_drop=UploadStateTest.not_drop_handler([]), # type: ignore on_drop=UploadStateTest.not_drop_handler([]),
) )
assert isinstance(up_comp_4, Upload) assert isinstance(up_comp_4, Upload)
assert up_comp_4.is_used assert up_comp_4.is_used
@ -96,7 +96,7 @@ def test_styled_upload_create():
styled_up_comp_2 = StyledUpload.create( styled_up_comp_2 = StyledUpload.create(
id="foo_id", id="foo_id",
on_drop=UploadStateTest.drop_handler([]), # type: ignore on_drop=UploadStateTest.drop_handler([]),
) )
assert isinstance(styled_up_comp_2, StyledUpload) assert isinstance(styled_up_comp_2, StyledUpload)
assert styled_up_comp_2.is_used assert styled_up_comp_2.is_used
@ -116,7 +116,7 @@ def test_styled_upload_create():
styled_up_comp_4 = StyledUpload.create( styled_up_comp_4 = StyledUpload.create(
id="foo_id", id="foo_id",
on_drop=UploadStateTest.not_drop_handler([]), # type: ignore on_drop=UploadStateTest.not_drop_handler([]),
) )
assert isinstance(styled_up_comp_4, StyledUpload) assert isinstance(styled_up_comp_4, StyledUpload)
assert styled_up_comp_4.is_used assert styled_up_comp_4.is_used

View File

@ -10,4 +10,4 @@ from reflex.components.datadisplay.code import CodeBlock, Theme
def test_code_light_dark_theme(theme, expected): def test_code_light_dark_theme(theme, expected):
code_block = CodeBlock.create(theme=theme) code_block = CodeBlock.create(theme=theme)
assert code_block.theme._js_expr == expected # type: ignore assert code_block.theme._js_expr == expected # pyright: ignore [reportAttributeAccessIssue]

View File

@ -14,7 +14,8 @@ from reflex.utils.serializers import serialize, serialize_dataframe
pytest.param( pytest.param(
{ {
"data": pd.DataFrame( "data": pd.DataFrame(
[["foo", "bar"], ["foo1", "bar1"]], columns=["column1", "column2"] [["foo", "bar"], ["foo1", "bar1"]],
columns=["column1", "column2"], # pyright: ignore [reportArgumentType]
) )
}, },
"data", "data",
@ -114,7 +115,8 @@ def test_computed_var_without_annotation(fixture, request, err_msg, is_data_fram
def test_serialize_dataframe(): def test_serialize_dataframe():
"""Test if dataframe is serialized correctly.""" """Test if dataframe is serialized correctly."""
df = pd.DataFrame( df = pd.DataFrame(
[["foo", "bar"], ["foo1", "bar1"]], columns=["column1", "column2"] [["foo", "bar"], ["foo1", "bar1"]],
columns=["column1", "column2"], # pyright: ignore [reportArgumentType]
) )
value = serialize(df) value = serialize(df)
assert value == serialize_dataframe(df) assert value == serialize_dataframe(df)

View File

@ -95,7 +95,7 @@ def test_create_shiki_code_block(
# Test that the first child is the code # Test that the first child is the code
code_block_component = component.children[0] code_block_component = component.children[0]
assert code_block_component.code._var_value == expected_first_child # type: ignore assert code_block_component.code._var_value == expected_first_child # pyright: ignore [reportAttributeAccessIssue]
applied_styles = component.style applied_styles = component.style
for key, value in expected_styles.items(): for key, value in expected_styles.items():
@ -128,12 +128,12 @@ def test_create_shiki_high_level_code_block(
# Test that the first child is the code block component # Test that the first child is the code block component
code_block_component = component.children[0] code_block_component = component.children[0]
assert code_block_component.code._var_value == children[0] # type: ignore assert code_block_component.code._var_value == children[0] # pyright: ignore [reportAttributeAccessIssue]
# Check if the transformer is set correctly if expected # Check if the transformer is set correctly if expected
if expected_transformers: if expected_transformers:
exp_trans_names = [t.__name__ for t in expected_transformers] exp_trans_names = [t.__name__ for t in expected_transformers]
for transformer in code_block_component.transformers._var_value: # type: ignore for transformer in code_block_component.transformers._var_value: # pyright: ignore [reportAttributeAccessIssue]
assert type(transformer).__name__ in exp_trans_names assert type(transformer).__name__ in exp_trans_names
# Check if the second child is the copy button if can_copy is True # Check if the second child is the copy button if can_copy is True
@ -161,12 +161,12 @@ def test_shiki_high_level_code_block_theme_language_mapping(children, props):
if "theme" in props: if "theme" in props:
assert component.children[ assert component.children[
0 0
].theme._var_value == ShikiHighLevelCodeBlock._map_themes(props["theme"]) # type: ignore ].theme._var_value == ShikiHighLevelCodeBlock._map_themes(props["theme"]) # pyright: ignore [reportAttributeAccessIssue]
# Test that the language is mapped correctly # Test that the language is mapped correctly
if "language" in props: if "language" in props:
assert component.children[ assert component.children[
0 0
].language._var_value == ShikiHighLevelCodeBlock._map_languages( # type: ignore ].language._var_value == ShikiHighLevelCodeBlock._map_languages( # pyright: ignore [reportAttributeAccessIssue]
props["language"] props["language"]
) )

View File

@ -10,7 +10,7 @@ def test_render_on_submit():
_var_type=EventChain, _var_type=EventChain,
) )
f = Form.create(on_submit=submit_it) f = Form.create(on_submit=submit_it)
exp_submit_name = f"handleSubmit_{f.handle_submit_unique_name}" # type: ignore exp_submit_name = f"handleSubmit_{f.handle_submit_unique_name}" # pyright: ignore [reportAttributeAccessIssue]
assert f"onSubmit={{{exp_submit_name}}}" in f.render()["props"] assert f"onSubmit={{{exp_submit_name}}}" in f.render()["props"]

Some files were not shown because too many files have changed in this diff Show More