docs: def get_subresource_path_by(resource, subresource_path):
      """Helper function to find the resource path
  
      :param resource: ResourceBase instance from which the path is loaded.
      :param subresource_path: JSON field to fetch the value from.
              Either a string, or a list of strings in case of a nested field.
              It should also include the '@odata.id'
      :raises: MissingAttributeError, if required path is missing.
      :raises: ValueError, if path is empty.
      :raises: AttributeError, if json attr not found in resource
      """
      if isinstance(subresource_path, six.string_types):
          subresource_path = [subresource_path]
      elif not subresource_path:
          raise ValueError('"subresource_path" cannot be empty')
  
      body = resource.json
      for path_item in subresource_path:
          body = body.get(path_item, {})
  
      if not body:
          raise exception.MissingAttributeError(
              attribute='/'.join(subresource_path), resource=resource.path)
  
      if '@odata.id' not in body:
          raise exception.MissingAttributeError(
              attribute='/'.join(subresource_path)+'/@odata.id',
              resource=resource.path)
  
      return body['@odata.id']