114 lines
3.0 KiB
Python
114 lines
3.0 KiB
Python
"""Pydantic models for Gitea API entities."""
|
|
|
|
from typing import Optional, Any
|
|
|
|
from pydantic import BaseModel, Field, field_validator
|
|
|
|
|
|
class UserModel(BaseModel):
|
|
login: str = ""
|
|
id: int = 0
|
|
avatar_url: Optional[str] = None
|
|
html_url: Optional[str] = None
|
|
full_name: Optional[str] = None
|
|
email: Optional[str] = None
|
|
username: Optional[str] = None
|
|
|
|
|
|
class LabelModel(BaseModel):
|
|
id: int = 0
|
|
name: str = ""
|
|
color: Optional[str] = None
|
|
description: Optional[str] = None
|
|
|
|
|
|
class RepositoryModel(BaseModel):
|
|
id: int = 0
|
|
name: str = ""
|
|
full_name: str = ""
|
|
owner: str = ""
|
|
html_url: Optional[str] = None
|
|
description: Optional[str] = None
|
|
mirror: bool = False
|
|
private: bool = False
|
|
fork: bool = False
|
|
parent: Optional["RepositoryModel"] = None
|
|
empty: Optional[bool] = None
|
|
|
|
@field_validator("owner", mode="before")
|
|
@classmethod
|
|
def validate_owner(cls, v):
|
|
if isinstance(v, dict):
|
|
return v.get("login", "")
|
|
return v
|
|
|
|
|
|
class IssueModel(BaseModel):
|
|
id: int = 0
|
|
number: int = 0
|
|
title: str = ""
|
|
body: Optional[str] = None
|
|
state: str = ""
|
|
user: UserModel = Field(default_factory=UserModel)
|
|
assignee: Optional[UserModel] = None
|
|
labels: list[LabelModel] = Field(default_factory=list)
|
|
created_at: Optional[str] = None
|
|
updated_at: Optional[str] = None
|
|
closed_at: Optional[str] = None
|
|
repository: Optional[RepositoryModel] = None
|
|
comments: int = 0
|
|
|
|
|
|
class PullRequestModel(BaseModel):
|
|
id: int = 0
|
|
number: int = 0
|
|
title: str = ""
|
|
body: Optional[str] = None
|
|
state: str = ""
|
|
user: UserModel = Field(default_factory=UserModel)
|
|
assignee: Optional[UserModel] = None
|
|
created_at: Optional[str] = None
|
|
updated_at: Optional[str] = None
|
|
closed_at: Optional[str] = None
|
|
merged_at: Optional[str] = None
|
|
head: dict[str, Any] = Field(default_factory=dict)
|
|
base: dict[str, Any] = Field(default_factory=dict)
|
|
repository: Optional[RepositoryModel] = None
|
|
comments: int = 0
|
|
comments_url: Optional[str] = None
|
|
diff_url: Optional[str] = None
|
|
patch_url: Optional[str] = None
|
|
html_url: Optional[str] = None
|
|
merged: bool = False
|
|
requested_reviewers: list[UserModel] = Field(default_factory=list)
|
|
|
|
|
|
class CommentModel(BaseModel):
|
|
id: int = 0
|
|
body: str = ""
|
|
user: UserModel = Field(default_factory=UserModel)
|
|
created_at: Optional[str] = None
|
|
updated_at: Optional[str] = None
|
|
pull_request_url: Optional[str] = None
|
|
|
|
|
|
class PullRequestFileModel(BaseModel):
|
|
filename: str = ""
|
|
status: str = ""
|
|
additions: int = 0
|
|
deletions: int = 0
|
|
changes: int = 0
|
|
blob_url: Optional[str] = None
|
|
raw_url: Optional[str] = None
|
|
patch: Optional[str] = None
|
|
|
|
|
|
class GiteaConfig(BaseModel):
|
|
model_config = {"extra": "allow", "populate_by_name": True}
|
|
|
|
base_url: str
|
|
token: str
|
|
repos_root: str
|
|
model_id: str = "qwen/qwen3.6-35b-a3b"
|
|
max_retries: int = 2
|