Files

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