Пример #1
0
    def validate_apt_packages(self):
        apt_packages = []
        with self.catch_validation_error('build.apt_packages'):
            raw_packages = self._raw_config.get('build', {}).get('apt_packages', [])
            validate_list(raw_packages)
            # Transform to a dict, so is easy to validate individual entries.
            self._raw_config.setdefault('build', {})['apt_packages'] = (
                list_to_dict(raw_packages)
            )

            apt_packages = [
                self.validate_apt_package(index)
                for index in range(len(raw_packages))
            ]
            if not raw_packages:
                self.pop_config('build.apt_packages')

        return apt_packages
Пример #2
0
    def validate_build(self):
        """
        Validates the build object.

        It prioritizes the value from the default image if exists.
        """
        raw_build = self._raw_config.get('build', {})
        with self.catch_validation_error('build'):
            validate_dict(raw_build)
        build = {}
        with self.catch_validation_error('build.image'):
            image = self.pop_config('build.image', self.default_build_image)
            build['image'] = '{}:{}'.format(
                settings.DOCKER_DEFAULT_IMAGE,
                validate_choice(
                    image,
                    self.valid_build_images,
                ),
            )

            # Allow to override specific project
            config_image = self.defaults.get('build_image')
            if config_image:
                build['image'] = config_image

        with self.catch_validation_error('build.apt_packages'):
            raw_packages = self._raw_config.get('build',
                                                {}).get('apt_packages', [])
            validate_list(raw_packages)
            # Transform to a dict, so is easy to validate individual entries.
            self._raw_config.setdefault(
                'build', {})['apt_packages'] = (list_to_dict(raw_packages))

            build['apt_packages'] = [
                self.validate_apt_package(index)
                for index in range(len(raw_packages))
            ]
            if not raw_packages:
                self.pop_config('build.apt_packages')

        return build
Пример #3
0
    def validate_python(self):
        """
        Validates the python key.

        validate_build should be called before this, since it initialize the
        build.image attribute.

        Fall back to the defaults of:
        - ``requirements``
        - ``install`` (only for setup.py method)
        - ``system_packages``

        .. note::
           - ``version`` can be a string or number type.
           - ``extra_requirements`` needs to be used with ``install: 'pip'``.
        """
        raw_python = self._raw_config.get('python', {})
        with self.catch_validation_error('python'):
            validate_dict(raw_python)

        python = {}
        with self.catch_validation_error('python.version'):
            version = self.pop_config('python.version', 3)
            if isinstance(version, str):
                try:
                    version = int(version)
                except ValueError:
                    try:
                        version = float(version)
                    except ValueError:
                        pass
            python['version'] = validate_choice(
                version,
                self.get_valid_python_versions(),
            )

        with self.catch_validation_error('python.install'):
            raw_install = self._raw_config.get('python', {}).get('install', [])
            validate_list(raw_install)
            if raw_install:
                # Transform to a dict, so it's easy to validate extra keys.
                self._raw_config.setdefault(
                    'python', {})['install'] = (list_to_dict(raw_install))
            else:
                self.pop_config('python.install')

        raw_install = self._raw_config.get('python', {}).get('install', [])
        python['install'] = [
            self.validate_python_install(index)
            for index in range(len(raw_install))
        ]

        with self.catch_validation_error('python.system_packages'):
            system_packages = self.defaults.get(
                'use_system_packages',
                False,
            )
            system_packages = self.pop_config(
                'python.system_packages',
                system_packages,
            )
            python['use_system_site_packages'] = validate_bool(system_packages)

        return python
Пример #4
0
    def validate_python(self):
        """
        Validates the python key.

        validate_build should be called before this, since it initialize the
        build.image attribute.

        Fall back to the defaults of:
        - ``requirements``
        - ``install`` (only for setup.py method)
        - ``system_packages``

        .. note::
           - ``version`` can be a string or number type.
           - ``extra_requirements`` needs to be used with ``install: 'pip'``.
        """
        raw_python = self.raw_config.get('python', {})
        with self.catch_validation_error('python'):
            validate_dict(raw_python)

        python = {}
        with self.catch_validation_error('python.version'):
            version = self.pop_config('python.version', 3)
            if isinstance(version, str):
                try:
                    version = int(version)
                except ValueError:
                    try:
                        version = float(version)
                    except ValueError:
                        pass
            python['version'] = validate_choice(
                version,
                self.get_valid_python_versions(),
            )

        with self.catch_validation_error('python.install'):
            raw_install = self.raw_config.get('python', {}).get('install', [])
            validate_list(raw_install)
            if raw_install:
                # Transform to a dict, so it's easy to validate extra keys.
                self.raw_config.setdefault('python', {})['install'] = (
                    list_to_dict(raw_install)
                )
            else:
                self.pop_config('python.install')

        raw_install = self.raw_config.get('python', {}).get('install', [])
        python['install'] = [
            self.validate_python_install(index)
            for index in range(len(raw_install))
        ]

        with self.catch_validation_error('python.system_packages'):
            system_packages = self.defaults.get(
                'use_system_packages',
                False,
            )
            system_packages = self.pop_config(
                'python.system_packages',
                system_packages,
            )
            python['use_system_site_packages'] = validate_bool(system_packages)

        return python
Пример #5
0
    def validate_python(self):
        """
        Validates the python key.

        validate_build should be called before this, since it initialize the
        build.image attribute.

        Fall back to the defaults of:
        - ``requirements``
        - ``install`` (only for setup.py method)
        - ``system_packages``

        .. note::
           - ``version`` can be a string or number type.
           - ``extra_requirements`` needs to be used with ``install: 'pip'``.
           - If the new build config is used (``build.os``),
             ``python.version`` shouldn't exist.
        """
        raw_python = self._raw_config.get('python', {})
        with self.catch_validation_error('python'):
            validate_dict(raw_python)

        python = {}
        if not self.using_build_tools:
            with self.catch_validation_error('python.version'):
                version = self.pop_config('python.version', '3')
                if version == 3.1:
                    # Special case for ``python.version: 3.10``,
                    # yaml will transform this to the numeric value of `3.1`.
                    # Save some frustration to users.
                    version = '3.10'
                version = str(version)
                python['version'] = validate_choice(
                    version,
                    self.get_valid_python_versions(),
                )

        with self.catch_validation_error('python.install'):
            raw_install = self._raw_config.get('python', {}).get('install', [])
            validate_list(raw_install)
            if raw_install:
                # Transform to a dict, so it's easy to validate extra keys.
                self._raw_config.setdefault('python', {})['install'] = (
                    list_to_dict(raw_install)
                )
            else:
                self.pop_config('python.install')

        raw_install = self._raw_config.get('python', {}).get('install', [])
        python['install'] = [
            self.validate_python_install(index)
            for index in range(len(raw_install))
        ]

        with self.catch_validation_error('python.system_packages'):
            system_packages = self.defaults.get(
                'use_system_packages',
                False,
            )
            system_packages = self.pop_config(
                'python.system_packages',
                system_packages,
            )
            python['use_system_site_packages'] = validate_bool(system_packages)

        return python