Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def test_easybuildlog(self):
"""Tests for EasyBuildLog."""
fd, tmplog = tempfile.mkstemp()
os.close(fd)
# compose versions older/newer than current version
depr_ver = int(os.environ['EASYBUILD_DEPRECATED'])
older_ver = str(depr_ver - 1)
newer_ver = str(depr_ver + 1)
# set log format, for each regex searching
setLogFormat("%(name)s [%(levelname)s] :: %(message)s")
# test basic log methods
logToFile(tmplog, enable=True)
log = getLogger('test_easybuildlog')
self.mock_stderr(True)
log.setLevelName('DEBUG')
log.debug("123 debug")
log.info("foobar info")
log.warning("justawarning")
log.deprecated("anotherwarning", newer_ver)
log.deprecated("onemorewarning", '1.0', '2.0')
log.deprecated("lastwarning", '1.0', max_ver='2.0')
log.deprecated("thisisnotprinted", '1.0', max_ver='2.0', silent=True)
log.error("kaput")
log.error("err: %s", 'msg: %s')
stderr = self.get_stderr()
self.mock_stderr(False)
more_info = "see http://easybuild.readthedocs.org/en/latest/Deprecated-functionality.html for more information"
expected_stderr = '\n\n'.join([
def setUp(self):
"""Set up testcase."""
super(EnhancedTestCase, self).setUp()
# make sure option parser doesn't pick up any cmdline arguments/options
while len(sys.argv) > 1:
sys.argv.pop()
# keep track of log handlers
log = fancylogger.getLogger(fname=False)
self.orig_log_handlers = log.handlers[:]
log.info("setting up test %s" % self.id())
self.orig_tmpdir = tempfile.gettempdir()
# use a subdirectory for this test (which we can clean up easily after the test completes)
self.test_prefix = set_tmpdir()
self.log = fancylogger.getLogger(self.__class__.__name__, fname=False)
fd, self.logfile = tempfile.mkstemp(suffix='.log', prefix='eb-test-')
os.close(fd)
self.cwd = os.getcwd()
# keep track of original environment to restore
self.orig_environ = copy.deepcopy(os.environ)
def base_init(self):
"""Initialise missing class attributes (log, options, variables)."""
if not hasattr(self, 'log'):
self.log = fancylogger.getLogger(self.__class__.__name__, fname=False)
if not hasattr(self, 'options'):
self.options = self.OPTIONS_CLASS()
if not hasattr(self, 'variables'):
self.variables_init()
def process_software_build_specs(options):
"""
Create a dictionary with specified software build options.
The options arguments should be a parsed option list (as delivered by parse_options(args).options)
"""
try_to_generate = False
build_specs = {}
logger = fancylogger.getLogger()
# regular options: don't try to generate easyconfig, and search
opts_map = {
'name': options.software_name,
'version': options.software_version,
'toolchain_name': options.toolchain_name,
'toolchain_version': options.toolchain_version,
}
# try options: enable optional generation of easyconfig
try_opts_map = {
'name': options.try_software_name,
'version': options.try_software_version,
'toolchain_name': options.try_toolchain_name,
'toolchain_version': options.try_toolchain_version,
}
def det_pylibdir():
"""Determine Python library directory."""
log = fancylogger.getLogger('det_pylibdir', fname=False)
pyver = get_software_version('Python')
if not pyver:
raise EasyBuildError("Python module not loaded.")
else:
# determine Python lib dir via distutils
# use run_cmd, we can to talk to the active Python, not the system Python running EasyBuild
prefix = '/tmp/'
pycmd = 'import distutils.sysconfig; print(distutils.sysconfig.get_python_lib(prefix="%s"))' % prefix
cmd = "python -c '%s'" % pycmd
out, ec = run_cmd(cmd, simple=False)
out = out.strip()
# value obtained should start with specified prefix, otherwise something is very wrong
if not out.startswith(prefix):
raise EasyBuildError("Output of %s does not start with specified prefix %s: %s (exit code %s)",
cmd, prefix, out, ec)
def request(self, method, url, body, headers, content_type=None):
"""Low-level networking. All HTTP-method methods call this"""
if headers is None:
headers = {}
if content_type is not None:
headers['Content-Type'] = content_type
if self.auth_header is not None:
headers['Authorization'] = self.auth_header
headers['User-Agent'] = self.user_agent
fancylogger.getLogger().debug('cli request: %s, %s, %s, %s', method, url, body, headers)
# TODO: in recent python: Context manager
conn = self.get_connection(method, url, body, headers)
status = conn.code
if method == self.HEAD:
pybody = conn.headers
else:
body = conn.read()
try:
pybody = json_loads(body)
except ValueError:
pybody = body
fancylogger.getLogger().debug('reponse len: %s ', len(pybody))
conn.close()
return status, pybody
from easybuild.base import fancylogger
from easybuild.tools.build_log import EasyBuildError, dry_run_msg
from easybuild.tools.config import build_option, install_path
from easybuild.tools.environment import setvar
from easybuild.tools.filetools import adjust_permissions, find_eb_script, read_file, which, write_file
from easybuild.tools.module_generator import dependencies_for
from easybuild.tools.modules import get_software_root, get_software_root_env_var_name
from easybuild.tools.modules import get_software_version, get_software_version_env_var_name
from easybuild.tools.systemtools import LINUX, get_os_type
from easybuild.tools.toolchain.options import ToolchainOptions
from easybuild.tools.toolchain.toolchainvariables import ToolchainVariables
from easybuild.tools.utilities import nub, trace_msg
_log = fancylogger.getLogger('tools.toolchain', fname=False)
# name/version for dummy toolchain
# if name==DUMMY_TOOLCHAIN_NAME and version==DUMMY_TOOLCHAIN_VERSION, do not load dependencies
# NOTE: use of 'dummy' toolchain is deprecated, replaced by 'system' toolchain (which always loads dependencies)
DUMMY_TOOLCHAIN_NAME = 'dummy'
DUMMY_TOOLCHAIN_VERSION = 'dummy'
SYSTEM_TOOLCHAIN_NAME = 'system'
CCACHE = 'ccache'
F90CACHE = 'f90cache'
RPATH_WRAPPERS_SUBDIR = 'rpath_wrappers'
# available capabilities of toolchains
# values match method names supported by Toolchain class (except for 'cuda')
def __init__(self, *args, **kwargs):
"""Add logger to init"""
CompleterOption.__init__(self, *args, **kwargs)
self.log = getLogger(self.__class__.__name__)
def __init__(self):
"""Initialize logger and find available PNSes to load"""
self.log = fancylogger.getLogger(self.__class__.__name__, fname=False)
avail_pns = avail_package_naming_schemes()
sel_pns = get_package_naming_scheme()
if sel_pns in avail_pns:
self.pns = avail_pns[sel_pns]()
else:
raise EasyBuildError("Selected package naming scheme %s could not be found in %s",
sel_pns, avail_pns.keys())
from easybuild.framework.easyconfig.templates import TEMPLATE_SOFTWARE_VERSIONS, template_constant_dict
from easybuild.framework.easyconfig.tools import avail_easyblocks
from easybuild.framework.easyconfig.tweak import find_matching_easyconfigs
from easybuild.framework.extension import Extension
from easybuild.tools.build_log import EasyBuildError, print_msg
from easybuild.tools.config import build_option
from easybuild.tools.filetools import read_file
from easybuild.tools.modules import modules_tool
from easybuild.tools.py2vs3 import OrderedDict, ascii_lowercase
from easybuild.tools.toolchain.toolchain import DUMMY_TOOLCHAIN_NAME, SYSTEM_TOOLCHAIN_NAME, is_system_toolchain
from easybuild.tools.toolchain.utilities import search_toolchain
from easybuild.tools.utilities import INDENT_2SPACES, INDENT_4SPACES
from easybuild.tools.utilities import import_available_modules, mk_rst_table, nub, quote_str
_log = fancylogger.getLogger('tools.docs')
DETAILED = 'detailed'
SIMPLE = 'simple'
FORMAT_TXT = 'txt'
FORMAT_RST = 'rst'
def generate_doc(name, params):
"""Generate documentation by calling function with specified name, using supplied parameters."""
func = globals()[name]
return func(*params)
def rst_title_and_table(title, table_titles, table_values):