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()