def _is_pack_meta_file_structure_valid(self): """Check if pack_metadata.json structure is json parse-able and valid""" try: metadata = self._read_metadata_content() if not metadata: if self._add_error(Errors.pack_metadata_empty(), self.pack_meta_file): raise BlockingValidationFailureException() if not isinstance(metadata, dict): if self._add_error(Errors.pack_metadata_should_be_dict(self.pack_meta_file), self.pack_meta_file): raise BlockingValidationFailureException() missing_fields = [field for field in PACK_METADATA_FIELDS if field not in metadata.keys()] if missing_fields: if self._add_error(Errors.missing_field_iin_pack_metadata(self.pack_meta_file, missing_fields), self.pack_meta_file): raise BlockingValidationFailureException() elif not self.validate_pack_name(metadata): raise BlockingValidationFailureException() description_name = metadata.get(PACK_METADATA_DESC, '').lower() if not description_name or 'fill mandatory field' in description_name: if self._add_error(Errors.pack_metadata_field_invalid(), self.pack_meta_file): raise BlockingValidationFailureException() if not self.is_pack_metadata_desc_too_long(description_name): return False # check non mandatory dependency field dependencies_field = metadata.get(PACK_METADATA_DEPENDENCIES, {}) if not isinstance(dependencies_field, dict): if self._add_error(Errors.dependencies_field_should_be_dict(self.pack_meta_file), self.pack_meta_file): return False # check created field in iso format created_field = metadata.get(PACK_METADATA_CREATED, '') if created_field: if not self.check_timestamp_format(created_field): suggested_value = parser.parse(created_field).isoformat() + "Z" if self._add_error( Errors.pack_timestamp_field_not_in_iso_format(PACK_METADATA_CREATED, created_field, suggested_value), self.pack_meta_file): return False # check metadata list fields and validate that no empty values are contained in this fields for list_field in (PACK_METADATA_KEYWORDS, PACK_METADATA_TAGS, PACK_METADATA_CATEGORIES, PACK_METADATA_USE_CASES): field = metadata[list_field] if field and len(field) == 1: value = field[0] if not value: if self._add_error(Errors.empty_field_in_pack_metadata(self.pack_meta_file, list_field), self.pack_meta_file): return False # check metadata categories isn't an empty list, only if it is an integration. if self._is_integration_pack(): if not metadata[PACK_METADATA_CATEGORIES]: if self._add_error(Errors.pack_metadata_missing_categories(self.pack_meta_file), self.pack_meta_file): return False # if the field 'certification' exists, check that its value is set to 'certified' or 'verified' certification = metadata.get(PACK_METADATA_CERTIFICATION) if certification and certification not in ALLOWED_CERTIFICATION_VALUES: if self._add_error(Errors.pack_metadata_certification_is_invalid(self.pack_meta_file), self.pack_meta_file): return False # check format of metadata version version = metadata.get(PACK_METADATA_CURR_VERSION, '0.0.0') if not self._is_version_format_valid(version): return False except (ValueError, TypeError): if self._add_error(Errors.pack_metadata_isnt_json(self.pack_meta_file), self.pack_meta_file): raise BlockingValidationFailureException() return True
def _is_pack_meta_file_structure_valid(self): """Check if pack_metadata.json structure is json parse-able and valid""" try: pack_meta_file_content = self._read_file_content( self.pack_meta_file) if not pack_meta_file_content: if self._add_error(Errors.pack_metadata_empty(), self.pack_meta_file): return False metadata = json.loads(pack_meta_file_content) if not isinstance(metadata, dict): if self._add_error( Errors.pack_metadata_should_be_dict( self.pack_meta_file), self.pack_meta_file): return False missing_fields = [ field for field in PACK_METADATA_FIELDS if field not in metadata.keys() ] if missing_fields: if self._add_error( Errors.missing_field_iin_pack_metadata( self.pack_meta_file, missing_fields), self.pack_meta_file): return False # check validity of pack metadata mandatory fields name_field = metadata.get(PACK_METADATA_NAME, '').lower() if not name_field or 'fill mandatory field' in name_field: if self._add_error(Errors.pack_metadata_name_not_valid(), self.pack_meta_file): return False description_name = metadata.get(PACK_METADATA_DESC, '').lower() if not description_name or 'fill mandatory field' in description_name: if self._add_error(Errors.pack_metadata_field_invalid(), self.pack_meta_file): return False # check non mandatory dependency field dependencies_field = metadata.get(PACK_METADATA_DEPENDENCIES, {}) if not isinstance(dependencies_field, dict): if self._add_error( Errors.dependencies_field_should_be_dict( self.pack_meta_file), self.pack_meta_file): return False # check metadata list fields and validate that no empty values are contained in this fields for list_field in (PACK_METADATA_KEYWORDS, PACK_METADATA_TAGS, PACK_METADATA_CATEGORIES, PACK_METADATA_USE_CASES): field = metadata[list_field] if field and len(field) == 1: value = field[0] if not value: if self._add_error( Errors.empty_field_in_pack_metadata( self.pack_meta_file, list_field), self.pack_meta_file): return False except (ValueError, TypeError): if self._add_error( Errors.pack_metadata_isnt_json(self.pack_meta_file), self.pack_meta_file): return False return True
def _is_pack_meta_file_structure_valid(self): """Check if pack_metadata.json structure is json parse-able and valid""" try: pack_meta_file_content = self._read_file_content( self.pack_meta_file) if not pack_meta_file_content: if self._add_error(Errors.pack_metadata_empty(), self.pack_meta_file): return False metadata = json.loads(pack_meta_file_content) if not isinstance(metadata, dict): if self._add_error( Errors.pack_metadata_should_be_dict( self.pack_meta_file), self.pack_meta_file): return False missing_fields = [ field for field in PACK_METADATA_FIELDS if field not in metadata.keys() ] if missing_fields: if self._add_error( Errors.missing_field_iin_pack_metadata( self.pack_meta_file, missing_fields), self.pack_meta_file): return False # check validity of pack metadata mandatory fields name_field = metadata.get(PACK_METADATA_NAME, '').lower() if not name_field or 'fill mandatory field' in name_field: if self._add_error(Errors.pack_metadata_name_not_valid(), self.pack_meta_file): return False description_name = metadata.get(PACK_METADATA_DESC, '').lower() if not description_name or 'fill mandatory field' in description_name: if self._add_error(Errors.pack_metadata_field_invalid(), self.pack_meta_file): return False # check non mandatory dependency field dependencies_field = metadata.get(PACK_METADATA_DEPENDENCIES, {}) if not isinstance(dependencies_field, dict): if self._add_error( Errors.dependencies_field_should_be_dict( self.pack_meta_file), self.pack_meta_file): return False # check created field in iso format created_field = metadata.get(PACK_METADATA_CREATED, '') if created_field: if not self.check_timestamp_format(created_field): suggested_value = parser.parse( created_field).isoformat() + "Z" if self._add_error( Errors.pack_timestamp_field_not_in_iso_format( PACK_METADATA_CREATED, created_field, suggested_value), self.pack_meta_file): return False # check metadata list fields and validate that no empty values are contained in this fields for list_field in (PACK_METADATA_KEYWORDS, PACK_METADATA_TAGS, PACK_METADATA_CATEGORIES, PACK_METADATA_USE_CASES): field = metadata[list_field] if field and len(field) == 1: value = field[0] if not value: if self._add_error( Errors.empty_field_in_pack_metadata( self.pack_meta_file, list_field), self.pack_meta_file): return False # if the field 'certification' exists, check that its value is set to 'certified' or 'verified' certification = metadata.get(PACK_METADATA_CERTIFICATION) if certification and certification not in ALLOWED_CERTIFICATION_VALUES: if self._add_error( Errors.pack_metadata_certification_is_invalid( self.pack_meta_file), self.pack_meta_file): return False except (ValueError, TypeError): if self._add_error( Errors.pack_metadata_isnt_json(self.pack_meta_file), self.pack_meta_file): return False return True