From b6be1ba97b5088f777d2ec231b8ff384effb9bfc Mon Sep 17 00:00:00 2001 From: Jamie Morton Date: Fri, 2 Dec 2016 14:41:57 -0800 Subject: [PATCH 1/3] Addressing #77 --- CHANGELOG.md | 6 ++++++ gneiss/regression/_summary.py | 19 ++++++++++++------- gneiss/regression/tests/test_summary.py | 11 +++++++++++ 3 files changed, 29 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 492388a..3e30e18 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # gneiss changelog +## Version 0.2.0 + +### Features +* Added filehandle support for write and read io in RegressionResults object [#72](https://github.com/biocore/gneiss/issues/77) + + ## Version 0.1.3 ### Features diff --git a/gneiss/regression/_summary.py b/gneiss/regression/_summary.py index fce5600..592730f 100644 --- a/gneiss/regression/_summary.py +++ b/gneiss/regression/_summary.py @@ -271,7 +271,7 @@ def read_pickle(self, filename): Parameters ---------- - filename : str + filename : str or filehandle Input file to unpickle. Returns @@ -283,8 +283,11 @@ def read_pickle(self, filename): Warning: Loading pickled data received from untrusted sources can be unsafe. See: https://wiki.python.org/moin/UsingPickle """ - with open(filename, 'rb') as fh: - res = pickle.load(fh) + if isinstance(filename, str): + with open(filename, 'rb') as fh: + res = pickle.load(fh) + else: + res = pickle.load(filename) return res def write_pickle(self, filename): @@ -292,9 +295,11 @@ def write_pickle(self, filename): Parameters ---------- - filename : str + filename : str or filehandle Output file to store pickled object. """ - - with open(filename, 'wb') as fh: - pickle.dump(self, fh) + if isinstance(filename, str): + with open(filename, 'wb') as fh: + pickle.dump(self, fh) + else: + pickle.dump(self, filename) diff --git a/gneiss/regression/tests/test_summary.py b/gneiss/regression/tests/test_summary.py index d1a55e0..59a8bb6 100644 --- a/gneiss/regression/tests/test_summary.py +++ b/gneiss/regression/tests/test_summary.py @@ -225,6 +225,17 @@ def test_read_write(self): self.assertEqual(str(res.tree), str(exp.tree)) pdt.assert_frame_equal(res.pvalues, exp.pvalues) + def test_read_write_handle(self): + fh = open(self.pickle_fname, 'wb') + exp = RegressionResults(self.results, tree=self.tree) + exp.write_pickle(fh) + fh.close() + fh = open(self.pickle_fname, 'rb') + res = RegressionResults.read_pickle(self.pickle_fname) + fh.close() + self.assertEqual(str(res.tree), str(exp.tree)) + pdt.assert_frame_equal(res.pvalues, exp.pvalues) + if __name__ == "__main__": unittest.main() From 470603f7f6c84cd819a60c84050191a5c22cd6bb Mon Sep 17 00:00:00 2001 From: Jamie Morton Date: Fri, 2 Dec 2016 14:46:21 -0800 Subject: [PATCH 2/3] Fixing coveralls --- gneiss/regression/tests/test_summary.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gneiss/regression/tests/test_summary.py b/gneiss/regression/tests/test_summary.py index 59a8bb6..b9b3ef0 100644 --- a/gneiss/regression/tests/test_summary.py +++ b/gneiss/regression/tests/test_summary.py @@ -231,7 +231,7 @@ def test_read_write_handle(self): exp.write_pickle(fh) fh.close() fh = open(self.pickle_fname, 'rb') - res = RegressionResults.read_pickle(self.pickle_fname) + res = RegressionResults.read_pickle(fh) fh.close() self.assertEqual(str(res.tree), str(exp.tree)) pdt.assert_frame_equal(res.pvalues, exp.pvalues) From 39f5c87ec8e13bfad1d653a2aa569138b0a4da35 Mon Sep 17 00:00:00 2001 From: Jamie Morton Date: Sat, 3 Dec 2016 09:23:27 -0800 Subject: [PATCH 3/3] Addressing @qiyunzhu comments --- gneiss/regression/tests/test_summary.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/gneiss/regression/tests/test_summary.py b/gneiss/regression/tests/test_summary.py index b9b3ef0..2fcece4 100644 --- a/gneiss/regression/tests/test_summary.py +++ b/gneiss/regression/tests/test_summary.py @@ -226,13 +226,13 @@ def test_read_write(self): pdt.assert_frame_equal(res.pvalues, exp.pvalues) def test_read_write_handle(self): - fh = open(self.pickle_fname, 'wb') - exp = RegressionResults(self.results, tree=self.tree) - exp.write_pickle(fh) - fh.close() - fh = open(self.pickle_fname, 'rb') - res = RegressionResults.read_pickle(fh) - fh.close() + with open(self.pickle_fname, 'wb') as wfh: + exp = RegressionResults(self.results, tree=self.tree) + exp.write_pickle(wfh) + + with open(self.pickle_fname, 'rb') as rfh: + res = RegressionResults.read_pickle(rfh) + self.assertEqual(str(res.tree), str(exp.tree)) pdt.assert_frame_equal(res.pvalues, exp.pvalues)