pai/pipeline/artifact.py (31 lines of code) (raw):
# Copyright 2023 Alibaba, Inc. or its affiliates.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from pai.pipeline.types.artifact import DataType
class ArchivedArtifact(object):
"""Archived artifact instance, hold the metadata, value and source of the artifact."""
def __init__(self, metadata, value, name, producer_id, id):
"""ArchivedArtifact class constructor.
Args:
metadata (:class:`~.pai.pipeline.artifact.ArtifactMetadata`): Artifact metadata info.
value (:class:`~.pai.pipeline.artifact.ArtifactValue`): Artifact value.
name (str): name of artifact, actually, it is the name of artifact in manifest of
source pipeline.
producer_id (str): Producer of the artifact, identified by step name of pipeline.
artifact_id (str): Unique artifact identifier in pipeline service.
"""
self.name = name
self.metadata = metadata
self.value = value
self.producer_id = producer_id
self.id = id
def __repr__(self):
return "%s:Id=%s,Name=%s" % (
type(self).__name__,
self.id,
self.name,
)
@classmethod
def deserialize(cls, output):
"""Build new ArtifactInfo instance from Run output json.
Output Example:
{
'Info': {
'value': '{"location": {"table": "pai_temp_77c08aeb2e514c9d8649feba4a88ee77"}}',
'metadata': {
'path': '/tmp/outputs/artifacts/outputArtifact/data',
'type': {
'DataSet': {
'locationType': 'MaxComputeTable'
}
}
}
},
'Name': 'outputArtifact',
'Producer': 'flow-ec67rsug8kyly4049z',
'CreateTime': 1595214018000,
'Type': 'DataSet',
'Id': 'artifact-e0xdqhsfhqctxkpyli'
}
Args:
output (dict): Run output return by pipeline service.
Returns:
ArchivedArtifact: ArtifactInfo instance.
"""
name = output["Name"]
metadata = output["Info"]["metadata"]
value = output["Info"]["value"]
producer_id = output["Producer"]
artifact_id = output["Id"]
return ArchivedArtifact(
metadata=metadata,
value=value,
name=name,
producer_id=producer_id,
id=artifact_id,
)
@property
def is_model(self):
return self.metadata.data_type == DataType.Model