mirror of https://github.com/apache/superset.git
fix: native annotations (#10037)
* fix: native annotations * Add test * Add comment to test
This commit is contained in:
parent
373651efa4
commit
a3393c1bc4
|
@ -196,6 +196,7 @@ class QueryContext:
|
||||||
extra_cache_keys=extra_cache_keys,
|
extra_cache_keys=extra_cache_keys,
|
||||||
rls=security_manager.get_rls_ids(self.datasource)
|
rls=security_manager.get_rls_ids(self.datasource)
|
||||||
if config["ENABLE_ROW_LEVEL_SECURITY"]
|
if config["ENABLE_ROW_LEVEL_SECURITY"]
|
||||||
|
and self.datasource.is_rls_supported
|
||||||
else [],
|
else [],
|
||||||
changed_on=self.datasource.changed_on,
|
changed_on=self.datasource.changed_on,
|
||||||
**kwargs
|
**kwargs
|
||||||
|
|
|
@ -84,6 +84,9 @@ class BaseDatasource(
|
||||||
# Used to do code highlighting when displaying the query in the UI
|
# Used to do code highlighting when displaying the query in the UI
|
||||||
query_language: Optional[str] = None
|
query_language: Optional[str] = None
|
||||||
|
|
||||||
|
# Only some datasources support Row Level Security
|
||||||
|
is_rls_supported: bool = False
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def name(self) -> str:
|
def name(self) -> str:
|
||||||
# can be a Column or a property pointing to one
|
# can be a Column or a property pointing to one
|
||||||
|
|
|
@ -16,7 +16,6 @@
|
||||||
# under the License.
|
# under the License.
|
||||||
# pylint: disable=C,R,W
|
# pylint: disable=C,R,W
|
||||||
import logging
|
import logging
|
||||||
import re
|
|
||||||
from collections import OrderedDict
|
from collections import OrderedDict
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
from typing import Any, Dict, Hashable, List, NamedTuple, Optional, Tuple, Union
|
from typing import Any, Dict, Hashable, List, NamedTuple, Optional, Tuple, Union
|
||||||
|
@ -394,6 +393,7 @@ class SqlaTable(Model, BaseDatasource):
|
||||||
|
|
||||||
type = "table"
|
type = "table"
|
||||||
query_language = "sql"
|
query_language = "sql"
|
||||||
|
is_rls_supported = True
|
||||||
metric_class = SqlMetric
|
metric_class = SqlMetric
|
||||||
column_class = TableColumn
|
column_class = TableColumn
|
||||||
owner_class = security_manager.user_model
|
owner_class = security_manager.user_model
|
||||||
|
|
|
@ -103,7 +103,7 @@ class AnnotationLayerModelView(SupersetModelView): # pylint: disable=too-many-a
|
||||||
add_title = _("Add Annotation Layer")
|
add_title = _("Add Annotation Layer")
|
||||||
edit_title = _("Edit Annotation Layer")
|
edit_title = _("Edit Annotation Layer")
|
||||||
|
|
||||||
list_columns = ["name", "descr"]
|
list_columns = ["id", "name", "descr"]
|
||||||
edit_columns = ["name", "descr"]
|
edit_columns = ["name", "descr"]
|
||||||
add_columns = edit_columns
|
add_columns = edit_columns
|
||||||
|
|
||||||
|
|
|
@ -43,10 +43,9 @@ from dateutil import relativedelta as rdelta
|
||||||
from flask import request
|
from flask import request
|
||||||
from flask_babel import lazy_gettext as _
|
from flask_babel import lazy_gettext as _
|
||||||
from geopy.point import Point
|
from geopy.point import Point
|
||||||
from markdown import markdown
|
|
||||||
from pandas.tseries.frequencies import to_offset
|
from pandas.tseries.frequencies import to_offset
|
||||||
|
|
||||||
from superset import app, cache, get_manifest_files, security_manager
|
from superset import app, cache, security_manager
|
||||||
from superset.constants import NULL_STRING
|
from superset.constants import NULL_STRING
|
||||||
from superset.errors import ErrorLevel, SupersetError, SupersetErrorType
|
from superset.errors import ErrorLevel, SupersetError, SupersetErrorType
|
||||||
from superset.exceptions import (
|
from superset.exceptions import (
|
||||||
|
@ -405,7 +404,7 @@ class BaseViz:
|
||||||
cache_dict["extra_cache_keys"] = self.datasource.get_extra_cache_keys(query_obj)
|
cache_dict["extra_cache_keys"] = self.datasource.get_extra_cache_keys(query_obj)
|
||||||
cache_dict["rls"] = (
|
cache_dict["rls"] = (
|
||||||
security_manager.get_rls_ids(self.datasource)
|
security_manager.get_rls_ids(self.datasource)
|
||||||
if config["ENABLE_ROW_LEVEL_SECURITY"]
|
if config["ENABLE_ROW_LEVEL_SECURITY"] and self.datasource.is_rls_supported
|
||||||
else []
|
else []
|
||||||
)
|
)
|
||||||
cache_dict["changed_on"] = self.datasource.changed_on
|
cache_dict["changed_on"] = self.datasource.changed_on
|
||||||
|
|
|
@ -177,12 +177,18 @@ class CoreTests(SupersetTestCase):
|
||||||
db.session.add(annotation)
|
db.session.add(annotation)
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
|
|
||||||
resp = self.get_resp(
|
resp_annotations = json.loads(
|
||||||
|
self.get_resp("annotationlayermodelview/api/read")
|
||||||
|
)
|
||||||
|
# the UI needs id and name to function
|
||||||
|
self.assertIn("id", resp_annotations["result"][0])
|
||||||
|
self.assertIn("name", resp_annotations["result"][0])
|
||||||
|
|
||||||
|
layer = self.get_resp(
|
||||||
f"/superset/annotation_json/{layer.id}?form_data="
|
f"/superset/annotation_json/{layer.id}?form_data="
|
||||||
+ quote(json.dumps({"time_range": "100 years ago : now"}))
|
+ quote(json.dumps({"time_range": "100 years ago : now"}))
|
||||||
)
|
)
|
||||||
|
self.assertIn("my_annotation", layer)
|
||||||
assert "my_annotation" in resp
|
|
||||||
|
|
||||||
def test_admin_only_permissions(self):
|
def test_admin_only_permissions(self):
|
||||||
def assert_admin_permission_in(role_name, assert_func):
|
def assert_admin_permission_in(role_name, assert_func):
|
||||||
|
|
Loading…
Reference in New Issue