Initial commit: MCP Hub Community Edition v3.0.0
Community edition generated from private repo via sync pipeline. Includes 9 plugins (WordPress, WooCommerce, WP Advanced, Gitea, n8n, Supabase, OpenPanel, Appwrite, Directus) with ~587 tools. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
196
plugins/gitea/schemas/repository.py
Normal file
196
plugins/gitea/schemas/repository.py
Normal file
@@ -0,0 +1,196 @@
|
||||
"""
|
||||
Repository Pydantic Schemas
|
||||
|
||||
Validation schemas for Gitea repository operations.
|
||||
"""
|
||||
|
||||
from datetime import datetime
|
||||
from typing import Optional
|
||||
|
||||
from pydantic import BaseModel, ConfigDict, Field, field_validator
|
||||
|
||||
from .common import GiteaPermissions, GiteaUser
|
||||
|
||||
class Repository(BaseModel):
|
||||
"""Gitea repository model"""
|
||||
|
||||
model_config = ConfigDict(extra="allow")
|
||||
|
||||
id: int
|
||||
owner: GiteaUser
|
||||
name: str
|
||||
full_name: str
|
||||
description: str | None = None
|
||||
empty: bool = False
|
||||
private: bool = False
|
||||
fork: bool = False
|
||||
template: bool = False
|
||||
parent: Optional["Repository"] = None
|
||||
mirror: bool = False
|
||||
size: int = 0
|
||||
language: str | None = None
|
||||
languages_url: str | None = None
|
||||
html_url: str
|
||||
ssh_url: str
|
||||
clone_url: str
|
||||
original_url: str | None = None
|
||||
website: str | None = None
|
||||
stars_count: int = 0
|
||||
forks_count: int = 0
|
||||
watchers_count: int = 0
|
||||
open_issues_count: int = 0
|
||||
open_pr_counter: int = 0
|
||||
release_counter: int = 0
|
||||
default_branch: str = "main"
|
||||
archived: bool = False
|
||||
created_at: datetime
|
||||
updated_at: datetime
|
||||
permissions: GiteaPermissions | None = None
|
||||
has_issues: bool = True
|
||||
internal_tracker: dict | None = None
|
||||
has_wiki: bool = False
|
||||
has_pull_requests: bool = True
|
||||
has_projects: bool = False
|
||||
ignore_whitespace_conflicts: bool = False
|
||||
allow_merge_commits: bool = True
|
||||
allow_rebase: bool = True
|
||||
allow_rebase_explicit: bool = True
|
||||
allow_squash_merge: bool = True
|
||||
default_merge_style: str = "merge"
|
||||
avatar_url: str | None = None
|
||||
|
||||
class Branch(BaseModel):
|
||||
"""Git branch model"""
|
||||
|
||||
model_config = ConfigDict(extra="allow")
|
||||
|
||||
name: str
|
||||
commit: dict
|
||||
protected: bool = False
|
||||
required_approvals: int | None = None
|
||||
enable_status_check: bool = False
|
||||
status_check_contexts: list[str] | None = None
|
||||
user_can_push: bool = False
|
||||
user_can_merge: bool = False
|
||||
|
||||
class Tag(BaseModel):
|
||||
"""Git tag model"""
|
||||
|
||||
model_config = ConfigDict(extra="allow")
|
||||
|
||||
name: str
|
||||
message: str | None = None
|
||||
id: str
|
||||
commit: dict
|
||||
zipball_url: str | None = None
|
||||
tarball_url: str | None = None
|
||||
|
||||
class FileContent(BaseModel):
|
||||
"""File content model"""
|
||||
|
||||
model_config = ConfigDict(extra="allow")
|
||||
|
||||
name: str
|
||||
path: str
|
||||
sha: str
|
||||
size: int
|
||||
url: str
|
||||
html_url: str
|
||||
git_url: str
|
||||
download_url: str | None = None
|
||||
type: str # "file" or "dir"
|
||||
content: str | None = None # Base64 encoded
|
||||
encoding: str | None = None
|
||||
target: str | None = None # For symlinks
|
||||
submodule_git_url: str | None = None
|
||||
|
||||
class CreateRepositoryRequest(BaseModel):
|
||||
"""Request to create a repository"""
|
||||
|
||||
model_config = ConfigDict(extra="forbid")
|
||||
|
||||
name: str = Field(..., min_length=1, max_length=100, description="Repository name")
|
||||
description: str | None = Field(None, max_length=500, description="Repository description")
|
||||
private: bool = Field(default=False, description="Make repository private")
|
||||
auto_init: bool = Field(default=False, description="Initialize with README")
|
||||
gitignores: str | None = Field(None, description="Gitignore template")
|
||||
license: str | None = Field(None, description="License template")
|
||||
readme: str | None = Field(None, description="Readme template")
|
||||
default_branch: str | None = Field(None, description="Default branch name")
|
||||
trust_model: str | None = Field(
|
||||
None, description="Trust model (default, collaborator, committer, collaboratorcommitter)"
|
||||
)
|
||||
|
||||
@classmethod
|
||||
@field_validator("name")
|
||||
def validate_name(cls, v):
|
||||
"""Validate repository name"""
|
||||
if not v.replace("-", "").replace("_", "").replace(".", "").isalnum():
|
||||
raise ValueError(
|
||||
"Repository name can only contain alphanumeric characters, hyphens, underscores, and dots"
|
||||
)
|
||||
return v
|
||||
|
||||
class UpdateRepositoryRequest(BaseModel):
|
||||
"""Request to update a repository"""
|
||||
|
||||
model_config = ConfigDict(extra="forbid")
|
||||
|
||||
name: str | None = Field(None, min_length=1, max_length=100, description="New repository name")
|
||||
description: str | None = Field(None, max_length=500, description="Repository description")
|
||||
website: str | None = Field(None, description="Repository website")
|
||||
private: bool | None = Field(None, description="Make repository private")
|
||||
archived: bool | None = Field(None, description="Archive repository")
|
||||
has_issues: bool | None = Field(None, description="Enable issues")
|
||||
has_wiki: bool | None = Field(None, description="Enable wiki")
|
||||
default_branch: str | None = Field(None, description="Default branch")
|
||||
allow_merge_commits: bool | None = Field(None, description="Allow merge commits")
|
||||
allow_rebase: bool | None = Field(None, description="Allow rebase")
|
||||
allow_squash_merge: bool | None = Field(None, description="Allow squash merge")
|
||||
|
||||
class CreateBranchRequest(BaseModel):
|
||||
"""Request to create a branch"""
|
||||
|
||||
model_config = ConfigDict(extra="forbid")
|
||||
|
||||
new_branch_name: str = Field(..., min_length=1, description="New branch name")
|
||||
old_branch_name: str | None = Field(None, description="Source branch (default: default branch)")
|
||||
old_ref_name: str | None = Field(None, description="Source commit SHA or ref")
|
||||
|
||||
class CreateTagRequest(BaseModel):
|
||||
"""Request to create a tag"""
|
||||
|
||||
model_config = ConfigDict(extra="forbid")
|
||||
|
||||
tag_name: str = Field(..., min_length=1, description="Tag name")
|
||||
message: str | None = Field(None, description="Tag message")
|
||||
target: str | None = Field(None, description="Target commit SHA (default: latest)")
|
||||
|
||||
class CreateFileRequest(BaseModel):
|
||||
"""Request to create a file"""
|
||||
|
||||
model_config = ConfigDict(extra="forbid")
|
||||
|
||||
content: str = Field(..., description="File content (will be Base64 encoded)")
|
||||
message: str = Field(..., min_length=1, description="Commit message")
|
||||
branch: str | None = Field(None, description="Branch name (default: default branch)")
|
||||
author_name: str | None = Field(None, description="Author name")
|
||||
author_email: str | None = Field(None, description="Author email")
|
||||
committer_name: str | None = Field(None, description="Committer name")
|
||||
committer_email: str | None = Field(None, description="Committer email")
|
||||
new_branch: str | None = Field(None, description="Create new branch for this commit")
|
||||
|
||||
class UpdateFileRequest(BaseModel):
|
||||
"""Request to update a file"""
|
||||
|
||||
model_config = ConfigDict(extra="forbid")
|
||||
|
||||
content: str = Field(..., description="New file content (will be Base64 encoded)")
|
||||
message: str = Field(..., min_length=1, description="Commit message")
|
||||
sha: str = Field(..., description="SHA of the file being replaced")
|
||||
branch: str | None = Field(None, description="Branch name (default: default branch)")
|
||||
author_name: str | None = Field(None, description="Author name")
|
||||
author_email: str | None = Field(None, description="Author email")
|
||||
committer_name: str | None = Field(None, description="Committer name")
|
||||
committer_email: str | None = Field(None, description="Committer email")
|
||||
new_branch: str | None = Field(None, description="Create new branch for this commit")
|
||||
Reference in New Issue
Block a user