From 00a1b56852570fc1e6704e7c6011b55480b00ff9 Mon Sep 17 00:00:00 2001 From: Greg Wilson Date: Thu, 22 May 2025 14:47:17 -0400 Subject: [PATCH] feat: restore type checking portion of code generation - Restore code removed in #4978. - (Partially) closes #5186. --- codegen/__init__.py | 40 ++++++++++++++++++++++++++-------------- codegen/utils.py | 16 ++++++++++------ 2 files changed, 36 insertions(+), 20 deletions(-) diff --git a/codegen/__init__.py b/codegen/__init__.py index d3bb05f2ec4..b86b5be8b62 100644 --- a/codegen/__init__.py +++ b/codegen/__init__.py @@ -271,24 +271,36 @@ def perform_codegen(reformat=True): root_datatype_imports.append(f"._deprecations.{dep_clas}") optional_figure_widget_import = f""" -__all__.append("FigureWidget") -orig_getattr = __getattr__ -def __getattr__(import_name): - if import_name == "FigureWidget": - try: - import ipywidgets - from packaging.version import Version - - if Version(ipywidgets.__version__) >= Version("7.0.0"): - from ..graph_objs._figurewidget import FigureWidget +if sys.version_info < (3, 7) or TYPE_CHECKING: + try: + import ipywidgets as _ipywidgets + from packaging.version import Version as _Version + if _Version(_ipywidgets.__version__) >= _Version("7.0.0"): + from ..graph_objs._figurewidget import FigureWidget + else: + raise ImportError() + except Exception: + from ..missing_anywidget import FigureWidget +else: + __all__.append("FigureWidget") + orig_getattr = __getattr__ + def __getattr__(import_name): + if import_name == "FigureWidget": + try: + import ipywidgets + from packaging.version import Version + if Version(ipywidgets.__version__) >= Version("7.0.0"): + from ..graph_objs._figurewidget import FigureWidget + return FigureWidget + else: + raise ImportError() + except Exception: + from ..missing_anywidget import FigureWidget return FigureWidget else: raise ImportError() - except Exception: - from ..missing_anywidget import FigureWidget - return FigureWidget - return orig_getattr(import_name) + return orig_getattr(import_name) """ # ### __all__ ### for path_parts, class_names in alls.items(): diff --git a/codegen/utils.py b/codegen/utils.py index 8c68d017c00..09468b10068 100644 --- a/codegen/utils.py +++ b/codegen/utils.py @@ -82,12 +82,16 @@ def build_from_imports_py(rel_modules=(), rel_classes=(), init_extra=""): result = f"""\ import sys -from _plotly_utils.importers import relative_import -__all__, __getattr__, __dir__ = relative_import( - __name__, - {repr(rel_modules)}, - {repr(rel_classes)} -) +from typing import TYPE_CHECKING +if sys.version_info < (3, 7) or TYPE_CHECKING: + {imports_str} +else: + from _plotly_utils.importers import relative_import + __all__, __getattr__, __dir__ = relative_import( + __name__, + {repr(rel_modules)}, + {repr(rel_classes)} + ) {init_extra} """