Source code for flash_services.codeship

"""Defines the Codeship CI service integration."""
import logging

from .auth import UrlParamMixin
from .core import ContinuousIntegrationService
from .utils import elapsed_time, estimate_time, health_summary, Outcome

logger = logging.getLogger(__name__)


[docs]class Codeship(UrlParamMixin, ContinuousIntegrationService): """Show the current build status on Codeship. Arguments: api_token (:py:class:`str`): A valid token for the Codeship API. project_id (:py:class:`int`): The ID of the Codeship project. """ AUTH_PARAM = 'api_key' ENDPOINT = '/projects/{project_id}.json' FRIENDLY_NAME = 'Codeship CI' OUTCOMES = dict( cancelled=Outcome.CANCELLED, error=Outcome.FAILED, infrastructure_failure=Outcome.CRASHED, stopped=Outcome.CANCELLED, success=Outcome.PASSED, testing=Outcome.WORKING, ) ROOT = 'https://codeship.com/api/v1' def __init__(self, *, project_id, **kwargs): super().__init__(**kwargs) self.project_id = project_id
[docs] @classmethod def format_data(cls, data): """Re-format the response data for the front-end. Arguments: data (:py:class:`dict`): The JSON data from the response. Returns: :py:class:`dict`: The re-formatted data. """ builds = [cls.format_build(build) for build in data.get('builds', [])] estimate_time(builds) return dict( builds=builds[:4], health=health_summary(builds), name=data.get('repository_name'), )
[docs] @classmethod def format_build(cls, build): """Re-format the build data for the front-end. Arguments: build (:py:class:`dict`): The JSON data from the response. Returns: :py:class:`dict`: The re-formatted data. """ start, finish, elapsed = elapsed_time( build.get('started_at'), build.get('finished_at'), ) return super().format_build(dict( author=build.get('github_username'), duration=( None if start is None or finish is None else finish - start ), elapsed=elapsed, message=build.get('message'), outcome=build.get('status'), started_at=start, ))