def from_object_data_list(cls, shape_type, l, attributes=None):
        """Construct an :class:`OpenLABELShapes` from a list of shape
        dictionaries.

        Args:
            shape_type: the type of the shape being loaded. Options are
                (:class:`OpenLABELBBox`, :class:`OpenLABELPoly2D`,
                :class:`OpenLABELPoint`)
            l: a list of shape dictionaries parsed from OpenLABEL object
                annotations
            attributes (None): a dictionary of attributes corresponding to all
                shapes in this collection

        Returns:
            a :class:`OpenLABELShapes`
        """
        shapes = []
        for shape_d in l:
            shapes.append(shape_type.from_shape_dict(shape_d))

        stream = None
        if attributes:
            attributes, stream = cls._parse_name_val_attributes(attributes)

        return cls(shapes=shapes, attributes=attributes, stream=stream)
Construct an :class:`OpenLABELShapes` from a list of shape
        dictionaries.

        Args:
            shape_type: the type of the shape being loaded. Options are
                (:class:`OpenLABELBBox`, :class:`OpenLABELPoly2D`,
                :class:`OpenLABELPoint`)
            l: a list of shape dictionaries parsed from OpenLABEL object
                annotations
            attributes (None): a dictionary of attributes corresponding to all
                shapes in this collection

        Returns:
            a :class:`OpenLABELShapes`
        
fiftyone/utils/openlabel.py