Read fails on PP file with extra data
At versions 3.7.0 and 3.10.0 the following error appears when reading a PP file with extra data:
>>> tsta=cf.read('ts_t15.pp') Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/share/apps/NCAS/anaconda3/lib/python3.7/site-packages/cfdm/decorators.py", line 186, in verbose_override_wrapper return method_with_verbose_kwarg(self, *args, **kwargs) File "/share/apps/NCAS/anaconda3/lib/python3.7/site-packages/cf/read_write/read.py", line 656, in read warn_valid=warn_valid, File "/share/apps/NCAS/anaconda3/lib/python3.7/site-packages/cfdm/decorators.py", line 186, in verbose_override_wrapper return method_with_verbose_kwarg(self, *args, **kwargs) File "/share/apps/NCAS/anaconda3/lib/python3.7/site-packages/cf/read_write/read.py", line 910, in _read_a_file chunk=chunk) # , mask=mask, warn_valid=warn_valid) File "/share/apps/NCAS/anaconda3/lib/python3.7/site-packages/cfdm/decorators.py", line 186, in verbose_override_wrapper return method_with_verbose_kwarg(self, *args, **kwargs) File "/share/apps/NCAS/anaconda3/lib/python3.7/site-packages/cf/read_write/um/umread.py", line 2984, in read for var in f.vars] File "/share/apps/NCAS/anaconda3/lib/python3.7/site-packages/cf/read_write/um/umread.py", line 2984, in <listcomp> for var in f.vars] File "/share/apps/NCAS/anaconda3/lib/python3.7/site-packages/cf/read_write/um/umread.py", line 440, in __init__ groups = var.group_records_by_extra_data() File "/share/apps/NCAS/anaconda3/lib/python3.7/site-packages/cf/umread_lib/umfile.py", line 162, in group_records_by_extra_data if not compare(recs[0], recs[-1]): File "/share/apps/NCAS/anaconda3/lib/python3.7/site-packages/cf/umread_lib/umfile.py", line 137, in _compare_recs_by_extra_data return self._compare(a.get_extra_data(), b.get_extra_data()) File "/share/apps/NCAS/anaconda3/lib/python3.7/site-packages/cf/umread_lib/umfile.py", line 258, in get_extra_data self._extra_data = self.read_extra_data() File "/share/apps/NCAS/anaconda3/lib/python3.7/site-packages/cf/umread_lib/umfile.py", line 250, in read_extra_data return edu.get_data() File "/share/apps/NCAS/anaconda3/lib/python3.7/site-packages/cf/umread_lib/extraData.py", line 136, in get_data rawvals = self.next_words(ia) File "/share/apps/NCAS/anaconda3/lib/python3.7/site-packages/cf/umread_lib/extraData.py", line 108, in next_words rv = self.rdata[:pos] TypeError: slice indices must be integers or None or have an __index__ method
This is a result of some old pre-v3.0.0 Python2 code still existing in cf/umread_lib/extraData.py, relating to the handling of bytes and unicode strings.
With this fixed, it became apparent that the mapping of PP extra data to CF constructs for LCODE axis code 13 was deficient, and this has should also be fixed. This deficiency has not been seen in the post-v3.0.0 era, so no one will have seen it!
PR to follow.
Many thanks to @JonathanGregory for finding and reporting this bug.