class_docstr: A mixin providing task fields access functionality 
class_docstr_tok: ["A","mixin","providing","task","fields","access","functionality"]
code: def _get_data_property(
      cls,
      prop_path,
      raise_on_error=True,
      log_on_error=True,
      default=None,
      data=None,
      log=None,
  ):
      obj = data
      props = prop_path.split(".")
      for i in range(len(props)):
          if not hasattr(obj, props[i]) and (
              not isinstance(obj, dict) or props[i] not in obj
          ):
              msg = "Task has no %s section defined" % ".".join(
                  props[: i + 1]
              )
              if log_on_error and log:
                  log.info(msg)
              if raise_on_error:
                  raise ValueError(msg)
              return default
  
          if isinstance(obj, dict):
              obj = obj.get(props[i])
          else:
              obj = getattr(obj, props[i], None)
  
      return obj
  
file_path: clearml/clearml/backend_interface/task/access.py
imports: import itertools
  import operator
  from abc import abstractproperty
  import six
  from pathlib2 import Path
label_desc: Use image node_id 2 for calling the AccessMixin obj's underlying member method code with example usage: obj._get_data_property(cls, prop_path, raise_on_error, log_on_error, default, data, log) and returns: obj, default