예제 #1
0
    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()
예제 #2
0
    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
예제 #4
0
    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