|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
"""Contains data structures to parse the webhooks payload.""" |
|
|
|
from typing import List, Literal, Optional |
|
|
|
from .utils import is_pydantic_available |
|
|
|
|
|
if is_pydantic_available(): |
|
from pydantic import BaseModel |
|
else: |
|
|
|
|
|
|
|
class BaseModel: |
|
def __init__(self, *args, **kwargs) -> None: |
|
raise ImportError( |
|
"You must have `pydantic` installed to use `WebhookPayload`. This is an optional dependency that" |
|
" should be installed separately. Please run `pip install --upgrade pydantic` and retry." |
|
) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
WebhookEvent_T = Literal[ |
|
"create", |
|
"delete", |
|
"move", |
|
"update", |
|
] |
|
RepoChangeEvent_T = Literal[ |
|
"add", |
|
"move", |
|
"remove", |
|
"update", |
|
] |
|
RepoType_T = Literal[ |
|
"dataset", |
|
"model", |
|
"space", |
|
] |
|
DiscussionStatus_T = Literal[ |
|
"closed", |
|
"draft", |
|
"open", |
|
"merged", |
|
] |
|
SupportedWebhookVersion = Literal[3] |
|
|
|
|
|
class ObjectId(BaseModel): |
|
id: str |
|
|
|
|
|
class WebhookPayloadUrl(BaseModel): |
|
web: str |
|
api: Optional[str] = None |
|
|
|
|
|
class WebhookPayloadMovedTo(BaseModel): |
|
name: str |
|
owner: ObjectId |
|
|
|
|
|
class WebhookPayloadWebhook(ObjectId): |
|
version: SupportedWebhookVersion |
|
|
|
|
|
class WebhookPayloadEvent(BaseModel): |
|
action: WebhookEvent_T |
|
scope: str |
|
|
|
|
|
class WebhookPayloadDiscussionChanges(BaseModel): |
|
base: str |
|
mergeCommitId: Optional[str] = None |
|
|
|
|
|
class WebhookPayloadComment(ObjectId): |
|
author: ObjectId |
|
hidden: bool |
|
content: Optional[str] = None |
|
url: WebhookPayloadUrl |
|
|
|
|
|
class WebhookPayloadDiscussion(ObjectId): |
|
num: int |
|
author: ObjectId |
|
url: WebhookPayloadUrl |
|
title: str |
|
isPullRequest: bool |
|
status: DiscussionStatus_T |
|
changes: Optional[WebhookPayloadDiscussionChanges] = None |
|
pinned: Optional[bool] = None |
|
|
|
|
|
class WebhookPayloadRepo(ObjectId): |
|
owner: ObjectId |
|
head_sha: Optional[str] = None |
|
name: str |
|
private: bool |
|
subdomain: Optional[str] = None |
|
tags: Optional[List[str]] = None |
|
type: Literal["dataset", "model", "space"] |
|
url: WebhookPayloadUrl |
|
|
|
|
|
class WebhookPayloadUpdatedRef(BaseModel): |
|
ref: str |
|
oldSha: Optional[str] = None |
|
newSha: Optional[str] = None |
|
|
|
|
|
class WebhookPayload(BaseModel): |
|
event: WebhookPayloadEvent |
|
repo: WebhookPayloadRepo |
|
discussion: Optional[WebhookPayloadDiscussion] = None |
|
comment: Optional[WebhookPayloadComment] = None |
|
webhook: WebhookPayloadWebhook |
|
movedTo: Optional[WebhookPayloadMovedTo] = None |
|
updatedRefs: Optional[List[WebhookPayloadUpdatedRef]] = None |
|
|