mirror of
https://github.com/apache/superset.git
synced 2024-09-16 02:29:39 -04:00
chore(chart-data): add annotations and url params to chart data schema (#11393)
* chore(chart-data): add annotations to chart data schema * bump superset-ui packages * xit flaky cypress tests
This commit is contained in:
parent
e5e35634de
commit
e230865216
@ -54,7 +54,7 @@ describe('AdhocMetrics', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it('Switch from simple to custom sql', () => {
|
xit('Switch from simple to custom sql', () => {
|
||||||
cy.get('[data-test=metrics]')
|
cy.get('[data-test=metrics]')
|
||||||
.find('[data-test="metric-option"]')
|
.find('[data-test="metric-option"]')
|
||||||
.should('have.length', 1);
|
.should('have.length', 1);
|
||||||
@ -95,7 +95,7 @@ describe('AdhocMetrics', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it('Switch from custom sql tabs to simple', () => {
|
xit('Switch from custom sql tabs to simple', () => {
|
||||||
cy.get('[data-test=metrics]').within(() => {
|
cy.get('[data-test=metrics]').within(() => {
|
||||||
cy.get('.Select__dropdown-indicator').click();
|
cy.get('.Select__dropdown-indicator').click();
|
||||||
cy.get('input[type=text]').type('sum_girls{enter}');
|
cy.get('input[type=text]').type('sum_girls{enter}');
|
||||||
|
759
superset-frontend/package-lock.json
generated
759
superset-frontend/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -64,33 +64,33 @@
|
|||||||
"@data-ui/sparkline": "^0.0.84",
|
"@data-ui/sparkline": "^0.0.84",
|
||||||
"@emotion/core": "^10.0.28",
|
"@emotion/core": "^10.0.28",
|
||||||
"@superset-ui/chart-controls": "^0.15.5",
|
"@superset-ui/chart-controls": "^0.15.5",
|
||||||
"@superset-ui/core": "^0.15.2",
|
"@superset-ui/core": "^0.15.10",
|
||||||
"@superset-ui/legacy-plugin-chart-calendar": "^0.15.5",
|
"@superset-ui/legacy-plugin-chart-calendar": "^0.15.10",
|
||||||
"@superset-ui/legacy-plugin-chart-chord": "^0.15.5",
|
"@superset-ui/legacy-plugin-chart-chord": "^0.15.10",
|
||||||
"@superset-ui/legacy-plugin-chart-country-map": "^0.15.5",
|
"@superset-ui/legacy-plugin-chart-country-map": "^0.15.10",
|
||||||
"@superset-ui/legacy-plugin-chart-event-flow": "^0.15.5",
|
"@superset-ui/legacy-plugin-chart-event-flow": "^0.15.10",
|
||||||
"@superset-ui/legacy-plugin-chart-force-directed": "^0.15.5",
|
"@superset-ui/legacy-plugin-chart-force-directed": "^0.15.10",
|
||||||
"@superset-ui/legacy-plugin-chart-heatmap": "^0.15.5",
|
"@superset-ui/legacy-plugin-chart-heatmap": "^0.15.10",
|
||||||
"@superset-ui/legacy-plugin-chart-histogram": "^0.15.5",
|
"@superset-ui/legacy-plugin-chart-histogram": "^0.15.10",
|
||||||
"@superset-ui/legacy-plugin-chart-horizon": "^0.15.5",
|
"@superset-ui/legacy-plugin-chart-horizon": "^0.15.10",
|
||||||
"@superset-ui/legacy-plugin-chart-map-box": "^0.15.5",
|
"@superset-ui/legacy-plugin-chart-map-box": "^0.15.10",
|
||||||
"@superset-ui/legacy-plugin-chart-paired-t-test": "^0.15.5",
|
"@superset-ui/legacy-plugin-chart-paired-t-test": "^0.15.10",
|
||||||
"@superset-ui/legacy-plugin-chart-parallel-coordinates": "^0.15.5",
|
"@superset-ui/legacy-plugin-chart-parallel-coordinates": "^0.15.10",
|
||||||
"@superset-ui/legacy-plugin-chart-partition": "^0.15.5",
|
"@superset-ui/legacy-plugin-chart-partition": "^0.15.10",
|
||||||
"@superset-ui/legacy-plugin-chart-pivot-table": "^0.15.5",
|
"@superset-ui/legacy-plugin-chart-pivot-table": "^0.15.10",
|
||||||
"@superset-ui/legacy-plugin-chart-rose": "^0.15.5",
|
"@superset-ui/legacy-plugin-chart-rose": "^0.15.10",
|
||||||
"@superset-ui/legacy-plugin-chart-sankey": "^0.15.5",
|
"@superset-ui/legacy-plugin-chart-sankey": "^0.15.10",
|
||||||
"@superset-ui/legacy-plugin-chart-sankey-loop": "^0.15.5",
|
"@superset-ui/legacy-plugin-chart-sankey-loop": "^0.15.10",
|
||||||
"@superset-ui/legacy-plugin-chart-sunburst": "^0.15.5",
|
"@superset-ui/legacy-plugin-chart-sunburst": "^0.15.10",
|
||||||
"@superset-ui/legacy-plugin-chart-treemap": "^0.15.5",
|
"@superset-ui/legacy-plugin-chart-treemap": "^0.15.10",
|
||||||
"@superset-ui/legacy-plugin-chart-world-map": "^0.15.5",
|
"@superset-ui/legacy-plugin-chart-world-map": "^0.15.10",
|
||||||
"@superset-ui/legacy-preset-chart-big-number": "^0.15.5",
|
"@superset-ui/legacy-preset-chart-big-number": "^0.15.10",
|
||||||
"@superset-ui/legacy-preset-chart-deckgl": "^0.3.1",
|
"@superset-ui/legacy-preset-chart-deckgl": "^0.3.1",
|
||||||
"@superset-ui/legacy-preset-chart-nvd3": "^0.15.8",
|
"@superset-ui/legacy-preset-chart-nvd3": "^0.15.10",
|
||||||
"@superset-ui/plugin-chart-echarts": "^0.15.7",
|
"@superset-ui/plugin-chart-echarts": "^0.15.11",
|
||||||
"@superset-ui/plugin-chart-table": "^0.15.5",
|
"@superset-ui/plugin-chart-table": "^0.15.10",
|
||||||
"@superset-ui/plugin-chart-word-cloud": "^0.15.5",
|
"@superset-ui/plugin-chart-word-cloud": "^0.15.10",
|
||||||
"@superset-ui/preset-chart-xy": "^0.15.5",
|
"@superset-ui/preset-chart-xy": "^0.15.10",
|
||||||
"@vx/responsive": "^0.0.195",
|
"@vx/responsive": "^0.0.195",
|
||||||
"abortcontroller-polyfill": "^1.1.9",
|
"abortcontroller-polyfill": "^1.1.9",
|
||||||
"antd": "^4.5.2",
|
"antd": "^4.5.2",
|
||||||
|
@ -705,7 +705,94 @@ class ChartDataExtrasSchema(Schema):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class AnnotationLayerSchema(Schema):
|
||||||
|
annotationType = fields.String(
|
||||||
|
description="Type of annotation layer",
|
||||||
|
validate=validate.OneOf(
|
||||||
|
choices=("EVENT", "FORMULA", "INTERVAL", "TIME_SERIES",)
|
||||||
|
),
|
||||||
|
)
|
||||||
|
color = fields.String(description="Layer color", allow_none=True,)
|
||||||
|
descriptionColumns = fields.List(
|
||||||
|
fields.String(),
|
||||||
|
description="Columns to use as the description. If none are provided, "
|
||||||
|
"all will be shown.",
|
||||||
|
)
|
||||||
|
hideLine = fields.Boolean(
|
||||||
|
description="Should line be hidden. Only applies to line annotations",
|
||||||
|
allow_none=True,
|
||||||
|
)
|
||||||
|
intervalEndColumn = fields.String(
|
||||||
|
description=(
|
||||||
|
"Column containing end of interval. Only applies to interval layers"
|
||||||
|
),
|
||||||
|
allow_none=True,
|
||||||
|
)
|
||||||
|
name = fields.String(description="Name of layer", required=True)
|
||||||
|
opacity = fields.String(
|
||||||
|
description="Opacity of layer",
|
||||||
|
validate=validate.OneOf(
|
||||||
|
choices=("", "opacityLow", "opacityMedium", "opacityHigh"),
|
||||||
|
),
|
||||||
|
allow_none=True,
|
||||||
|
required=False,
|
||||||
|
)
|
||||||
|
overrides = fields.Dict(
|
||||||
|
keys=fields.String(
|
||||||
|
desciption="Name of property to be overridden",
|
||||||
|
validate=validate.OneOf(
|
||||||
|
choices=("granularity", "time_grain_sqla", "time_range", "time_shift"),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
values=fields.Raw(allow_none=True),
|
||||||
|
description="which properties should be overridable",
|
||||||
|
allow_none=True,
|
||||||
|
)
|
||||||
|
show = fields.Boolean(description="Should the layer be shown", required=True)
|
||||||
|
showMarkers = fields.Boolean(
|
||||||
|
description="Should markers be shown. Only applies to line annotations.",
|
||||||
|
required=True,
|
||||||
|
)
|
||||||
|
sourceType = fields.String(
|
||||||
|
description="Type of source for annotation data",
|
||||||
|
validate=validate.OneOf(choices=("", "line", "NATIVE", "table",)),
|
||||||
|
)
|
||||||
|
style = fields.String(
|
||||||
|
description="Line style. Only applies to time-series annotations",
|
||||||
|
validate=validate.OneOf(choices=("dashed", "dotted", "solid", "longDashed",)),
|
||||||
|
)
|
||||||
|
timeColumn = fields.String(
|
||||||
|
description="Column with event date or interval start date", allow_none=True,
|
||||||
|
)
|
||||||
|
titleColumn = fields.String(description="Column with title", allow_none=True,)
|
||||||
|
width = fields.Float(
|
||||||
|
description="Width of annotation line",
|
||||||
|
validate=[
|
||||||
|
Range(
|
||||||
|
min=0,
|
||||||
|
min_inclusive=True,
|
||||||
|
error=_("`width` must be greater or equal to 0"),
|
||||||
|
)
|
||||||
|
],
|
||||||
|
)
|
||||||
|
value = fields.Raw(
|
||||||
|
description="For formula annotations, this contains the formula. "
|
||||||
|
"For other types, this is the primary key of the source object.",
|
||||||
|
required=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class ChartDataQueryObjectSchema(Schema):
|
class ChartDataQueryObjectSchema(Schema):
|
||||||
|
annotation_layers = fields.List(
|
||||||
|
fields.Nested(AnnotationLayerSchema),
|
||||||
|
description="Annotation layers to apply to chart",
|
||||||
|
allow_none=True,
|
||||||
|
)
|
||||||
|
applied_time_extras = fields.Dict(
|
||||||
|
description="A mapping of temporal extras that have been applied to the query",
|
||||||
|
required=False,
|
||||||
|
example={"__time_range": "1 year ago : now"},
|
||||||
|
)
|
||||||
filters = fields.List(fields.Nested(ChartDataFilterSchema), required=False)
|
filters = fields.List(fields.Nested(ChartDataFilterSchema), required=False)
|
||||||
granularity = fields.String(
|
granularity = fields.String(
|
||||||
description="Name of temporal column used for time filtering. For legacy Druid "
|
description="Name of temporal column used for time filtering. For legacy Druid "
|
||||||
@ -817,6 +904,19 @@ class ChartDataQueryObjectSchema(Schema):
|
|||||||
"as `having_druid`.",
|
"as `having_druid`.",
|
||||||
deprecated=True,
|
deprecated=True,
|
||||||
)
|
)
|
||||||
|
druid_time_origin = fields.String(
|
||||||
|
description="Starting point for time grain counting on legacy Druid "
|
||||||
|
"datasources. Used to change e.g. Monday/Sunday first-day-of-week. "
|
||||||
|
"This field is deprecated and should be passed to `extras` "
|
||||||
|
"as `druid_time_origin`.",
|
||||||
|
allow_none=True,
|
||||||
|
)
|
||||||
|
url_params = fields.Dict(
|
||||||
|
description="Optional query parameters passed to a dashboard or Explore view",
|
||||||
|
keys=fields.String(description="The query parameter"),
|
||||||
|
values=fields.String(description="The value of the query parameter"),
|
||||||
|
allow_none=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class ChartDataDatasourceSchema(Schema):
|
class ChartDataDatasourceSchema(Schema):
|
||||||
@ -853,7 +953,28 @@ class ChartDataQueryContextSchema(Schema):
|
|||||||
# pylint: enable=no-self-use,unused-argument
|
# pylint: enable=no-self-use,unused-argument
|
||||||
|
|
||||||
|
|
||||||
|
class AnnotationDataSchema(Schema):
|
||||||
|
columns = fields.List(
|
||||||
|
fields.String(),
|
||||||
|
description="columns available in the annotation result",
|
||||||
|
required=True,
|
||||||
|
)
|
||||||
|
records = fields.List(
|
||||||
|
fields.Dict(keys=fields.String(),),
|
||||||
|
description="records mapping the column name to it's value",
|
||||||
|
required=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class ChartDataResponseResult(Schema):
|
class ChartDataResponseResult(Schema):
|
||||||
|
annotation_data = fields.List(
|
||||||
|
fields.Dict(
|
||||||
|
keys=fields.String(description="Annotation layer name"),
|
||||||
|
values=fields.String(),
|
||||||
|
),
|
||||||
|
description="All requested annotation data",
|
||||||
|
allow_none=True,
|
||||||
|
)
|
||||||
cache_key = fields.String(
|
cache_key = fields.String(
|
||||||
description="Unique cache key for query object", required=True, allow_none=True,
|
description="Unique cache key for query object", required=True, allow_none=True,
|
||||||
)
|
)
|
||||||
|
@ -155,6 +155,8 @@ class QueryContext:
|
|||||||
query_obj.row_offset = 0
|
query_obj.row_offset = 0
|
||||||
query_obj.columns = [o.column_name for o in self.datasource.columns]
|
query_obj.columns = [o.column_name for o in self.datasource.columns]
|
||||||
payload = self.get_df_payload(query_obj)
|
payload = self.get_df_payload(query_obj)
|
||||||
|
# TODO: implement
|
||||||
|
payload["annotation_data"] = []
|
||||||
df = payload["df"]
|
df = payload["df"]
|
||||||
status = payload["status"]
|
status = payload["status"]
|
||||||
if status != utils.QueryStatus.FAILED:
|
if status != utils.QueryStatus.FAILED:
|
||||||
|
@ -59,6 +59,7 @@ class QueryObject:
|
|||||||
and druid. The query objects are constructed on the client.
|
and druid. The query objects are constructed on the client.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
annotation_layers: List[Dict[str, Any]]
|
||||||
granularity: Optional[str]
|
granularity: Optional[str]
|
||||||
from_dttm: Optional[datetime]
|
from_dttm: Optional[datetime]
|
||||||
to_dttm: Optional[datetime]
|
to_dttm: Optional[datetime]
|
||||||
@ -79,6 +80,7 @@ class QueryObject:
|
|||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
|
annotation_layers: Optional[List[Dict[str, Any]]] = None,
|
||||||
granularity: Optional[str] = None,
|
granularity: Optional[str] = None,
|
||||||
metrics: Optional[List[Union[Dict[str, Any], str]]] = None,
|
metrics: Optional[List[Union[Dict[str, Any], str]]] = None,
|
||||||
groupby: Optional[List[str]] = None,
|
groupby: Optional[List[str]] = None,
|
||||||
@ -97,9 +99,11 @@ class QueryObject:
|
|||||||
post_processing: Optional[List[Optional[Dict[str, Any]]]] = None,
|
post_processing: Optional[List[Optional[Dict[str, Any]]]] = None,
|
||||||
**kwargs: Any,
|
**kwargs: Any,
|
||||||
):
|
):
|
||||||
|
annotation_layers = annotation_layers or []
|
||||||
metrics = metrics or []
|
metrics = metrics or []
|
||||||
extras = extras or {}
|
extras = extras or {}
|
||||||
is_sip_38 = is_feature_enabled("SIP_38_VIZ_REARCHITECTURE")
|
is_sip_38 = is_feature_enabled("SIP_38_VIZ_REARCHITECTURE")
|
||||||
|
self.annotation_layers = annotation_layers
|
||||||
self.granularity = granularity
|
self.granularity = granularity
|
||||||
self.from_dttm, self.to_dttm = utils.get_since_until(
|
self.from_dttm, self.to_dttm = utils.get_since_until(
|
||||||
relative_start=extras.get(
|
relative_start=extras.get(
|
||||||
|
Loading…
Reference in New Issue
Block a user