<reponame>imlegend19/GRAS
class BaseStatic(type):
    def __setattr__(self, name, value):
        raise ValueError("Cannot change the value of a read-only variable.")


class APIStaticV4(metaclass=BaseStatic):
    BASE_URL = "https://api.github.com/graphql"
    DATA = "data"
    RESOURCE = "resource"
    ID = "id"
    TOTAL_COUNT = "totalCount"
    CREATED_AT = "createdAt"
    UPDATED_AT = "updatedAt"
    PAGE_INFO = "pageInfo"
    HAS_NEXT_PAGE = "hasNextPage"
    END_CURSOR = "endCursor"
    NODES = "nodes"
    NODE = "node"
    EDGES = "edges"
    URL = "url"
    DESCRIPTION = "description"
    REPOSITORY = "repository"
    AFTER = "after"
    WATCHERS = "watchers"
    SEARCH = "search"
    NUMBER = "number"
    OID = "oid"
    RATE_LIMIT = "rateLimit"
    REMAINING = "remaining"
    RESET_AT = "resetAt"
    TYPE = "type"


class UserStatic(metaclass=BaseStatic):
    USER = "user"
    EMAIL = "email"
    LOGIN = "login"
    NAME = "name"
    CREATOR = "creator"
    ASSIGNABLE_USERS = "assignableUsers"
    FOLLOWERS = "followers"
    LOCATION = "location"
    USERS = "users"


class APIStaticV3(metaclass=BaseStatic):
    UPDATED_AT = "updated_at"
    CREATED_AT = "created_at"
    INCOMPLETE_RESULTS = "incomplete_results"
    ITEMS = "items"
    TOTAL_COUNT = "total_count"
    LOGIN = "login"
    NAME = "name"
    DATE = "date"
    EMAIL = "email"
    CONTRIBUTIONS = "contributions"
    NODE_ID = "node_id"


class CommitStatic(metaclass=BaseStatic):
    AUTHOR = "author"
    COMMIT = "commit"
    TAGGER = "tagger"
    COMMITTER = "committer"
    MESSAGE = "message"
    SHA = "sha"
    FILES = "files"
    STATUS = "status"
    FILENAME = "filename"
    ADDITIONS = "additions"
    DELETIONS = "deletions"
    CHANGES = "changes"
    PATCH = "patch"
    AUTHORED_DATE = "authoredDate"
    COMMITTED_DATE = "committedDate"
    CHANGED_FILES = "changedFiles"
    PARENTS = "parents"
    OBJECT = "object"
    HISTORY = "history"
    STATE = "state"
    COMMIT_COMMENTS = "commitComments"
    BODY = "body"
    PATH = "path"
    POSITION = "position"
    COMMENTS = "comments"


class RepositoryStatic(metaclass=BaseStatic):
    NAME_WITH_OWNER = "nameWithOwner"
    PARENT = "parent"
    ASSIGNEES = "assignees"
    TAGS = "tags"
    REPOSITORY = "repository"
    DISK_USAGE = "diskUsage"
    FORK_COUNT = "forkCount"
    HOMEPAGE_URL = "homepageUrl"
    IS_ARCHIVED = "isArchived"
    IS_FORK = "isFork"
    OWNER = "owner"
    PRIMARY_LANGUAGE = "primaryLanguage"
    STARGAZERS = "stargazers"
    WATCHERS = "watchers"
    STARRED_AT = "starredAt"
    REFS = "refs"
    TARGET = "target"
    LANGUAGES = "languages"
    SIZE = "size"
    TOPICS = "repositoryTopics"
    TOPIC = "topic"
    FORKS = 'forks'


class MilestoneStatic(metaclass=BaseStatic):
    MILESTONES = "milestones"
    DUE_ON = "dueOn"
    TITLE = "title"
    CLOSED_AT = "closedAt"
    STATE = "state"
    CREATOR = "creator"


class LabelStatic(metaclass=BaseStatic):
    LABELS = "labels"
    COLOR = "color"


class IssueStatic(metaclass=BaseStatic):
    COMMITS = "commits"
    PULL_REQUEST = "pullRequest"
    PULL_REQUESTS = "pullRequests"
    FILES = "files"
    STATE = "state"
    REACTIONS = "reactions"
    LABELS = "labels"
    ASSIGNEES = "assignees"
    ISSUE = "issue"
    ISSUES = "issues"
    TITLE = "title"
    BODY = "body"
    AUTHOR = "author"
    MILESTONE = "milestone"
    CLOSED_AT = "closedAt"
    REACTION_GROUPS = "reactionGroups"
    CONTENT = "content"
    COMMENTS = "comments"
    IS_MINIMIZED = "isMinimized"
    MINIMIZED_REASON = "minimizedReason"
    CHANGED_FILES = "changedFiles"
    CLOSED = "closed"
    CREATED_AT = "createdAt"
    UPDATED_AT = "updatedAt"
    ADDITIONS = "additions"
    DELETIONS = "deletions"
    BASE_REF_NAME = "baseRefName"
    BASE_REF_OID = "baseRefOid"
    HEAD_REF_NAME = "headRefName"
    HEAD_REF_OID = "headRefOid"
    MERGED = "merged"
    MERGED_AT = "mergedAt"
    MERGED_BY = "mergedBy"
    FILE_PATH = "path"
    REVIEW_DECISION = "reviewDecision"


class ReleaseStatic(metaclass=BaseStatic):
    IS_PRE_RELEASE = "isPrerelease"
    DOWNLOAD_COUNT = "downloadCount"
    SIZE = "size"
    CONTENT_TYPE = "contentType"
    TAG_NAME = "tagName"
    RELEASES = "releases"
    AUTHOR = "author"
    RELEASE_ASSETS = "releaseAssets"


class EventStatic(metaclass=BaseStatic):
    ASSIGNED_EVENT = "AssignedEvent"
    CLOSED_EVENT = "ClosedEvent"
    CROSS_REFERENCED_EVENT = "CrossReferencedEvent"
    DEMILESTONED_EVENT = "DemilestonedEvent"
    LABELED_EVENT = "LabeledEvent"
    MARKED_AS_DUPLICATE_EVENT = "MarkedAsDuplicateEvent"
    MENTIONED_EVENT = "MentionedEvent"
    MILESTONED_EVENT = "MilestonedEvent"
    PINNED_EVENT = "PinnedEvent"
    REFERENCED_EVENT = "ReferencedEvent"
    RENAMED_TITLE_EVENT = "RenamedTitleEvent"
    REOPENED_EVENT = "ReopenedEvent"
    TRANSFERRED_EVENT = "TransferredEvent"
    UNASSIGNED_EVENT = "UnassignedEvent"
    UNLABELED_EVENT = "UnlabeledEvent"
    UNMARKED_AS_DUPLICATE_EVENT = "UnmarkedAsDuplicateEvent"
    UNPINNED_EVENT = "UnpinnedEvent"
    CONVERTED_TO_DRAFT_EVENT = "ConvertToDraftEvent"
    MERGED_EVENT = "MergedEvent"
    PULL_REQUEST_COMMIT = "PullRequestCommit"
    REVIEW_REQUESTED_EVENT = "ReviewRequestedEvent"

    TIMELINE_ITEMS = "timelineItems"
    EVENT_TYPE = "eventType"
    WHO = "who"
    WHEN = "when"
    ADDED = "added"
    REMOVED = "removed"
    IS_CROSS_REPOSITORY = "isCrossRepository"
    TYPE = "type"
    MERGE_REF_NAME = "mergeRefName"
