Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
449 changes: 445 additions & 4 deletions VizQLDataServiceOpenAPISchema.json

Large diffs are not rendered by default.

4 changes: 4 additions & 0 deletions python_sdk/CHANGELOG
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
## 20261.0.0 (January 2026)

* Update SDK to 20261.0.0

## 20253.0.0 (September 2025)

* Update SDK to 20253.0.0
Expand Down
8 changes: 6 additions & 2 deletions python_sdk/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,14 +24,18 @@ The VizQL Data Service Python SDK supports different versions of the VizQLDataSe

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

[20253.0](https://github.com/tableau/VizQL-Data-Service/blob/main/VizQLDataServiceOpenAPISchema.json)
[20253.0](https://github.com/tableau/VizQL-Data-Service/blob/release-20253.0/VizQLDataServiceOpenAPISchema.json)

[20261.0](https://github.com/tableau/VizQL-Data-Service/blob/main/VizQLDataServiceOpenAPISchema.json)

### Python SDK Versions
None for 20251.0

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

[20253.0](https://github.com/tableau/VizQL-Data-Service/tree/main/python_sdk)
[20253.0](https://github.com/tableau/VizQL-Data-Service/tree/release-20253.0/python_sdk)

[20261.0](https://github.com/tableau/VizQL-Data-Service/tree/main/python_sdk)

## 🔧 Installation
```bash
Expand Down
2 changes: 1 addition & 1 deletion python_sdk/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"

[project]
name = "vizql-data-service-py"
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
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

description = "A Python client library for interacting with the VizQL Data Service API"
readme = "README.md"
Expand Down
56 changes: 51 additions & 5 deletions python_sdk/scripts/post_process.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,17 +24,63 @@ def convert_file(input_file, output_file):
"import TableauModel": "from .tableau_model import TableauModel",
"ParameterRecord": "ParameterRecordBase",
"Optional[List[ParameterRecordBase]]": "Optional[List[ParameterRecord]]",
"QuantitativeFilterBase,": "QuantitativeNumericalFilter, QuantitativeDateFilter,",
}

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

# Add TabFilter class at the end of file
# Add Literal filterType to each filter subclass for discriminator support
filter_literals = [
(
"class MatchFilter(Filter):",
"class MatchFilter(Filter):\n"
" filterType: Literal[FilterType.MATCH] = FilterType.MATCH",
),
(
"class ConditionFilter(Filter):",
"class ConditionFilter(Filter):\n"
" filterType: Literal[FilterType.CONDITION] = FilterType.CONDITION",
),
(
"class QuantitativeNumericalFilter(QuantitativeFilterBase):",
"class QuantitativeNumericalFilter(QuantitativeFilterBase):\n"
" filterType: Literal[FilterType.QUANTITATIVE_NUMERICAL] = "
"FilterType.QUANTITATIVE_NUMERICAL",
),
(
"class QuantitativeDateFilter(QuantitativeFilterBase):",
"class QuantitativeDateFilter(QuantitativeFilterBase):\n"
" filterType: Literal[FilterType.QUANTITATIVE_DATE] = "
"FilterType.QUANTITATIVE_DATE",
),
(
"class SetFilter(Filter):",
"class SetFilter(Filter):\n"
" filterType: Literal[FilterType.SET] = FilterType.SET",
),
(
"class RelativeDateFilter(Filter):",
"class RelativeDateFilter(Filter):\n"
" filterType: Literal[FilterType.DATE] = FilterType.DATE",
),
(
"class TopNFilter(Filter):",
"class TopNFilter(Filter):\n"
" filterType: Literal[FilterType.TOP] = FilterType.TOP",
),
]
for old, new in filter_literals:
content = content.replace(old, new)

# Add TabFilter class with discriminator at the end of file
tab_filter_code = """
class TabFilter(RootModel[Union[
MatchFilter, QuantitativeNumericalFilter, QuantitativeDateFilter, SetFilter, RelativeDateFilter, TopNFilter]]):
root: Union[
MatchFilter, QuantitativeNumericalFilter, QuantitativeDateFilter, SetFilter, RelativeDateFilter, TopNFilter]
class TabFilter(RootModel[Annotated[Union[
MatchFilter, QuantitativeNumericalFilter, QuantitativeDateFilter, SetFilter, RelativeDateFilter, TopNFilter, ConditionFilter],
PydanticField(discriminator='filterType')]]):
root: Annotated[Union[
MatchFilter, QuantitativeNumericalFilter, QuantitativeDateFilter, SetFilter, RelativeDateFilter, TopNFilter, ConditionFilter],
PydanticField(discriminator='filterType')]
"""
content += tab_filter_code

Expand Down
154 changes: 138 additions & 16 deletions python_sdk/src/__init__.py
Original file line number Diff line number Diff line change
@@ -1,89 +1,211 @@
from .api.openapi_generated import (
TableauError,
TableCalcType,
RelativeTo,
RankType,
TableCalcComputedAggregation,
ColumnClass,
DataType,
FieldRole,
FieldType,
ImageRole,
Formatting,
Connection,
Datasource,
FilterType,
DimensionFilterField,
CalculatedFilterField,
Function,
Comparison,
ConditionalFilterCondition,
QuantitativeFilterType,
QueryOptions,
Event,
Data,
SseMetadataEvent,
Event1,
SseDataEvent,
Event2,
SseErrorEvent,
QueryOutput,
ReadMetadataRequest,
ReturnFormat,
SortDirection,
PeriodType,
DateRangeType,
Direction,
Parameter,
NullableAny,
FieldAlias,
AliasedDataValue,
ParameterType,
ParameterRecordBase,
GetDatasourceModelRequest,
LogicalTable,
LogicalTableRelationshipEndpoint,
ListSupportedFunctionRequest,
FunctionType,
SupportedFunctionOverload,
SupportedFunction,
Grouping,
Operator,
RelationshipExpressionItem,
FieldBase,
DimensionField,
MeasureField,
CalculatedField,
FieldMetadata,
BinField,
TableCalcFieldReference,
TableCalcCustomSort,
MeasureFilterField,
MetadataOutput,
QueryOptions,
ReadMetadataRequest,
Field,
FilterField,
ExtraData,
QueryDatasourceOptions,
SseResultStream,
AnyValueParameter,
ListParameter,
QuantitativeRangeParameter,
QuantitativeDateParameter,
GroupFormula,
FieldRelationshipExpression,
TableCalcSpecification,
CustomTableCalcSpecification,
NestedTableCalcSpecification,
DifferenceTableCalcSpecification,
PercentOfTotalTableCalcSpecification,
RankTableCalcSpecification,
PercentileTableCalcSpecification,
RunningTotalTableCalcSpecification,
MovingTableCalcSpecification,
FieldMetadata,
FilterField,
MetadataOutput,
LogicalTableRelationship,
TableCalcField,
Filter,
MatchFilter,
ConditionFilter,
QuantitativeFilterBase,
QuantitativeNumericalFilter,
QuantitativeDateFilter,
Query,
QueryRequest,
SetFilter,
RelativeDateFilter,
TopNFilter,
DatasourceModelOutput,
Field,
Query,
QueryRequest,
TabFilter,
ParameterRecord,
)
from .api import (
VizQLDataServiceClient,
read_metadata,
query_datasource,
get_datasource_model,
)

__all__ = [
# API related
"VizQLDataServiceClient",
"read_metadata",
"query_datasource",
"get_datasource_model",
# OpenAPI models
"TableauError",
"TableCalcType",
"RelativeTo",
"RankType",
"TableCalcComputedAggregation",
"ColumnClass",
"DataType",
"FieldRole",
"FieldType",
"ImageRole",
"Formatting",
"Connection",
"Datasource",
"FilterType",
"DimensionFilterField",
"CalculatedFilterField",
"Function",
"Comparison",
"ConditionalFilterCondition",
"QuantitativeFilterType",
"QueryOptions",
"Event",
"Data",
"SseMetadataEvent",
"Event1",
"SseDataEvent",
"Event2",
"SseErrorEvent",
"QueryOutput",
"ReadMetadataRequest",
"ReturnFormat",
"SortDirection",
"PeriodType",
"DateRangeType",
"Direction",
"Parameter",
"NullableAny",
"FieldAlias",
"AliasedDataValue",
"ParameterType",
"ParameterRecordBase",
"GetDatasourceModelRequest",
"LogicalTable",
"LogicalTableRelationshipEndpoint",
"ListSupportedFunctionRequest",
"FunctionType",
"SupportedFunctionOverload",
"SupportedFunction",
"Grouping",
"Operator",
"RelationshipExpressionItem",
"FieldBase",
"DimensionField",
"MeasureField",
"CalculatedField",
"FieldMetadata",
"BinField",
"TableCalcFieldReference",
"TableCalcCustomSort",
"MeasureFilterField",
"MetadataOutput",
"QueryOptions",
"ReadMetadataRequest",
"Field",
"FilterField",
"ExtraData",
"QueryDatasourceOptions",
"SseResultStream",
"AnyValueParameter",
"ListParameter",
"QuantitativeRangeParameter",
"QuantitativeDateParameter",
"GroupFormula",
"FieldRelationshipExpression",
"TableCalcSpecification",
"CustomTableCalcSpecification",
"NestedTableCalcSpecification",
"DifferenceTableCalcSpecification",
"PercentOfTotalTableCalcSpecification",
"RankTableCalcSpecification",
"PercentileTableCalcSpecification",
"RunningTotalTableCalcSpecification",
"MovingTableCalcSpecification",
"FieldMetadata",
"FilterField",
"MetadataOutput",
"LogicalTableRelationship",
"TableCalcField",
"Filter",
"MatchFilter",
"ConditionFilter",
"QuantitativeFilterBase",
"QuantitativeNumericalFilter",
"QuantitativeDateFilter",
"Query",
"QueryRequest",
"SetFilter",
"RelativeDateFilter",
"TopNFilter",
"DatasourceModelOutput",
"Field",
"Query",
"QueryRequest",
"TabFilter",
"ParameterRecord",
]
2 changes: 2 additions & 0 deletions python_sdk/src/api/__init__.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
from .client import VizQLDataServiceClient
from . import read_metadata
from . import query_datasource
from . import get_datasource_model

__all__ = [
"VizQLDataServiceClient",
"read_metadata",
"query_datasource",
"get_datasource_model",
]
Loading