Files
python-github-backup/github_backup/graphql_queries.py
Duncan Ogilvie 4d022d94d0 Add support for discussions
Closes #290
2026-04-28 14:32:27 +02:00

293 lines
4.8 KiB
Python

"""GraphQL query templates used by github-backup."""
DISCUSSION_PAGE_SIZE = 100
DISCUSSION_LIST_QUERY = """
query($owner: String!, $name: String!, $after: String, $pageSize: Int!) {
repository(owner: $owner, name: $name) {
hasDiscussionsEnabled
discussions(
first: $pageSize,
after: $after,
orderBy: {field: UPDATED_AT, direction: DESC}
) {
totalCount
nodes {
id
number
title
updatedAt
}
pageInfo {
hasNextPage
endCursor
}
}
}
}
"""
DISCUSSION_DETAIL_QUERY = """
query(
$owner: String!,
$name: String!,
$number: Int!,
$commentsCursor: String,
$pageSize: Int!
) {
repository(owner: $owner, name: $name) {
discussion(number: $number) {
activeLockReason
answer {
id
databaseId
url
}
answerChosenAt
answerChosenBy {
...ActorFields
}
author {
...ActorFields
}
authorAssociation
body
bodyHTML
bodyText
category {
createdAt
description
emoji
emojiHTML
id
isAnswerable
name
slug
updatedAt
}
closed
closedAt
createdAt
createdViaEmail
databaseId
editor {
...ActorFields
}
id
includesCreatedEdit
isAnswered
labels(first: 100) {
totalCount
nodes {
id
name
color
description
}
}
lastEditedAt
locked
number
poll {
id
question
totalVoteCount
options(first: 100) {
totalCount
nodes {
id
option
totalVoteCount
}
}
}
publishedAt
reactionGroups {
...ReactionGroupFields
}
resourcePath
stateReason
title
updatedAt
upvoteCount
url
comments(first: $pageSize, after: $commentsCursor) {
totalCount
nodes {
...DiscussionCommentFields
replies(first: $pageSize) {
totalCount
nodes {
...DiscussionReplyFields
}
pageInfo {
hasNextPage
endCursor
}
}
}
pageInfo {
hasNextPage
endCursor
}
}
}
}
}
fragment ActorFields on Actor {
avatarUrl
login
resourcePath
url
}
fragment ReactionGroupFields on ReactionGroup {
content
reactors {
totalCount
}
}
fragment DiscussionCommentFields on DiscussionComment {
author {
...ActorFields
}
authorAssociation
body
bodyHTML
bodyText
createdAt
createdViaEmail
databaseId
deletedAt
editor {
...ActorFields
}
id
includesCreatedEdit
isAnswer
isMinimized
lastEditedAt
minimizedReason
publishedAt
reactionGroups {
...ReactionGroupFields
}
replyTo {
id
databaseId
url
}
resourcePath
updatedAt
upvoteCount
url
}
fragment DiscussionReplyFields on DiscussionComment {
author {
...ActorFields
}
authorAssociation
body
bodyHTML
bodyText
createdAt
createdViaEmail
databaseId
deletedAt
editor {
...ActorFields
}
id
includesCreatedEdit
isAnswer
isMinimized
lastEditedAt
minimizedReason
publishedAt
reactionGroups {
...ReactionGroupFields
}
replyTo {
id
databaseId
url
}
resourcePath
updatedAt
upvoteCount
url
}
"""
DISCUSSION_REPLIES_QUERY = """
query($commentId: ID!, $repliesCursor: String, $pageSize: Int!) {
node(id: $commentId) {
... on DiscussionComment {
replies(first: $pageSize, after: $repliesCursor) {
totalCount
nodes {
...DiscussionReplyFields
}
pageInfo {
hasNextPage
endCursor
}
}
}
}
}
fragment ActorFields on Actor {
avatarUrl
login
resourcePath
url
}
fragment ReactionGroupFields on ReactionGroup {
content
reactors {
totalCount
}
}
fragment DiscussionReplyFields on DiscussionComment {
author {
...ActorFields
}
authorAssociation
body
bodyHTML
bodyText
createdAt
createdViaEmail
databaseId
deletedAt
editor {
...ActorFields
}
id
includesCreatedEdit
isAnswer
isMinimized
lastEditedAt
minimizedReason
publishedAt
reactionGroups {
...ReactionGroupFields
}
replyTo {
id
databaseId
url
}
resourcePath
updatedAt
upvoteCount
url
}
"""