def metastep()

in src/es_pii_tool/helpers/steps.py [0:0]


def metastep(task: 'Task', stepname: str, func, *args, **kwargs) -> None:
    """The reusable step"""
    step = Step(task=task, stepname=stepname)
    if step.finished():
        logger.info('%s: already completed', step.stub)
        return
    step.begin()
    dry_run_safe = kwargs.pop('dry_run_safe', False)
    dry_run_msg = kwargs.pop('dry_run_msg', None)
    include_step = kwargs.pop('include_step', False)
    if include_step:
        kwargs['step'] = step
    if (dry_run_safe and task.job.dry_run) or not task.job.dry_run:
        try:
            response = func(*args, **kwargs)
        except (MissingIndex, BadClientResult, ValueMismatch) as exc:
            failed_step(task, step, exc)
        if response:
            step.add_log(f'{response}')
    else:
        if dry_run_msg is None:
            dry_run_msg = 'No action logged'
        msg = f'Dry-Run: No changes, but expected behavior: {dry_run_msg}'
        step.add_log(msg)
        logger.debug(msg)
    step.end(completed=True, errors=False, logmsg=f'{stepname} completed')