def set_computer_builder(ctx, param, value): """Set the computer spec for defaults of following options.""" from aiida.orm.utils.builders.computer import ComputerBuilder ctx.computer_builder = ComputerBuilder.from_computer(value) return value
def duplicate_fe(computer: Computer, include_codes, input_plugin, suffix, dry_run, job_should_keep_env): """ Create copies of the existing computer using FwScheduler, add existing Code if requested. """ from aiida import orm from aiida.orm.utils.builders.computer import ComputerBuilder from fireworks.fw_config import LAUNCHPAD_LOC if LAUNCHPAD_LOC is None: echo.echo_critical( 'Cannot find the default Fireworks launchpad. ' 'Please make sure you have configured Fireworks correctly, see ' 'https://materialsproject.github.io/fireworks/config_tutorial.html' ) builder = ComputerBuilder.from_computer(computer) if 'slurm' in computer.scheduler_type or job_should_keep_env: builder.scheduler = "fireworks_scheduler.keepenv" else: builder.scheduler = "fireworks_scheduler.default" echo.echo_info(f"Scheduler for the new computer: {builder.scheduler}") builder.label += "-" + suffix builder.description += "(Using Fireworks as the scheduler.)" comp = builder.new() echo.echo_info(f"Adding new computer {comp}") if not dry_run: comp.store() echo.echo_info(f"Computer {comp} has been saved to the database") if include_codes: qb_code_filters = dict() if input_plugin: qb_code_filters['attributes.input_plugin'] = input_plugin.name user = orm.User.objects.get_default() qbd = orm.QueryBuilder() qbd.append(orm.Computer, tag='computer', filters={'id': computer.pk}) qbd.append(orm.Code, with_computer='computer', tag='code', filters=qb_code_filters, project=['*']) qbd.append(orm.User, tag='user', with_node='code', filters={'email': user.email}) new_codes = [] for (code, ) in qbd.iterall(): new_code = deepcopy(code) new_code.set_remote_computer_exec( (comp, code.get_remote_exec_path())) new_codes.append(new_code) echo.echo_info(f"Adding new code {new_code}") if not dry_run: for code in new_codes: code.store() echo.echo_info(f"Code {code} has been saved to the database") if dry_run: echo.echo_info("This is a dry-run nothing has been saved.")