Skip to content

Read fails on PP file with extra data #241

@davidhassell

Description

@davidhassell

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.

Metadata

Metadata

Assignees

Labels

bugSomething isn't workingenhancementNew feature or requestum/ppRelating to UM or PP format files

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions