You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by be...@apache.org on 2020/11/02 23:14:05 UTC
[incubator-superset] branch master updated: chore: remove sanitize
(#11532)
This is an automated email from the ASF dual-hosted git repository.
beto pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-superset.git
The following commit(s) were added to refs/heads/master by this push:
new fd10c47 chore: remove sanitize (#11532)
fd10c47 is described below
commit fd10c47bc6b4f858babc55dc21165b4912d67baa
Author: Beto Dealmeida <ro...@dealmeida.net>
AuthorDate: Mon Nov 2 15:13:44 2020 -0800
chore: remove sanitize (#11532)
* chore: remove sanitize
* Fix lint
---
superset/charts/commands/export.py | 5 +++--
superset/dashboards/commands/export.py | 5 +++--
superset/databases/commands/export.py | 7 +++---
superset/datasets/commands/export.py | 7 +++---
superset/queries/saved_queries/commands/export.py | 9 ++++----
superset/utils/dict_import_export.py | 17 --------------
tests/charts/commands_tests.py | 6 ++---
tests/dashboards/commands_tests.py | 27 +++++++++++------------
tests/queries/saved_queries/commands_tests.py | 6 ++---
9 files changed, 38 insertions(+), 51 deletions(-)
diff --git a/superset/charts/commands/export.py b/superset/charts/commands/export.py
index 23bdb55..765431f 100644
--- a/superset/charts/commands/export.py
+++ b/superset/charts/commands/export.py
@@ -21,13 +21,14 @@ import logging
from typing import Iterator, Tuple
import yaml
+from werkzeug.utils import secure_filename
from superset.charts.commands.exceptions import ChartNotFoundError
from superset.charts.dao import ChartDAO
from superset.datasets.commands.export import ExportDatasetsCommand
from superset.importexport.commands.base import ExportModelsCommand
from superset.models.slice import Slice
-from superset.utils.dict_import_export import IMPORT_EXPORT_VERSION, sanitize
+from superset.utils.dict_import_export import IMPORT_EXPORT_VERSION
logger = logging.getLogger(__name__)
@@ -43,7 +44,7 @@ class ExportChartsCommand(ExportModelsCommand):
@staticmethod
def export(model: Slice) -> Iterator[Tuple[str, str]]:
- chart_slug = sanitize(model.slice_name)
+ chart_slug = secure_filename(model.slice_name)
file_name = f"charts/{chart_slug}.yaml"
payload = model.export_to_dict(
diff --git a/superset/dashboards/commands/export.py b/superset/dashboards/commands/export.py
index ba55b64..a172969 100644
--- a/superset/dashboards/commands/export.py
+++ b/superset/dashboards/commands/export.py
@@ -21,13 +21,14 @@ import logging
from typing import Iterator, Tuple
import yaml
+from werkzeug.utils import secure_filename
from superset.charts.commands.export import ExportChartsCommand
from superset.dashboards.commands.exceptions import DashboardNotFoundError
from superset.dashboards.dao import DashboardDAO
from superset.importexport.commands.base import ExportModelsCommand
from superset.models.dashboard import Dashboard
-from superset.utils.dict_import_export import IMPORT_EXPORT_VERSION, sanitize
+from superset.utils.dict_import_export import IMPORT_EXPORT_VERSION
logger = logging.getLogger(__name__)
@@ -43,7 +44,7 @@ class ExportDashboardsCommand(ExportModelsCommand):
@staticmethod
def export(model: Dashboard) -> Iterator[Tuple[str, str]]:
- dashboard_slug = sanitize(model.dashboard_title)
+ dashboard_slug = secure_filename(model.dashboard_title)
file_name = f"dashboards/{dashboard_slug}.yaml"
payload = model.export_to_dict(
diff --git a/superset/databases/commands/export.py b/superset/databases/commands/export.py
index a7715f5..8cd3212 100644
--- a/superset/databases/commands/export.py
+++ b/superset/databases/commands/export.py
@@ -21,12 +21,13 @@ import logging
from typing import Iterator, Tuple
import yaml
+from werkzeug.utils import secure_filename
from superset.databases.commands.exceptions import DatabaseNotFoundError
from superset.databases.dao import DatabaseDAO
from superset.importexport.commands.base import ExportModelsCommand
from superset.models.core import Database
-from superset.utils.dict_import_export import IMPORT_EXPORT_VERSION, sanitize
+from superset.utils.dict_import_export import IMPORT_EXPORT_VERSION
logger = logging.getLogger(__name__)
@@ -38,7 +39,7 @@ class ExportDatabasesCommand(ExportModelsCommand):
@staticmethod
def export(model: Database) -> Iterator[Tuple[str, str]]:
- database_slug = sanitize(model.database_name)
+ database_slug = secure_filename(model.database_name)
file_name = f"databases/{database_slug}.yaml"
payload = model.export_to_dict(
@@ -61,7 +62,7 @@ class ExportDatabasesCommand(ExportModelsCommand):
yield file_name, file_content
for dataset in model.tables:
- dataset_slug = sanitize(dataset.table_name)
+ dataset_slug = secure_filename(dataset.table_name)
file_name = f"datasets/{database_slug}/{dataset_slug}.yaml"
payload = dataset.export_to_dict(
diff --git a/superset/datasets/commands/export.py b/superset/datasets/commands/export.py
index a14cdcd..b4c9371 100644
--- a/superset/datasets/commands/export.py
+++ b/superset/datasets/commands/export.py
@@ -21,12 +21,13 @@ import logging
from typing import Iterator, Tuple
import yaml
+from werkzeug.utils import secure_filename
from superset.connectors.sqla.models import SqlaTable
from superset.datasets.commands.exceptions import DatasetNotFoundError
from superset.datasets.dao import DatasetDAO
from superset.importexport.commands.base import ExportModelsCommand
-from superset.utils.dict_import_export import IMPORT_EXPORT_VERSION, sanitize
+from superset.utils.dict_import_export import IMPORT_EXPORT_VERSION
logger = logging.getLogger(__name__)
@@ -38,8 +39,8 @@ class ExportDatasetsCommand(ExportModelsCommand):
@staticmethod
def export(model: SqlaTable) -> Iterator[Tuple[str, str]]:
- database_slug = sanitize(model.database.database_name)
- dataset_slug = sanitize(model.table_name)
+ database_slug = secure_filename(model.database.database_name)
+ dataset_slug = secure_filename(model.table_name)
file_name = f"datasets/{database_slug}/{dataset_slug}.yaml"
payload = model.export_to_dict(
diff --git a/superset/queries/saved_queries/commands/export.py b/superset/queries/saved_queries/commands/export.py
index 33dfffc..16ce4fc 100644
--- a/superset/queries/saved_queries/commands/export.py
+++ b/superset/queries/saved_queries/commands/export.py
@@ -21,12 +21,13 @@ import logging
from typing import Iterator, Tuple
import yaml
+from werkzeug.utils import secure_filename
from superset.importexport.commands.base import ExportModelsCommand
from superset.models.sql_lab import SavedQuery
from superset.queries.saved_queries.commands.exceptions import SavedQueryNotFoundError
from superset.queries.saved_queries.dao import SavedQueryDAO
-from superset.utils.dict_import_export import IMPORT_EXPORT_VERSION, sanitize
+from superset.utils.dict_import_export import IMPORT_EXPORT_VERSION
logger = logging.getLogger(__name__)
@@ -39,9 +40,9 @@ class ExportSavedQueriesCommand(ExportModelsCommand):
@staticmethod
def export(model: SavedQuery) -> Iterator[Tuple[str, str]]:
# build filename based on database, optional schema, and label
- database_slug = sanitize(model.database.database_name)
- schema_slug = sanitize(model.schema)
- query_slug = sanitize(model.label) or str(model.uuid)
+ database_slug = secure_filename(model.database.database_name)
+ schema_slug = secure_filename(model.schema)
+ query_slug = secure_filename(model.label) or str(model.uuid)
file_name = f"queries/{database_slug}/{schema_slug}/{query_slug}.yaml"
payload = model.export_to_dict(
diff --git a/superset/utils/dict_import_export.py b/superset/utils/dict_import_export.py
index 732acbf..c2606f4 100644
--- a/superset/utils/dict_import_export.py
+++ b/superset/utils/dict_import_export.py
@@ -15,8 +15,6 @@
# specific language governing permissions and limitations
# under the License.
import logging
-import re
-import unicodedata
from typing import Any, Dict, List, Optional
from sqlalchemy.orm import Session
@@ -98,18 +96,3 @@ def import_from_dict(
session.commit()
else:
logger.info("Supplied object is not a dictionary.")
-
-
-def strip_accents(text: str) -> str:
- text = unicodedata.normalize("NFD", text).encode("ascii", "ignore").decode("utf-8")
-
- return str(text)
-
-
-def sanitize(name: str) -> str:
- """Sanitize a post title into a directory name."""
- name = name.lower().replace(" ", "_")
- name = re.sub(r"[^\w]", "", name)
- name = strip_accents(name)
-
- return name
diff --git a/tests/charts/commands_tests.py b/tests/charts/commands_tests.py
index 13dec7b..9189d4c 100644
--- a/tests/charts/commands_tests.py
+++ b/tests/charts/commands_tests.py
@@ -37,13 +37,13 @@ class TestExportChartsCommand(SupersetTestCase):
expected = [
"metadata.yaml",
- "charts/energy_sankey.yaml",
+ "charts/Energy_Sankey.yaml",
"datasets/examples/energy_usage.yaml",
"databases/examples.yaml",
]
assert expected == list(contents.keys())
- metadata = yaml.safe_load(contents["charts/energy_sankey.yaml"])
+ metadata = yaml.safe_load(contents["charts/Energy_Sankey.yaml"])
assert metadata == {
"slice_name": "Energy Sankey",
"viz_type": "sankey",
@@ -90,7 +90,7 @@ class TestExportChartsCommand(SupersetTestCase):
command = ExportChartsCommand([example_chart.id])
contents = dict(command.run())
- metadata = yaml.safe_load(contents["charts/energy_sankey.yaml"])
+ metadata = yaml.safe_load(contents["charts/Energy_Sankey.yaml"])
assert list(metadata.keys()) == [
"slice_name",
"viz_type",
diff --git a/tests/dashboards/commands_tests.py b/tests/dashboards/commands_tests.py
index 075d2b8..ce23294 100644
--- a/tests/dashboards/commands_tests.py
+++ b/tests/dashboards/commands_tests.py
@@ -39,24 +39,23 @@ class TestExportDashboardsCommand(SupersetTestCase):
expected_paths = {
"metadata.yaml",
- "dashboards/world_banks_data.yaml",
- "charts/box_plot.yaml",
+ "dashboards/World_Banks_Data.yaml",
+ "charts/Region_Filter.yaml",
"datasets/examples/wb_health_population.yaml",
"databases/examples.yaml",
- "charts/treemap.yaml",
- "charts/region_filter.yaml",
- "charts/_rural.yaml",
- "charts/worlds_population.yaml",
- "charts/most_populated_countries.yaml",
- "charts/growth_rate.yaml",
- "charts/life_expectancy_vs_rural_.yaml",
- "charts/rural_breakdown.yaml",
- "charts/worlds_pop_growth.yaml",
+ "charts/Worlds_Population.yaml",
+ "charts/Most_Populated_Countries.yaml",
+ "charts/Growth_Rate.yaml",
+ "charts/Rural.yaml",
+ "charts/Life_Expectancy_VS_Rural.yaml",
+ "charts/Rural_Breakdown.yaml",
+ "charts/Worlds_Pop_Growth.yaml",
+ "charts/Box_plot.yaml",
+ "charts/Treemap.yaml",
}
-
assert expected_paths == set(contents.keys())
- metadata = yaml.safe_load(contents["dashboards/world_banks_data.yaml"])
+ metadata = yaml.safe_load(contents["dashboards/World_Banks_Data.yaml"])
# remove chart UUIDs from metadata so we can compare
for chart_info in metadata["position"].values():
@@ -178,7 +177,7 @@ class TestExportDashboardsCommand(SupersetTestCase):
command = ExportDashboardsCommand([example_dashboard.id])
contents = dict(command.run())
- metadata = yaml.safe_load(contents["dashboards/world_banks_data.yaml"])
+ metadata = yaml.safe_load(contents["dashboards/World_Banks_Data.yaml"])
assert list(metadata.keys()) == [
"dashboard_title",
"description",
diff --git a/tests/queries/saved_queries/commands_tests.py b/tests/queries/saved_queries/commands_tests.py
index 34f4dbe..1525576 100644
--- a/tests/queries/saved_queries/commands_tests.py
+++ b/tests/queries/saved_queries/commands_tests.py
@@ -54,12 +54,12 @@ class TestExportSavedQueriesCommand(SupersetTestCase):
expected = [
"metadata.yaml",
- "queries/examples/schema1/the_answer.yaml",
+ "queries/examples/schema1/The_answer.yaml",
"databases/examples.yaml",
]
assert expected == list(contents.keys())
- metadata = yaml.safe_load(contents["queries/examples/schema1/the_answer.yaml"])
+ metadata = yaml.safe_load(contents["queries/examples/schema1/The_answer.yaml"])
assert metadata == {
"schema": "schema1",
"label": "The answer",
@@ -98,7 +98,7 @@ class TestExportSavedQueriesCommand(SupersetTestCase):
command = ExportSavedQueriesCommand([self.example_query.id])
contents = dict(command.run())
- metadata = yaml.safe_load(contents["queries/examples/schema1/the_answer.yaml"])
+ metadata = yaml.safe_load(contents["queries/examples/schema1/The_answer.yaml"])
assert list(metadata.keys()) == [
"schema",
"label",