def init_run_output(path, wa_state, force=False): if os.path.exists(path): if force: logger.info('Removing existing output directory.') shutil.rmtree(os.path.abspath(path)) else: raise RuntimeError('path exists: {}'.format(path)) logger.info('Creating output directory.') os.makedirs(path) meta_dir = os.path.join(path, '__meta') os.makedirs(meta_dir) _save_raw_config(meta_dir, wa_state) touch(os.path.join(path, 'run.log')) info = RunInfo( run_name=wa_state.run_config.run_name, project=wa_state.run_config.project, project_stage=wa_state.run_config.project_stage, ) write_pod(info.to_pod(), os.path.join(meta_dir, 'run_info.json')) write_pod(RunState().to_pod(), os.path.join(path, '.run_state.json')) write_pod(Result().to_pod(), os.path.join(path, 'result.json')) ro = RunOutput(path) ro.update_metadata('versions', 'wa', get_wa_version_with_commit()) ro.update_metadata('versions', 'devlib', devlib.__full_version__) return ro
def reload(self): super(RunDatabaseOutput, self).reload() info_pod = self._db_infofile state_pod = self._db_statefile if not info_pod or not state_pod: msg = '"{}" does not appear to be a valid WA Database Output.' raise ValueError(msg.format(self.oid)) self.info = RunInfo.from_pod(info_pod) self.state = RunState.from_pod(state_pod) self._combined_config = CombinedConfig.from_pod( {'run_config': self._db_run_config}) self.target_info = TargetInfo.from_pod(self._db_targetfile) self.job_specs = self.read_job_specs() for job_state in self._db_statefile['jobs']: job = JobDatabaseOutput(self.conn, job_state.get('oid'), job_state['id'], job_state['label'], job_state['iteration'], job_state['retries']) job.status = job_state['status'] job.spec = self.get_job_spec(job.id) if job.spec is None: logger.warning('Could not find spec for job {}'.format(job.id)) self.jobs.append(job)
def reload(self): super(RunOutput, self).reload() self.info = RunInfo.from_pod(read_pod(self.infofile)) self.state = RunState.from_pod(read_pod(self.statefile)) if os.path.isfile(self.configfile): self._combined_config = CombinedConfig.from_pod(read_pod(self.configfile)) if os.path.isfile(self.targetfile): self.target_info = TargetInfo.from_pod(read_pod(self.targetfile)) if os.path.isfile(self.jobsfile): self.job_specs = self.read_job_specs() for job_state in self.state.jobs.values(): job_path = os.path.join(self.basepath, job_state.output_name) job = JobOutput(job_path, job_state.id, job_state.label, job_state.iteration, job_state.retries) job.status = job_state.status job.spec = self.get_job_spec(job.id) if job.spec is None: logger.warning('Could not find spec for job {}'.format(job.id)) self.jobs.append(job)