From 2864c0789dbb632edb392d5617d6415be586c18e Mon Sep 17 00:00:00 2001 From: dangotbanned <125183946+dangotbanned@users.noreply.github.com> Date: Tue, 16 Jul 2024 15:53:58 +0100 Subject: [PATCH 01/18] feat: generate an `__all__` for `channels.py` This missing is the main source of unpredictable imports. I've explicitly not included the `Mixin` classes, side effect imports (e.g. `Undefined`, `parse_shorthand`, `@overload`) and `@with_property_setters` --- tools/generate_schema_wrapper.py | 64 ++++++++++++++++++++------------ 1 file changed, 40 insertions(+), 24 deletions(-) diff --git a/tools/generate_schema_wrapper.py b/tools/generate_schema_wrapper.py index 462029f81..98465766e 100644 --- a/tools/generate_schema_wrapper.py +++ b/tools/generate_schema_wrapper.py @@ -9,7 +9,8 @@ import sys import textwrap from dataclasses import dataclass -from typing import Final, Iterable, Literal +from typing import Final, Iterable, Literal, Iterator +from itertools import chain from urllib import request import m2r @@ -555,6 +556,15 @@ class ChannelInfo: datum_class_name: str | None = None value_class_name: str | None = None + @property + def all_names(self) -> Iterator[str]: + if self.field_class_name: + yield self.field_class_name + if self.datum_class_name: + yield self.datum_class_name + if self.value_class_name: + yield self.value_class_name + def generate_vegalite_channel_wrappers( schemafile: Path, version: str, imports: list[str] | None = None @@ -562,34 +572,14 @@ def generate_vegalite_channel_wrappers( # TODO: generate __all__ for top of file schema = load_schema_with_shorthand_properties(schemafile) - imports = imports or [ - "from __future__ import annotations\n", - "from typing import Any, overload, Sequence, List, Literal, Union, TYPE_CHECKING", - "from narwhals.dependencies import is_pandas_dataframe as _is_pandas_dataframe", - "from altair.utils.schemapi import Undefined, with_property_setters", - "from altair.utils import infer_encoding_types as _infer_encoding_types", - "from altair.utils import parse_shorthand", - "from . import core", - ] - contents = [ - HEADER, - CHANNEL_MYPY_IGNORE_STATEMENTS, - *imports, - _type_checking_only_imports( - "from altair import Parameter, SchemaBase", - "from altair.utils.schemapi import Optional", - "from ._typing import * # noqa: F403", - "from typing_extensions import Self", - ), - CHANNEL_MIXINS, - ] - encoding_def = "FacetedEncoding" encoding = SchemaInfo(schema["definitions"][encoding_def], rootschema=schema) channel_infos: dict[str, ChannelInfo] = {} + class_defs = [] + for prop, propschema in encoding.properties.items(): def_dict = get_field_datum_value_defs(propschema, schema) @@ -640,10 +630,36 @@ def generate_vegalite_channel_wrappers( haspropsetters=True, altair_classes_prefix="core", ) - contents.append(gen.schema_class()) + class_defs.append(gen.schema_class()) channel_infos[prop] = channel_info + all_ = list(chain.from_iterable(info.all_names for info in channel_infos.values())) + + imports = imports or [ + "from __future__ import annotations\n", + "from typing import Any, overload, Sequence, List, Literal, Union, TYPE_CHECKING", + "from narwhals.dependencies import is_pandas_dataframe as _is_pandas_dataframe", + "from altair.utils.schemapi import Undefined, with_property_setters", + "from altair.utils import infer_encoding_types as _infer_encoding_types", + "from altair.utils import parse_shorthand", + "from . import core", + ] + contents = [ + HEADER, + CHANNEL_MYPY_IGNORE_STATEMENTS, + *imports, + _type_checking_only_imports( + "from altair import Parameter, SchemaBase", + "from altair.utils.schemapi import Optional", + "from ._typing import * # noqa: F403", + "from typing_extensions import Self", + ), + "\n" f"__all__ = {sorted(all_)}\n", + CHANNEL_MIXINS, + *class_defs, + ] + # Generate the type signature for the encode method encode_signature = _create_encode_signature(channel_infos) contents.append(encode_signature) From 2444f706688f0e9b9d69049369b0a5f7e52ffb88 Mon Sep 17 00:00:00 2001 From: dangotbanned <125183946+dangotbanned@users.noreply.github.com> Date: Tue, 16 Jul 2024 15:55:28 +0100 Subject: [PATCH 02/18] build: run `generate-schema-wrapper` --- altair/vegalite/v5/schema/channels.py | 103 ++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) diff --git a/altair/vegalite/v5/schema/channels.py b/altair/vegalite/v5/schema/channels.py index bbd6e0d51..03fa5e9e0 100644 --- a/altair/vegalite/v5/schema/channels.py +++ b/altair/vegalite/v5/schema/channels.py @@ -31,6 +31,109 @@ from ._typing import * # noqa: F403 +__all__ = [ + "X2", + "Y2", + "Angle", + "AngleDatum", + "AngleValue", + "Color", + "ColorDatum", + "ColorValue", + "Column", + "Description", + "DescriptionValue", + "Detail", + "Facet", + "Fill", + "FillDatum", + "FillOpacity", + "FillOpacityDatum", + "FillOpacityValue", + "FillValue", + "Href", + "HrefValue", + "Key", + "Latitude", + "Latitude2", + "Latitude2Datum", + "Latitude2Value", + "LatitudeDatum", + "Longitude", + "Longitude2", + "Longitude2Datum", + "Longitude2Value", + "LongitudeDatum", + "Opacity", + "OpacityDatum", + "OpacityValue", + "Order", + "OrderValue", + "Radius", + "Radius2", + "Radius2Datum", + "Radius2Value", + "RadiusDatum", + "RadiusValue", + "Row", + "Shape", + "ShapeDatum", + "ShapeValue", + "Size", + "SizeDatum", + "SizeValue", + "Stroke", + "StrokeDash", + "StrokeDashDatum", + "StrokeDashValue", + "StrokeDatum", + "StrokeOpacity", + "StrokeOpacityDatum", + "StrokeOpacityValue", + "StrokeValue", + "StrokeWidth", + "StrokeWidthDatum", + "StrokeWidthValue", + "Text", + "TextDatum", + "TextValue", + "Theta", + "Theta2", + "Theta2Datum", + "Theta2Value", + "ThetaDatum", + "ThetaValue", + "Tooltip", + "TooltipValue", + "Url", + "UrlValue", + "X", + "X2Datum", + "X2Value", + "XDatum", + "XError", + "XError2", + "XError2Value", + "XErrorValue", + "XOffset", + "XOffsetDatum", + "XOffsetValue", + "XValue", + "Y", + "Y2Datum", + "Y2Value", + "YDatum", + "YError", + "YError2", + "YError2Value", + "YErrorValue", + "YOffset", + "YOffsetDatum", + "YOffsetValue", + "YValue", +] + + class FieldChannelMixin: _encoding_name: str From db31ff178be6227a3f64aa6d9f500492eace943a Mon Sep 17 00:00:00 2001 From: dangotbanned <125183946+dangotbanned@users.noreply.github.com> Date: Tue, 16 Jul 2024 15:56:32 +0100 Subject: [PATCH 03/18] refactor: change the sources for some import in `api` --- altair/vegalite/v5/api.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/altair/vegalite/v5/api.py b/altair/vegalite/v5/api.py index e9d420828..193bcd8f8 100644 --- a/altair/vegalite/v5/api.py +++ b/altair/vegalite/v5/api.py @@ -10,9 +10,9 @@ from typing_extensions import TypeAlias import typing -from .schema import core, channels, mixins, Undefined, SCHEMA_URL +from .schema import core, channels, mixins, SCHEMA_URL -from altair.utils import Optional +from altair.utils import Optional, Undefined from .data import data_transformers from ... import utils from ...expr import core as _expr_core From 160ce60421613bf1217a9292e271818e6c9a2f83 Mon Sep 17 00:00:00 2001 From: dangotbanned <125183946+dangotbanned@users.noreply.github.com> Date: Tue, 16 Jul 2024 15:58:01 +0100 Subject: [PATCH 04/18] refactor: add explicit import for `utils.parse_shorthand` This was the only side-effect import that I imagine was useful --- altair/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/altair/__init__.py b/altair/__init__.py index ad77b5633..773f4c185 100644 --- a/altair/__init__.py +++ b/altair/__init__.py @@ -619,7 +619,7 @@ def __dir__(): from altair.vegalite import * from altair.jupyter import JupyterChart -from altair.utils import AltairDeprecationWarning +from altair.utils import AltairDeprecationWarning, parse_shorthand def load_ipython_extension(ipython): From e21b8c84bc79f6cdf6908b87db0ab2bff35ae0bc Mon Sep 17 00:00:00 2001 From: dangotbanned <125183946+dangotbanned@users.noreply.github.com> Date: Tue, 16 Jul 2024 15:58:51 +0100 Subject: [PATCH 05/18] build: run `update-init-file` --- altair/__init__.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/altair/__init__.py b/altair/__init__.py index 773f4c185..990429335 100644 --- a/altair/__init__.py +++ b/altair/__init__.py @@ -132,7 +132,6 @@ "DataType", "Datasets", "DateTime", - "DatumChannelMixin", "DatumDef", "Day", "DensityTransform", @@ -174,7 +173,6 @@ "FeatureCollection", "FeatureGeometryGeoJsonProperties", "Field", - "FieldChannelMixin", "FieldDefWithoutScale", "FieldEqualPredicate", "FieldGTEPredicate", @@ -506,7 +504,6 @@ "VEGAEMBED_VERSION", "VEGALITE_VERSION", "VEGA_VERSION", - "ValueChannelMixin", "ValueDefWithConditionMarkPropFieldOrDatumDefGradientstringnull", "ValueDefWithConditionMarkPropFieldOrDatumDefTypeForShapestringnull", "ValueDefWithConditionMarkPropFieldOrDatumDefnumber", @@ -586,7 +583,6 @@ "load_ipython_extension", "load_schema", "mixins", - "overload", "param", "parse_shorthand", "renderers", @@ -609,7 +605,6 @@ "vconcat", "vegalite", "vegalite_compilers", - "with_property_setters", ] From fac81d6569c2eb8367069027f835f754547f481d Mon Sep 17 00:00:00 2001 From: dangotbanned <125183946+dangotbanned@users.noreply.github.com> Date: Tue, 16 Jul 2024 16:14:00 +0100 Subject: [PATCH 06/18] chore(ruff): replace blanket `noqa` with specific rules --- altair/vegalite/__init__.py | 2 +- altair/vegalite/schema.py | 2 +- altair/vegalite/v5/__init__.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/altair/vegalite/__init__.py b/altair/vegalite/__init__.py index 690d64e63..8fa78644e 100644 --- a/altair/vegalite/__init__.py +++ b/altair/vegalite/__init__.py @@ -1,2 +1,2 @@ -# ruff: noqa +# ruff: noqa: F403 from .v5 import * diff --git a/altair/vegalite/schema.py b/altair/vegalite/schema.py index 3807f3767..d3ee42222 100644 --- a/altair/vegalite/schema.py +++ b/altair/vegalite/schema.py @@ -1,4 +1,4 @@ """Altair schema wrappers""" -# ruff: noqa +# ruff: noqa: F403 from .v5.schema import * diff --git a/altair/vegalite/v5/__init__.py b/altair/vegalite/v5/__init__.py index f921d662e..61c901f0c 100644 --- a/altair/vegalite/v5/__init__.py +++ b/altair/vegalite/v5/__init__.py @@ -1,4 +1,4 @@ -# ruff: noqa +# ruff: noqa: F401, F403 from .schema import * from .api import * From 7e3c5bdfc6f4007431b08403ebaf4bfb07129175 Mon Sep 17 00:00:00 2001 From: dangotbanned <125183946+dangotbanned@users.noreply.github.com> Date: Tue, 16 Jul 2024 17:30:58 +0100 Subject: [PATCH 07/18] refactor: add explicit imports in `v5.__init__.py` Previously imported in `api` -> here --- altair/vegalite/v5/__init__.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/altair/vegalite/v5/__init__.py b/altair/vegalite/v5/__init__.py index 61c901f0c..84dac25b9 100644 --- a/altair/vegalite/v5/__init__.py +++ b/altair/vegalite/v5/__init__.py @@ -4,7 +4,13 @@ from ...expr import datum, expr -from .display import VegaLite, renderers +from .display import ( + VegaLite, + renderers, + VEGALITE_VERSION, + VEGAEMBED_VERSION, + VEGA_VERSION, +) from .compiler import vegalite_compilers from .data import ( @@ -17,3 +23,4 @@ default_data_transformer, data_transformers, ) +from .theme import themes From 2c286b5594b5bb914b41f36bc7e613876df3d237 Mon Sep 17 00:00:00 2001 From: dangotbanned <125183946+dangotbanned@users.noreply.github.com> Date: Tue, 16 Jul 2024 17:35:30 +0100 Subject: [PATCH 08/18] feat: define an `__all__` for `api.py` manually Currently not included deprecations, but will probably have to revert later --- altair/vegalite/v5/api.py | 43 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/altair/vegalite/v5/api.py b/altair/vegalite/v5/api.py index 193bcd8f8..da8c5c96c 100644 --- a/altair/vegalite/v5/api.py +++ b/altair/vegalite/v5/api.py @@ -95,6 +95,49 @@ StackOffset_T, ) +__all__ = [ + "Bin", + "Chart", + "ChartDataType", + "ChartType", + "ConcatChart", + "FacetChart", + "FacetMapping", + "HConcatChart", + "Impute", + "LayerChart", + "LookupData", + "Parameter", + "ParameterExpression", + "RepeatChart", + "SelectionExpression", + "SelectionPredicateComposition", + "Title", + "TopLevelMixin", + "VConcatChart", + "binding", + "binding_checkbox", + "binding_radio", + "binding_range", + "binding_select", + "check_fields_and_encodings", + "concat", + "condition", + "graticule", + "hconcat", + "is_chart_type", + "layer", + "param", + "repeat", + "selection_interval", + "selection_point", + "sequence", + "sphere", + "topo_feature", + "value", + "vconcat", +] + ChartDataType: TypeAlias = Optional[Union[DataType, core.Data, str, core.Generator]] From 42cf5e8aeeeaba55f645a724ba05fb9ddde3250b Mon Sep 17 00:00:00 2001 From: dangotbanned <125183946+dangotbanned@users.noreply.github.com> Date: Tue, 16 Jul 2024 17:37:04 +0100 Subject: [PATCH 09/18] refactor: add explicit imports for `Optional`, `Undefined` --- altair/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/altair/__init__.py b/altair/__init__.py index 990429335..a1a61a7dc 100644 --- a/altair/__init__.py +++ b/altair/__init__.py @@ -614,7 +614,7 @@ def __dir__(): from altair.vegalite import * from altair.jupyter import JupyterChart -from altair.utils import AltairDeprecationWarning, parse_shorthand +from altair.utils import AltairDeprecationWarning, parse_shorthand, Optional, Undefined def load_ipython_extension(ipython): From 973dfc7613b50b21b083b703dc46c0228f9a1c7b Mon Sep 17 00:00:00 2001 From: dangotbanned <125183946+dangotbanned@users.noreply.github.com> Date: Tue, 16 Jul 2024 17:40:08 +0100 Subject: [PATCH 10/18] build: run `update-init-file` Dropped from top-level: `DataType`, `TOPLEVEL_ONLY_KEYS`, `mixins` --- altair/__init__.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/altair/__init__.py b/altair/__init__.py index a1a61a7dc..5fe1c1213 100644 --- a/altair/__init__.py +++ b/altair/__init__.py @@ -129,7 +129,6 @@ "Data", "DataFormat", "DataSource", - "DataType", "Datasets", "DateTime", "DatumDef", @@ -443,7 +442,6 @@ "StrokeWidthValue", "StyleConfigIndex", "SymbolShape", - "TOPLEVEL_ONLY_KEYS", "Text", "TextBaseline", "TextDatum", @@ -582,7 +580,6 @@ "limit_rows", "load_ipython_extension", "load_schema", - "mixins", "param", "parse_shorthand", "renderers", From 38535a05a205b2144733e6cc7cee5df748babcfd Mon Sep 17 00:00:00 2001 From: dangotbanned <125183946+dangotbanned@users.noreply.github.com> Date: Tue, 16 Jul 2024 17:52:14 +0100 Subject: [PATCH 11/18] test: use explicit import for `Undefined` --- tests/vegalite/v5/test_api.py | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/tests/vegalite/v5/test_api.py b/tests/vegalite/v5/test_api.py index d00cc9849..166e9c8e8 100644 --- a/tests/vegalite/v5/test_api.py +++ b/tests/vegalite/v5/test_api.py @@ -19,6 +19,7 @@ import polars as pl import altair.vegalite.v5 as alt +from altair.utils.schemapi import Undefined try: import vl_convert as vlc @@ -914,14 +915,14 @@ def test_subcharts_with_same_data(method, data): text = point.mark_text() chart1 = func(point, line, text) - assert chart1.data is not alt.Undefined - assert all(c.data is alt.Undefined for c in getattr(chart1, method)) + assert chart1.data is not Undefined + assert all(c.data is Undefined for c in getattr(chart1, method)) if method != "concat": op = OP_DICT[method] chart2 = op(op(point, line), text) - assert chart2.data is not alt.Undefined - assert all(c.data is alt.Undefined for c in getattr(chart2, method)) + assert chart2.data is not Undefined + assert all(c.data is Undefined for c in getattr(chart2, method)) @pytest.mark.parametrize("method", ["layer", "hconcat", "vconcat", "concat"]) @@ -936,20 +937,20 @@ def test_subcharts_different_data(method, data): nodata = alt.Chart().mark_point().encode(x="x:Q", y="y:Q") chart1 = func(point, otherdata) - assert chart1.data is alt.Undefined + assert chart1.data is Undefined assert getattr(chart1, method)[0].data is data chart2 = func(point, nodata) - assert chart2.data is alt.Undefined + assert chart2.data is Undefined assert getattr(chart2, method)[0].data is data def test_layer_facet(basic_chart): chart = (basic_chart + basic_chart).facet(row="row:Q") - assert chart.data is not alt.Undefined - assert chart.spec.data is alt.Undefined + assert chart.data is not Undefined + assert chart.spec.data is Undefined for layer in chart.spec.layer: - assert layer.data is alt.Undefined + assert layer.data is Undefined dct = chart.to_dict() assert "data" in dct From a85d77a5174e8b0603b5564c0860517e9905a1b3 Mon Sep 17 00:00:00 2001 From: dangotbanned <125183946+dangotbanned@users.noreply.github.com> Date: Tue, 16 Jul 2024 17:53:13 +0100 Subject: [PATCH 12/18] test: use explicit import for `AltairDeprecationWarning` --- tests/vegalite/v5/test_params.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/tests/vegalite/v5/test_params.py b/tests/vegalite/v5/test_params.py index d9f61b8c9..195295da6 100644 --- a/tests/vegalite/v5/test_params.py +++ b/tests/vegalite/v5/test_params.py @@ -8,6 +8,7 @@ import re import altair.vegalite.v5 as alt +from altair.utils.deprecation import AltairDeprecationWarning def test_variable_param(): @@ -82,9 +83,9 @@ def test_selection_deprecation(): alt.selection_interval() # this v4 syntax is deprecated - with pytest.warns(alt.utils.deprecation.AltairDeprecationWarning): + with pytest.warns(AltairDeprecationWarning): alt.selection_single() - with pytest.warns(alt.utils.deprecation.AltairDeprecationWarning): + with pytest.warns(AltairDeprecationWarning): alt.selection_multi() # new syntax @@ -95,7 +96,7 @@ def test_selection_deprecation(): # this v4 syntax is deprecated brush = alt.selection_interval() c = alt.Chart().mark_point() - with pytest.warns(alt.utils.deprecation.AltairDeprecationWarning): + with pytest.warns(AltairDeprecationWarning): c.add_selection(brush) From b913cd89a539e3cb7a3d5fe7d0331830d036c175 Mon Sep 17 00:00:00 2001 From: dangotbanned <125183946+dangotbanned@users.noreply.github.com> Date: Tue, 16 Jul 2024 17:57:21 +0100 Subject: [PATCH 13/18] fix: add deprecations to `api.py`s `__all__` --- altair/vegalite/v5/api.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/altair/vegalite/v5/api.py b/altair/vegalite/v5/api.py index da8c5c96c..75f3b93f7 100644 --- a/altair/vegalite/v5/api.py +++ b/altair/vegalite/v5/api.py @@ -129,8 +129,11 @@ "layer", "param", "repeat", + "selection", "selection_interval", + "selection_multi", "selection_point", + "selection_single", "sequence", "sphere", "topo_feature", From 52c939c5c7f7418c7a1f2bf5e59da48f54282ff5 Mon Sep 17 00:00:00 2001 From: dangotbanned <125183946+dangotbanned@users.noreply.github.com> Date: Sun, 21 Jul 2024 13:48:47 +0100 Subject: [PATCH 14/18] revert: Include `mixins`, `DataType`, `TOPLEVEL_ONLY_KEYS` in `api.__all__` https://github.com/vega/altair/pull/3482#issuecomment-2241577342 --- altair/vegalite/v5/api.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/altair/vegalite/v5/api.py b/altair/vegalite/v5/api.py index ec3de65b8..239aeb0b4 100644 --- a/altair/vegalite/v5/api.py +++ b/altair/vegalite/v5/api.py @@ -130,12 +130,14 @@ ) __all__ = [ + "TOPLEVEL_ONLY_KEYS", "Bin", "ChainedWhen", "Chart", "ChartDataType", "ChartType", "ConcatChart", + "DataType", "FacetChart", "FacetMapping", "HConcatChart", @@ -164,6 +166,7 @@ "hconcat", "is_chart_type", "layer", + "mixins", "param", "repeat", "selection", From 54723ec498a314526dcff9371e747668074951f9 Mon Sep 17 00:00:00 2001 From: dangotbanned <125183946+dangotbanned@users.noreply.github.com> Date: Sun, 21 Jul 2024 13:50:16 +0100 Subject: [PATCH 15/18] chore: remove TODO --- tools/generate_schema_wrapper.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tools/generate_schema_wrapper.py b/tools/generate_schema_wrapper.py index 35fa03c0c..89b97be56 100644 --- a/tools/generate_schema_wrapper.py +++ b/tools/generate_schema_wrapper.py @@ -566,7 +566,6 @@ def all_names(self) -> Iterator[str]: def generate_vegalite_channel_wrappers( schemafile: Path, version: str, imports: list[str] | None = None ) -> str: - # TODO: generate __all__ for top of file schema = load_schema_with_shorthand_properties(schemafile) encoding_def = "FacetedEncoding" From f3ea6ff0b2d1fc0f669d446c1d2816927bb2c582 Mon Sep 17 00:00:00 2001 From: dangotbanned <125183946+dangotbanned@users.noreply.github.com> Date: Sun, 21 Jul 2024 13:58:08 +0100 Subject: [PATCH 16/18] revert: include channels mixins and `with_property_setters` in `channels.__all__` --- tools/generate_schema_wrapper.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/tools/generate_schema_wrapper.py b/tools/generate_schema_wrapper.py index 89b97be56..82d8cd137 100644 --- a/tools/generate_schema_wrapper.py +++ b/tools/generate_schema_wrapper.py @@ -630,7 +630,16 @@ def generate_vegalite_channel_wrappers( channel_infos[prop] = channel_info - all_ = list(chain.from_iterable(info.all_names for info in channel_infos.values())) + # NOTE: See https://github.com/vega/altair/pull/3482#issuecomment-2241577342 + COMPAT_EXPORTS = ( + "DatumChannelMixin", + "FieldChannelMixin", + "ValueChannelMixin", + "with_property_setters", + ) + + it = chain.from_iterable(info.all_names for info in channel_infos.values()) + all_ = list(chain(it, COMPAT_EXPORTS)) imports = imports or [ "from __future__ import annotations\n", From 13c2d8712fca9323e6d5208150c71701748667be Mon Sep 17 00:00:00 2001 From: dangotbanned <125183946+dangotbanned@users.noreply.github.com> Date: Sun, 21 Jul 2024 14:10:02 +0100 Subject: [PATCH 17/18] build: run `generate-schema-wrapper` --- altair/__init__.py | 3 +++ altair/vegalite/v5/schema/channels.py | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/altair/__init__.py b/altair/__init__.py index eccd8acc4..6924e073c 100644 --- a/altair/__init__.py +++ b/altair/__init__.py @@ -123,6 +123,7 @@ "Data", "DataFormat", "DataSource", + "DataType", "Datasets", "DateTime", "DatumDef", @@ -472,6 +473,7 @@ "StrokeWidthValue", "StyleConfigIndex", "SymbolShape", + "TOPLEVEL_ONLY_KEYS", "Text", "TextBaseline", "TextDatum", @@ -612,6 +614,7 @@ "limit_rows", "load_ipython_extension", "load_schema", + "mixins", "param", "parse_shorthand", "renderers", diff --git a/altair/vegalite/v5/schema/channels.py b/altair/vegalite/v5/schema/channels.py index c1cdbce2f..5e0fc2658 100644 --- a/altair/vegalite/v5/schema/channels.py +++ b/altair/vegalite/v5/schema/channels.py @@ -41,10 +41,12 @@ "ColorDatum", "ColorValue", "Column", + "DatumChannelMixin", "Description", "DescriptionValue", "Detail", "Facet", + "FieldChannelMixin", "Fill", "FillDatum", "FillOpacity", @@ -107,6 +109,7 @@ "TooltipValue", "Url", "UrlValue", + "ValueChannelMixin", "X", "X2Datum", "X2Value", @@ -131,6 +134,7 @@ "YOffsetDatum", "YOffsetValue", "YValue", + "with_property_setters", ] From d0dcc5dd64bba3684904e926610ba77c58955e1a Mon Sep 17 00:00:00 2001 From: dangotbanned <125183946+dangotbanned@users.noreply.github.com> Date: Sun, 21 Jul 2024 14:10:52 +0100 Subject: [PATCH 18/18] build: run `update-init-file` --- altair/__init__.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/altair/__init__.py b/altair/__init__.py index 6924e073c..d6c03f48a 100644 --- a/altair/__init__.py +++ b/altair/__init__.py @@ -126,6 +126,7 @@ "DataType", "Datasets", "DateTime", + "DatumChannelMixin", "DatumDef", "Day", "DensityTransform", @@ -167,6 +168,7 @@ "FeatureCollection", "FeatureGeometryGeoJsonProperties", "Field", + "FieldChannelMixin", "FieldDefWithoutScale", "FieldEqualPredicate", "FieldGTEPredicate", @@ -535,6 +537,7 @@ "VEGAEMBED_VERSION", "VEGALITE_VERSION", "VEGA_VERSION", + "ValueChannelMixin", "ValueDefWithConditionMarkPropFieldOrDatumDefGradientstringnull", "ValueDefWithConditionMarkPropFieldOrDatumDefTypeForShapestringnull", "ValueDefWithConditionMarkPropFieldOrDatumDefnumber", @@ -638,6 +641,7 @@ "vegalite", "vegalite_compilers", "when", + "with_property_setters", ]