22from __future__ import annotations
33
44import functools
5- import os
65from pathlib import Path
7- from typing import List , Union
6+ from typing import List , Optional , Union
87
98import gooddata_afm_client .apis as afm_apis
109import gooddata_afm_client .models as afm_models
1110from gooddata_metadata_client .exceptions import NotFoundException
1211from gooddata_sdk .catalog .catalog_service_base import CatalogServiceBase
12+ from gooddata_sdk .catalog .data_source .validation .data_source import DataSourceValidator
1313from gooddata_sdk .catalog .types import ValidObjects
1414from gooddata_sdk .catalog .workspace .declarative_model .workspace .analytics_model .analytics_model import (
1515 CatalogDeclarativeAnalytics ,
@@ -109,15 +109,13 @@ def get_declarative_workspaces(self) -> CatalogDeclarativeWorkspaces:
109109 def put_declarative_workspaces (self , workspace : CatalogDeclarativeWorkspaces ) -> None :
110110 self ._layout_api .set_workspaces_layout (workspace .to_api ())
111111
112- def store_declarative_workspaces (self , layout_root_path : Path = Path ( os . path . curdir )) -> None :
112+ def store_declarative_workspaces (self , layout_root_path : Path = Path . cwd ( )) -> None :
113113 self .get_declarative_workspaces ().store_to_disk (self .layout_organization_folder (layout_root_path ))
114114
115- def load_declarative_workspaces (
116- self , layout_root_path : Path = Path (os .path .curdir )
117- ) -> CatalogDeclarativeWorkspaces :
115+ def load_declarative_workspaces (self , layout_root_path : Path = Path .cwd ()) -> CatalogDeclarativeWorkspaces :
118116 return CatalogDeclarativeWorkspaces .load_from_disk (self .layout_organization_folder (layout_root_path ))
119117
120- def load_and_put_declarative_workspaces (self , layout_root_path : Path = Path ( os . path . curdir )) -> None :
118+ def load_and_put_declarative_workspaces (self , layout_root_path : Path = Path . cwd ( )) -> None :
121119 declarative_workspaces = self .load_declarative_workspaces (layout_root_path )
122120 self .put_declarative_workspaces (declarative_workspaces )
123121
@@ -264,24 +262,31 @@ def compute_valid_objects(self, workspace_id: str, ctx: ValidObjectsInputType) -
264262 def get_declarative_ldm (self , workspace_id : str ) -> CatalogDeclarativeModel :
265263 return CatalogDeclarativeModel .from_api (self ._layout_api .get_logical_model (workspace_id ))
266264
267- def store_declarative_ldm (self , workspace_id : str , layout_root_path : Path = Path ( os . path . curdir )) -> None :
265+ def store_declarative_ldm (self , workspace_id : str , layout_root_path : Path = Path . cwd ( )) -> None :
268266 workspace_folder = self .layout_workspace_folder (workspace_id , layout_root_path )
269267 self .get_declarative_ldm (workspace_id ).store_to_disk (workspace_folder )
270268
271269 def layout_workspace_folder (self , workspace_id : str , layout_root_path : Path ) -> Path :
272270 return self .layout_organization_folder (layout_root_path ) / LAYOUT_WORKSPACES_DIR / workspace_id
273271
274- def load_declarative_ldm (
275- self , workspace_id : str , layout_root_path : Path = Path (os .path .curdir )
276- ) -> CatalogDeclarativeModel :
272+ def load_declarative_ldm (self , workspace_id : str , layout_root_path : Path = Path .cwd ()) -> CatalogDeclarativeModel :
277273 workspace_folder = self .layout_workspace_folder (workspace_id , layout_root_path )
278274 return CatalogDeclarativeModel .load_from_disk (workspace_folder )
279275
280- def load_and_put_declarative_ldm (self , workspace_id : str , layout_root_path : Path = Path (os .path .curdir )) -> None :
276+ def load_and_put_declarative_ldm (
277+ self ,
278+ workspace_id : str ,
279+ layout_root_path : Path = Path .cwd (),
280+ validator : Optional [DataSourceValidator ] = None ,
281+ ) -> None :
281282 declarative_ldm = self .load_declarative_ldm (workspace_id , layout_root_path )
282- self .put_declarative_ldm (workspace_id , declarative_ldm )
283+ self .put_declarative_ldm (workspace_id , declarative_ldm , validator )
283284
284- def put_declarative_ldm (self , workspace_id : str , ldm : CatalogDeclarativeModel ) -> None :
285+ def put_declarative_ldm (
286+ self , workspace_id : str , ldm : CatalogDeclarativeModel , validator : Optional [DataSourceValidator ] = None
287+ ) -> None :
288+ if validator is not None :
289+ validator .validate_ldm (ldm )
285290 self ._layout_api .set_logical_model (workspace_id , ldm .to_api ())
286291
287292 def get_declarative_analytics_model (self , workspace_id : str ) -> CatalogDeclarativeAnalytics :
@@ -290,21 +295,17 @@ def get_declarative_analytics_model(self, workspace_id: str) -> CatalogDeclarati
290295 def put_declarative_analytics_model (self , workspace_id : str , analytics_model : CatalogDeclarativeAnalytics ) -> None :
291296 self ._layout_api .set_analytics_model (workspace_id , analytics_model .to_api ())
292297
293- def store_declarative_analytics_model (
294- self , workspace_id : str , layout_root_path : Path = Path (os .path .curdir )
295- ) -> None :
298+ def store_declarative_analytics_model (self , workspace_id : str , layout_root_path : Path = Path .cwd ()) -> None :
296299 workspace_folder = self .layout_workspace_folder (workspace_id , layout_root_path )
297300 declarative_analytics_model = self .get_declarative_analytics_model (workspace_id )
298301 declarative_analytics_model .store_to_disk (workspace_folder )
299302
300303 def load_declarative_analytics_model (
301- self , workspace_id : str , layout_root_path : Path = Path ( os . path . curdir )
304+ self , workspace_id : str , layout_root_path : Path = Path . cwd ( )
302305 ) -> CatalogDeclarativeAnalytics :
303306 workspace_folder = self .layout_workspace_folder (workspace_id , layout_root_path )
304307 return CatalogDeclarativeAnalytics .load_from_disk (workspace_folder )
305308
306- def load_and_put_declarative_analytics_model (
307- self , workspace_id : str , layout_root_path : Path = Path (os .path .curdir )
308- ) -> None :
309+ def load_and_put_declarative_analytics_model (self , workspace_id : str , layout_root_path : Path = Path .cwd ()) -> None :
309310 declarative_analytics_model = self .load_declarative_analytics_model (workspace_id , layout_root_path )
310311 self .put_declarative_analytics_model (workspace_id , declarative_analytics_model )
0 commit comments