From 1367e5e2789f3915cde02871b676e818c0187c0a Mon Sep 17 00:00:00 2001 From: roger Date: Sun, 2 Aug 2020 09:40:54 +0800 Subject: [PATCH 1/6] Adds fancy decorater for processDirs --- DataProcessingTools/misc.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/DataProcessingTools/misc.py b/DataProcessingTools/misc.py index 8dcf593..c9ab21f 100644 --- a/DataProcessingTools/misc.py +++ b/DataProcessingTools/misc.py @@ -1,4 +1,5 @@ import os +import functools class CWD(object): @@ -12,3 +13,23 @@ def __enter__(self): def __exit__(self, type, value, traceback): os.chdir(self.pwd) + +""" +Calls `func` for every directory in `dirs` + +## Examples +```python +@processDirs(dirs) +def createObj(): + obj = Obj() +``` +""" +def processDirs(dirs): + def decorate_func(func): + @functools.wraps(func) + def wrapper_processDirs(*args,**kwargs): + for d in dirs: + with CWD(d): + func(*args, **kwargs) + return wrapper_processDirs + return decorate_func From 39370117dadc6d9d6e7136a7bef9d211be8404b6 Mon Sep 17 00:00:00 2001 From: roger Date: Sun, 2 Aug 2020 09:41:21 +0800 Subject: [PATCH 2/6] Adds tests for processDirs --- tests/test_misc.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/tests/test_misc.py b/tests/test_misc.py index 4ea3ef5..5a95128 100644 --- a/tests/test_misc.py +++ b/tests/test_misc.py @@ -10,3 +10,28 @@ def test_basic(): with DPT.misc.CWD(tempdir): assert os.path.samefile(os.getcwd(), tempdir) assert os.path.samefile(os.getcwd(), cwd) + + +def test_procesDirs(): + dirs = ["dir_{0}".format(i) for i in range(5)] + + @DPT.misc.processDirs(dirs) + def testfunc(): + with open("test1.txt", "w") as ff: + ff.write("sometest\n") + + tempdir = tempfile.gettempdir() + with DPT.misc.CWD(tempdir): + for d in dirs: + if not os.path.isdir(d): + os.mkdir(d) + testfunc() + allok = True + for d in dirs: + with DPT.misc.CWD(d): + allok = allok and os.path.isfile("test1.txt") + if allok: + os.remove("test1.txt") + os.rmdir(d) + assert allok + From 7a2789a860b708b7c1de0c617be21337a1d09b55 Mon Sep 17 00:00:00 2001 From: roger Date: Sun, 2 Aug 2020 23:35:41 +0800 Subject: [PATCH 3/6] Adds docstring --- DataProcessingTools/misc.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/DataProcessingTools/misc.py b/DataProcessingTools/misc.py index c9ab21f..266bb22 100644 --- a/DataProcessingTools/misc.py +++ b/DataProcessingTools/misc.py @@ -14,17 +14,17 @@ def __enter__(self): def __exit__(self, type, value, traceback): os.chdir(self.pwd) -""" -Calls `func` for every directory in `dirs` - -## Examples -```python -@processDirs(dirs) -def createObj(): - obj = Obj() -``` -""" def processDirs(dirs): + """ + Calls `func` for every directory in `dirs` + + ## Examples + ```python + @processDirs(dirs) + def createObj(): + obj = Obj() + ``` + """ def decorate_func(func): @functools.wraps(func) def wrapper_processDirs(*args,**kwargs): From 045ea94a352b70f76883e737a0a52ee9202d776e Mon Sep 17 00:00:00 2001 From: roger Date: Sun, 2 Aug 2020 23:36:00 +0800 Subject: [PATCH 4/6] Adds processLevels --- DataProcessingTools/levels.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/DataProcessingTools/levels.py b/DataProcessingTools/levels.py index 28b6a08..1e52c17 100644 --- a/DataProcessingTools/levels.py +++ b/DataProcessingTools/levels.py @@ -177,3 +177,23 @@ def normpath(cwd): this_idx = levels.index(this_level) parts = cwd.split(os.path.sep) return os.path.join(*parts[-this_idx:]) + + +def processLevel(level, cmd="", normalize=True): + """ + Evaluate the code in `cmd` for each directory corresponding to `level + under the current directory. + + Return: + ndirs : the directory visited + data : user specified data returned from `cmd` + + """ + dirs = get_level_dirs(level) + if normalize: + dirs = [normpath(d) for d in dirs] + data = [] + for d in dirs: + exec(cmd) + + return dirs, data From 6dcb98736085b6d2996fd7bdc46c88b253b9725d Mon Sep 17 00:00:00 2001 From: roger Date: Sun, 2 Aug 2020 23:36:18 +0800 Subject: [PATCH 5/6] Adds test for processLevel --- tests/test_levels.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/tests/test_levels.py b/tests/test_levels.py index 5e6492a..c1a4bca 100644 --- a/tests/test_levels.py +++ b/tests/test_levels.py @@ -87,3 +87,25 @@ def test_shortnames(): aa = DPT.levels.get_numbers("session01") assert aa == "01" + +def test_processLevel(): + tdir = tempfile.gettempdir() + with DPT.misc.CWD(tdir): + if not os.path.isdir("data2"): + os.mkdir("data2") + with DPT.misc.CWD("data2"): + dir1 = "Pancake/20130923/session01/array02/channel033" + dir2 = "Pancake/20130923/session01/array02/channel034" + for d in [dir1, dir2]: + if not os.path.isdir(d): + os.makedirs(d) + + dirs, data = DPT.levels.processLevel("channel", + "x = 1; y = 2; data.append([x,y])") + + assert dirs[0] == dir1 + assert dirs[1] == dir2 + assert data == [[1, 2], [1, 2]] + for d in [dir1, dir2]: + os.removedirs(d) + os.rmdir("data2") From d5938bd1eac4692855ebced279398b37c4287c4d Mon Sep 17 00:00:00 2001 From: roger Date: Sun, 2 Aug 2020 23:39:22 +0800 Subject: [PATCH 6/6] Bumps version number --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index dbff2d1..0714750 100644 --- a/setup.py +++ b/setup.py @@ -1,7 +1,7 @@ from setuptools import setup setup(name="DataProcessingTools", - version="0.14.0", + version="0.15.0", description="""Tools for processing data with hierarchical organization""", url="https://github.com/grero/DataProcessingTools.git", author="Roger Herikstad",