Skip to content

Commit b6253ff

Browse files
authored
fix(typing): Resolve LSP violation for ChartType.data (#3740)
1 parent 709bbdf commit b6253ff

File tree

4 files changed

+32
-27
lines changed

4 files changed

+32
-27
lines changed

altair/vegalite/v5/api.py

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3939,11 +3939,8 @@ def __init__(
39393939
height: Optional[int | dict | Step | Literal["container"]] = Undefined,
39403940
**kwargs: Any,
39413941
) -> None:
3942-
# Data type hints won't match with what TopLevelUnitSpec expects
3943-
# as there is some data processing happening when converting to
3944-
# a VL spec
39453942
super().__init__(
3946-
data=data, # type: ignore[arg-type]
3943+
data=data,
39473944
encoding=encoding,
39483945
mark=mark,
39493946
width=width,
@@ -4328,7 +4325,7 @@ def __init__(
43284325
) -> None:
43294326
for spec in concat:
43304327
_check_if_valid_subspec(spec, "ConcatChart")
4331-
super().__init__(data=data, concat=list(concat), columns=columns, **kwargs) # type: ignore[arg-type]
4328+
super().__init__(data=data, concat=list(concat), columns=columns, **kwargs)
43324329
self.concat: list[ChartType]
43334330
self.params: Optional[Sequence[_Parameter]]
43344331
self.data: Optional[ChartDataType]
@@ -4432,7 +4429,7 @@ def __init__(
44324429
) -> None:
44334430
for spec in hconcat:
44344431
_check_if_valid_subspec(spec, "HConcatChart")
4435-
super().__init__(data=data, hconcat=list(hconcat), **kwargs) # type: ignore[arg-type]
4432+
super().__init__(data=data, hconcat=list(hconcat), **kwargs)
44364433
self.hconcat: list[ChartType]
44374434
self.params: Optional[Sequence[_Parameter]]
44384435
self.data: Optional[ChartDataType]
@@ -4536,7 +4533,7 @@ def __init__(
45364533
) -> None:
45374534
for spec in vconcat:
45384535
_check_if_valid_subspec(spec, "VConcatChart")
4539-
super().__init__(data=data, vconcat=list(vconcat), **kwargs) # type: ignore[arg-type]
4536+
super().__init__(data=data, vconcat=list(vconcat), **kwargs)
45404537
self.vconcat: list[ChartType]
45414538
self.params: Optional[Sequence[_Parameter]]
45424539
self.data: Optional[ChartDataType]
@@ -4644,7 +4641,7 @@ def __init__(
46444641
for spec in layer:
46454642
_check_if_valid_subspec(spec, "LayerChart")
46464643
_check_if_can_be_layered(spec)
4647-
super().__init__(data=data, layer=list(layer), **kwargs) # type: ignore[arg-type]
4644+
super().__init__(data=data, layer=list(layer), **kwargs)
46484645
self.layer: list[ChartType]
46494646
self.params: Optional[Sequence[_Parameter]]
46504647
self.data: Optional[ChartDataType]
@@ -4775,7 +4772,7 @@ def __init__(
47754772
_spec_as_list = [spec]
47764773
params, _spec_as_list = _combine_subchart_params(params, _spec_as_list)
47774774
spec = _spec_as_list[0]
4778-
super().__init__(data=data, spec=spec, facet=facet, params=params, **kwargs) # type: ignore[arg-type]
4775+
super().__init__(data=data, spec=spec, facet=facet, params=params, **kwargs)
47794776
self.data: Optional[ChartDataType]
47804777
self.spec: ChartType
47814778
self.params: Optional[Sequence[_Parameter]]

altair/vegalite/v5/schema/core.py

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020

2121
from altair import Parameter
2222
from altair.typing import Optional
23+
from altair.vegalite.v5.api import ChartDataType
2324

2425
from ._typing import * # noqa: F403
2526

@@ -7887,7 +7888,7 @@ class GenericUnitSpecEncodingAnyMark(VegaLiteSchema):
78877888
def __init__(
78887889
self,
78897890
mark: Optional[SchemaBase | Map | Mark_T | CompositeMark_T] = Undefined,
7890-
data: Optional[SchemaBase | Map | None] = Undefined,
7891+
data: Optional[SchemaBase | ChartDataType | Map | None] = Undefined,
78917892
description: Optional[str] = Undefined,
78927893
encoding: Optional[SchemaBase | Map] = Undefined,
78937894
name: Optional[str] = Undefined,
@@ -11062,7 +11063,7 @@ class LookupData(VegaLiteSchema):
1106211063

1106311064
def __init__(
1106411065
self,
11065-
data: Optional[SchemaBase | Map] = Undefined,
11066+
data: Optional[SchemaBase | ChartDataType | Map] = Undefined,
1106611067
key: Optional[str | SchemaBase] = Undefined,
1106711068
fields: Optional[Sequence[str | SchemaBase]] = Undefined,
1106811069
**kwds,
@@ -21055,7 +21056,7 @@ def __init__(
2105521056
bounds: Optional[Literal["full", "flush"]] = Undefined,
2105621057
center: Optional[bool | SchemaBase | Map] = Undefined,
2105721058
columns: Optional[float] = Undefined,
21058-
data: Optional[SchemaBase | Map | None] = Undefined,
21059+
data: Optional[SchemaBase | ChartDataType | Map | None] = Undefined,
2105921060
description: Optional[str] = Undefined,
2106021061
name: Optional[str] = Undefined,
2106121062
resolve: Optional[SchemaBase | Map] = Undefined,
@@ -21182,7 +21183,7 @@ def __init__(
2118221183
bounds: Optional[Literal["full", "flush"]] = Undefined,
2118321184
center: Optional[bool | SchemaBase | Map] = Undefined,
2118421185
columns: Optional[float] = Undefined,
21185-
data: Optional[SchemaBase | Map | None] = Undefined,
21186+
data: Optional[SchemaBase | ChartDataType | Map | None] = Undefined,
2118621187
description: Optional[str] = Undefined,
2118721188
name: Optional[str] = Undefined,
2118821189
resolve: Optional[SchemaBase | Map] = Undefined,
@@ -21340,7 +21341,7 @@ def __init__(
2134021341
align: Optional[SchemaBase | Map | LayoutAlign_T] = Undefined,
2134121342
bounds: Optional[Literal["full", "flush"]] = Undefined,
2134221343
center: Optional[bool | SchemaBase | Map] = Undefined,
21343-
data: Optional[SchemaBase | Map | None] = Undefined,
21344+
data: Optional[SchemaBase | ChartDataType | Map | None] = Undefined,
2134421345
description: Optional[str] = Undefined,
2134521346
encoding: Optional[SchemaBase | Map] = Undefined,
2134621347
height: Optional[float | SchemaBase | Literal["container"] | Map] = Undefined,
@@ -21429,7 +21430,7 @@ def __init__(
2142921430
hconcat: Optional[Sequence[SchemaBase | Map]] = Undefined,
2143021431
bounds: Optional[Literal["full", "flush"]] = Undefined,
2143121432
center: Optional[bool] = Undefined,
21432-
data: Optional[SchemaBase | Map | None] = Undefined,
21433+
data: Optional[SchemaBase | ChartDataType | Map | None] = Undefined,
2143321434
description: Optional[str] = Undefined,
2143421435
name: Optional[str] = Undefined,
2143521436
resolve: Optional[SchemaBase | Map] = Undefined,
@@ -21537,7 +21538,7 @@ class LayerSpec(Spec, NonNormalizedSpec):
2153721538
def __init__(
2153821539
self,
2153921540
layer: Optional[Sequence[SchemaBase | Map]] = Undefined,
21540-
data: Optional[SchemaBase | Map | None] = Undefined,
21541+
data: Optional[SchemaBase | ChartDataType | Map | None] = Undefined,
2154121542
description: Optional[str] = Undefined,
2154221543
encoding: Optional[SchemaBase | Map] = Undefined,
2154321544
height: Optional[float | SchemaBase | Literal["container"] | Map] = Undefined,
@@ -21677,7 +21678,7 @@ def __init__(
2167721678
bounds: Optional[Literal["full", "flush"]] = Undefined,
2167821679
center: Optional[bool | SchemaBase | Map] = Undefined,
2167921680
columns: Optional[float] = Undefined,
21680-
data: Optional[SchemaBase | Map | None] = Undefined,
21681+
data: Optional[SchemaBase | ChartDataType | Map | None] = Undefined,
2168121682
description: Optional[str] = Undefined,
2168221683
name: Optional[str] = Undefined,
2168321684
resolve: Optional[SchemaBase | Map] = Undefined,
@@ -21807,7 +21808,7 @@ def __init__(
2180721808
bounds: Optional[Literal["full", "flush"]] = Undefined,
2180821809
center: Optional[bool | SchemaBase | Map] = Undefined,
2180921810
columns: Optional[float] = Undefined,
21810-
data: Optional[SchemaBase | Map | None] = Undefined,
21811+
data: Optional[SchemaBase | ChartDataType | Map | None] = Undefined,
2181121812
description: Optional[str] = Undefined,
2181221813
name: Optional[str] = Undefined,
2181321814
resolve: Optional[SchemaBase | Map] = Undefined,
@@ -24400,7 +24401,7 @@ def __init__(
2440024401
center: Optional[bool | SchemaBase | Map] = Undefined,
2440124402
columns: Optional[float] = Undefined,
2440224403
config: Optional[SchemaBase | Map] = Undefined,
24403-
data: Optional[SchemaBase | Map | None] = Undefined,
24404+
data: Optional[SchemaBase | ChartDataType | Map | None] = Undefined,
2440424405
datasets: Optional[SchemaBase | Map] = Undefined,
2440524406
description: Optional[str] = Undefined,
2440624407
name: Optional[str] = Undefined,
@@ -24565,7 +24566,7 @@ class TopLevelFacetSpec(TopLevelSpec):
2456524566

2456624567
def __init__(
2456724568
self,
24568-
data: Optional[SchemaBase | Map | None] = Undefined,
24569+
data: Optional[SchemaBase | ChartDataType | Map | None] = Undefined,
2456924570
facet: Optional[SchemaBase | Map] = Undefined,
2457024571
spec: Optional[SchemaBase | Map] = Undefined,
2457124572
align: Optional[SchemaBase | Map | LayoutAlign_T] = Undefined,
@@ -24704,7 +24705,7 @@ def __init__(
2470424705
bounds: Optional[Literal["full", "flush"]] = Undefined,
2470524706
center: Optional[bool] = Undefined,
2470624707
config: Optional[SchemaBase | Map] = Undefined,
24707-
data: Optional[SchemaBase | Map | None] = Undefined,
24708+
data: Optional[SchemaBase | ChartDataType | Map | None] = Undefined,
2470824709
datasets: Optional[SchemaBase | Map] = Undefined,
2470924710
description: Optional[str] = Undefined,
2471024711
name: Optional[str] = Undefined,
@@ -24860,7 +24861,7 @@ def __init__(
2486024861
str | Parameter | SchemaBase | Map | ColorName_T
2486124862
] = Undefined,
2486224863
config: Optional[SchemaBase | Map] = Undefined,
24863-
data: Optional[SchemaBase | Map | None] = Undefined,
24864+
data: Optional[SchemaBase | ChartDataType | Map | None] = Undefined,
2486424865
datasets: Optional[SchemaBase | Map] = Undefined,
2486524866
description: Optional[str] = Undefined,
2486624867
encoding: Optional[SchemaBase | Map] = Undefined,
@@ -25067,7 +25068,7 @@ class TopLevelUnitSpec(TopLevelSpec):
2506725068

2506825069
def __init__(
2506925070
self,
25070-
data: Optional[SchemaBase | Map | None] = Undefined,
25071+
data: Optional[SchemaBase | ChartDataType | Map | None] = Undefined,
2507125072
mark: Optional[SchemaBase | Map | Mark_T | CompositeMark_T] = Undefined,
2507225073
align: Optional[SchemaBase | Map | LayoutAlign_T] = Undefined,
2507325074
autosize: Optional[SchemaBase | Map | AutosizeType_T] = Undefined,
@@ -25212,7 +25213,7 @@ def __init__(
2521225213
bounds: Optional[Literal["full", "flush"]] = Undefined,
2521325214
center: Optional[bool] = Undefined,
2521425215
config: Optional[SchemaBase | Map] = Undefined,
25215-
data: Optional[SchemaBase | Map | None] = Undefined,
25216+
data: Optional[SchemaBase | ChartDataType | Map | None] = Undefined,
2521625217
datasets: Optional[SchemaBase | Map] = Undefined,
2521725218
description: Optional[str] = Undefined,
2521825219
name: Optional[str] = Undefined,
@@ -26229,7 +26230,7 @@ class UnitSpec(VegaLiteSchema):
2622926230
def __init__(
2623026231
self,
2623126232
mark: Optional[SchemaBase | Map | Mark_T | CompositeMark_T] = Undefined,
26232-
data: Optional[SchemaBase | Map | None] = Undefined,
26233+
data: Optional[SchemaBase | ChartDataType | Map | None] = Undefined,
2623326234
description: Optional[str] = Undefined,
2623426235
encoding: Optional[SchemaBase | Map] = Undefined,
2623526236
name: Optional[str] = Undefined,
@@ -26333,7 +26334,7 @@ class UnitSpecWithFrame(VegaLiteSchema):
2633326334
def __init__(
2633426335
self,
2633526336
mark: Optional[SchemaBase | Map | Mark_T | CompositeMark_T] = Undefined,
26336-
data: Optional[SchemaBase | Map | None] = Undefined,
26337+
data: Optional[SchemaBase | ChartDataType | Map | None] = Undefined,
2633726338
description: Optional[str] = Undefined,
2633826339
encoding: Optional[SchemaBase | Map] = Undefined,
2633926340
height: Optional[float | SchemaBase | Literal["container"] | Map] = Undefined,
@@ -26460,7 +26461,7 @@ def __init__(
2646026461
vconcat: Optional[Sequence[SchemaBase | Map]] = Undefined,
2646126462
bounds: Optional[Literal["full", "flush"]] = Undefined,
2646226463
center: Optional[bool] = Undefined,
26463-
data: Optional[SchemaBase | Map | None] = Undefined,
26464+
data: Optional[SchemaBase | ChartDataType | Map | None] = Undefined,
2646426465
description: Optional[str] = Undefined,
2646526466
name: Optional[str] = Undefined,
2646626467
resolve: Optional[SchemaBase | Map] = Undefined,

tools/generate_schema_wrapper.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,7 @@ class {name}(TypedDict{metaclass_kwds}):{comment}
269269
BIN: Literal["Bin"] = "Bin"
270270
IMPUTE: Literal["Impute"] = "Impute"
271271
INTO_CONDITION: Literal["IntoCondition"] = "IntoCondition"
272+
CHART_DATA_TYPE: Literal["ChartDataType"] = "ChartDataType"
272273

273274
# NOTE: `core.py` typing imports
274275
DATETIME: Literal["DateTime"] = "DateTime"
@@ -761,6 +762,7 @@ def generate_vegalite_schema_wrapper(fp: Path, /) -> ModuleDef[str]:
761762
"from datetime import date, datetime",
762763
"from altair import Parameter",
763764
"from altair.typing import Optional",
765+
f"from altair.vegalite.v5.api import {CHART_DATA_TYPE}",
764766
"from ._typing import * # noqa: F403",
765767
),
766768
"\n" f"__all__ = {all_}\n",

tools/schemapi/utils.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -613,6 +613,8 @@ def title_to_type_reprs(self, *, use_concrete: bool) -> set[str]:
613613
tps.add("Parameter")
614614
if self.is_datetime():
615615
tps.add("Temporal")
616+
if self.is_top_level_spec_data():
617+
tps.add("ChartDataType")
616618
elif self.is_value():
617619
value = self.properties["value"]
618620
t = value.to_type_repr(target="annotation", use_concrete=use_concrete)
@@ -969,6 +971,9 @@ def is_theme_config_target(self) -> bool:
969971
def is_datetime(self) -> bool:
970972
return self.refname == "DateTime"
971973

974+
def is_top_level_spec_data(self) -> bool:
975+
return self.refname == "Data"
976+
972977

973978
class Grouped(Generic[T]):
974979
"""

0 commit comments

Comments
 (0)