def validate(self) -> None: # ensure all files are YAML for file_name, content in self.contents.items(): try: config = yaml.safe_load(content) except yaml.parser.ParserError: logger.exception("Invalid YAML file") raise IncorrectVersionError( f"{file_name} is not a valid YAML file") # CLI export if isinstance(config, dict): # TODO (betodealmeida): validate with Marshmallow if DATABASES_KEY not in config and DRUID_CLUSTERS_KEY not in config: raise IncorrectVersionError( f"{file_name} has no valid keys") # UI export elif isinstance(config, list): # TODO (betodealmeida): validate with Marshmallow pass else: raise IncorrectVersionError(f"{file_name} is not a valid file") self._configs[file_name] = config
def validate(self) -> None: # ensure all files are YAML for file_name, content in self.contents.items(): try: config = yaml.safe_load(content) except yaml.parser.ParserError: logger.exception("Invalid YAML file") raise IncorrectVersionError(f"{file_name} is not a valid YAML file") # check for keys if DATABASES_KEY not in config and DRUID_CLUSTERS_KEY not in config: raise IncorrectVersionError(f"{file_name} has no valid keys") self._configs[file_name] = config
def load_metadata(contents: Dict[str, str]) -> Dict[str, str]: """Apply validation and load a metadata file""" if METADATA_FILE_NAME not in contents: # if the contents have no METADATA_FILE_NAME this is probably # a original export without versioning that should not be # handled by this command raise IncorrectVersionError(f"Missing {METADATA_FILE_NAME}") metadata = load_yaml(METADATA_FILE_NAME, contents[METADATA_FILE_NAME]) try: MetadataSchema().load(metadata) except ValidationError as ex: # if the version doesn't match raise an exception so that the # dispatcher can try a different command version if "version" in ex.messages: raise IncorrectVersionError(ex.messages["version"][0]) from ex # otherwise we raise the validation error ex.messages = {METADATA_FILE_NAME: ex.messages} raise ex return metadata