Skip to content

webhook_event_models.py

Pydantic models for webhook events.

WebhookEventModel

Bases: BaseModel

Base model for webhook events.

Source code in taglyatelle/schemas/webhook_event_models.py
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
class WebhookEventModel(BaseModel):
    """Base model for webhook events."""

    event_type: str
    provider: str

    @classmethod
    def from_header(
        cls,
        x_github_event: Annotated[Optional[str], Header(alias="x-github-event")] = None,
        x_gitlab_event: Annotated[Optional[str], Header(alias="x-gitlab-event")] = None,
        x_event_key: Annotated[Optional[str], Header(alias="x-event-key")] = None,
    ) -> "WebhookEventModel":
        """
        Create WebhookEventModel from headers of different git providers.

        Parameters
        ----------
        x_github_event
            GitHub webhook event header

        x_gitlab_event
            GitLab webhook event header

        x_event_key
            Bitbucket webhook event header

        Returns
        -------
        Webhook event model with provider and event type
        """
        if x_github_event:
            logger.info(f"Received {x_github_event} event from GitHub.")
            return cls(event_type=x_github_event, provider="github")

        if x_gitlab_event:
            logger.info(f"Received {x_gitlab_event} event from GitLab.")
            event_normalized = x_gitlab_event.lower().replace(" ", "_").replace("_hook", "")
            return cls(event_type=event_normalized, provider="gitlab")

        if x_event_key:
            logger.info(f"Received {x_event_key} event from Bitbucket.")
            event_type = x_event_key.split(":")[-1] if ":" in x_event_key else x_event_key
            return cls(event_type=event_type, provider="bitbucket")

        raise ValueError("No recognized webhook event header found.")

from_header(x_github_event=None, x_gitlab_event=None, x_event_key=None) classmethod

Create WebhookEventModel from headers of different git providers.

Parameters

x_github_event GitHub webhook event header

x_gitlab_event GitLab webhook event header

x_event_key Bitbucket webhook event header

Returns

Webhook event model with provider and event type

Source code in taglyatelle/schemas/webhook_event_models.py
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
@classmethod
def from_header(
    cls,
    x_github_event: Annotated[Optional[str], Header(alias="x-github-event")] = None,
    x_gitlab_event: Annotated[Optional[str], Header(alias="x-gitlab-event")] = None,
    x_event_key: Annotated[Optional[str], Header(alias="x-event-key")] = None,
) -> "WebhookEventModel":
    """
    Create WebhookEventModel from headers of different git providers.

    Parameters
    ----------
    x_github_event
        GitHub webhook event header

    x_gitlab_event
        GitLab webhook event header

    x_event_key
        Bitbucket webhook event header

    Returns
    -------
    Webhook event model with provider and event type
    """
    if x_github_event:
        logger.info(f"Received {x_github_event} event from GitHub.")
        return cls(event_type=x_github_event, provider="github")

    if x_gitlab_event:
        logger.info(f"Received {x_gitlab_event} event from GitLab.")
        event_normalized = x_gitlab_event.lower().replace(" ", "_").replace("_hook", "")
        return cls(event_type=event_normalized, provider="gitlab")

    if x_event_key:
        logger.info(f"Received {x_event_key} event from Bitbucket.")
        event_type = x_event_key.split(":")[-1] if ":" in x_event_key else x_event_key
        return cls(event_type=event_type, provider="bitbucket")

    raise ValueError("No recognized webhook event header found.")