예제 #1
0
def get_pull_request_rules_schema(
        partial_validation: bool = False) -> voluptuous.All:
    return voluptuous.All(
        [
            voluptuous.All(
                {
                    voluptuous.Required("name"):
                    str,
                    voluptuous.Required("disabled", default=None):
                    voluptuous.Any(None, {voluptuous.Required("reason"): str}),
                    voluptuous.Required("hidden", default=False):
                    bool,
                    voluptuous.Required("conditions"):
                    voluptuous.All(
                        [voluptuous.Coerce(RuleConditionSchema)],
                        voluptuous.Coerce(
                            conditions.PullRequestRuleConditions),
                    ),
                    voluptuous.Required("actions"):
                    actions.get_action_schemas(partial_validation),
                },
                voluptuous.Coerce(PullRequestRule.from_dict),
            ),
        ],
        voluptuous.Coerce(PullRequestRules),
    )
예제 #2
0
def get_defaults_schema(
    partial_validation: bool, ) -> typing.Dict[typing.Any, typing.Any]:
    return {
        # FIXME(sileht): actions.get_action_schemas() returns only actions Actions
        # and not command only, since only refresh is command only and it doesn't
        # have options it's not a big deal.
        voluptuous.Required("actions", default={}):
        actions.get_action_schemas(partial_validation),
    }
예제 #3
0
def get_pull_request_rules_schema(partial_validation: bool = False) -> voluptuous.All:
    return voluptuous.All(
        [
            voluptuous.All(
                {
                    voluptuous.Required("name"): str,
                    voluptuous.Required("hidden", default=False): bool,
                    voluptuous.Required("conditions"): [
                        voluptuous.All(str, voluptuous.Coerce(RuleCondition))
                    ],
                    voluptuous.Required("actions"): actions.get_action_schemas(
                        partial_validation
                    ),
                },
                voluptuous.Coerce(Rule.from_dict),
            ),
        ],
        voluptuous.Coerce(PullRequestRules),
    )
예제 #4
0
        raise YAMLInvalid(
            message="Invalid YAML", error_message=error_message, path=path
        )
    return v


PullRequestRulesSchema = voluptuous.All(
    [
        voluptuous.All(
            {
                voluptuous.Required("name"): str,
                voluptuous.Required("hidden", default=False): bool,
                voluptuous.Required("conditions"): [
                    voluptuous.All(str, voluptuous.Coerce(RuleCondition))
                ],
                voluptuous.Required("actions"): actions.get_action_schemas(),
            },
            voluptuous.Coerce(Rule.from_dict),
        ),
    ],
    voluptuous.Length(min=1),
    voluptuous.Coerce(PullRequestRules),
)


UserConfigurationSchema = voluptuous.Schema(
    voluptuous.And(
        voluptuous.Coerce(YAML),
        {
            voluptuous.Required("pull_request_rules"): PullRequestRulesSchema,
        },
예제 #5
0
        error_message = str(e)
        raise YAMLInvalid(message="Invalid YAML", error_message=error_message)


PullRequestRulesSchema = voluptuous.All(
    [
        voluptuous.All(
            {
                voluptuous.Required("name"):
                str,
                voluptuous.Required("hidden", default=False):
                bool,
                voluptuous.Required("conditions"):
                [voluptuous.All(str, voluptuous.Coerce(RuleCondition))],
                voluptuous.Required("actions"):
                actions.get_action_schemas(),
            },
            voluptuous.Coerce(Rule.from_dict),
        ),
    ],
    voluptuous.Length(min=1),
    voluptuous.Coerce(PullRequestRules),
)

QueueRulesSchema = voluptuous.All(
    [
        voluptuous.All(
            {
                voluptuous.Required("name"):
                str,
                voluptuous.Required("conditions"):
예제 #6
0
        raise voluptuous.Invalid(message="Invalid condition '%s'. %s" %
                                 (value, str(e)),
                                 error_message=str(e))


PullRequestRulesSchema = voluptuous.Schema(
    voluptuous.All(
        [{
            voluptuous.Required("name"):
            str,
            voluptuous.Required("hidden", default=False):
            bool,
            voluptuous.Required("conditions"):
            [voluptuous.All(str, voluptuous.Coerce(PullRequestRuleCondition))],
            voluptuous.Required("actions"):
            actions.get_action_schemas(),
        }],
        voluptuous.Length(min=1),
    ))


def load_pull_request_rules_schema(rules):
    rules = PullRequestRulesSchema(rules)

    sorted_rules = sorted(rules, key=operator.itemgetter("name"))
    grouped_rules = itertools.groupby(sorted_rules,
                                      operator.itemgetter("name"))
    for name, sub_rules in grouped_rules:
        sub_rules = list(sub_rules)
        if len(sub_rules) == 1:
            continue