mirror of
https://github.com/apache/superset.git
synced 2026-04-19 08:04:53 +00:00
fix: Support metric currency as dict during import (#34080)
This commit is contained in:
@@ -14,39 +14,48 @@
|
||||
# KIND, either express or implied. See the License for the
|
||||
# specific language governing permissions and limitations
|
||||
# under the License.
|
||||
# isort:skip_file
|
||||
"""Unit tests for Superset"""
|
||||
|
||||
from contextlib import contextmanager
|
||||
from datetime import datetime
|
||||
from importlib.util import find_spec
|
||||
from contextlib import contextmanager
|
||||
from typing import Any, Union, Optional
|
||||
from unittest.mock import Mock, patch, MagicMock
|
||||
from io import BytesIO
|
||||
from typing import Any, Optional, Union
|
||||
from unittest.mock import MagicMock, Mock, patch
|
||||
from zipfile import ZipFile
|
||||
|
||||
import pandas as pd
|
||||
import prison
|
||||
from flask import Response, g
|
||||
import yaml
|
||||
from flask import g, Response
|
||||
from flask_appbuilder.security.sqla import models as ab_models
|
||||
from flask_testing import TestCase
|
||||
from sqlalchemy.dialects.mysql import dialect
|
||||
from sqlalchemy.engine.interfaces import Dialect
|
||||
from sqlalchemy.ext.declarative import DeclarativeMeta
|
||||
from sqlalchemy.orm import Session # noqa: F401
|
||||
from sqlalchemy.sql import func
|
||||
from sqlalchemy.dialects.mysql import dialect
|
||||
|
||||
from tests.integration_tests.constants import ADMIN_USERNAME
|
||||
from tests.integration_tests.test_app import app, login
|
||||
from superset.sql.parse import CTASMethod
|
||||
from superset import db, security_manager
|
||||
from superset.connectors.sqla.models import BaseDatasource, SqlaTable
|
||||
from superset.models import core as models
|
||||
from superset.models.slice import Slice
|
||||
from superset.models.core import Database
|
||||
from superset.models.dashboard import Dashboard
|
||||
from superset.utils.core import get_example_default_schema, shortid
|
||||
from superset.models.slice import Slice
|
||||
from superset.sql.parse import CTASMethod
|
||||
from superset.utils import json
|
||||
from superset.utils.core import get_example_default_schema, shortid
|
||||
from superset.utils.database import get_example_database
|
||||
from superset.views.base_api import BaseSupersetModelRestApi
|
||||
from tests.integration_tests.constants import ADMIN_USERNAME
|
||||
from tests.integration_tests.fixtures.importexport import (
|
||||
chart_config,
|
||||
dashboard_config,
|
||||
database_config,
|
||||
dataset_config,
|
||||
metadata_files,
|
||||
)
|
||||
from tests.integration_tests.test_app import app, login
|
||||
|
||||
FAKE_DB_NAME = "fake_db_100"
|
||||
DEFAULT_PASSWORD = "general" # noqa: S105
|
||||
@@ -606,6 +615,48 @@ class SupersetTestCase(TestCase):
|
||||
response = self.get_assert_metric(uri, "get_list")
|
||||
return response
|
||||
|
||||
@staticmethod
|
||||
def create_import_v1_zip_file(asset_type: str, **kwargs) -> BytesIO:
|
||||
asset_configs = {
|
||||
"databases": (kwargs.get("databases"), database_config, True),
|
||||
"datasets": (
|
||||
kwargs.get("datasets"),
|
||||
dataset_config,
|
||||
asset_type != "database",
|
||||
),
|
||||
"charts": (
|
||||
kwargs.get("charts"),
|
||||
chart_config,
|
||||
asset_type in {"chart", "dashboard"},
|
||||
),
|
||||
"dashboards": (
|
||||
kwargs.get("dashboards"),
|
||||
dashboard_config,
|
||||
asset_type == "dashboard",
|
||||
),
|
||||
}
|
||||
buf = BytesIO()
|
||||
with ZipFile(buf, "w") as bundle:
|
||||
with bundle.open("export/metadata.yaml", "w") as fp:
|
||||
fp.write(yaml.safe_dump(metadata_files[asset_type]).encode())
|
||||
|
||||
for folder, (
|
||||
assets,
|
||||
default_config,
|
||||
should_have_default,
|
||||
) in asset_configs.items():
|
||||
if assets:
|
||||
for i, asset in enumerate(assets):
|
||||
with bundle.open(
|
||||
f"export/{folder}/{asset_type}_{i + 1}.yaml", "w"
|
||||
) as fp:
|
||||
fp.write(yaml.safe_dump(asset).encode())
|
||||
elif should_have_default:
|
||||
with bundle.open(f"export/{folder}/{asset_type}.yaml", "w") as fp:
|
||||
fp.write(yaml.safe_dump(default_config).encode())
|
||||
buf.seek(0)
|
||||
return buf
|
||||
|
||||
|
||||
@contextmanager
|
||||
def db_insert_temp_object(obj: DeclarativeMeta):
|
||||
|
||||
Reference in New Issue
Block a user