Exemplo n.º 1
0
def framework_test(code_root, output_dir, cli_config):
    print("Starting framework test run")
    abs_out_dir = util.resolve_path(output_dir,
                                    root_path=code_root,
                                    env=os.environ)
    try:
        log_str = shell_command_wrapper('./mdtf -f {input_file}'.format(
            input_file=os.path.join(code_root, cli_config['config_out'])),
                                        cwd=code_root)
        log_str = util.to_iter(log_str)
        # write to most recent directory in output_dir
        runs = [
            d for d in glob.glob(os.path.join(abs_out_dir, '*'))
            if os.path.isdir(d)
        ]
        if not runs:
            raise IOError(
                "Can't find framework output in {}".format(abs_out_dir))
        run_output = max(runs, key=os.path.getmtime)
        with io.open(os.path.join(run_output, 'mdtf_test.log'),
                     'w',
                     encoding='utf-8') as f:
            f.write('\n'.join(log_str))
    except Exception as exc:
        fatal_exception_handler(exc, "ERROR: framework test run failed.")
    print("Finished framework test run at {}".format(run_output))
    return run_output
Exemplo n.º 2
0
 def _init_path(self, key, d, env=None):
     if self._unittest: # use in unit testing only
         return 'TEST_'+key
     else:
         # need to check existence in case we're being called directly
         assert key in d, f"Error: {key} not initialized."
         return util.resolve_path(
             util.from_iter(d[key]), root_path=self.CODE_ROOT, env=env
         )
Exemplo n.º 3
0
 def _init_path(self, key, d, env=None):
     if self._unittest:  # use in unit testing only
         return 'TEST_' + key
     else:
         # need to check existence in case we're being called directly
         if not d.get(key, False):
             _log.fatal(f"Error: {key} not initialized.")
             util.exit_handler(code=1)
         return util.resolve_path(util.from_iter(d[key]),
                                  root_path=self.CODE_ROOT,
                                  env=env,
                                  log=_log)
Exemplo n.º 4
0
 def parse_env_vars(self, cli_obj, config):
     super(GFDLMDTFFramework, self).parse_env_vars(cli_obj, config)
     # set temp directory according to where we're running
     if gfdl.running_on_PPAN():
         gfdl_tmp_dir = cli_obj.config.get('GFDL_PPAN_TEMP', '$TMPDIR')
     else:
         gfdl_tmp_dir = cli_obj.config.get('GFDL_WS_TEMP', '$TMPDIR')
     gfdl_tmp_dir = util.resolve_path(gfdl_tmp_dir,
                                      root_path=self.code_root,
                                      env=config.global_envvars)
     if not os.path.isdir(gfdl_tmp_dir):
         gfdl.make_remote_dir(gfdl_tmp_dir)
     tempfile.tempdir = gfdl_tmp_dir
     os.environ['MDTF_GFDL_TMPDIR'] = gfdl_tmp_dir
     config.global_envvars['MDTF_GFDL_TMPDIR'] = gfdl_tmp_dir
Exemplo n.º 5
0
    def parse_config(self):
        d = self.config  # abbreviation
        # determine downloads
        d.downloads_list = ['obs']
        if not d.no_cesm:
            d.downloads_list.append('model_cesm')
        if not d.no_am4:
            d.downloads_list.append('model_am4')

        # determine runtime setup
        d.pods = 'all'
        d.conda_envmgr = True
        if d.env_setup == 'conda-basic':
            d.conda_envs = [self.settings.conda['framework_env'], 'NCL_base']
            d.environment_manager = "Conda"
            d.pods = [
                "Wheeler_Kiladis", "EOF_500hPa", "MJO_suite",
                "MJO_teleconnection"
            ]
            if 'model_am4' in d.downloads_list:
                d.downloads_list.remove('model_am4')
        elif d.env_setup == 'conda-full':
            d.conda_envs = ['all']
            d.environment_manager = "Conda"
        elif d.env_setup == 'no-conda':
            d.conda_envmgr = False
            d.conda_envs = []
            d.environment_manager = "VirtualEnv"
        if d.conda_install_dev and not d.conda_envmgr:
            d.conda_envs.append('dev')

        # make settings consistent with config
        ordered_data = collections.OrderedDict()
        for k in d.downloads_list:
            ordered_data[k] = self.settings.data[k]
        self.settings.data = ordered_data
        for k in self._shared_conda_keys:
            self.settings.conda[k] = d[k]
        # convert relative paths to absolute
        for key in (self._env_paths + self._data_paths):
            if d[key]:
                d[key] = util.resolve_path(d[key],
                                           root_path=self.code_root,
                                           env=os.environ)