from datetime import datetime from enum import Enum from typing import Optional, List, Dict from pydantic import BaseModel, Field class User(BaseModel): """User,User represents a user""" """Is user active""" active: Optional[bool] = None """URL to the user's avatar""" avatar_url: Optional[str] = None created: Optional[datetime] = None """the user's description""" description: Optional[str] = None email: Optional[str] = None """user counts""" followers_count: Optional[int] = None following_count: Optional[int] = None """the user's full name""" full_name: Optional[str] = None """the user's id""" id: Optional[int] = None """Is the user an administrator""" is_admin: Optional[bool] = None """User locale""" language: Optional[str] = None last_login: Optional[datetime] = None """the user's location""" location: Optional[str] = None """the user's username""" login: Optional[str] = None """the user's authentication sign-in name.""" login_name: Optional[str] = None """Is user login prohibited""" prohibit_login: Optional[bool] = None """Is user restricted""" restricted: Optional[bool] = None starred_repos_count: Optional[int] = None """User visibility level option: public, limited, private""" visibility: Optional[str] = None """the user's website""" website: Optional[str] = None username: Optional[str] = None class Attachment(BaseModel): """Attachment,Attachment a generic attachment""" browser_download_url: Optional[str] = None created_at: Optional[datetime] = None download_count: Optional[int] = None id: Optional[int] = None name: Optional[str] = None size: Optional[int] = None uuid: Optional[str] = None class Label(BaseModel): """Label,Label a label to an issue or a pr""" color: Optional[str] = None description: Optional[str] = None exclusive: Optional[bool] = None id: Optional[int] = None name: Optional[str] = None url: Optional[str] = None class Milestone(BaseModel): """Milestone,Milestone milestone is a collection of issues on one repository""" closed_at: Optional[datetime] = None closed_issues: Optional[int] = None created_at: Optional[datetime] = None description: Optional[str] = None due_on: Optional[datetime] = None id: Optional[int] = None open_issues: Optional[int] = None state: Optional[str] = None title: Optional[str] = None updated_at: Optional[datetime] = None class ExternalTracker(BaseModel): """ExternalTracker,ExternalTracker represents settings for external tracker""" """External Issue Tracker URL Format. Use the placeholders {user}, {repo} and {index} for the username, repository name and issue index. """ external_tracker_format: Optional[str] = None """External Issue Tracker issue regular expression""" external_tracker_regexp_pattern: Optional[str] = None """External Issue Tracker Number Format, either `numeric`, `alphanumeric`, or `regexp`""" external_tracker_style: Optional[str] = None """URL of external issue tracker.""" external_tracker_url: Optional[str] = None class ExternalWiki(BaseModel): """ExternalWiki,ExternalWiki represents setting for external wiki""" """URL of external wiki.""" external_wiki_url: Optional[str] = None class InternalTracker(BaseModel): """InternalTracker,InternalTracker represents settings for internal tracker""" """Let only contributors track time (Built-in issue tracker)""" allow_only_contributors_to_track_time: Optional[bool] = None """Enable dependencies for issues and pull requests (Built-in issue tracker)""" enable_issue_dependencies: Optional[bool] = None """Enable time tracking (Built-in issue tracker)""" enable_time_tracker: Optional[bool] = None class Permission(BaseModel): """Permission,Permission represents a set of permissions""" admin: Optional[bool] = None pull: Optional[bool] = None push: Optional[bool] = None class Organization(BaseModel): """Organization,Organization represents an organization""" avatar_url: Optional[str] = None description: Optional[str] = None full_name: Optional[str] = None id: Optional[int] = None location: Optional[str] = None name: Optional[str] = None repo_admin_change_team_access: Optional[bool] = None """deprecated""" username: Optional[str] = None visibility: Optional[str] = None website: Optional[str] = None class PermissionEnum(Enum): ADMIN = "admin" NONE = "none" OWNER = "owner" READ = "read" WRITE = "write" class Team(BaseModel): """Team,Team represents a team in an organization""" can_create_org_repo: Optional[bool] = None description: Optional[str] = None id: Optional[int] = None includes_all_repositories: Optional[bool] = None name: Optional[str] = None organization: Optional[Organization] = None permission: Optional[PermissionEnum] = None units: Optional[List[str]] = None units_map: Optional[Dict[str, str]] = None class RepoTransfer(BaseModel): """RepoTransfer,RepoTransfer represents a pending repo transfer""" doer: Optional[User] = None recipient: Optional[User] = None teams: Optional[List[Team]] = None class ParentClass(BaseModel): """Repository,Repository represents a repository""" allow_merge_commits: Optional[bool] = None allow_rebase: Optional[bool] = None allow_rebase_explicit: Optional[bool] = None allow_rebase_update: Optional[bool] = None allow_squash_merge: Optional[bool] = None archived: Optional[bool] = None archived_at: Optional[datetime] = None avatar_url: Optional[str] = None clone_url: Optional[str] = None created_at: Optional[datetime] = None default_allow_maintainer_edit: Optional[bool] = None default_branch: Optional[str] = None default_delete_branch_after_merge: Optional[bool] = None default_merge_style: Optional[str] = None description: Optional[str] = None empty: Optional[bool] = None external_tracker: Optional[ExternalTracker] = None external_wiki: Optional[ExternalWiki] = None fork: Optional[bool] = None forks_count: Optional[int] = None full_name: Optional[str] = None has_actions: Optional[bool] = None has_issues: Optional[bool] = None has_packages: Optional[bool] = None has_projects: Optional[bool] = None has_pull_requests: Optional[bool] = None has_releases: Optional[bool] = None has_wiki: Optional[bool] = None html_url: Optional[str] = None id: Optional[int] = None ignore_whitespace_conflicts: Optional[bool] = None internal: Optional[bool] = None internal_tracker: Optional[InternalTracker] = None language: Optional[str] = None languages_url: Optional[str] = None link: Optional[str] = None mirror: Optional[bool] = None mirror_interval: Optional[str] = None mirror_updated: Optional[datetime] = None name: Optional[str] = None open_issues_count: Optional[int] = None open_pr_counter: Optional[int] = None original_url: Optional[str] = None owner: Optional[User] = None parent: Optional['ParentClass'] = None permissions: Optional[Permission] = None private: Optional[bool] = None release_counter: Optional[int] = None repo_transfer: Optional[RepoTransfer] = None size: Optional[int] = None ssh_url: Optional[str] = None stars_count: Optional[int] = None template: Optional[bool] = None updated_at: Optional[datetime] = None url: Optional[str] = None watchers_count: Optional[int] = None website: Optional[str] = None class PullRequestMeta(BaseModel): """PullRequestMeta,PullRequestMeta PR info if an issue is a PR""" merged: Optional[bool] = None merged_at: Optional[datetime] = None class RepositoryMeta(BaseModel): """RepositoryMeta,RepositoryMeta basic repository information""" full_name: Optional[str] = None id: Optional[int] = None name: Optional[str] = None owner: Optional[str] = None class Comment(BaseModel): """Comment,Comment represents a comment on a commit or issue""" assets: Optional[List[Attachment]] = None body: Optional[str] = None created_at: Optional[datetime] = None html_url: Optional[str] = None id: Optional[int] = None issue_url: Optional[str] = None original_author: Optional[str] = None original_author_id: Optional[int] = None pull_request_url: Optional[str] = None updated_at: Optional[datetime] = None user: Optional[User] = None class Issue(BaseModel): """Issue,Issue represents an issue in a repository""" assets: Optional[List[Attachment]] = None assignee: Optional[User] = None assignees: Optional[List[User]] = None body: Optional[str] = None closed_at: Optional[datetime] = None comments: Optional[int] = None created_at: Optional[datetime] = None due_date: Optional[datetime] = None html_url: Optional[str] = None id: Optional[int] = None is_locked: Optional[bool] = None labels: Optional[List[Label]] = None milestone: Optional[Milestone] = None number: Optional[int] = None original_author: Optional[str] = None original_author_id: Optional[int] = None pin_order: Optional[int] = None pull_request: Optional[PullRequestMeta] = None ref: Optional[str] = None repository: Optional[RepositoryMeta] = None state: Optional[str] = None title: Optional[str] = None updated_at: Optional[datetime] = None url: Optional[str] = None user: Optional[User] = None class Repository(BaseModel): """Repository,Repository represents a repository""" allow_merge_commits: Optional[bool] = None allow_rebase: Optional[bool] = None allow_rebase_explicit: Optional[bool] = None allow_rebase_update: Optional[bool] = None allow_squash_merge: Optional[bool] = None archived: Optional[bool] = None archived_at: Optional[datetime] = None avatar_url: Optional[str] = None clone_url: Optional[str] = None created_at: Optional[datetime] = None default_allow_maintainer_edit: Optional[bool] = None default_branch: Optional[str] = None default_delete_branch_after_merge: Optional[bool] = None default_merge_style: Optional[str] = None description: Optional[str] = None empty: Optional[bool] = None external_tracker: Optional[ExternalTracker] = None external_wiki: Optional[ExternalWiki] = None fork: Optional[bool] = None forks_count: Optional[int] = None full_name: Optional[str] = None has_actions: Optional[bool] = None has_issues: Optional[bool] = None has_packages: Optional[bool] = None has_projects: Optional[bool] = None has_pull_requests: Optional[bool] = None has_releases: Optional[bool] = None has_wiki: Optional[bool] = None html_url: Optional[str] = None id: Optional[int] = None ignore_whitespace_conflicts: Optional[bool] = None internal: Optional[bool] = None internal_tracker: Optional[InternalTracker] = None language: Optional[str] = None languages_url: Optional[str] = None link: Optional[str] = None mirror: Optional[bool] = None mirror_interval: Optional[str] = None mirror_updated: Optional[datetime] = None name: Optional[str] = None open_issues_count: Optional[int] = None open_pr_counter: Optional[int] = None original_url: Optional[str] = None owner: Optional[User] = None parent: Optional[ParentClass] = None permissions: Optional[Permission] = None private: Optional[bool] = None release_counter: Optional[int] = None repo_transfer: Optional[RepoTransfer] = None size: Optional[int] = None ssh_url: Optional[str] = None stars_count: Optional[int] = None template: Optional[bool] = None updated_at: Optional[datetime] = None url: Optional[str] = None watchers_count: Optional[int] = None website: Optional[str] = None class Changes(BaseModel): class Body(BaseModel): old_ctx: Optional[str] = Field(None, alias='from') body: Optional[Body] = None class Action(Enum): edited = 'edited' opened = 'opened' created = 'created' class GiteaEvent(Enum): issue_comment = 'issue_comment' issues = 'issues' class WebHookIssueComment(BaseModel): action: Optional[str] = None issue: Optional[Issue] = None comment: Optional[Comment] = None changes: Optional[Changes] = None repository: Optional[Repository] = None sender: Optional[User] = None is_pull: Optional[bool] = None class WebHookIssue(BaseModel): action: Optional[str] = None number: Optional[int] = None changes: Optional[Changes] = None issue: Optional[Issue] = None repository: Optional[Repository] = None sender: Optional[User] = None commit_id: Optional[str] = None