Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ This project adheres to [Semantic Versioning](https://semver.org/).

### Removed
- [#3646](https://github.com/plotly/dash/pull/3646) Remove React 16 support (`16.14.0` is no longer an accepted value for `REACT_VERSION` / `_set_react_version`).
- [#4039](https://github.com/plotly/dash/pull/4039) Remove unnecessary Python version checks (pre 3.9).

### Changed
- [#3987](https://github.com/plotly/dash/pull/3987) Forward FastAPI reload scope options (`reload_dirs`, `reload_excludes`, and `reload_includes`) to Uvicorn when reloading.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import sys
import json
import hashlib
import itertools
Expand Down Expand Up @@ -120,10 +119,6 @@ def on_ts(ts, data):
assert dash_dcc.get_logs() == []


@pytest.mark.skipif(
sys.version_info < (3, 6),
reason="tests requires dependency only available in 3.6+",
)
@pytest.mark.parametrize("storage_type", ("memory", "local", "session"))
def test_stda003_large_data_size(storage_type, csv_5mb, dash_dcc):
def fingerprint(data):
Expand Down
8 changes: 3 additions & 5 deletions dash/_hooks.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@

from importlib import metadata as _importlib_metadata

import typing_extensions as _tx

from .exceptions import HookError
from .resources import ResourceType
from ._callback import ClientsideFuncType
Expand All @@ -20,12 +18,12 @@
Dash = None


HookDataType = _tx.TypeVar("HookDataType")
DevtoolPosition = _tx.Literal["right", "left"]
HookDataType = _t.TypeVar("HookDataType")
DevtoolPosition = _t.Literal["right", "left"]


# pylint: disable=too-few-public-methods
class _Hook(_tx.Generic[HookDataType]):
class _Hook(_t.Generic[HookDataType]):
def __init__(
self, func, priority=0, final=False, data: _t.Optional[HookDataType] = None
):
Expand Down
3 changes: 1 addition & 2 deletions dash/_jupyter.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,7 @@
import threading
import time

from typing import Optional, Any
from typing_extensions import Literal
from typing import Optional, Any, Literal

from werkzeug.serving import make_server

Expand Down
18 changes: 1 addition & 17 deletions dash/development/component_generator.py
Original file line number Diff line number Diff line change
Expand Up @@ -173,10 +173,7 @@ def generate_components(


def safe_json_loads(s):
jsondata_unicode = json.loads(s, object_pairs_hook=OrderedDict)
if sys.version_info[0] >= 3:
return jsondata_unicode
return byteify(jsondata_unicode)
return json.loads(s, object_pairs_hook=OrderedDict)


def component_build_arg_parser():
Expand Down Expand Up @@ -282,18 +279,5 @@ def cli():
)


# pylint: disable=undefined-variable
def byteify(input_object):
if isinstance(input_object, dict):
return OrderedDict(
[(byteify(key), byteify(value)) for key, value in input_object.items()]
)
if isinstance(input_object, list):
return [byteify(element) for element in input_object]
if isinstance(input_object, str): # noqa:F821
return input_object.encode(encoding="utf-8")
return input_object


if __name__ == "__main__":
cli()
4 changes: 2 additions & 2 deletions dash/mcp/primitives/tools/tool_get_dash_component.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@
from __future__ import annotations

import json
from typing import Any
from typing import Annotated, Any

from pydantic import Field, TypeAdapter
from typing_extensions import Annotated, NotRequired, TypedDict
from typing_extensions import NotRequired, TypedDict

from dash import get_app
from dash._layout_utils import find_component
Expand Down
3 changes: 1 addition & 2 deletions dash/resources.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,13 @@
import os

import typing as _t
import typing_extensions as _tx


from .development.base_component import ComponentRegistry
from . import exceptions

# ResourceType has `async` key, use the init form to be able to provide it.
ResourceType = _tx.TypedDict(
ResourceType = _t.TypedDict(
"ResourceType",
{
"namespace": str,
Expand Down
4 changes: 2 additions & 2 deletions dash/types.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import typing
from typing import Any, Dict, List, Union
from typing import Annotated, Any, Dict, List, Union

from pydantic import Field, GetCoreSchemaHandler, GetJsonSchemaHandler
from pydantic_core import core_schema
from typing_extensions import Annotated, TypedDict, NotRequired
from typing_extensions import TypedDict, NotRequired


class _NumberSchema: # pylint: disable=too-few-public-methods
Expand Down
2 changes: 1 addition & 1 deletion requirements/ci.txt
Original file line number Diff line number Diff line change
Expand Up @@ -22,5 +22,5 @@ xlrd>=2.0.1
pytest-rerunfailures
pytest-timeout
jupyterlab<4.0.0
pyright==1.1.411;python_version>="3.7"
pyright==1.1.411
mypy==1.15.0;python_version>="3.12"
5 changes: 0 additions & 5 deletions tests/async_tests/test_async_background_callbacks.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
import sys
import time
from multiprocessing import Lock

import pytest
from flaky import flaky

from tests.utils import is_dash_async
Expand Down Expand Up @@ -34,9 +32,6 @@ def test_001ab_arbitrary(dash_duo, manager):
dash_duo.wait_for_text_to_equal("#no-output", "completed")


@pytest.mark.skipif(
sys.version_info < (3, 7), reason="Python 3.6 long callbacks tests hangs up"
)
@flaky(max_runs=3)
def test_002ab_basic(dash_duo, manager):
"""
Expand Down
5 changes: 0 additions & 5 deletions tests/background_callback/test_basic_long_callback001.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,10 @@
import sys
from multiprocessing import Lock

import pytest
from flaky import flaky

from .utils import setup_background_callback_app


@pytest.mark.skipif(
sys.version_info < (3, 7), reason="Python 3.6 long callbacks tests hangs up"
)
@flaky(max_runs=3)
def test_lcbc001_fast_input(dash_duo, manager):
"""
Expand Down
6 changes: 0 additions & 6 deletions tests/background_callback/test_basic_long_callback002.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,8 @@
import sys

import pytest
from flaky import flaky

from tests.background_callback.utils import setup_background_callback_app


@pytest.mark.skipif(
sys.version_info < (3, 7), reason="Python 3.6 long callbacks tests hangs up"
)
@flaky(max_runs=3)
def test_lcbc002_long_callback_running(dash_duo, manager):
with setup_background_callback_app(manager, "app2") as app:
Expand Down
5 changes: 0 additions & 5 deletions tests/background_callback/test_basic_long_callback003.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,10 @@
import sys
from multiprocessing import Lock

import pytest
from flaky import flaky

from tests.background_callback.utils import setup_background_callback_app


@pytest.mark.skipif(
sys.version_info < (3, 7), reason="Python 3.6 long callbacks tests hangs up"
)
@flaky(max_runs=3)
def test_lcbc003_long_callback_running_cancel(dash_duo, manager):
lock = Lock()
Expand Down
6 changes: 0 additions & 6 deletions tests/background_callback/test_basic_long_callback004.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,8 @@
import sys

import pytest
from flaky import flaky

from tests.background_callback.utils import setup_background_callback_app


@pytest.mark.skipif(
sys.version_info < (3, 7), reason="Python 3.6 long callbacks tests hangs up"
)
@flaky(max_runs=3)
def test_lcbc004_long_callback_progress(dash_duo, manager):
with setup_background_callback_app(manager, "app4") as app:
Expand Down
4 changes: 0 additions & 4 deletions tests/background_callback/test_basic_long_callback005.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,10 @@
import sys
from multiprocessing import Lock

import pytest

from tests.background_callback.utils import setup_background_callback_app


@pytest.mark.skipif(
sys.version_info < (3, 7), reason="Python 3.6 long callbacks tests hangs up"
)
@pytest.mark.skip(reason="Timeout often")
def test_lcbc005_long_callback_caching(dash_duo, manager):
lock = Lock()
Expand Down
5 changes: 0 additions & 5 deletions tests/background_callback/test_basic_long_callback006.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,10 @@
import sys
from multiprocessing import Lock

import pytest
from flaky import flaky

from tests.background_callback.utils import setup_background_callback_app


@pytest.mark.skipif(
sys.version_info < (3, 7), reason="Python 3.6 long callbacks tests hangs up"
)
@flaky(max_runs=3)
def test_lcbc006_long_callback_caching_multi(dash_duo, manager):
lock = Lock()
Expand Down
6 changes: 0 additions & 6 deletions tests/background_callback/test_basic_long_callback007.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,8 @@
import sys

import pytest
from flaky import flaky

from tests.background_callback.utils import setup_background_callback_app


@pytest.mark.skipif(
sys.version_info < (3, 7), reason="Python 3.6 long callbacks tests hangs up"
)
@flaky(max_runs=3)
def test_lcbc007_validation_layout(dash_duo, manager):
with setup_background_callback_app(manager, "app7") as app:
Expand Down
7 changes: 0 additions & 7 deletions tests/background_callback/test_basic_long_callback008.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,6 @@
import sys

import pytest

from tests.background_callback.utils import setup_background_callback_app


@pytest.mark.skipif(
sys.version_info < (3, 7), reason="Python 3.6 long callbacks tests hangs up"
)
def test_lcbc008_long_callbacks_error(dash_duo, manager):
with setup_background_callback_app(manager, "app_error") as app:
dash_duo.start_server(
Expand Down
5 changes: 0 additions & 5 deletions tests/background_callback/test_basic_long_callback009.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,9 @@
import sys
import time

import pytest

from tests.background_callback.utils import setup_background_callback_app


@pytest.mark.skipif(
sys.version_info < (3, 7), reason="Python 3.6 long callbacks tests hangs up"
)
def test_lcbc009_short_interval(dash_duo, manager):
with setup_background_callback_app(manager, "app_short_interval") as app:
dash_duo.start_server(app)
Expand Down
7 changes: 0 additions & 7 deletions tests/background_callback/test_basic_long_callback010.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,6 @@
import sys

import pytest

from tests.background_callback.utils import setup_background_callback_app


@pytest.mark.skipif(
sys.version_info < (3, 7), reason="Python 3.6 long callbacks tests hangs up"
)
def test_lcbc010_side_updates(dash_duo, manager):
with setup_background_callback_app(manager, "app_side_update") as app:
dash_duo.start_server(app)
Expand Down
7 changes: 0 additions & 7 deletions tests/background_callback/test_basic_long_callback011.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,6 @@
import sys

import pytest

from tests.background_callback.utils import setup_background_callback_app


@pytest.mark.skipif(
sys.version_info < (3, 7), reason="Python 3.6 long callbacks tests hangs up"
)
def test_lcbc011_long_pattern_matching(dash_duo, manager):
with setup_background_callback_app(manager, "app_pattern_matching") as app:
dash_duo.start_server(app)
Expand Down
5 changes: 0 additions & 5 deletions tests/background_callback/test_basic_long_callback012.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,9 @@
import json
import sys

import pytest

from tests.background_callback.utils import setup_background_callback_app


@pytest.mark.skipif(
sys.version_info < (3, 7), reason="Python 3.6 long callbacks tests hangs up"
)
def test_lcbc012_long_callback_ctx(dash_duo, manager):
with setup_background_callback_app(manager, "app_callback_ctx") as app:
dash_duo.start_server(app)
Expand Down
7 changes: 0 additions & 7 deletions tests/background_callback/test_basic_long_callback013.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,6 @@
import sys

import pytest

from tests.background_callback.utils import setup_background_callback_app


@pytest.mark.skipif(
sys.version_info < (3, 7), reason="Python 3.6 long callbacks tests hangs up"
)
def test_lcbc013_unordered_state_input(dash_duo, manager):
with setup_background_callback_app(manager, "app_unordered") as app:
dash_duo.start_server(app)
Expand Down
7 changes: 0 additions & 7 deletions tests/background_callback/test_basic_long_callback014.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,6 @@
import sys

import pytest

from tests.background_callback.utils import setup_background_callback_app


@pytest.mark.skipif(
sys.version_info < (3, 7), reason="Python 3.6 long callbacks tests hangs up"
)
def test_lcbc014_progress_delete(dash_duo, manager):
with setup_background_callback_app(manager, "app_progress_delete") as app:
dash_duo.start_server(app)
Expand Down
7 changes: 0 additions & 7 deletions tests/background_callback/test_basic_long_callback015.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,6 @@
import sys

import pytest

from tests.background_callback.utils import setup_background_callback_app


@pytest.mark.skipif(
sys.version_info < (3, 7), reason="Python 3.6 long callbacks tests hangs up"
)
def test_lcbc015_diff_outputs_same_func(dash_duo, manager):
with setup_background_callback_app(manager, "app_diff_outputs") as app:
dash_duo.start_server(app)
Expand Down
6 changes: 0 additions & 6 deletions tests/background_callback/test_basic_long_callback016.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,8 @@
import sys

import pytest
from flaky import flaky

from tests.background_callback.utils import setup_background_callback_app


@pytest.mark.skipif(
sys.version_info < (3, 9), reason="Python 3.8 long callbacks tests hangs up"
)
@flaky(max_runs=3)
def test_lcbc016_multi_page_cancel(dash_duo, manager):
with setup_background_callback_app(manager, "app_page_cancel") as app:
Expand Down
Loading
Loading