def validate_upgrade(self, provider, product_spec): if 'version' in product_spec and 'productSpecCharacteristic' in product_spec: # Extract product needed characteristics asset_t, media_type, url, asset_id = self.parse_characteristics(product_spec) is_digital = asset_t is not None and media_type is not None and url is not None if is_digital: asset, lock = self._get_upgrading_asset(asset_t, url, product_spec['id']) self._to_downgrade = asset self._validate_product_characteristics(asset, provider, asset_t, media_type) # Check product version if not is_valid_version(product_spec['version']): raise ProductError('The field version does not have a valid format') if not is_lower_version(asset.old_versions[-1].version, product_spec['version']): raise ProductError('The provided version is not higher that the previous one') # Attach new info asset.version = product_spec['version'] asset.save() # Release asset lock lock.unlock_document()
def validate_plugin_info(self, plugin_info): """ Validates the structure of the package.json file of a plugin """ reason = None # Check plugin_info format if not isinstance(plugin_info, dict): reason = 'Plugin info must be a dict instance' # Validate structure if reason is None and "name" not in plugin_info: reason = 'Missing required field: name' # Validate types if reason is None and not isinstance(plugin_info['name'], str) and not isinstance( plugin_info['name'], unicode): reason = 'Plugin name must be an string' if reason is None and not is_valid_id(plugin_info['name']): reason = 'Invalid name format: invalid character' if reason is None and "author" not in plugin_info: reason = 'Missing required field: author' if reason is None and 'formats' not in plugin_info: reason = 'Missing required field: formats' if reason is None and 'module' not in plugin_info: reason = 'Missing required field: module' if reason is None and 'version' not in plugin_info: reason = 'Missing required field: version' if reason is None and not isinstance( plugin_info['author'], str) and not isinstance( plugin_info['author'], unicode): reason = 'Plugin author must be an string' if reason is None and not isinstance(plugin_info['formats'], list): reason = 'Plugin formats must be a list' # Validate formats if reason is None: valid_format, i = self._check_list_field(['FILE', 'URL'], plugin_info['formats']) if not valid_format or (i < 1 and i > 2): reason = 'Format must contain at least one format of: FILE, URL' # Validate overrides if reason is None and 'overrides' in plugin_info and not self._check_list_field( ["NAME", "VERSION", "OPEN"], plugin_info['overrides'])[0]: reason = "Override values should be one of: NAME, VERSION and OPEN" if reason is None and 'media_types' in plugin_info and not isinstance( plugin_info['media_types'], list): reason = 'Plugin media_types must be a list' if reason is None and not isinstance( plugin_info['module'], str) and not isinstance( plugin_info['module'], unicode): reason = 'Plugin module must be an string' if reason is None and not is_valid_version(plugin_info['version']): reason = 'Invalid format in plugin version' if reason is None and 'form' in plugin_info: if not isinstance(plugin_info['form'], dict): reason = 'Invalid format in form field, must be an object' else: reason = self._validate_plugin_form(plugin_info['form']) return reason
def validate_plugin_info(self, plugin_info): """ Validates the structure of the package.json file of a plugin """ reason = None # Check plugin_info format if not isinstance(plugin_info, dict): reason = 'Plugin info must be a dict instance' # Validate structure if reason is None and "name" not in plugin_info: reason = 'Missing required field: name' # Validate types if reason is None and not isinstance(plugin_info['name'], str) and not isinstance(plugin_info['name'], unicode): reason = 'Plugin name must be an string' if reason is None and not is_valid_id(plugin_info['name']): reason = 'Invalid name format: invalid character' if reason is None and "author" not in plugin_info: reason = 'Missing required field: author' if reason is None and 'formats' not in plugin_info: reason = 'Missing required field: formats' if reason is None and 'module' not in plugin_info: reason = 'Missing required field: module' if reason is None and 'version' not in plugin_info: reason = 'Missing required field: version' if reason is None and not isinstance(plugin_info['author'], str) and not isinstance(plugin_info['author'], unicode): reason = 'Plugin author must be an string' if reason is None and not isinstance(plugin_info['formats'], list): reason = 'Plugin formats must be a list' # Validate formats if reason is None: valid_format, i = self._check_list_field(['FILE', 'URL'], plugin_info['formats']) if not valid_format or (i < 1 and i > 2): reason = 'Format must contain at least one format of: FILE, URL' # Validate overrides if reason is None and 'overrides' in plugin_info and not self._check_list_field(["NAME", "VERSION", "OPEN"], plugin_info['overrides'])[0]: reason = "Override values should be one of: NAME, VERSION and OPEN" if reason is None and 'media_types' in plugin_info and not isinstance(plugin_info['media_types'], list): reason = 'Plugin media_types must be a list' if reason is None and not isinstance(plugin_info['module'], str) and not isinstance(plugin_info['module'], unicode): reason = 'Plugin module must be an string' if reason is None and not is_valid_version(plugin_info['version']): reason = 'Invalid format in plugin version' if reason is None and 'form' in plugin_info: if not isinstance(plugin_info['form'], dict): reason = 'Invalid format in form field, must be an object' else: reason = self._validate_plugin_form(plugin_info['form']) return reason
def validate_plugin_info(self, plugin_info): """ Validates the structure of the package.json file of a plugin """ reason = None # Check plugin_info format if not isinstance(plugin_info, dict): reason = 'Plugin info must be a dict instance' # Validate structure if reason is None and "name" not in plugin_info: reason = 'Missing required field: name' # Validate types if reason is None and not isinstance(plugin_info['name'], str): reason = 'Plugin name must be an string' if reason is None and not is_valid_id(plugin_info['name']): reason = 'Invalid name format: invalid character' if reason is None and "author" not in plugin_info: reason = 'Missing required field: author' if reason is None and 'formats' not in plugin_info: reason = 'Missing required field: formats' if reason is None and 'module' not in plugin_info: reason = 'Missing required field: module' if reason is None and 'version' not in plugin_info: reason = 'Missing required field: version' if reason is None and not isinstance(plugin_info['author'], str): reason = 'Plugin author must be an string' if reason is None and not isinstance(plugin_info['formats'], list): reason = 'Plugin formats must be a list' # Validate formats if reason is None: valid_format, i = self._check_list_field(['FILE', 'URL'], plugin_info['formats']) if not valid_format or (i < 1 and i > 2): reason = 'Format must contain at least one format of: FILE, URL' # Validate overrides if reason is None and 'overrides' in plugin_info and not self._check_list_field(["NAME", "VERSION", "OPEN"], plugin_info['overrides'])[0]: reason = "Override values should be one of: NAME, VERSION and OPEN" if reason is None and 'media_types' in plugin_info and not isinstance(plugin_info['media_types'], list): reason = 'Plugin media_types must be a list' if reason is None and not isinstance(plugin_info['module'], str): reason = 'Plugin module must be an string' if reason is None and not is_valid_version(plugin_info['version']): reason = 'Invalid format in plugin version' if reason is None and 'pull_accounting' in plugin_info and not isinstance(plugin_info['pull_accounting'], bool): reason = 'Plugin pull_accounting property must be a boolean' if reason is None and 'form' in plugin_info: if not isinstance(plugin_info['form'], dict): reason = 'Invalid format in form field, must be an object' else: reason = self._validate_plugin_form(plugin_info['form']) if reason is None and 'form_order' in plugin_info: if not isinstance(plugin_info['form_order'], list): return 'Invalid format in formOrder' if not 'form' in plugin_info: return 'Form Order cannot be specified without a form' # Check if all the form fields are included matched_keys = [key for key in plugin_info['form'].keys() if key in plugin_info['form_order']] if len(plugin_info['form'].keys()) != len(plugin_info['form_order']) or len(matched_keys) != len(plugin_info['form_order']): reason = 'If form order is provided all form keys need to be provided' return reason