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
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
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
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
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