Example #1
0
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
Example #2
0
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.")