Skip to content

Commit f8c3adb

Browse files
@W-20482445 - [Release 20261.0] Update OpenAPI Spec + Python client library for new features (#12)
* sdk update * correct mistakes * fix github jobs * test fix * test github job again * a typo fix
1 parent d128c6c commit f8c3adb

13 files changed

Lines changed: 1248 additions & 53 deletions

VizQLDataServiceOpenAPISchema.json

Lines changed: 445 additions & 4 deletions
Large diffs are not rendered by default.

python_sdk/CHANGELOG

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 20261.0.0 (January 2026)
2+
3+
* Update SDK to 20261.0.0
4+
15
## 20253.0.0 (September 2025)
26

37
* Update SDK to 20253.0.0

python_sdk/README.md

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,18 @@ The VizQL Data Service Python SDK supports different versions of the VizQLDataSe
2424

2525
[20252.0](https://github.com/tableau/VizQL-Data-Service/blob/release-20252.0/VizQLDataServiceOpenAPISchema.json)
2626

27-
[20253.0](https://github.com/tableau/VizQL-Data-Service/blob/main/VizQLDataServiceOpenAPISchema.json)
27+
[20253.0](https://github.com/tableau/VizQL-Data-Service/blob/release-20253.0/VizQLDataServiceOpenAPISchema.json)
28+
29+
[20261.0](https://github.com/tableau/VizQL-Data-Service/blob/main/VizQLDataServiceOpenAPISchema.json)
2830

2931
### Python SDK Versions
3032
None for 20251.0
3133

3234
[20252.0](https://github.com/tableau/VizQL-Data-Service/tree/release-20252.0/python_sdk)
3335

34-
[20253.0](https://github.com/tableau/VizQL-Data-Service/tree/main/python_sdk)
36+
[20253.0](https://github.com/tableau/VizQL-Data-Service/tree/release-20253.0/python_sdk)
37+
38+
[20261.0](https://github.com/tableau/VizQL-Data-Service/tree/main/python_sdk)
3539

3640
## 🔧 Installation
3741
```bash

python_sdk/pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
44

55
[project]
66
name = "vizql-data-service-py"
7-
version = "20253.0.0" # This value is manually updated. The major and minor versions must always be the same as the version defined in VizQLDataServiceOpenAPISchema.json
7+
version = "20261.0.0" # This value is manually updated. The major and minor versions must always be the same as the version defined in VizQLDataServiceOpenAPISchema.json
88

99
description = "A Python client library for interacting with the VizQL Data Service API"
1010
readme = "README.md"

python_sdk/scripts/post_process.py

Lines changed: 51 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,17 +24,63 @@ def convert_file(input_file, output_file):
2424
"import TableauModel": "from .tableau_model import TableauModel",
2525
"ParameterRecord": "ParameterRecordBase",
2626
"Optional[List[ParameterRecordBase]]": "Optional[List[ParameterRecord]]",
27+
"QuantitativeFilterBase,": "QuantitativeNumericalFilter, QuantitativeDateFilter,",
2728
}
2829

2930
for old, new in replacements.items():
3031
content = content.replace(old, new)
3132

32-
# Add TabFilter class at the end of file
33+
# Add Literal filterType to each filter subclass for discriminator support
34+
filter_literals = [
35+
(
36+
"class MatchFilter(Filter):",
37+
"class MatchFilter(Filter):\n"
38+
" filterType: Literal[FilterType.MATCH] = FilterType.MATCH",
39+
),
40+
(
41+
"class ConditionFilter(Filter):",
42+
"class ConditionFilter(Filter):\n"
43+
" filterType: Literal[FilterType.CONDITION] = FilterType.CONDITION",
44+
),
45+
(
46+
"class QuantitativeNumericalFilter(QuantitativeFilterBase):",
47+
"class QuantitativeNumericalFilter(QuantitativeFilterBase):\n"
48+
" filterType: Literal[FilterType.QUANTITATIVE_NUMERICAL] = "
49+
"FilterType.QUANTITATIVE_NUMERICAL",
50+
),
51+
(
52+
"class QuantitativeDateFilter(QuantitativeFilterBase):",
53+
"class QuantitativeDateFilter(QuantitativeFilterBase):\n"
54+
" filterType: Literal[FilterType.QUANTITATIVE_DATE] = "
55+
"FilterType.QUANTITATIVE_DATE",
56+
),
57+
(
58+
"class SetFilter(Filter):",
59+
"class SetFilter(Filter):\n"
60+
" filterType: Literal[FilterType.SET] = FilterType.SET",
61+
),
62+
(
63+
"class RelativeDateFilter(Filter):",
64+
"class RelativeDateFilter(Filter):\n"
65+
" filterType: Literal[FilterType.DATE] = FilterType.DATE",
66+
),
67+
(
68+
"class TopNFilter(Filter):",
69+
"class TopNFilter(Filter):\n"
70+
" filterType: Literal[FilterType.TOP] = FilterType.TOP",
71+
),
72+
]
73+
for old, new in filter_literals:
74+
content = content.replace(old, new)
75+
76+
# Add TabFilter class with discriminator at the end of file
3377
tab_filter_code = """
34-
class TabFilter(RootModel[Union[
35-
MatchFilter, QuantitativeNumericalFilter, QuantitativeDateFilter, SetFilter, RelativeDateFilter, TopNFilter]]):
36-
root: Union[
37-
MatchFilter, QuantitativeNumericalFilter, QuantitativeDateFilter, SetFilter, RelativeDateFilter, TopNFilter]
78+
class TabFilter(RootModel[Annotated[Union[
79+
MatchFilter, QuantitativeNumericalFilter, QuantitativeDateFilter, SetFilter, RelativeDateFilter, TopNFilter, ConditionFilter],
80+
PydanticField(discriminator='filterType')]]):
81+
root: Annotated[Union[
82+
MatchFilter, QuantitativeNumericalFilter, QuantitativeDateFilter, SetFilter, RelativeDateFilter, TopNFilter, ConditionFilter],
83+
PydanticField(discriminator='filterType')]
3884
"""
3985
content += tab_filter_code
4086

python_sdk/src/__init__.py

Lines changed: 138 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,89 +1,211 @@
11
from .api.openapi_generated import (
22
TableauError,
3+
TableCalcType,
4+
RelativeTo,
5+
RankType,
6+
TableCalcComputedAggregation,
7+
ColumnClass,
38
DataType,
9+
FieldRole,
10+
FieldType,
11+
ImageRole,
12+
Formatting,
413
Connection,
514
Datasource,
615
FilterType,
716
DimensionFilterField,
817
CalculatedFilterField,
918
Function,
19+
Comparison,
20+
ConditionalFilterCondition,
1021
QuantitativeFilterType,
22+
QueryOptions,
23+
Event,
24+
Data,
25+
SseMetadataEvent,
26+
Event1,
27+
SseDataEvent,
28+
Event2,
29+
SseErrorEvent,
1130
QueryOutput,
31+
ReadMetadataRequest,
1232
ReturnFormat,
1333
SortDirection,
1434
PeriodType,
1535
DateRangeType,
1636
Direction,
37+
Parameter,
38+
NullableAny,
39+
FieldAlias,
40+
AliasedDataValue,
41+
ParameterType,
42+
ParameterRecordBase,
43+
GetDatasourceModelRequest,
44+
LogicalTable,
45+
LogicalTableRelationshipEndpoint,
46+
ListSupportedFunctionRequest,
47+
FunctionType,
48+
SupportedFunctionOverload,
49+
SupportedFunction,
50+
Grouping,
51+
Operator,
52+
RelationshipExpressionItem,
1753
FieldBase,
1854
DimensionField,
1955
MeasureField,
2056
CalculatedField,
21-
FieldMetadata,
57+
BinField,
58+
TableCalcFieldReference,
59+
TableCalcCustomSort,
2260
MeasureFilterField,
23-
MetadataOutput,
24-
QueryOptions,
25-
ReadMetadataRequest,
26-
Field,
27-
FilterField,
61+
ExtraData,
2862
QueryDatasourceOptions,
63+
SseResultStream,
64+
AnyValueParameter,
65+
ListParameter,
66+
QuantitativeRangeParameter,
67+
QuantitativeDateParameter,
68+
GroupFormula,
69+
FieldRelationshipExpression,
70+
TableCalcSpecification,
71+
CustomTableCalcSpecification,
72+
NestedTableCalcSpecification,
73+
DifferenceTableCalcSpecification,
74+
PercentOfTotalTableCalcSpecification,
75+
RankTableCalcSpecification,
76+
PercentileTableCalcSpecification,
77+
RunningTotalTableCalcSpecification,
78+
MovingTableCalcSpecification,
79+
FieldMetadata,
80+
FilterField,
81+
MetadataOutput,
82+
LogicalTableRelationship,
83+
TableCalcField,
2984
Filter,
3085
MatchFilter,
86+
ConditionFilter,
3187
QuantitativeFilterBase,
3288
QuantitativeNumericalFilter,
3389
QuantitativeDateFilter,
34-
Query,
35-
QueryRequest,
3690
SetFilter,
3791
RelativeDateFilter,
3892
TopNFilter,
93+
DatasourceModelOutput,
94+
Field,
95+
Query,
96+
QueryRequest,
97+
TabFilter,
98+
ParameterRecord,
3999
)
40100
from .api import (
41101
VizQLDataServiceClient,
42102
read_metadata,
43103
query_datasource,
104+
get_datasource_model,
44105
)
45106

46107
__all__ = [
47108
# API related
48109
"VizQLDataServiceClient",
49110
"read_metadata",
50111
"query_datasource",
112+
"get_datasource_model",
51113
# OpenAPI models
52114
"TableauError",
115+
"TableCalcType",
116+
"RelativeTo",
117+
"RankType",
118+
"TableCalcComputedAggregation",
119+
"ColumnClass",
53120
"DataType",
121+
"FieldRole",
122+
"FieldType",
123+
"ImageRole",
124+
"Formatting",
54125
"Connection",
55126
"Datasource",
56127
"FilterType",
57128
"DimensionFilterField",
58129
"CalculatedFilterField",
59130
"Function",
131+
"Comparison",
132+
"ConditionalFilterCondition",
60133
"QuantitativeFilterType",
134+
"QueryOptions",
135+
"Event",
136+
"Data",
137+
"SseMetadataEvent",
138+
"Event1",
139+
"SseDataEvent",
140+
"Event2",
141+
"SseErrorEvent",
61142
"QueryOutput",
143+
"ReadMetadataRequest",
62144
"ReturnFormat",
63145
"SortDirection",
64146
"PeriodType",
65147
"DateRangeType",
66148
"Direction",
149+
"Parameter",
150+
"NullableAny",
151+
"FieldAlias",
152+
"AliasedDataValue",
153+
"ParameterType",
154+
"ParameterRecordBase",
155+
"GetDatasourceModelRequest",
156+
"LogicalTable",
157+
"LogicalTableRelationshipEndpoint",
158+
"ListSupportedFunctionRequest",
159+
"FunctionType",
160+
"SupportedFunctionOverload",
161+
"SupportedFunction",
162+
"Grouping",
163+
"Operator",
164+
"RelationshipExpressionItem",
67165
"FieldBase",
68166
"DimensionField",
69167
"MeasureField",
70168
"CalculatedField",
71-
"FieldMetadata",
169+
"BinField",
170+
"TableCalcFieldReference",
171+
"TableCalcCustomSort",
72172
"MeasureFilterField",
73-
"MetadataOutput",
74-
"QueryOptions",
75-
"ReadMetadataRequest",
76-
"Field",
77-
"FilterField",
173+
"ExtraData",
78174
"QueryDatasourceOptions",
175+
"SseResultStream",
176+
"AnyValueParameter",
177+
"ListParameter",
178+
"QuantitativeRangeParameter",
179+
"QuantitativeDateParameter",
180+
"GroupFormula",
181+
"FieldRelationshipExpression",
182+
"TableCalcSpecification",
183+
"CustomTableCalcSpecification",
184+
"NestedTableCalcSpecification",
185+
"DifferenceTableCalcSpecification",
186+
"PercentOfTotalTableCalcSpecification",
187+
"RankTableCalcSpecification",
188+
"PercentileTableCalcSpecification",
189+
"RunningTotalTableCalcSpecification",
190+
"MovingTableCalcSpecification",
191+
"FieldMetadata",
192+
"FilterField",
193+
"MetadataOutput",
194+
"LogicalTableRelationship",
195+
"TableCalcField",
79196
"Filter",
80197
"MatchFilter",
198+
"ConditionFilter",
81199
"QuantitativeFilterBase",
82200
"QuantitativeNumericalFilter",
83201
"QuantitativeDateFilter",
84-
"Query",
85-
"QueryRequest",
86202
"SetFilter",
87203
"RelativeDateFilter",
88204
"TopNFilter",
205+
"DatasourceModelOutput",
206+
"Field",
207+
"Query",
208+
"QueryRequest",
209+
"TabFilter",
210+
"ParameterRecord",
89211
]

python_sdk/src/api/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
from .client import VizQLDataServiceClient
22
from . import read_metadata
33
from . import query_datasource
4+
from . import get_datasource_model
45

56
__all__ = [
67
"VizQLDataServiceClient",
78
"read_metadata",
89
"query_datasource",
10+
"get_datasource_model",
911
]

0 commit comments

Comments
 (0)