def postprocess(self): """Do some postprocessing, in particular print stuff""" build_log.EXPERIMENTAL = self.options.experimental config.SUPPORT_OLDSTYLE = self.options.oldstyleconfig # set strictness of run module if self.options.strict: run.strictness = self.options.strict if self.options.deprecated: build_log.CURRENT_VERSION = LooseVersion(self.options.deprecated) if self.options.unittest_file: fancylogger.logToFile(self.options.unittest_file) if any( [ self.options.avail_easyconfig_params, self.options.avail_easyconfig_templates, self.options.list_easyblocks, self.options.list_toolchains, self.options.avail_easyconfig_constants, self.options.avail_easyconfig_licenses, self.options.avail_repositories, self.options.show_default_moduleclasses, self.options.avail_modules_tools, self.options.avail_module_naming_schemes, ] ): build_easyconfig_constants_dict() # runs the easyconfig constants sanity check self._postprocess_list_avail() self._postprocess_config()
def postprocess(self): """Do some postprocessing, in particular print stuff""" build_log.EXPERIMENTAL = self.options.experimental # set strictness of run module if self.options.strict: run.strictness = self.options.strict # override current version of EasyBuild with version specified to --deprecated if self.options.deprecated: build_log.CURRENT_VERSION = LooseVersion(self.options.deprecated) # log to specified value of --unittest-file if self.options.unittest_file: fancylogger.logToFile(self.options.unittest_file) # set tmpdir self.tmpdir = set_tmpdir(self.options.tmpdir) # take --include options into account self._postprocess_include() # prepare for --list/--avail if any([self.options.avail_easyconfig_params, self.options.avail_easyconfig_templates, self.options.list_easyblocks, self.options.list_toolchains, self.options.avail_cfgfile_constants, self.options.avail_easyconfig_constants, self.options.avail_easyconfig_licenses, self.options.avail_repositories, self.options.show_default_moduleclasses, self.options.avail_modules_tools, self.options.avail_module_naming_schemes, self.options.show_default_configfiles, ]): build_easyconfig_constants_dict() # runs the easyconfig constants sanity check self._postprocess_list_avail() # fail early if required dependencies for functionality requiring using GitHub API are not available: if self.options.from_pr or self.options.upload_test_report: if not HAVE_GITHUB_API: raise EasyBuildError("Required support for using GitHub API is not available (see warnings).") if self.options.module_syntax == ModuleGeneratorLua.SYNTAX and self.options.modules_tool != Lmod.__name__: raise EasyBuildError("Generating Lua module files requires Lmod as modules tool.") # make sure a GitHub token is available when it's required if self.options.upload_test_report: if not HAVE_KEYRING: raise EasyBuildError("Python 'keyring' module required for obtaining GitHub token is not available.") if self.options.github_user is None: raise EasyBuildError("No GitHub user name provided, required for fetching GitHub token.") token = fetch_github_token(self.options.github_user) if token is None: raise EasyBuildError("Failed to obtain required GitHub token for user '%s'", self.options.github_user) # make sure autopep8 is available when it needs to be if self.options.dump_autopep8: if not HAVE_AUTOPEP8: raise EasyBuildError("Python 'autopep8' module required to reformat dumped easyconfigs as requested") self._postprocess_external_modules_metadata() self._postprocess_config()
def postprocess(self): """Do some postprocessing, in particular print stuff""" build_log.EXPERIMENTAL = self.options.experimental config.SUPPORT_OLDSTYLE = self.options.oldstyleconfig # set strictness of run module if self.options.strict: run.strictness = self.options.strict # override current version of EasyBuild with version specified to --deprecated if self.options.deprecated: build_log.CURRENT_VERSION = LooseVersion(self.options.deprecated) # log to specified value of --unittest-file if self.options.unittest_file: fancylogger.logToFile(self.options.unittest_file) # prepare for --list/--avail if any([ self.options.avail_easyconfig_params, self.options.avail_easyconfig_templates, self.options.list_easyblocks, self.options.list_toolchains, self.options.avail_cfgfile_constants, self.options.avail_easyconfig_constants, self.options.avail_easyconfig_licenses, self.options.avail_repositories, self.options.show_default_moduleclasses, self.options.avail_modules_tools, self.options.avail_module_naming_schemes, ]): build_easyconfig_constants_dict( ) # runs the easyconfig constants sanity check self._postprocess_list_avail() # fail early if required dependencies for functionality requiring using GitHub API are not available: if self.options.from_pr or self.options.upload_test_report: if not HAVE_GITHUB_API: self.log.error( "Required support for using GitHub API is not available (see warnings)." ) # make sure a GitHub token is available when it's required if self.options.upload_test_report: if not HAVE_KEYRING: self.log.error( "Python 'keyring' module required for obtaining GitHub token is not available." ) if self.options.github_user is None: self.log.error( "No GitHub user name provided, required for fetching GitHub token." ) token = fetch_github_token(self.options.github_user) if token is None: self.log.error( "Failed to obtain required GitHub token for user '%s'" % self.options.github_user) self._postprocess_config()
def postprocess(self): """Do some postprocessing, in particular print stuff""" if self.options.unittest_file: fancylogger.logToFile(self.options.unittest_file) if any([self.options.avail_easyconfig_params, self.options.avail_easyconfig_templates, self.options.list_easyblocks, self.options.list_toolchains, self.options.avail_easyconfig_constants, self.options.avail_easyconfig_licenses, self.options.avail_repositories, self.options.show_default_moduleclasses, self.options.avail_modules_tools, self.options.avail_module_naming_schemes, ]): build_easyconfig_constants_dict() # runs the easyconfig constants sanity check self._postprocess_list_avail() self._postprocess_config()
def test_easyconfig_constants(self): """Test available easyconfig constants.""" constants = build_easyconfig_constants_dict() # SYSTEM constant is a dict value, so takes special care system_constant = constants.pop('SYSTEM') self.assertEqual(system_constant, { 'name': 'system', 'version': 'system' }) # make sure both keys and values are of appropriate types for constant_name in constants: self.assertTrue(isinstance(constant_name, string_type), "Constant name %s is a string" % constant_name) val = constants[constant_name] fail_msg = "The constant %s should have an acceptable type, found %s (%s)" % ( constant_name, type(val), str(val)) self.assertTrue(isinstance(val, (string_type, dict, tuple)), fail_msg) # check a couple of randomly picked constant values self.assertEqual(constants['SOURCE_TAR_GZ'], '%(name)s-%(version)s.tar.gz') self.assertEqual( constants['PYPI_SOURCE'], 'https://pypi.python.org/packages/source/%(nameletter)s/%(name)s') self.assertEqual(constants['GPLv2'], 'LicenseGPLv2') self.assertEqual(constants['EXTERNAL_MODULE'], 'EXTERNAL_MODULE')
def postprocess(self): """Do some postprocessing, in particular print stuff""" build_log.EXPERIMENTAL = self.options.experimental config.SUPPORT_OLDSTYLE = self.options.oldstyleconfig # set strictness of run module if self.options.strict: run.strictness = self.options.strict # override current version of EasyBuild with version specified to --deprecated if self.options.deprecated: build_log.CURRENT_VERSION = LooseVersion(self.options.deprecated) # log to specified value of --unittest-file if self.options.unittest_file: fancylogger.logToFile(self.options.unittest_file) # prepare for --list/--avail if any([self.options.avail_easyconfig_params, self.options.avail_easyconfig_templates, self.options.list_easyblocks, self.options.list_toolchains, self.options.avail_easyconfig_constants, self.options.avail_easyconfig_licenses, self.options.avail_repositories, self.options.show_default_moduleclasses, self.options.avail_modules_tools, self.options.avail_module_naming_schemes, ]): build_easyconfig_constants_dict() # runs the easyconfig constants sanity check self._postprocess_list_avail() # fail early if required dependencies for functionality requiring using GitHub API are not available: if self.options.from_pr or self.options.upload_test_report: if not HAVE_GITHUB_API: self.log.error("Required support for using GitHub API is not available (see warnings).") # make sure a GitHub token is available when it's required if self.options.upload_test_report: if not HAVE_KEYRING: self.log.error("Python 'keyring' module required for obtaining GitHub token is not available.") if self.options.github_user is None: self.log.error("No GitHub user name provided, required for fetching GitHub token.") token = fetch_github_token(self.options.github_user) if token is None: self.log.error("Failed to obtain required GitHub token for user '%s'" % self.options.github_user) self._postprocess_config()
def test_easyconfig_constants(self): """Test available easyconfig constants.""" constants = build_easyconfig_constants_dict() # make sure both keys and values are only strings for constant_name in constants: self.assertTrue(isinstance(constant_name, basestring), "Constant name %s is a string" % constant_name) val = constants[constant_name] self.assertTrue(isinstance(val, basestring), "Constant value %s is a string" % val) # check a couple of randomly picked constant values self.assertEqual(constants['SOURCE_TAR_GZ'], '%(name)s-%(version)s.tar.gz') self.assertEqual(constants['PYPI_SOURCE'], 'https://pypi.python.org/packages/source/%(nameletter)s/%(name)s') self.assertEqual(constants['GPLv2'], 'LicenseGPLv2') self.assertEqual(constants['EXTERNAL_MODULE'], 'EXTERNAL_MODULE')
def test_easyconfig_constants(self): """Test available easyconfig constants.""" constants = build_easyconfig_constants_dict() # make sure both keys and values are only strings for constant_name in constants: self.assertTrue(isinstance(constant_name, basestring), "Constant name %s is a string" % constant_name) val = constants[constant_name] self.assertTrue(isinstance(val, basestring), "Constant value %s is a string" % val) # check a couple of randomly picked constant values self.assertEqual(constants['SOURCE_TAR_GZ'], '%(name)s-%(version)s.tar.gz') self.assertEqual(constants['PYPI_SOURCE'], 'https://pypi.python.org/packages/source/%(nameletter)s/%(name)s') self.assertEqual(constants['GPLv2'], 'LicenseGPLv2') self.assertEqual(constants['EXTERNAL_MODULE'], 'EXTERNAL_MODULE')
def _inject_constants_dict(self, txt): """Inject constants so they are resolved when actually parsing the YAML text.""" constants_dict = build_easyconfig_constants_dict() lines = txt.splitlines() # extract possible YAML header, for example # %YAML 1.2 # --- yaml_header = [] for i, line in enumerate(lines): if line.startswith(YAML_DIR): if lines[i+1].startswith(YAML_SEP): yaml_header.extend([lines.pop(i), lines.pop(i)]) injected_constants = ['__CONSTANTS__: '] for key, value in constants_dict.items(): injected_constants.append('%s- &%s %s' % (INDENT_4SPACES, key, quote_str(value))) full_txt = '\n'.join(yaml_header + injected_constants + lines) return full_txt
def _inject_constants_dict(self, txt): """Inject constants so they are resolved when actually parsing the YAML text.""" constants_dict = build_easyconfig_constants_dict() lines = txt.splitlines() # extract possible YAML header, for example # %YAML 1.2 # --- yaml_header = [] for i, line in enumerate(lines): if line.startswith(YAML_DIR): if lines[i+1].startswith(YAML_SEP): yaml_header.extend([lines.pop(i), lines.pop(i)]) injected_constants = ['__CONSTANTS__: '] for key, value in constants_dict.items(): injected_constants.append('%s- &%s %s' % (INDENT_4SPACES, key, quote_str(value))) full_txt = '\n'.join(yaml_header + injected_constants + lines) return full_txt