def _get_sql_model_version(cls, session, name, version, eager=False):
        """
        :param eager: If ``True``, eagerly loads the model version's tags.
                      If ``False``, these attributes are not eagerly loaded and
                      will be loaded when their corresponding object properties
                      are accessed from the resulting ``SqlModelVersion`` object.
        """
        _validate_model_name(name)
        _validate_model_version(version)
        query_options = cls._get_eager_model_version_query_options(
        ) if eager else []
        conditions = [
            SqlModelVersion.name == name, SqlModelVersion.version == version,
            SqlModelVersion.current_stage != STAGE_DELETED_INTERNAL
        ]
        versions = session.query(SqlModelVersion).options(
            *query_options).filter(*conditions).all()

        if len(versions) == 0:
            raise MlflowException(
                'Model Version (name={}, version={}) '
                'not found'.format(name, version), RESOURCE_DOES_NOT_EXIST)
        if len(versions) > 1:
            raise MlflowException(
                'Expected only 1 model version with (name={}, version={}). '
                'Found {}.'.format(name, version, len(versions)),
                INVALID_STATE)
        return versions[0]
Exemplo n.º 2
0
 def _get_sql_model_version(cls, session, name, version, eager=False):
     """
     :param eager: If ``True``, eagerly loads the model version's tags.
                   If ``False``, these attributes are not eagerly loaded and
                   will be loaded when their corresponding object properties
                   are accessed from the resulting ``SqlModelVersion`` object.
     """
     _validate_model_name(name)
     _validate_model_version(version)
     query_options = cls._get_eager_model_version_query_options() if eager else []
     conditions = [
         SqlModelVersion.name == name,
         SqlModelVersion.version == version,
         SqlModelVersion.current_stage != STAGE_DELETED_INTERNAL,
     ]
     return cls._get_model_version_from_db(session, name, version, conditions, query_options)
Exemplo n.º 3
0
    def delete_model_version_tag(self, name, version, key):
        """
        Delete a tag associated with the model version.

        :param name: Registered model name.
        :param version: Registered model version.
        :param key: Tag key.
        :return: None
        """
        _validate_model_name(name)
        _validate_model_version(version)
        _validate_tag_name(key)
        with self.ManagedSessionMaker() as session:
            # check if model version exists
            self._get_sql_model_version(session, name, version)
            existing_tag = self._get_model_version_tag(session, name, version, key)
            if existing_tag is not None:
                session.delete(existing_tag)
Exemplo n.º 4
0
    def set_model_version_tag(self, name, version, tag):
        """
        Set a tag for the model version.

        :param name: Registered model name.
        :param version: Registered model version.
        :param tag: :py:class:`mlflow.entities.model_registry.ModelVersionTag` instance to log.
        :return: None
        """
        _validate_model_name(name)
        _validate_model_version(version)
        _validate_model_version_tag(tag.key, tag.value)
        with self.ManagedSessionMaker() as session:
            # check if model version exists
            self._get_sql_model_version(session, name, version)
            session.merge(
                SqlModelVersionTag(name=name, version=version, key=tag.key, value=tag.value)
            )