sadpandajoe commented on code in PR #36034:
URL: https://github.com/apache/superset/pull/36034#discussion_r2520120750
##########
superset/superset_typing.py:
##########
@@ -90,40 +92,258 @@ class ResultSetColumnType(TypedDict):
query_as: NotRequired[Any]
-CacheConfig = dict[str, Any]
-DbapiDescriptionRow = tuple[
- Union[str, bytes],
+CacheConfig: TypeAlias = dict[str, Any]
+DbapiDescriptionRow: TypeAlias = tuple[
+ str | bytes,
str,
- Optional[str],
- Optional[str],
- Optional[int],
- Optional[int],
+ str | None,
+ str | None,
+ int | None,
+ int | None,
bool,
]
-DbapiDescription = Union[list[DbapiDescriptionRow], tuple[DbapiDescriptionRow,
...]]
-DbapiResult = Sequence[Union[list[Any], tuple[Any, ...]]]
-FilterValue = Union[bool, datetime, float, int, str]
-FilterValues = Union[FilterValue, list[FilterValue], tuple[FilterValue]]
-FormData = dict[str, Any]
-Granularity = Union[str, dict[str, Union[str, float]]]
-Column = Union[AdhocColumn, str]
-Metric = Union[AdhocMetric, str]
-OrderBy = tuple[Union[Metric, Column], bool]
-QueryObjectDict = dict[str, Any]
-VizData = Optional[Union[list[Any], dict[Any, Any]]]
-VizPayload = dict[str, Any]
+DbapiDescription: TypeAlias = (
+ list[DbapiDescriptionRow] | tuple[DbapiDescriptionRow, ...]
+)
+DbapiResult: TypeAlias = Sequence[list[Any] | tuple[Any, ...]]
+FilterValue: TypeAlias = bool | datetime | float | int | str
+FilterValues: TypeAlias = FilterValue | list[FilterValue] | tuple[FilterValue]
+FormData: TypeAlias = dict[str, Any]
+Granularity: TypeAlias = str | dict[str, str | float]
+Column: TypeAlias = AdhocColumn | str
+Metric: TypeAlias = AdhocMetric | str
+OrderBy: TypeAlias = tuple[Metric | Column, bool]
+
+
+class QueryObjectDict(TypedDict, total=False):
+ """
+ TypedDict representation of query objects used throughout Superset.
+
+ This represents the dictionary output from QueryObject.to_dict() and is
used
+ in datasource query methods throughout Superset.
+
+ Core fields from QueryObject.to_dict():
+ apply_fetch_values_predicate: Whether to apply fetch values predicate
+ columns: List of columns to include
+ extras: Additional options and parameters
+ filter: List of filter clauses
+ from_dttm: Start datetime for time range
+ granularity: Time grain/granularity
+ inner_from_dttm: Inner start datetime for nested queries
+ inner_to_dttm: Inner end datetime for nested queries
+ is_rowcount: Whether this is a row count query
+ is_timeseries: Whether this is a timeseries query
+ metrics: List of metrics to compute
+ order_desc: Whether to order descending
+ orderby: List of order by clauses
+ row_limit: Maximum number of rows
+ row_offset: Number of rows to skip
+ series_columns: Columns to use for series
+ series_limit: Maximum number of series
+ series_limit_metric: Metric to use for series limiting
+ group_others_when_limit_reached: Whether to group remaining items as
"Others"
+ to_dttm: End datetime for time range
+ time_shift: Time shift specification
+
+ Additional fields used throughout the codebase:
+ time_range: Human-readable time range string
+ datasource: BaseDatasource instance
+ extra_cache_keys: Additional keys for caching
+ rls: Row level security filters
+ changed_on: Last modified timestamp
+
+ Deprecated fields (still in use):
+ groupby: Columns to group by (use columns instead)
+ timeseries_limit: Series limit (use series_limit instead)
+ timeseries_limit_metric: Series limit metric (use series_limit_metric
instead)
+ """
+
+ # Core fields from QueryObject.to_dict()
+ apply_fetch_values_predicate: bool
+ columns: list[Column]
+ extras: dict[str, Any]
+ filter: list["QueryObjectFilterClause"]
+ from_dttm: datetime | None
+ granularity: str | None
+ inner_from_dttm: datetime | None
+ inner_to_dttm: datetime | None
+ is_rowcount: bool
+ is_timeseries: bool
+ metrics: list[Metric] | None
+ order_desc: bool
+ orderby: list[OrderBy]
+ row_limit: int | None
+ row_offset: int
+ series_columns: list[Column]
+ series_limit: int
+ series_limit_metric: Metric | None
+ group_others_when_limit_reached: bool
+ to_dttm: datetime | None
+ time_shift: str | None
+
+ # Additional fields used throughout the codebase
+ time_range: str | None
+ datasource: Any # BaseDatasource instance
Review Comment:
if this is supposed to be a BaseDatasource instance, why are we typing it as
Any? does it fail if we don't use Any?
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]