Source code for artifacts.artifact

"""The artifact definition."""

from artifacts import errors
from artifacts import registry


[docs] class ArtifactDefinition: """Artifact definition interface. Attributes: aliases (list[str]): aliases that identify the artifact definition. description (str): description. name (str): name that uniquely identifiers the artifact definition. sources (list[SourceType]): sources. supported_os (list[str]): supported operating systems. urls (list[str]): URLs with more information about the artifact definition. """
[docs] def __init__(self, name, aliases=None, description=None): """Initializes an artifact definition. Args: name (str): name that uniquely identifiers the artifact definition. aliases (Optional[str]): aliases that identify the artifact definition. description (Optional[str]): description of the artifact definition. """ super().__init__() self.aliases = aliases or [] self.description = description self.name = name self.sources = [] self.supported_os = [] self.urls = []
[docs] def AppendSource(self, type_indicator, attributes): """Appends a source. If you want to implement your own source type you should create a subclass in source_type.py and change the AppendSource method to handle the new subclass. This function raises FormatError if an unsupported source type indicator is encountered. Args: type_indicator (str): source type indicator. attributes (dict[str, object]): source attributes. Returns: SourceType: a source type. Raises: FormatError: if the type indicator is not set or unsupported, or if required attributes are missing. """ if not type_indicator: raise errors.FormatError("Missing type indicator.") try: source_object = registry.ArtifactDefinitionsRegistry.CreateSourceType( type_indicator, attributes ) except (AttributeError, TypeError) as exception: raise errors.FormatError( ( f"Unable to create source type: {type_indicator:s} for artifact " f"definition: {self.name:s} with error: {exception!s}" ) ) self.sources.append(source_object) return source_object
[docs] def AsDict(self): """Represents an artifact as a dictionary. Returns: dict[str, object]: artifact attributes. """ sources = [] for source in self.sources: source_definition = { "type": source.type_indicator, "attributes": source.AsDict(), } if source.supported_os: source_definition["supported_os"] = source.supported_os sources.append(source_definition) artifact_definition = { "name": self.name, "doc": self.description, "sources": sources, } if self.aliases: artifact_definition["aliases"] = self.aliases if self.supported_os: artifact_definition["supported_os"] = self.supported_os if self.urls: artifact_definition["urls"] = self.urls return artifact_definition