From fbd87d03b8d670b5253da5dd1a20ddc5dc579d59 Mon Sep 17 00:00:00 2001 From: richardjgowers Date: Wed, 3 Jul 2019 10:45:26 +0100 Subject: [PATCH 1/3] tests for issue 2232 --- testsuite/MDAnalysisTests/topology/test_psf.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/testsuite/MDAnalysisTests/topology/test_psf.py b/testsuite/MDAnalysisTests/topology/test_psf.py index 51c809c73d7..36c5638c596 100644 --- a/testsuite/MDAnalysisTests/topology/test_psf.py +++ b/testsuite/MDAnalysisTests/topology/test_psf.py @@ -23,6 +23,8 @@ from __future__ import absolute_import from numpy.testing import assert_equal +import pytest +import bz2 import MDAnalysis as mda from MDAnalysisTests.topology.base import ParserBase @@ -50,6 +52,19 @@ class TestPSFParser(ParserBase): expected_n_residues = 214 expected_n_segments = 1 + @pytest.fixture(params=['uncompressed', 'bz2']) + def filename(self, request, tmpdir): + if request.param == 'uncompressed': + return self.ref_filename + else: + fn = tmpdir.join('file.psf.bz2') + with open(self.ref_filename, 'rb') as f: + stuff = f.read() + buf = bz2.compress(stuff) + with open(fn, 'wb') as out: + out.write(buf) + return fn + def test_bonds_total_counts(self, top): assert len(top.bonds.values) == 3365 From f94d35fb75dd7a2f2b2140f9bf61ddf819f54b64 Mon Sep 17 00:00:00 2001 From: richardjgowers Date: Wed, 3 Jul 2019 10:49:55 +0100 Subject: [PATCH 2/3] fixes issue 2232 can now read bz2 compressed psf files --- package/CHANGELOG | 1 + package/MDAnalysis/topology/PSFParser.py | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/package/CHANGELOG b/package/CHANGELOG index fdb4d1dbcbe..bf3c0b724cf 100644 --- a/package/CHANGELOG +++ b/package/CHANGELOG @@ -68,6 +68,7 @@ Changes * bump minimum numpy version to 1.13.3 Fixes + * fixed reading bz2 compressed psf files (Issue #2232) * fixed mol2 comment header handling (Issue #2261) * fixed reading PDB files with partial CRYST lines (Issue #2252) * fixed transformation tests not being run (Issue #2241) diff --git a/package/MDAnalysis/topology/PSFParser.py b/package/MDAnalysis/topology/PSFParser.py index 3be3b89d4e6..798c5f22591 100644 --- a/package/MDAnalysis/topology/PSFParser.py +++ b/package/MDAnalysis/topology/PSFParser.py @@ -122,14 +122,14 @@ def parse(self, **kwargs): next(psffile) title = next(psffile).split() if not (title[1] == "!NTITLE"): - err = "{0} is not a valid PSF file".format(psffile.name) + err = "{0} is not a valid PSF file".format(self.filename) logger.error(err) raise ValueError(err) # psfremarks = [psffile.next() for i in range(int(title[0]))] for _ in range(int(title[0])): next(psffile) logger.debug("PSF file {0}: format {1}" - "".format(psffile.name, self._format)) + "".format(self.filename, self._format)) # Atoms first and mandatory top = self._parse_sec( From 3e84e818e9e9449687108ac9f46ed56c698e8739 Mon Sep 17 00:00:00 2001 From: richardjgowers Date: Wed, 3 Jul 2019 11:59:28 +0100 Subject: [PATCH 3/3] fixed py2.7 not liking Path objects --- testsuite/MDAnalysisTests/topology/test_psf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/testsuite/MDAnalysisTests/topology/test_psf.py b/testsuite/MDAnalysisTests/topology/test_psf.py index 36c5638c596..c20077ba358 100644 --- a/testsuite/MDAnalysisTests/topology/test_psf.py +++ b/testsuite/MDAnalysisTests/topology/test_psf.py @@ -57,7 +57,7 @@ def filename(self, request, tmpdir): if request.param == 'uncompressed': return self.ref_filename else: - fn = tmpdir.join('file.psf.bz2') + fn = str(tmpdir.join('file.psf.bz2')) with open(self.ref_filename, 'rb') as f: stuff = f.read() buf = bz2.compress(stuff)