Skip to content

Fail to deserialize "org.omf.v2.colormap.discrete" for numeric attribute colormap. #118

@dbrookes96

Description

@dbrookes96

If I create an omf project with the following code.

def generate_test_project(): # pylint: disable=missing-function-docstring
    proj = omf.Project(
      name = "omf Test Project",
      description = "Randomly generated test project for omf."
  )

  ps = omf.PointSet(
      name = "Test Point Set",
      vertices = [[0.0, 0.0, 0.0], [1.0, 1.0, 1.0], [2.0, 2.0, 2.0], [3.0, 3.0, 3.0], 
      [4.0, 4.0, 4.0]])
  na = omf.NumericAttribute(
      name = "Test Numeric Attribute",
      array = [24, 32, 80, 150, 240],
      location = "vertices",
      colormap = omf.DiscreteColormap(
          name = "Test Discrete Colour Map",
          end_points = [ 0.0, 100.0, 300.0 ],
          end_inclusive = [ False, False, False ],
          colors = [ [ 255, 0, 0 ], [ 255, 215, 0 ], [ 255, 255, 0 ], [ 0, 255, 0 ] ]
      ))

  ps.attributes = [na]

  proj.elements = [ps]

  assert proj.validate()
  return proj

After saving it to a file and loading it back again we fail with the following error.

Traceback (most recent call last):
  File "C:\Users\dbrookes\Desktop\omf\load_generate_test_file.py", line 13, in <module>
    main()
  File "C:\Users\dbrookes\Desktop\omf\load_generate_test_file.py", line 10, in main
    project = omf.load("C:\\Users\\dbrookes\\Desktop\\omf\\generate_test_file.omf")
  File "c:\omf\omf\fileio.py", line 105, in load
    project = Project.deserialize(
  File "c:\omf\omf\base.py", line 33, in deserialize
    return super().deserialize(value, trusted, strict, assert_valid, **kwargs)
  File "C:\Users\dbrookes\AppData\Local\Programs\Python\Python310\lib\site-packages\properties\base\base.py", line 576, in deserialize
    newstate[key] = output_cls._props[key].deserialize(val, **kwargs)
  File "C:\Users\dbrookes\AppData\Local\Programs\Python\Python310\lib\site-packages\properties\base\containers.py", line 325, in deserialize
    output_list = [self.prop.deserialize(val, **kwargs)
  File "C:\Users\dbrookes\AppData\Local\Programs\Python\Python310\lib\site-packages\properties\base\containers.py", line 325, in <listcomp>
    output_list = [self.prop.deserialize(val, **kwargs)
  File "C:\Users\dbrookes\AppData\Local\Programs\Python\Python310\lib\site-packages\properties\base\instance.py", line 154, in deserialize
    return self.instance_class.deserialize(value, **kwargs)
  File "c:\omf\omf\base.py", line 33, in deserialize
    return super().deserialize(value, trusted, strict, assert_valid, **kwargs)
  File "C:\Users\dbrookes\AppData\Local\Programs\Python\Python310\lib\site-packages\properties\base\base.py", line 576, in deserialize
    newstate[key] = output_cls._props[key].deserialize(val, **kwargs)
  File "C:\Users\dbrookes\AppData\Local\Programs\Python\Python310\lib\site-packages\properties\base\containers.py", line 325, in deserialize
    output_list = [self.prop.deserialize(val, **kwargs)
  File "C:\Users\dbrookes\AppData\Local\Programs\Python\Python310\lib\site-packages\properties\base\containers.py", line 325, in <listcomp>
    output_list = [self.prop.deserialize(val, **kwargs)
  File "C:\Users\dbrookes\AppData\Local\Programs\Python\Python310\lib\site-packages\properties\base\instance.py", line 154, in deserialize
    return self.instance_class.deserialize(value, **kwargs)
  File "c:\omf\omf\base.py", line 33, in deserialize
    return super().deserialize(value, trusted, strict, assert_valid, **kwargs)
  File "C:\Users\dbrookes\AppData\Local\Programs\Python\Python310\lib\site-packages\properties\base\base.py", line 580, in deserialize
    instance = output_cls(**mutable)
  File "C:\Users\dbrookes\AppData\Local\Programs\Python\Python310\lib\site-packages\properties\base\base.py", line 280, in __call__
    obj.__init__(*args, **kwargs)
  File "C:\Users\dbrookes\AppData\Local\Programs\Python\Python310\lib\site-packages\properties\base\base.py", line 335, in __init__
    raise utils.ValidationError(
properties.utils.ValidationError: Initialization failed:
- The Union property 'colormap' of a NumericAttribute instance must be an instance of ContinuousColormap or an instance of DiscreteColormap. An invalid value of {'name': 'Test Discrete Colour Map', 'description'  ...  , 255, 0], [0, 255, 0]
], '__class__': 'BaseModel'} <class 'dict'> was specified. Possible explanation:
    - The Instance property 'colormap' of a NumericAttribute instance must be an instance of ContinuousColormap. An invalid value of {'name': 'Test Discrete Colour Map', 'description'  ...  , 255, 0], [0, 255, 0]], '__class__': 'BaseModel'}
 <class 'dict'> was specified.
    - The Instance property 'colormap' of a NumericAttribute instance must be an instance of DiscreteColormap. An invalid value of {'name': 'Test Discrete Colour Map', 'description'  ...  , 255, 0], [0, 255, 0]], '__class__': 'BaseModel'} <
class 'dict'> was specified.

The same thing, but with a continuous color map instead, works as expected.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions