docs: def _LoadArtifactsFromDatastore(self):
      """Load artifacts from the data store."""
      loaded_artifacts = []
  
      # TODO(hanuszczak): Why do we have to remove anything? If some artifact
      # tries to shadow system artifact shouldn't we just ignore them and perhaps
      # issue some warning instead? The datastore being loaded should be read-only
      # during upload.
  
      # A collection of artifacts that shadow system artifacts and need
      # to be deleted from the data store.
      to_delete = []
  
      for artifact_coll_urn in self._sources.GetDatastores():
        artifact_coll = ArtifactCollection(artifact_coll_urn)
  
        if data_store.RelationalDBEnabled():
          artifact_list = data_store.REL_DB.ReadAllArtifacts()
        else:
          artifact_list = list(artifact_coll)
  
        for artifact_value in artifact_list:
          try:
            self.RegisterArtifact(
                artifact_value,
                source="datastore:%s" % artifact_coll_urn,
                overwrite_if_exists=True)
            loaded_artifacts.append(artifact_value)
            logging.debug("Loaded artifact %s from %s", artifact_value.name,
                          artifact_coll_urn)
          except rdf_artifacts.ArtifactDefinitionError as e:
            # TODO(hanuszczak): String matching on exception message is rarely
            # a good idea. Instead this should be refectored to some exception
            # class and then handled separately.
            if "system artifact" in str(e):
              to_delete.append(artifact_value.name)
            else:
              raise
  
      if to_delete:
        DeleteArtifactsFromDatastore(to_delete, reload_artifacts=False)
        self._dirty = True
  
        # TODO(hanuszczak): This is connected to the previous TODO comment. Why
        # do we throw exception at this point? Why do we delete something and then
        # abort the whole upload procedure by throwing an exception?
        detail = "system artifacts were shadowed and had to be deleted"
        raise rdf_artifacts.ArtifactDefinitionError(to_delete, detail)
  
      # Once all artifacts are loaded we can validate.
      revalidate = True
      while revalidate:
        revalidate = False
        for artifact_obj in loaded_artifacts[:]:
          try:
            Validate(artifact_obj)
          except rdf_artifacts.ArtifactDefinitionError as e:
            logging.error("Artifact %s did not validate: %s", artifact_obj.name,
                          e)
            artifact_obj.error_message = utils.SmartStr(e)
            loaded_artifacts.remove(artifact_obj)
            revalidate = True