pytask icon indicating copy to clipboard operation
pytask copied to clipboard

Support NamedTuples for named arguments in parametrizations.

Open tobiasraabe opened this issue 3 years ago • 1 comments

Workarounds

typing.NamedTuple or collections.namedtuple can be used to achieve named arguments per iteration of the parametrization.

from pathlib import Path
from typing import NamedTuple


class Task(NamedTuple):
    depends_on: Path
    produces: Path


@pytask.mark.parametrize("depends_on, produces", [
    Task(depends_on="first_dataset.pkl", produces="first_plot.png"),
    Task(depends_on="second_dataset.pkl", produces="second_plot.png"),
])
def task_plot_data(depends_on, produces):
    df = pd.read_pickle(depends_on)
    ax = df.plot()
    plt.savefig(produces)
  • [ ] Document example usage in the documentation.
  • [ ] Implement a check for whether the arguments of the namedtuple match the signature of the parametrization.

Originally posted by @tobiasraabe in https://github.com/pytask-dev/pytask/issues/206#issuecomment-1045368086

tobiasraabe avatar Feb 23 '22 17:02 tobiasraabe

This will not be pursued. #229 implements a new approach to parametrizations which will eventually supersede pytest's approach.

We keep this issue open for documentation. Probably until the pytest approach is deprecated.

tobiasraabe avatar Mar 03 '22 18:03 tobiasraabe