From 4c9ac7f3de37c23444cd5805347b8fcafed817da Mon Sep 17 00:00:00 2001 From: Yannik Tausch Date: Tue, 15 Jul 2025 19:00:44 +0200 Subject: [PATCH 1/5] feat: Expose NoUpdate type --- dash/__init__.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dash/__init__.py b/dash/__init__.py index 6909c3aa7e..f74a5e713c 100644 --- a/dash/__init__.py +++ b/dash/__init__.py @@ -19,7 +19,7 @@ from . import dash_table # noqa: F401,E402 from .version import __version__ # noqa: F401,E402 from ._callback_context import callback_context, set_props # noqa: F401,E402 -from ._callback import callback, clientside_callback # noqa: F401,E402 +from ._callback import callback, clientside_callback, NoUpdate # noqa: F401,E402 from ._get_app import get_app # noqa: F401,E402 from ._get_paths import ( # noqa: F401,E402 get_asset_url, @@ -86,6 +86,7 @@ def _jupyter_nbextension_paths(): "page_registry", "Dash", "no_update", + "NoUpdate", "page_container", "Patch", "jupyter_dash", From bd086dc41368679a4ebc65cd3e09fc024d66aa6b Mon Sep 17 00:00:00 2001 From: Yannik Tausch Date: Tue, 15 Jul 2025 19:06:28 +0200 Subject: [PATCH 2/5] add to changelog --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 16d4fee49f..d1c77b3709 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,9 @@ This project adheres to [Semantic Versioning](https://semver.org/). ## [UNRELEASED] +## Added +- [#3369](https://github.com/plotly/dash/pull/3369) Expose `dash.NoUpdate` type + ## Fixed - [#3353](https://github.com/plotly/dash/pull/3353) Support pattern-matching/dict ids in `dcc.Loading` `target_components` From d07e522f200e527cc7f7770b2ca283aad0be351a Mon Sep 17 00:00:00 2001 From: Yannik Tausch Date: Wed, 16 Jul 2025 17:34:57 +0200 Subject: [PATCH 3/5] fix import NoUpdate --- dash/__init__.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dash/__init__.py b/dash/__init__.py index f74a5e713c..6f16a068aa 100644 --- a/dash/__init__.py +++ b/dash/__init__.py @@ -19,13 +19,14 @@ from . import dash_table # noqa: F401,E402 from .version import __version__ # noqa: F401,E402 from ._callback_context import callback_context, set_props # noqa: F401,E402 -from ._callback import callback, clientside_callback, NoUpdate # noqa: F401,E402 +from ._callback import callback, clientside_callback # noqa: F401,E402 from ._get_app import get_app # noqa: F401,E402 from ._get_paths import ( # noqa: F401,E402 get_asset_url, get_relative_path, strip_relative_path, ) +from ._no_update import NoUpdate # noqa: F401,E402 from .background_callback import ( # noqa: F401,E402 CeleryManager, DiskcacheManager, From 9827157cf5f1215712e135e137d9eea4f0a5e913 Mon Sep 17 00:00:00 2001 From: Yannik Tausch Date: Wed, 16 Jul 2025 17:40:06 +0200 Subject: [PATCH 4/5] add obj is NoUpdate --- dash/_no_update.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dash/_no_update.py b/dash/_no_update.py index b86004de72..9eb8cfb825 100644 --- a/dash/_no_update.py +++ b/dash/_no_update.py @@ -4,6 +4,6 @@ def to_plotly_json(self): # pylint: disable=no-self-use @staticmethod def is_no_update(obj): - return isinstance(obj, NoUpdate) or ( + return obj is NoUpdate or isinstance(obj, NoUpdate) or ( isinstance(obj, dict) and obj == {"_dash_no_update": "_dash_no_update"} ) From 3b3324cd88f4eebae463f5a43b9b78f7223ffa11 Mon Sep 17 00:00:00 2001 From: Yannik Tausch Date: Thu, 17 Jul 2025 10:14:57 +0200 Subject: [PATCH 5/5] chore: Format --- dash/_no_update.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/dash/_no_update.py b/dash/_no_update.py index 9eb8cfb825..778ccd5948 100644 --- a/dash/_no_update.py +++ b/dash/_no_update.py @@ -4,6 +4,8 @@ def to_plotly_json(self): # pylint: disable=no-self-use @staticmethod def is_no_update(obj): - return obj is NoUpdate or isinstance(obj, NoUpdate) or ( - isinstance(obj, dict) and obj == {"_dash_no_update": "_dash_no_update"} + return ( + obj is NoUpdate + or isinstance(obj, NoUpdate) + or (isinstance(obj, dict) and obj == {"_dash_no_update": "_dash_no_update"}) )