From ef81d3581bc5ead8c101736af3c1d9624db2959d Mon Sep 17 00:00:00 2001 From: "Christopher J. Markiewicz" Date: Fri, 25 Feb 2022 08:10:08 -0500 Subject: [PATCH] RF: Simplify CaretSpecParser slightly --- nibabel/cifti2/caretspec.py | 31 +++++++------------------------ 1 file changed, 7 insertions(+), 24 deletions(-) diff --git a/nibabel/cifti2/caretspec.py b/nibabel/cifti2/caretspec.py index aa3f13a0a7..f527a3d95c 100644 --- a/nibabel/cifti2/caretspec.py +++ b/nibabel/cifti2/caretspec.py @@ -147,7 +147,6 @@ def from_filename(klass, fname, **kwargs): class CaretSpecParser(xml.XmlParser): def __init__(self, encoding=None, buffer_size=3500000, verbose=0): super().__init__(encoding=encoding, buffer_size=buffer_size, verbose=verbose) - self.fsm_state = [] self.struct_state = [] self.caret_spec = None @@ -165,8 +164,7 @@ def StartElementHandler(self, name, attrs): elif name == 'MetaData': self.caret_spec.metadata = CaretMetaData() elif name == 'MD': - self.fsm_state.append('MD') - self.struct_state.append(['', '']) + self.struct_state.append({}) elif name in ('Name', 'Value'): self.write_to = name elif name == 'DataFile': @@ -181,13 +179,9 @@ def StartElementHandler(self, name, attrs): def EndElementHandler(self, name): self.flush_chardata() - if name == 'CaretSpecFile': - ... - elif name == 'MetaData': - ... - elif name == 'MD': - key, value = self.struct_state.pop() - self.caret_spec.metadata[key] = value + if name == 'MD': + MD = self.struct_state.pop() + self.caret_spec.metadata[MD['Name']] = MD['Value'] elif name in ('Name', 'Value'): self.write_to = None elif name == 'DataFile': @@ -213,23 +207,12 @@ def flush_chardata(self): if self._char_blocks is None: return - # Just join the strings to get the data. Maybe there are some memory - # optimizations we could do by passing the list of strings to the - # read_data_block function. - data = ''.join(self._char_blocks) + data = ''.join(self._char_blocks).strip() # Reset the char collector self._char_blocks = None # Process data - if self.write_to == 'Name': - data = data.strip() # .decode('utf-8') - pair = self.struct_state[-1] - pair[0] = data - - elif self.write_to == 'Value': - data = data.strip() # .decode('utf-8') - pair = self.struct_state[-1] - pair[1] = data + if self.write_to in ('Name', 'Value'): + self.struct_state[-1][self.write_to] = data elif self.write_to == 'DataFile': - data = data.strip() self.struct_state[-1].uri = data