code: def test_deeply_nested_data_attributes(self):
      frames = Frame
      frames.data = [Bar()]
      frames.data[0].marker.color = "red"
  
      # parse out valid attrs from ._prop_descriptions
      prop_descrip_text = frames.data[0].marker.line._prop_descriptions
  
      matches = return_prop_descriptions(prop_descrip_text)
  
      # Skip 'cmid' that is going to be added in plotly.js 1.45.0
      matches = [m for m in matches if m != "cmid"]
  
      # It's OK if this needs to change, but we should check *something*.
      self.assertEqual(
          set(matches),
          {
              "colorsrc",
              "autocolorscale",
              "cmin",
              "colorscale",
              "color",
              "reversescale",
              "width",
              "cauto",
              "widthsrc",
              "cmax",
              "coloraxis",
          },
      )
  
file_path: plotly.py/packages/python/plotly/plotly/tests/test_core/test_graph_objs/test_frames.py
imports: from unittest import TestCase
  from plotly.graph_objs import Bar, Frames, Frame, Layout
  import pytest
  import re
label_desc: Use image node_id 4 for calling the FramesTest obj's underlying member method code with example usage: obj.test_deeply_nested_data_attributes() without return types