From 05417da2419bad2084f7ccfba14896b3750ae84e Mon Sep 17 00:00:00 2001 From: roger Date: Mon, 31 Aug 2020 13:41:45 +0800 Subject: [PATCH 1/2] Always call resolve_level when creating objects --- DataProcessingTools/objects.py | 68 ++++++++++++++++++---------------- 1 file changed, 37 insertions(+), 31 deletions(-) diff --git a/DataProcessingTools/objects.py b/DataProcessingTools/objects.py index 985c8bd..4154cee 100644 --- a/DataProcessingTools/objects.py +++ b/DataProcessingTools/objects.py @@ -49,42 +49,48 @@ class DPObject(): def __init__(self, *args, **kwargs): fname = kwargs.get("loadFrom", None) + _dirs = kwargs.get("dirs") if fname is not None: self.load(fname=fname) else: - self.args = {} - # process positional arguments - # TODO: We need to somehow consume these, ie. remove the processed ones - pargs = [p for p in filter(lambda t: not isinstance(t, tuple), type(self).argsList)] - qargs = pargs.copy() - for (k, v) in zip(pargs, args): - self.args[k] = v - qargs.remove(k) - # run the remaining throgh kwargs - for k in qargs: - if k in kwargs.keys(): - self.args[k] = kwargs[k] - - # process keyword arguments - kargs = filter(lambda t: isinstance(t, tuple), type(self).argsList) - for (k, v) in kargs: - self.args[k] = kwargs.get(k, v) - - redoLevel = kwargs.get("redoLevel", 0) - saveLevel = kwargs.get("saveLevel", 0) - fname = self.get_filename() - verbose = kwargs.get("verbose", 1) - if redoLevel == 0 and os.path.isfile(fname): - self.load(fname) - if verbose > 0: - print("Object loaded from file {0}".format(fname)) + if self.level is not None and _dirs: + ldir = levels.resolve_level(self.level) else: - # create object - self.create(*args, **kwargs) - if self.dirs and saveLevel > 0: - self.save() + ldir = os.getcwd() + with misc.CWD(ldir): + self.args = {} + # process positional arguments + # TODO: We need to somehow consume these, ie. remove the processed ones + pargs = [p for p in filter(lambda t: not isinstance(t, tuple), type(self).argsList)] + qargs = pargs.copy() + for (k, v) in zip(pargs, args): + self.args[k] = v + qargs.remove(k) + # run the remaining throgh kwargs + for k in qargs: + if k in kwargs.keys(): + self.args[k] = kwargs[k] + + # process keyword arguments + kargs = filter(lambda t: isinstance(t, tuple), type(self).argsList) + for (k, v) in kargs: + self.args[k] = kwargs.get(k, v) + + redoLevel = kwargs.get("redoLevel", 0) + saveLevel = kwargs.get("saveLevel", 0) + fname = self.get_filename() + verbose = kwargs.get("verbose", 1) + if redoLevel == 0 and os.path.isfile(fname): + self.load(fname) if verbose > 0: - print("Object saved to file {0}".format(fname)) + print("Object loaded from file {0}".format(fname)) + else: + # create object + self.create(*args, **kwargs) + if self.dirs and saveLevel > 0: + self.save() + if verbose > 0: + print("Object saved to file {0}".format(fname)) def create(self, *args, **kwargs): self.dirs = kwargs.get("dirs", [os.getcwd()]) From 89b94c72b1f8ebf0b331e87b00020f057138f39f Mon Sep 17 00:00:00 2001 From: roger Date: Mon, 31 Aug 2020 13:52:44 +0800 Subject: [PATCH 2/2] Fixes a bug where resolve_level was not called if dirs == None --- DataProcessingTools/objects.py | 2 +- setup.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/DataProcessingTools/objects.py b/DataProcessingTools/objects.py index 4154cee..e32b25f 100644 --- a/DataProcessingTools/objects.py +++ b/DataProcessingTools/objects.py @@ -53,7 +53,7 @@ def __init__(self, *args, **kwargs): if fname is not None: self.load(fname=fname) else: - if self.level is not None and _dirs: + if self.level is not None and _dirs != []: ldir = levels.resolve_level(self.level) else: ldir = os.getcwd() diff --git a/setup.py b/setup.py index 98f2ceb..8cf3a63 100644 --- a/setup.py +++ b/setup.py @@ -1,7 +1,7 @@ from distutils.core import setup setup(name="DataProcessingTools", - version="0.18.0", + version="0.19.0", description="""Tools for processing data with hierarchical organization""", url="https://github.com/grero/DataProcessingTools.git", author="Roger Herikstad",