Source code for aws_ci_bot.ci_data

# -*- coding: utf-8 -*-

import typing as T
import dataclasses

CI_DATA_PREFIX = "CI_DATA_"


[docs]@dataclasses.dataclass class CIData: """ CI related data, will be available in environment variable. It is a simple data container that allow you to pass data into codebuild job run, or read CIData from env var when you are running automation script in job run. :param comment_id: the comment is the thread created when received CodeCommit event. it will send to the Environment Variable for CodeBuild job run, and all of sub-sequence CodeBuild event will reply to this comment. All attributes have a default value None, because if it is None, it won't be used in environment variable """ event_s3_console_url: T.Optional[str] = dataclasses.field(default=None) event_s3_uri: T.Optional[str] = dataclasses.field(default=None) event_type: T.Optional[str] = dataclasses.field(default=None) comment_id: T.Optional[str] = dataclasses.field(default=None) commit_id: T.Optional[str] = dataclasses.field(default=None) commit_message: T.Optional[str] = dataclasses.field(default=None) committer_name: T.Optional[str] = dataclasses.field(default=None) branch_name: T.Optional[str] = dataclasses.field(default=None) pr_id: T.Optional[str] = dataclasses.field(default=None) pr_from_branch: T.Optional[str] = dataclasses.field(default=None) pr_to_branch: T.Optional[str] = dataclasses.field(default=None) pr_from_commit_id: T.Optional[str] = dataclasses.field(default=None) pr_to_commit_id: T.Optional[str] = dataclasses.field(default=None)
[docs] def to_env_var( self, prefix: str = CI_DATA_PREFIX, ) -> dict: """ env_var is a dict of environment variable key value pair. """ env_var = dict() for attr, value in dataclasses.asdict(self).items(): if bool(value): key = (prefix + attr).upper() env_var[key] = value return env_var
[docs] @classmethod def from_env_var( cls, env_var: dict, prefix: str = CI_DATA_PREFIX, ) -> "CIData": """ env_var is a dict of environment variable key value pair. """ field_set = {field.name for field in dataclasses.fields(cls)} kwargs = dict() for field_name in field_set: key = (prefix + field_name).upper() if key in env_var: kwargs[field_name] = env_var[key] return cls(**kwargs)