mirror of
https://github.com/galaxyproject/galaxy.git
synced 2026-10-28 02:58:18 +08:00
Tighten xyz sniffer
This commit is contained in:
@@ -1166,21 +1166,16 @@ class XYZ(GenericMolFile):
|
||||
>>> fname = get_test_fname('Si.cif')
|
||||
>>> XYZ().sniff(fname)
|
||||
False
|
||||
>>> fname = get_test_fname('not_a_xyz_file.txt')
|
||||
>>> XYZ().sniff(fname)
|
||||
False
|
||||
"""
|
||||
|
||||
try:
|
||||
self.read_blocks(list(file_prefix.line_iterator()))
|
||||
return True # blocks read successfully
|
||||
except (TypeError, ValueError):
|
||||
return True
|
||||
except (TypeError, ValueError, IndexError):
|
||||
return False
|
||||
except IndexError as e:
|
||||
if "pop from empty list" in str(e):
|
||||
# file_prefix ran out mid block with no other errors
|
||||
# assume the whole file is ok
|
||||
return True
|
||||
else:
|
||||
# some other IndexError - invalid input
|
||||
return False
|
||||
|
||||
def read_blocks(self, lines):
|
||||
"""
|
||||
@@ -1199,23 +1194,27 @@ class XYZ(GenericMolFile):
|
||||
n_atoms = None
|
||||
comment = None
|
||||
atoms = []
|
||||
try:
|
||||
n_atoms = int(lines.pop(0))
|
||||
comment = lines.pop(0)
|
||||
for _ in range(n_atoms):
|
||||
atom = lines.pop(0)
|
||||
atom = atom.split()
|
||||
symbol = atom[0].lower().capitalize()
|
||||
if symbol not in self.element_symbols:
|
||||
raise ValueError(f"{atom[0]} is not a valid element symbol")
|
||||
|
||||
n_atoms = int(lines.pop(0))
|
||||
comment = lines.pop(0)
|
||||
for _ in range(n_atoms):
|
||||
atom = lines.pop(0)
|
||||
atom = atom.split()
|
||||
symbol = atom[0].lower().capitalize()
|
||||
if symbol not in self.element_symbols:
|
||||
raise ValueError(f"{atom[0]} is not a valid element symbol")
|
||||
|
||||
# raises ValueError if not valid XYZ format
|
||||
position = [float(i) for i in atom[1:4]]
|
||||
|
||||
atoms.append(symbol + str(position))
|
||||
|
||||
blocks.append({"number_of_atoms": n_atoms, "comment": comment, "atom_data": atoms})
|
||||
# raises ValueError if not valid XYZ format
|
||||
position = [float(i) for i in atom[1:4]]
|
||||
|
||||
atoms.append(symbol + str(position))
|
||||
blocks.append({"number_of_atoms": n_atoms, "comment": comment, "atom_data": atoms})
|
||||
except IndexError as e:
|
||||
if "pop from empty list" in str(e) and blocks:
|
||||
# we'll require at least one valid block
|
||||
pass
|
||||
else:
|
||||
raise
|
||||
return blocks
|
||||
|
||||
def set_meta(self, dataset, **kwd):
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
12345
|
||||
Reference in New Issue
Block a user