feat(tag): fast follow for Tags flatten api + update client with generator + some bug fixes (#25309)

This commit is contained in:
Hugh A. Miles II
2023-09-18 14:56:08 -04:00
committed by GitHub
parent 6e799e37f4
commit 090ae64dfa
10 changed files with 124 additions and 37 deletions

View File

@@ -530,8 +530,23 @@ class TestTagApi(SupersetTestCase):
rv = self.client.post(
uri,
json={
"tags": ["tag1", "tag2", "tag3"],
"objects_to_tag": [["dashboard", dashboard.id], ["chart", chart.id]],
"tags": [
{
"name": "tag1",
"objects_to_tag": [
["dashboard", dashboard.id],
["chart", chart.id],
],
},
{
"name": "tag2",
"objects_to_tag": [["dashboard", dashboard.id]],
},
{
"name": "tag3",
"objects_to_tag": [["chart", chart.id]],
},
]
},
)
@@ -547,11 +562,10 @@ class TestTagApi(SupersetTestCase):
TaggedObject.object_id == dashboard.id,
TaggedObject.object_type == ObjectTypes.dashboard,
)
assert tagged_objects.count() == 3
assert tagged_objects.count() == 2
tagged_objects = db.session.query(TaggedObject).filter(
# TaggedObject.tag_id.in_([tag.id for tag in tags]),
TaggedObject.object_id == chart.id,
TaggedObject.object_type == ObjectTypes.chart,
)
assert tagged_objects.count() == 3
assert tagged_objects.count() == 2

View File

@@ -169,6 +169,3 @@ def test_create_tag_relationship(mocker):
# Verify that the correct number of TaggedObjects are added to the session
assert mock_session.add_all.call_count == 1
assert len(mock_session.add_all.call_args[0][0]) == len(objects_to_tag)
# Verify that commit is called
mock_session.commit.assert_called_once()

View File

@@ -1,4 +1,5 @@
import pytest
from pytest_mock import MockFixture
from sqlalchemy.orm.session import Session
from superset.utils.core import DatasourceType
@@ -47,7 +48,7 @@ def session_with_data(session: Session):
yield session
def test_create_command_success(session_with_data: Session):
def test_create_command_success(session_with_data: Session, mocker: MockFixture):
from superset.connectors.sqla.models import SqlaTable
from superset.daos.tag import TagDAO
from superset.models.dashboard import Dashboard
@@ -61,6 +62,12 @@ def test_create_command_success(session_with_data: Session):
chart = session_with_data.query(Slice).first()
dashboard = session_with_data.query(Dashboard).first()
mocker.patch(
"superset.security.SupersetSecurityManager.is_admin", return_value=True
)
mocker.patch("superset.daos.chart.ChartDAO.find_by_id", return_value=chart)
mocker.patch("superset.daos.query.SavedQueryDAO.find_by_id", return_value=query)
objects_to_tag = [
(ObjectTypes.query, query.id),
(ObjectTypes.chart, chart.id),
@@ -84,7 +91,9 @@ def test_create_command_success(session_with_data: Session):
)
def test_create_command_failed_validate(session_with_data: Session):
def test_create_command_failed_validate(
session_with_data: Session, mocker: MockFixture
):
from superset.connectors.sqla.models import SqlaTable
from superset.daos.tag import TagDAO
from superset.models.dashboard import Dashboard
@@ -98,6 +107,12 @@ def test_create_command_failed_validate(session_with_data: Session):
chart = session_with_data.query(Slice).first()
dashboard = session_with_data.query(Dashboard).first()
mocker.patch(
"superset.security.SupersetSecurityManager.is_admin", return_value=True
)
mocker.patch("superset.daos.chart.ChartDAO.find_by_id", return_value=query)
mocker.patch("superset.daos.query.SavedQueryDAO.find_by_id", return_value=chart)
objects_to_tag = [
(ObjectTypes.query, query.id),
(ObjectTypes.chart, chart.id),

View File

@@ -1,4 +1,5 @@
import pytest
from pytest_mock import MockFixture
from sqlalchemy.orm.session import Session
from superset.utils.core import DatasourceType
@@ -56,13 +57,19 @@ def session_with_data(session: Session):
yield session
def test_update_command_success(session_with_data: Session):
def test_update_command_success(session_with_data: Session, mocker: MockFixture):
from superset.daos.tag import TagDAO
from superset.models.dashboard import Dashboard
from superset.tags.commands.update import UpdateTagCommand
from superset.tags.models import ObjectTypes, TaggedObject
dashboard = session_with_data.query(Dashboard).first()
mocker.patch(
"superset.security.SupersetSecurityManager.is_admin", return_value=True
)
mocker.patch(
"superset.daos.dashboard.DashboardDAO.find_by_id", return_value=dashboard
)
objects_to_tag = [
(ObjectTypes.dashboard, dashboard.id),
@@ -84,7 +91,9 @@ def test_update_command_success(session_with_data: Session):
assert len(session_with_data.query(TaggedObject).all()) == len(objects_to_tag)
def test_update_command_success_duplicates(session_with_data: Session):
def test_update_command_success_duplicates(
session_with_data: Session, mocker: MockFixture
):
from superset.daos.tag import TagDAO
from superset.models.dashboard import Dashboard
from superset.models.slice import Slice
@@ -95,6 +104,14 @@ def test_update_command_success_duplicates(session_with_data: Session):
dashboard = session_with_data.query(Dashboard).first()
chart = session_with_data.query(Slice).first()
mocker.patch(
"superset.security.SupersetSecurityManager.is_admin", return_value=True
)
mocker.patch("superset.daos.chart.ChartDAO.find_by_id", return_value=chart)
mocker.patch(
"superset.daos.dashboard.DashboardDAO.find_by_id", return_value=dashboard
)
objects_to_tag = [
(ObjectTypes.dashboard, dashboard.id),
]
@@ -124,14 +141,16 @@ def test_update_command_success_duplicates(session_with_data: Session):
assert changed_model.objects[0].object_id == chart.id
def test_update_command_failed_validation(session_with_data: Session):
def test_update_command_failed_validation(
session_with_data: Session, mocker: MockFixture
):
from superset.daos.tag import TagDAO
from superset.models.dashboard import Dashboard
from superset.models.slice import Slice
from superset.tags.commands.create import CreateCustomTagWithRelationshipsCommand
from superset.tags.commands.exceptions import TagInvalidError
from superset.tags.commands.update import UpdateTagCommand
from superset.tags.models import ObjectTypes, TaggedObject
from superset.tags.models import ObjectTypes
dashboard = session_with_data.query(Dashboard).first()
chart = session_with_data.query(Slice).first()
@@ -139,6 +158,14 @@ def test_update_command_failed_validation(session_with_data: Session):
(ObjectTypes.chart, chart.id),
]
mocker.patch(
"superset.security.SupersetSecurityManager.is_admin", return_value=True
)
mocker.patch("superset.daos.chart.ChartDAO.find_by_id", return_value=chart)
mocker.patch(
"superset.daos.dashboard.DashboardDAO.find_by_id", return_value=dashboard
)
CreateCustomTagWithRelationshipsCommand(
data={"name": "test_tag", "objects_to_tag": objects_to_tag}
).run()