From 528f7621d955b110f5d7005a12511ca609789ce1 Mon Sep 17 00:00:00 2001 From: Timothe Jost <timothe.jost@wanadoo.fr> Date: Sat, 16 Mar 2024 04:27:58 +0100 Subject: [PATCH] fixing pipe load autofind the right step --- src/pypelines/__init__.py | 2 +- src/pypelines/disk.py | 6 +++++- src/pypelines/pipes.py | 15 ++++++++++----- src/pypelines/steps.py | 2 +- 4 files changed, 17 insertions(+), 8 deletions(-) diff --git a/src/pypelines/__init__.py b/src/pypelines/__init__.py index edbe75c..41a8598 100644 --- a/src/pypelines/__init__.py +++ b/src/pypelines/__init__.py @@ -1,4 +1,4 @@ -__version__ = "0.0.26" +__version__ = "0.0.27" from . import loggs from .pipes import * diff --git a/src/pypelines/disk.py b/src/pypelines/disk.py index a132ab2..0b0e176 100644 --- a/src/pypelines/disk.py +++ b/src/pypelines/disk.py @@ -23,6 +23,10 @@ class BaseDiskObject(metaclass=ABCMeta): disk_version = None disk_step = None + step: "BaseStep" + session: Session + extra: str + def __init__(self, session: Session, step: "BaseStep", extra="") -> None: # this object is meant to be short lived. Created, check drive, # and quickly take action by saving or loading file according to the procedures defined. @@ -91,7 +95,7 @@ class BaseDiskObject(metaclass=ABCMeta): return None def is_matching(self): - if self.is_loadable() and not self.version_deprecated() and not self.step_level_too_low(): + if self.is_loadable() and not (self.version_deprecated() or self.step_level_too_low()): return True return False diff --git a/src/pypelines/pipes.py b/src/pypelines/pipes.py index 9dc41a8..5abfa81 100644 --- a/src/pypelines/pipes.py +++ b/src/pypelines/pipes.py @@ -130,11 +130,16 @@ class BasePipe(metaclass=ABCMeta): return function def load(self, session, extra="", which: Literal["lowest", "highest"] = "highest"): - ordered_steps = sorted(list(self.steps.values()), key=lambda item: item.get_level(selfish=True)) - if which == "lowest": - step = ordered_steps[0] + reverse = False else: - step = ordered_steps[-1] + reverse = True + + ordered_steps = sorted( + list(self.steps.values()), key=lambda item: item.get_level(selfish=True), reverse=reverse + ) - return step.load(session, extra) + for step in ordered_steps: + if step.get_disk_object(session, extra).is_matching(): + return step.load(session, extra) + raise ValueError(f"Could not find a {self} object to load for the session {session.alias} with extra {extra}") diff --git a/src/pypelines/steps.py b/src/pypelines/steps.py index 211445b..a221241 100644 --- a/src/pypelines/steps.py +++ b/src/pypelines/steps.py @@ -143,7 +143,7 @@ class BaseStep: def get_load_wrapped(self): @wraps(self.pipe.disk_class.load) - def wrapper(session, extra=None): + def wrapper(session, extra=None, strict=False): # print("extra in load wrapper : ", extra) if extra is None: extra = self.get_default_extra() -- GitLab