from datetime import datetime
from dataclasses import dataclass
from typing import Optional, Dict
from platypush.message.event import Event
[docs]
@dataclass
class Actor:
id: str
login: str
display_login: str
url: str
gravatar_id: str
avatar_url: str
[docs]
@dataclass
class Repo:
id: str
name: str
url: str
[docs]
class GithubEvent(Event):
"""Generic Github event"""
[docs]
def __init__(
self,
event_type: str,
created_at: datetime,
actor: Optional[Dict[str, str]] = None,
repo: Optional[Dict[str, str]] = None,
*args,
**kwargs,
):
super().__init__(
*args,
actor=actor,
event_type=event_type,
repo=repo,
created_at=created_at,
**kwargs,
)
self.event_type = event_type
self.actor = Actor(**actor) if actor else None
self.repo = Repo(**repo) if repo else None
self.created_at = created_at
[docs]
class GithubPushEvent(GithubEvent):
"""Github push event."""
[docs]
def __init__(self, payload: dict, *args, **kwargs):
super().__init__(*args, payload=payload, **kwargs)
[docs]
class GithubCreateEvent(GithubEvent):
"""A git branch or tag is created."""
[docs]
def __init__(self, payload: dict, *args, **kwargs):
super().__init__(*args, payload=payload, **kwargs)
[docs]
class GithubDeleteEvent(GithubEvent):
"""A git branch or tag is deleted."""
[docs]
def __init__(self, payload: dict, *args, **kwargs):
super().__init__(*args, payload=payload, **kwargs)
[docs]
class GithubForkEvent(GithubEvent):
"""A user forks a watched repository."""
[docs]
def __init__(self, payload: dict, *args, **kwargs):
super().__init__(*args, payload=payload, **kwargs)
[docs]
class GithubWikiEvent(GithubEvent):
"""A wiki page is created or updated on a watched repository."""
[docs]
def __init__(self, payload: dict, *args, **kwargs):
super().__init__(*args, payload=payload, **kwargs)
[docs]
class GithubIssueEvent(GithubEvent):
"""A new activity is registered on an issue."""
[docs]
def __init__(self, payload: dict, *args, **kwargs):
super().__init__(*args, payload=payload, **kwargs)
[docs]
class GithubMemberEvent(GithubEvent):
"""New activity related to repository collaborators."""
[docs]
def __init__(self, payload: dict, *args, **kwargs):
super().__init__(*args, payload=payload, **kwargs)
[docs]
class GithubPublicEvent(GithubEvent):
"""A private repository is made public."""
[docs]
def __init__(self, payload: dict, *args, **kwargs):
super().__init__(*args, payload=payload, **kwargs)
[docs]
class GithubPullRequestEvent(GithubEvent):
"""New activity related to a pull request."""
[docs]
def __init__(self, payload: dict, *args, **kwargs):
super().__init__(*args, payload=payload, **kwargs)
[docs]
class GithubReleaseEvent(GithubEvent):
"""New activity related to the release of a repository."""
[docs]
def __init__(self, payload: dict, *args, **kwargs):
super().__init__(*args, payload=payload, **kwargs)
[docs]
class GithubWatchEvent(GithubEvent):
"""Event triggered when someone stars or starts watching a repository."""
[docs]
def __init__(self, payload: dict, *args, **kwargs):
super().__init__(*args, payload=payload, **kwargs)
# vim:sw=4:ts=4:et: