From 7ffe4c715ea1221b9567e11f62386702a2fa80d1 Mon Sep 17 00:00:00 2001 From: Jonathan Christensen Date: Mon, 31 Aug 2026 15:48:51 -0600 Subject: [PATCH 1/2] fix label stuff --- PyBugReporter/src/BugReporter.py | 73 +++++++++++++++++++++++++++++--- 1 file changed, 68 insertions(+), 5 deletions(-) diff --git a/PyBugReporter/src/BugReporter.py b/PyBugReporter/src/BugReporter.py index 206b359..59d1d2d 100644 --- a/PyBugReporter/src/BugReporter.py +++ b/PyBugReporter/src/BugReporter.py @@ -7,6 +7,11 @@ from python_graphql_client import GraphqlClient +BUG_LABEL_NAME: str = "bug" +AUTO_LABEL_NAME: str = "auto generated" +BUG_LABEL_COLOR: str = "d73a4a" +AUTO_LABEL_COLOR: str = "ededed" + class NotCreatedError(Exception): """Raised when someone tries to report a bug to a repo that has not been set up as a reporting destination through setVars. """ @@ -226,8 +231,8 @@ async def _sendBugReport_async(self, repoName: str, errorTitle: str, errorMessag # query variables repoId = await self._getRepoId_async(self.handlers[repoName]) - bugLabel = "LA_kwDOJ3JPj88AAAABU1q15w" - autoLabel = "LA_kwDOJ3JPj88AAAABU1q2DA" + bugLabel = await self._get_or_create_label_id_async(self.handlers[repoName], repoId, BUG_LABEL_NAME, BUG_LABEL_COLOR) + autoLabel = await self._get_or_create_label_id_async(self.handlers[repoName], repoId, AUTO_LABEL_NAME, AUTO_LABEL_COLOR) # Create new issue createIssue = """ @@ -344,7 +349,7 @@ async def _checkIfIssueExists_async(self, handler: BugHandler, errorTitle: str) headers = {"Authorization": f"Bearer {handler.githubKey}"} # query variables - autoLabel = "auto generated" + autoLabel = AUTO_LABEL_NAME # Query to return all issues with auto gen label findIssue = """ @@ -413,6 +418,64 @@ async def _getRepoId_async(self, handler: BugHandler) -> str: repoID = await client.execute_async(query=getID, variables=variables, headers=headers) return repoID['data']['repository']['id'] + @classmethod + async def _get_or_create_label_id_async(cls, handler: BugHandler, repo_id: str, label_name: str, color: str = "ededed") -> str: + """Gets a label ID from the repository, creating it if it does not exist. + + Args: + handler (BugHandler): the object of reporting details + repo_id (str): the repository ID + label_name (str): the name of the label + color (str): the hex color code for creating the label + + Returns: + str: the label ID + """ + client = GraphqlClient(endpoint="https://api.github.com/graphql") + headers = {"Authorization": f"Bearer {handler.githubKey}"} + + get_label_query = """ + query getLabel($owner: String!, $name: String!, $labelName: String!) { + repository(owner: $owner, name: $name) { + label(name: $labelName) { + id + } + } + } + """ + + variables = { + "owner": handler.orgName, + "name": handler.repoName, + "labelName": label_name + } + + result = await client.execute_async(query=get_label_query, variables=variables, headers=headers) + label_data = result.get("data", {}).get("repository", {}).get("label") + if label_data and label_data.get("id"): + return label_data["id"] + + create_label_mutation = """ + mutation createLabel($input: CreateLabelInput!) { + createLabel(input: $input) { + label { + id + } + } + } + """ + + create_variables = { + "input": { + "repositoryId": repo_id, + "name": label_name, + "color": color + } + } + + create_result = await client.execute_async(query=create_label_mutation, variables=create_variables, headers=headers) + return create_result["data"]["createLabel"]["label"]["id"] + @classmethod def manualBugReport(cls, repoName: str, errorTitle: str, errorMessage: str) -> None: """Manually sends a bug report to the Github repository. @@ -444,8 +507,8 @@ async def manualBugReportAsync(cls, repoName: str, errorTitle: str, errorMessage # query variables repoId = await cls._getRepoId_async(cls, handler) - bugLabel = "LA_kwDOJ3JPj88AAAABU1q15w" - autoLabel = "LA_kwDOJ3JPj88AAAABU1q2DA" + bugLabel = await cls._get_or_create_label_id_async(handler, repoId, BUG_LABEL_NAME, BUG_LABEL_COLOR) + autoLabel = await cls._get_or_create_label_id_async(handler, repoId, AUTO_LABEL_NAME, AUTO_LABEL_COLOR) # Create new issue createIssue = """ From 2a1b51ae48c28132500e363c621c064109d9bf18 Mon Sep 17 00:00:00 2001 From: Jonathan Christensen Date: Mon, 31 Aug 2026 15:53:45 -0600 Subject: [PATCH 2/2] camelcase cause I'm not updating standard lol --- PyBugReporter/src/BugReporter.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/PyBugReporter/src/BugReporter.py b/PyBugReporter/src/BugReporter.py index 59d1d2d..833e4ba 100644 --- a/PyBugReporter/src/BugReporter.py +++ b/PyBugReporter/src/BugReporter.py @@ -434,7 +434,7 @@ async def _get_or_create_label_id_async(cls, handler: BugHandler, repo_id: str, client = GraphqlClient(endpoint="https://api.github.com/graphql") headers = {"Authorization": f"Bearer {handler.githubKey}"} - get_label_query = """ + getLabelQuery = """ query getLabel($owner: String!, $name: String!, $labelName: String!) { repository(owner: $owner, name: $name) { label(name: $labelName) { @@ -450,12 +450,12 @@ async def _get_or_create_label_id_async(cls, handler: BugHandler, repo_id: str, "labelName": label_name } - result = await client.execute_async(query=get_label_query, variables=variables, headers=headers) - label_data = result.get("data", {}).get("repository", {}).get("label") - if label_data and label_data.get("id"): - return label_data["id"] + result = await client.execute_async(query=getLabelQuery, variables=variables, headers=headers) + labelData = result.get("data", {}).get("repository", {}).get("label") + if labelData and labelData.get("id"): + return labelData["id"] - create_label_mutation = """ + createLabelMutation = """ mutation createLabel($input: CreateLabelInput!) { createLabel(input: $input) { label { @@ -465,7 +465,7 @@ async def _get_or_create_label_id_async(cls, handler: BugHandler, repo_id: str, } """ - create_variables = { + createVariables = { "input": { "repositoryId": repo_id, "name": label_name, @@ -473,8 +473,8 @@ async def _get_or_create_label_id_async(cls, handler: BugHandler, repo_id: str, } } - create_result = await client.execute_async(query=create_label_mutation, variables=create_variables, headers=headers) - return create_result["data"]["createLabel"]["label"]["id"] + createResult = await client.execute_async(query=createLabelMutation, variables=createVariables, headers=headers) + return createResult["data"]["createLabel"]["label"]["id"] @classmethod def manualBugReport(cls, repoName: str, errorTitle: str, errorMessage: str) -> None: