Change alignment, fix some f-strings

This commit is contained in:
Mikhail f. Shiryaev 2022-06-16 14:33:39 +02:00
parent 7ed305f9b1
commit d7505d4de7
No known key found for this signature in database
GPG Key ID: 4B02ED204C7D93F4
2 changed files with 187 additions and 200 deletions

View File

@ -119,17 +119,16 @@ class CherryPick:
) )
# Create pull-request like a local cherry-pick # Create pull-request like a local cherry-pick
title = self._pr["title"].replace('"', r"\"")
pr = self._gh.create_pull_request( pr = self._gh.create_pull_request(
source=self.cherrypick_branch, source=self.cherrypick_branch,
target=self.backport_branch, target=self.backport_branch,
title="Cherry pick #{number} to {target}: {title}".format( title=(
number=self._pr["number"], f'Cherry pick #{self._pr["number"]} '
target=self.target_branch, f"to {self.target_branch}: "
title=self._pr["title"].replace('"', '\\"'), f"{title}"
),
description="Original pull-request #{}\n\n{}".format(
self._pr["number"], DESCRIPTION
), ),
description=f'Original pull-request #{self._pr["number"]}\n\n{DESCRIPTION}',
) )
# FIXME: use `team` to leave a single eligible assignee. # FIXME: use `team` to leave a single eligible assignee.
@ -166,11 +165,8 @@ class CherryPick:
"user.name=robot-clickhouse", "user.name=robot-clickhouse",
] ]
pr_title = "Backport #{number} to {target}: {title}".format( title = (self._pr["title"].replace('"', r"\""),)
number=self._pr["number"], pr_title = f"Backport #{self._pr['number']} to {self.target_branch}: {title}"
target=self.target_branch,
title=self._pr["title"].replace('"', '\\"'),
)
self._run(git_prefix + ["checkout", "-f", self.backport_branch]) self._run(git_prefix + ["checkout", "-f", self.backport_branch])
self._run(git_prefix + ["pull", "--ff-only", "origin", self.backport_branch]) self._run(git_prefix + ["pull", "--ff-only", "origin", self.backport_branch])
@ -204,9 +200,8 @@ class CherryPick:
source=self.backport_branch, source=self.backport_branch,
target=self.target_branch, target=self.target_branch,
title=pr_title, title=pr_title,
description="Original pull-request #{}\nCherry-pick pull-request #{}\n\n{}".format( description=f"Original pull-request #{self._pr['number']}\n"
self._pr["number"], cherrypick_pr["number"], DESCRIPTION f"Cherry-pick pull-request #{cherrypick_pr['number']}\n\n{DESCRIPTION}",
),
) )
# FIXME: use `team` to leave a single eligible assignee. # FIXME: use `team` to leave a single eligible assignee.

View File

@ -16,43 +16,43 @@ class Query:
""" """
_PULL_REQUEST = """ _PULL_REQUEST = """
author {{ author {{
... on User {{ ... on User {{
id
login
}}
}}
baseRepository {{
nameWithOwner
}}
mergeCommit {{
oid
parents(first: {min_page_size}) {{
totalCount
nodes {{
oid
}}
}}
}}
mergedBy {{
... on User {{
id
login
}}
}}
baseRefName
closed
headRefName
id id
mergeable login
merged }}
number }}
title
url baseRepository {{
nameWithOwner
}}
mergeCommit {{
oid
parents(first: {min_page_size}) {{
totalCount
nodes {{
oid
}}
}}
}}
mergedBy {{
... on User {{
id
login
}}
}}
baseRefName
closed
headRefName
id
mergeable
merged
number
title
url
""" """
def __init__(self, token, owner, name, team, max_page_size=100, min_page_size=10): def __init__(self, token, owner, name, team, max_page_size=100, min_page_size=10):
@ -78,13 +78,13 @@ class Query:
def get_repository(self): def get_repository(self):
_QUERY = """ _QUERY = """
repository(owner: "{owner}" name: "{name}") {{ repository(owner: "{owner}" name: "{name}") {{
defaultBranchRef {{ defaultBranchRef {{
name name
}} }}
id id
sshUrl sshUrl
}} }}
""" """
query = _QUERY.format(owner=self._owner, name=self._name) query = _QUERY.format(owner=self._owner, name=self._name)
@ -98,20 +98,20 @@ class Query:
""" """
_QUERY = """ _QUERY = """
organization(login: "{organization}") {{ organization(login: "{organization}") {{
team(slug: "{team}") {{ team(slug: "{team}") {{
members(first: {max_page_size} {next}) {{ members(first: {max_page_size} {next}) {{
pageInfo {{ pageInfo {{
hasNextPage hasNextPage
endCursor endCursor
}}
nodes {{
id
login
}}
}}
}}
}} }}
nodes {{
id
login
}}
}}
}}
}}
""" """
members = {} members = {}
@ -133,7 +133,7 @@ class Query:
organization=self._owner, organization=self._owner,
team=self._team, team=self._team,
max_page_size=self._max_page_size, max_page_size=self._max_page_size,
next='after: "{}"'.format(result["pageInfo"]["endCursor"]), next=f'after: "{result["pageInfo"]["endCursor"]}"',
) )
# Update members with new nodes compatible with py3.8-py3.10 # Update members with new nodes compatible with py3.8-py3.10
@ -146,11 +146,11 @@ class Query:
def get_pull_request(self, number): def get_pull_request(self, number):
_QUERY = """ _QUERY = """
repository(owner: "{owner}" name: "{name}") {{ repository(owner: "{owner}" name: "{name}") {{
pullRequest(number: {number}) {{ pullRequest(number: {number}) {{
{pull_request_data} {pull_request_data}
}} }}
}} }}
""" """
query = _QUERY.format( query = _QUERY.format(
@ -164,14 +164,16 @@ class Query:
def find_pull_request(self, base, head): def find_pull_request(self, base, head):
_QUERY = """ _QUERY = """
repository(owner: "{owner}" name: "{name}") {{ repository(owner: "{owner}" name: "{name}") {{
pullRequests(first: {min_page_size} baseRefName: "{base}" headRefName: "{head}") {{ pullRequests(
nodes {{ first: {min_page_size} baseRefName: "{base}" headRefName: "{head}"
{pull_request_data} ) {{
}} nodes {{
totalCount {pull_request_data}
}} }}
}} totalCount
}}
}}
""" """
query = _QUERY.format( query = _QUERY.format(
@ -193,13 +195,13 @@ class Query:
Get all pull-requests filtered by label name Get all pull-requests filtered by label name
""" """
_QUERY = """ _QUERY = """
repository(owner: "{owner}" name: "{name}") {{ repository(owner: "{owner}" name: "{name}") {{
pullRequests(first: {min_page_size} labels: "{label_name}" states: OPEN) {{ pullRequests(first: {min_page_size} labels: "{label_name}" states: OPEN) {{
nodes {{ nodes {{
{pull_request_data} {pull_request_data}
}} }}
}} }}
}} }}
""" """
query = _QUERY.format( query = _QUERY.format(
@ -217,35 +219,32 @@ class Query:
""" """
_QUERY = """ _QUERY = """
repository(owner: "{owner}" name: "{name}") {{ repository(owner: "{owner}" name: "{name}") {{
defaultBranchRef {{ defaultBranchRef {{
target {{ target {{
... on Commit {{ ... on Commit {{
history(first: {max_page_size} {next}) {{ history(first: {max_page_size} {next}) {{
pageInfo {{ pageInfo {{
hasNextPage hasNextPage
endCursor endCursor
}} }}
nodes {{ nodes {{
oid oid
associatedPullRequests(first: {min_page_size}) {{ associatedPullRequests(first: {min_page_size}) {{
totalCount totalCount
nodes {{ nodes {{
... on PullRequest {{ ... on PullRequest {{
{pull_request_data} {pull_request_data}
labels(first: {min_page_size}) {{ labels(first: {min_page_size}) {{
totalCount totalCount
pageInfo {{ pageInfo {{
hasNextPage hasNextPage
endCursor endCursor
}} }}
nodes {{ nodes {{
name name
color color
}}
}}
}}
}} }}
}} }}
}} }}
@ -254,6 +253,9 @@ class Query:
}} }}
}} }}
}} }}
}}
}}
}}
""" """
pull_requests = [] pull_requests = []
@ -278,7 +280,7 @@ class Query:
max_page_size=self._max_page_size, max_page_size=self._max_page_size,
min_page_size=self._min_page_size, min_page_size=self._min_page_size,
pull_request_data=self._PULL_REQUEST, pull_request_data=self._PULL_REQUEST,
next='after: "{}"'.format(result["pageInfo"]["endCursor"]), next=f'after: "{result["pageInfo"]["endCursor"]}"',
) )
for commit in result["nodes"]: for commit in result["nodes"]:
@ -296,7 +298,7 @@ class Query:
for pull_request in commit["associatedPullRequests"]["nodes"]: for pull_request in commit["associatedPullRequests"]["nodes"]:
if ( if (
pull_request["baseRepository"]["nameWithOwner"] pull_request["baseRepository"]["nameWithOwner"]
== "{}/{}".format(self._owner, self._name) == f"{self._owner}/{self._name}"
and pull_request["baseRefName"] == self.default_branch and pull_request["baseRefName"] == self.default_branch
and pull_request["mergeCommit"]["oid"] == commit["oid"] and pull_request["mergeCommit"]["oid"] == commit["oid"]
): ):
@ -308,19 +310,19 @@ class Query:
self, source, target, title, description="", draft=False, can_modify=True self, source, target, title, description="", draft=False, can_modify=True
): ):
_QUERY = """ _QUERY = """
createPullRequest(input: {{ createPullRequest(input: {{
baseRefName: "{target}", baseRefName: "{target}",
headRefName: "{source}", headRefName: "{source}",
repositoryId: "{id}", repositoryId: "{id}",
title: "{title}", title: "{title}",
body: "{body}", body: "{body}",
draft: {draft}, draft: {draft},
maintainerCanModify: {modify} maintainerCanModify: {modify}
}}) {{ }}) {{
pullRequest {{ pullRequest {{
{pull_request_data} {pull_request_data}
}} }}
}} }}
""" """
query = _QUERY.format( query = _QUERY.format(
@ -335,29 +337,29 @@ class Query:
) )
return self._run(query, is_mutation=True)["createPullRequest"]["pullRequest"] return self._run(query, is_mutation=True)["createPullRequest"]["pullRequest"]
def merge_pull_request(self, id): def merge_pull_request(self, pr_id):
_QUERY = """ _QUERY = """
mergePullRequest(input: {{ mergePullRequest(input: {{
pullRequestId: "{id}" pullRequestId: "{pr_id}"
}}) {{ }}) {{
pullRequest {{ pullRequest {{
{pull_request_data} {pull_request_data}
}} }}
}} }}
""" """
query = _QUERY.format(id=id, pull_request_data=self._PULL_REQUEST) query = _QUERY.format(pr_id=pr_id, pull_request_data=self._PULL_REQUEST)
return self._run(query, is_mutation=True)["mergePullRequest"]["pullRequest"] return self._run(query, is_mutation=True)["mergePullRequest"]["pullRequest"]
# FIXME: figure out how to add more assignees at once # FIXME: figure out how to add more assignees at once
def add_assignee(self, pr, assignee): def add_assignee(self, pr, assignee):
_QUERY = """ _QUERY = """
addAssigneesToAssignable(input: {{ addAssigneesToAssignable(input: {{
assignableId: "{id1}", assignableId: "{id1}",
assigneeIds: "{id2}" assigneeIds: "{id2}"
}}) {{ }}) {{
clientMutationId clientMutationId
}} }}
""" """
query = _QUERY.format(id1=pr["id"], id2=assignee["id"]) query = _QUERY.format(id1=pr["id"], id2=assignee["id"])
@ -373,28 +375,28 @@ class Query:
""" """
_GET_LABEL = """ _GET_LABEL = """
repository(owner: "{owner}" name: "{name}") {{ repository(owner: "{owner}" name: "{name}") {{
labels(first: {max_page_size} {next} query: "{label_name}") {{ labels(first: {max_page_size} {next} query: "{label_name}") {{
pageInfo {{ pageInfo {{
hasNextPage hasNextPage
endCursor endCursor
}} }}
nodes {{ nodes {{
id id
name name
color color
}} }}
}} }}
}} }}
""" """
_SET_LABEL = """ _SET_LABEL = """
addLabelsToLabelable(input: {{ addLabelsToLabelable(input: {{
labelableId: "{pr_id}", labelableId: "{pr_id}",
labelIds: "{label_id}" labelIds: "{label_id}"
}}) {{ }}) {{
clientMutationId clientMutationId
}} }}
""" """
labels = [] labels = []
@ -415,10 +417,10 @@ class Query:
name=self._name, name=self._name,
label_name=label_name, label_name=label_name,
max_page_size=self._max_page_size, max_page_size=self._max_page_size,
next='after: "{}"'.format(result["pageInfo"]["endCursor"]), next=f'after: "{result["pageInfo"]["endCursor"]}"',
) )
labels += [label for label in result["nodes"]] labels += list(result["nodes"])
if not labels: if not labels:
return return
@ -458,27 +460,23 @@ class Query:
# sleep a little, because we querying github too often # sleep a little, because we querying github too often
time.sleep(0.1) time.sleep(0.1)
headers = {"Authorization": "bearer {}".format(self._token)} headers = {"Authorization": f"bearer {self._token}"}
if is_mutation: if is_mutation:
query = """ query = f"""
mutation {{ mutation {{
{query} {query}
}} }}
""".format( """
query=query
)
else: else:
query = """ query = f"""
query {{ query {{
{query} {query}
rateLimit {{ rateLimit {{
cost cost
remaining remaining
}} }}
}} }}
""".format( """
query=query
)
response = self.session.post( response = self.session.post(
"https://api.github.com/graphql", json={"query": query}, headers=headers "https://api.github.com/graphql", json={"query": query}, headers=headers
@ -487,21 +485,15 @@ class Query:
result = response.json() result = response.json()
if "errors" in result: if "errors" in result:
raise Exception( raise Exception(
"Errors occurred: {}\nOriginal query: {}".format( f"Errors occurred: {result['errors']}\nOriginal query: {query}"
result["errors"], query
)
) )
if not is_mutation: if not is_mutation:
if caller not in list(self.api_costs.keys()): if caller not in self.api_costs:
self.api_costs[caller] = 0 self.api_costs[caller] = 0
self.api_costs[caller] += result["data"]["rateLimit"]["cost"] self.api_costs[caller] += result["data"]["rateLimit"]["cost"]
return result["data"] return result["data"]
else: else:
raise Exception( data = json.dumps(response.json(), indent=4)
"Query failed with code {code}:\n{json}".format( raise Exception(f"Query failed with code {response.status_code}:\n{data}")
code=response.status_code,
json=json.dumps(response.json(), indent=4),
)
)