code: def _combine_args(self):
          
          child_path = self._parse_path(self._flat_path)
  
          if self._parent is not None:
              if self._parent.is_partial:
                  raise ValueError("Parent key must be complete.")
  
              # We know that _parent.path() will return a copy.
              child_path = self._parent.path + child_path
              self._flat_path = self._parent.flat_path + self._flat_path
              if (
                  self._namespace is not None
                  and self._namespace != self._parent.namespace
              ):
                  raise ValueError("Child namespace must agree with parent's.")
              self._namespace = self._parent.namespace
              if self._project is not None and self._project != self._parent.project:
                  raise ValueError("Child project must agree with parent's.")
              self._project = self._parent.project
  
          return child_path
docs: Sets protected data by combining raw data set from the constructor.
  
          If a ``_parent`` is set, updates the ``_flat_path`` and sets the
          ``_namespace`` and ``_project`` if not already set.
  
          :rtype: :class:`list` of :class:`dict`
          :returns: A list of key parts with kind and ID or name set.
          :raises: :class:`ValueError` if the parent key is not complete.