def find_context_root_dir(cls): result = None yml_path = None ge_home_environment = os.getenv("GE_HOME") if ge_home_environment: ge_home_environment = os.path.expanduser(ge_home_environment) if os.path.isdir(ge_home_environment) and os.path.isfile( os.path.join(ge_home_environment, "great_expectations.yml")): result = ge_home_environment else: yml_path = cls.find_context_yml_file() if yml_path: result = os.path.dirname(yml_path) if result is None: raise ge_exceptions.ConfigNotFoundError() logger.debug(f"Using project config: {yml_path}") return result
def _load_project_config(self): """ Reads the project configuration from the project configuration file. The file may contain ${SOME_VARIABLE} variables - see self.project_config_with_variables_substituted for how these are substituted. For Data Contexts in GE Cloud mode, a user-specific template is retrieved from the Cloud API - see self._retrieve_data_context_config_from_ge_cloud for more details. :return: the configuration object read from the file or template """ if self.ge_cloud_mode: config = self._retrieve_data_context_config_from_ge_cloud() return config path_to_yml = os.path.join(self._context_root_directory, self.GE_YML) try: with open(path_to_yml) as data: config_commented_map_from_yaml = yaml.load(data) except YAMLError as err: raise ge_exceptions.InvalidConfigurationYamlError( "Your configuration file is not a valid yml file likely due to a yml syntax error:\n\n{}".format( err ) ) except DuplicateKeyError: raise ge_exceptions.InvalidConfigurationYamlError( "Error: duplicate key found in project YAML file." ) except OSError: raise ge_exceptions.ConfigNotFoundError() try: return DataContextConfig.from_commented_map( commented_map=config_commented_map_from_yaml ) except ge_exceptions.InvalidDataContextConfigError: # Just to be explicit about what we intended to catch raise
def parse_cli_config_file_location(config_file_location: str) -> dict: """ Parse CLI yaml config file or directory location into directory and filename. Uses pathlib to handle windows paths. Args: config_file_location: string of config_file_location Returns: { "directory": "directory/where/config/file/is/located", "filename": "great_expectations.yml" } """ if config_file_location is not None and config_file_location != "": config_file_location_path = Path(config_file_location) # If the file or directory exists, treat it appropriately # This handles files without extensions filename: Optional[str] directory: Optional[str] if config_file_location_path.is_file(): filename = rf"{str(config_file_location_path.name)}" directory = rf"{str(config_file_location_path.parent)}" elif config_file_location_path.is_dir(): filename = None directory = config_file_location else: raise ge_exceptions.ConfigNotFoundError() else: # Return None if config_file_location is empty rather than default output of "" directory = None filename = None return {"directory": directory, "filename": filename}