From 15c95a15ccf3cd6104de8191446e72943b23cee5 Mon Sep 17 00:00:00 2001 From: Mike Gouline <1960272+gouline@users.noreply.github.com> Date: Wed, 6 Jul 2022 11:00:20 +1000 Subject: [PATCH] Visibility type for models --- dbtmetabase/metabase.py | 20 +++++++------------- dbtmetabase/models/metabase.py | 2 ++ dbtmetabase/parsers/dbt_manifest.py | 28 +++++++++++++++++++++------- 3 files changed, 30 insertions(+), 20 deletions(-) diff --git a/dbtmetabase/metabase.py b/dbtmetabase/metabase.py index d6eb09aa..1d880a94 100644 --- a/dbtmetabase/metabase.py +++ b/dbtmetabase/metabase.py @@ -231,26 +231,20 @@ def export_model( return # Empty strings not accepted by Metabase - if not model.description: - model_description = None - else: - model_description = model.description - if not model.points_of_interest: - model_points_of_interest = None - else: - model_points_of_interest = model.points_of_interest - if not model.caveats: - model_caveats = None - else: - model_caveats = model.caveats + model_description = model.description or None + model_points_of_interest = model.points_of_interest or None + model_caveats = model.caveats or None + model_visibility = model.visibility_type or "normal" body_table = {} - if api_table["description"] != model_description: + if api_table.get("description") != model_description: body_table["description"] = model_description if api_table.get("points_of_interest") != model_points_of_interest: body_table["points_of_interest"] = model_points_of_interest if api_table.get("caveats") != model_caveats: body_table["caveats"] = model_caveats + if api_table.get("visibility_type") != model_visibility: + body_table["visibility_type"] = model_visibility table_id = api_table["id"] if bool(body_table): diff --git a/dbtmetabase/models/metabase.py b/dbtmetabase/models/metabase.py index 7d914cce..47b1f5cd 100644 --- a/dbtmetabase/models/metabase.py +++ b/dbtmetabase/models/metabase.py @@ -45,6 +45,8 @@ class MetabaseModel: dbt_name: Optional[str] = None source: Optional[str] = None unique_id: Optional[str] = None + + visibility_type: Optional[str] = None @property def ref(self) -> Optional[str]: diff --git a/dbtmetabase/parsers/dbt_manifest.py b/dbtmetabase/parsers/dbt_manifest.py index 7f2ae813..4c4246cc 100644 --- a/dbtmetabase/parsers/dbt_manifest.py +++ b/dbtmetabase/parsers/dbt_manifest.py @@ -271,10 +271,11 @@ def _read_model( unique_id=unique_id, source=source, dbt_name=dbt_name, + **DbtManifestReader._read_meta_fields(model), ) + @staticmethod def _read_column( - self, column: Mapping, relationship: Optional[Mapping], ) -> MetabaseColumn: @@ -293,6 +294,7 @@ def _read_column( metabase_column = MetabaseColumn( name=column_name, description=column_description, + **DbtManifestReader._read_meta_fields(column), ) if relationship: @@ -306,10 +308,22 @@ def _read_column( metabase_column.fk_target_field, ) - if column["meta"]: - meta = column.get("meta", []) - for field in METABASE_META_FIELDS: - if f"metabase.{field}" in meta: - setattr(metabase_column, field, meta[f"metabase.{field}"]) - return metabase_column + + @staticmethod + def _read_meta_fields(obj: dict) -> Mapping: + """Reads meta fields from a schem object. + + Args: + obj (dict): Schema object. + + Returns: + Mapping: Field values. + """ + + meta = obj.get("meta", []) + return { + k: meta[f"metabase.{k}"] + for k in METABASE_META_FIELDS + if f"metabase.{k}" in meta + }