code: def ReadArtifactDefinitionValues(self, artifact_definition_values):
      
      if not artifact_definition_values:
        raise errors.FormatError('Missing artifact definition values.')
  
      different_keys = (
          set(artifact_definition_values) - definitions.TOP_LEVEL_KEYS)
      if different_keys:
        different_keys = ', '.join(different_keys)
        raise errors.FormatError('Undefined keys: {0:s}'.format(different_keys))
  
      name = artifact_definition_values.get('name', None)
      if not name:
        raise errors.FormatError('Invalid artifact definition missing name.')
  
      # The description is assumed to be mandatory.
      description = artifact_definition_values.get('doc', None)
      if not description:
        raise errors.FormatError(
            'Invalid artifact definition: {0:s} missing description.'.format(
                name))
  
      artifact_definition = artifact.ArtifactDefinition(
          name, description=description)
  
      if artifact_definition_values.get('collectors', []):
        raise errors.FormatError(
            'Invalid artifact definition: {0:s} still uses collectors.'.format(
                name))
  
      urls = artifact_definition_values.get('urls', [])
      if not isinstance(urls, list):
        raise errors.FormatError(
            'Invalid artifact definition: {0:s} urls is not a list.'.format(
                name))
  
      # TODO: check conditions.
      artifact_definition.conditions = artifact_definition_values.get(
          'conditions', [])
      artifact_definition.provides = artifact_definition_values.get(
          'provides', [])
      self._ReadLabels(artifact_definition_values, artifact_definition, name)
      self._ReadSupportedOS(artifact_definition_values, artifact_definition, name)
      artifact_definition.urls = urls
      self._ReadSources(artifact_definition_values, artifact_definition, name)
  
      return artifact_definition
docs: Reads an artifact definition from a dictionary.
  
      Args:
        artifact_definition_values (dict[str, object]): artifact definition
            values.
  
      Returns:
        ArtifactDefinition: an artifact definition.
  
      Raises:
        FormatError: if the format of the artifact definition is not set
            or incorrect.