From b6c0b0074dfb4ba44ef0ffb19f3dfc155b3bee67 Mon Sep 17 00:00:00 2001 From: elichad Date: Wed, 9 Mar 2022 11:42:59 +0000 Subject: [PATCH] use fingerprint for extxyz sniffer --- lib/galaxy/datatypes/molecules.py | 37 ++++------------------- lib/galaxy/datatypes/sniff.py | 3 -- lib/galaxy/datatypes/test/Si_multi.extxyz | 20 ------------ 3 files changed, 6 insertions(+), 54 deletions(-) delete mode 100644 lib/galaxy/datatypes/test/Si_multi.extxyz diff --git a/lib/galaxy/datatypes/molecules.py b/lib/galaxy/datatypes/molecules.py index f721569f492..fcc39ef5bd4 100644 --- a/lib/galaxy/datatypes/molecules.py +++ b/lib/galaxy/datatypes/molecules.py @@ -1401,42 +1401,17 @@ class ExtendedXYZ(XYZ): >>> fname = get_test_fname('Si.extxyz') >>> ExtendedXYZ().sniff(fname) True - >>> from galaxy.datatypes.sniff import get_test_fname - >>> fname = get_test_fname('Si_multi.extxyz') - >>> ExtendedXYZ().sniff(fname) - True >>> fname = get_test_fname('Si.xyz') >>> ExtendedXYZ().sniff(fname) False """ with open(filename) as f: - xyz_lines = f.readlines(1000)[:-1] - - try: - blocks = self.read_blocks(xyz_lines) - except (TypeError, ValueError): - return False - except IndexError as e: - if "pop from empty list" in str(e): - # xyz_lines ran out mid-block – check full file - with open(filename) as f: - xyz_lines = f.readlines() - try: - blocks = self.read_blocks(xyz_lines) - except (TypeError, ValueError, IndexError): - # any error is now a failure - return False - else: - # some other IndexError - invalid input - return False - - # check blocks are valid - for block in blocks: - if block["number_of_atoms"] is None: - return False - - # all checks passed - return True + # fingerprint is 'Properties=":::..."' in the second line + # e.g. Properties="species:S:1:pos:R:3:vel:R:3:select:I:1" + f.readline() + comment = f.readline() + properties = re.search(r"Properties=\"?([a-zA-Z0-9:]+)\"?", comment) # returns None if no match + return True if properties else False def read_blocks(self, lines): """ diff --git a/lib/galaxy/datatypes/sniff.py b/lib/galaxy/datatypes/sniff.py index 87a1c9218c6..3fa67dfa4d0 100644 --- a/lib/galaxy/datatypes/sniff.py +++ b/lib/galaxy/datatypes/sniff.py @@ -390,9 +390,6 @@ def guess_ext(fname, sniff_order, is_binary=False): >>> fname = get_test_fname('Si.extxyz') >>> guess_ext(fname, sniff_order) 'extxyz' - >>> fname = get_test_fname('Si_multi.extxyz') - >>> guess_ext(fname, sniff_order) - 'extxyz' >>> fname = get_test_fname('mothur_datatypetest_true.mothur.otu') >>> guess_ext(fname, sniff_order) 'mothur.otu' diff --git a/lib/galaxy/datatypes/test/Si_multi.extxyz b/lib/galaxy/datatypes/test/Si_multi.extxyz deleted file mode 100644 index 5c4d0b987fd..00000000000 --- a/lib/galaxy/datatypes/test/Si_multi.extxyz +++ /dev/null @@ -1,20 +0,0 @@ -8 -Lattice="5.44 0.0 0.0 0.0 5.44 0.0 0.0 0.0 5.44" Properties="species:S:1:pos:R:3:vel:R:3:select:I:1" Time=0.0 -Si 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 1 -Si 1.36000000 1.36000000 1.36000000 0.00000000 0.00000000 0.00000000 1 -Si 2.72000000 2.72000000 0.00000000 0.00000000 0.00000000 0.00000000 1 -Si 4.08000000 4.08000000 1.36000000 0.00000000 0.00000000 0.00000000 1 -Si 2.72000000 0.00000000 2.72000000 0.00000000 0.00000000 0.00000000 1 -Si 4.08000000 1.36000000 4.08000000 0.00000000 0.00000000 0.00000000 1 -Si 0.00000000 2.72000000 2.72000000 0.00000000 0.00000000 0.00000000 1 -Si 1.36000000 4.08000000 4.08000000 0.00000000 0.00000000 0.00000000 1 -8 -Lattice="5.44 0.0 0.0 0.0 5.44 0.0 0.0 0.0 5.44" Properties="species:S:1:pos:R:3:vel:R:3:select:I:1" Time=0.0 -Si 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 1 -Si 1.36000000 1.36000000 1.36000000 0.00000000 0.00000000 0.00000000 1 -Si 2.72000000 2.72000000 0.00000000 0.00000000 0.00000000 0.00000000 1 -Si 4.08000000 4.08000000 1.36000000 0.00000000 0.00000000 0.00000000 1 -Si 2.72000000 0.00000000 2.72000000 0.00000000 0.00000000 0.00000000 1 -Si 4.08000000 1.36000000 4.08000000 0.00000000 0.00000000 0.00000000 1 -Si 0.00000000 2.72000000 2.72000000 0.00000000 0.00000000 0.00000000 1 -Si 1.36000000 4.08000000 4.08000000 0.00000000 0.00000000 0.00000000 1