Source code for artifacts.writer

# -*- coding: utf-8 -*-
"""The artifact writer objects."""

import abc
import json
import yaml


[docs]class BaseArtifactsWriter(object): """Artifacts writer interface.""" # Note that redundant-returns-doc is broken for # pylint 1.7.x for # abstract methods. # pylint: disable=redundant-returns-doc
[docs] @abc.abstractmethod def FormatArtifacts(self, artifacts): """Formats artifacts to desired output format. Args: artifacts (list[ArtifactDefinition]): artifact definitions. Returns: str: formatted string of artifact definition. """
[docs] @abc.abstractmethod def WriteArtifactsFile(self, artifacts, filename): """Writes artifact definitions to a file. Args: artifacts (list[ArtifactDefinition]): artifact definitions to be written. filename (str): name of the file to write artifacts to. """
[docs]class ArtifactWriter(BaseArtifactsWriter): """File artifacts writer.""" # Note that redundant-returns-doc is broken for # pylint 1.7.x for # abstract methods. # pylint: disable=redundant-returns-doc
[docs] @abc.abstractmethod def FormatArtifacts(self, artifacts): """Formats artifacts to desired output format. Args: artifacts (ArtifactDefinition|list[ArtifactDefinition]): artifact definitions. Returns: str: formatted string of artifact definition. """
[docs] def WriteArtifactsFile(self, artifacts, filename): """Writes artifact definitions to a file. Args: artifacts (list[ArtifactDefinition]): artifact definitions to be written. filename (str): name of the file to write artifacts to. """ with open(filename, 'w', encoding='utf-8') as file_object: file_object.write(self.FormatArtifacts(artifacts))
[docs]class JsonArtifactsWriter(ArtifactWriter): """JSON artifacts writer interface."""
[docs] def FormatArtifacts(self, artifacts): """Formats artifacts to desired output format. Args: artifacts (list[ArtifactDefinition]): artifact definitions. Returns: str: formatted string of artifact definition. """ artifact_definitions = [artifact.AsDict() for artifact in artifacts] json_data = json.dumps(artifact_definitions) return json_data
[docs]class YamlArtifactsWriter(ArtifactWriter): """YAML artifacts writer interface."""
[docs] def FormatArtifacts(self, artifacts): """Formats artifacts to desired output format. Args: artifacts (list[ArtifactDefinition]): artifact definitions. Returns: str: formatted string of artifact definition. """ # TODO: improve output formatting of yaml artifact_definitions = [artifact.AsDict() for artifact in artifacts] yaml_data = yaml.safe_dump_all(artifact_definitions) return yaml_data