mirror of
https://github.com/MODSetter/SurfSense.git
synced 2026-06-26 21:39:43 +02:00
fix linear connector methods to return status dicts
This commit is contained in:
parent
f0e1f3419e
commit
5bb619227e
3 changed files with 132 additions and 82 deletions
|
|
@ -197,7 +197,7 @@ def create_create_linear_issue_tool(
|
||||||
linear_client = LinearConnector(
|
linear_client = LinearConnector(
|
||||||
session=db_session, connector_id=actual_connector_id
|
session=db_session, connector_id=actual_connector_id
|
||||||
)
|
)
|
||||||
issue = await linear_client.create_issue(
|
result = await linear_client.create_issue(
|
||||||
team_id=final_team_id,
|
team_id=final_team_id,
|
||||||
title=final_title,
|
title=final_title,
|
||||||
description=final_description,
|
description=final_description,
|
||||||
|
|
@ -207,15 +207,19 @@ def create_create_linear_issue_tool(
|
||||||
label_ids=final_label_ids if final_label_ids else None,
|
label_ids=final_label_ids if final_label_ids else None,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if result.get("status") == "error":
|
||||||
|
logger.error(f"Failed to create Linear issue: {result.get('message')}")
|
||||||
|
return {"status": "error", "message": result.get("message")}
|
||||||
|
|
||||||
logger.info(
|
logger.info(
|
||||||
f"Linear issue created: {issue.get('identifier')} - {issue.get('title')}"
|
f"Linear issue created: {result.get('identifier')} - {result.get('title')}"
|
||||||
)
|
)
|
||||||
return {
|
return {
|
||||||
"status": "success",
|
"status": "success",
|
||||||
"issue_id": issue.get("id"),
|
"issue_id": result.get("id"),
|
||||||
"identifier": issue.get("identifier"),
|
"identifier": result.get("identifier"),
|
||||||
"url": issue.get("url"),
|
"url": result.get("url"),
|
||||||
"message": f"Issue {issue.get('identifier')} created successfully.",
|
"message": result.get("message"),
|
||||||
}
|
}
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
|
|
||||||
|
|
@ -234,6 +234,16 @@ def create_update_linear_issue_tool(
|
||||||
if final_new_label_ids is not None
|
if final_new_label_ids is not None
|
||||||
else None,
|
else None,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if updated_issue.get("status") == "error":
|
||||||
|
logger.error(
|
||||||
|
f"Failed to update Linear issue: {updated_issue.get('message')}"
|
||||||
|
)
|
||||||
|
return {
|
||||||
|
"status": "error",
|
||||||
|
"message": updated_issue.get("message"),
|
||||||
|
}
|
||||||
|
|
||||||
logger.info(
|
logger.info(
|
||||||
f"update_issue result: {updated_issue.get('identifier')} - {updated_issue.get('title')}"
|
f"update_issue result: {updated_issue.get('identifier')} - {updated_issue.get('title')}"
|
||||||
)
|
)
|
||||||
|
|
@ -262,11 +272,13 @@ def create_update_linear_issue_tool(
|
||||||
else:
|
else:
|
||||||
kb_message = ""
|
kb_message = ""
|
||||||
|
|
||||||
|
identifier = updated_issue.get("identifier")
|
||||||
|
default_msg = f"Issue {identifier} updated successfully."
|
||||||
return {
|
return {
|
||||||
"status": "success",
|
"status": "success",
|
||||||
"identifier": updated_issue.get("identifier"),
|
"identifier": identifier,
|
||||||
"url": updated_issue.get("url"),
|
"url": updated_issue.get("url"),
|
||||||
"message": f"Issue {updated_issue.get('identifier')} updated successfully.{kb_message}",
|
"message": f"{updated_issue.get('message', default_msg)}{kb_message}",
|
||||||
}
|
}
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
|
|
||||||
|
|
@ -598,35 +598,49 @@ class LinearConnector:
|
||||||
priority: int | None = None,
|
priority: int | None = None,
|
||||||
label_ids: list[str] | None = None,
|
label_ids: list[str] | None = None,
|
||||||
) -> dict[str, Any]:
|
) -> dict[str, Any]:
|
||||||
mutation = """
|
try:
|
||||||
mutation IssueCreate($input: IssueCreateInput!) {
|
mutation = """
|
||||||
issueCreate(input: $input) {
|
mutation IssueCreate($input: IssueCreateInput!) {
|
||||||
success
|
issueCreate(input: $input) {
|
||||||
issue { id identifier title url }
|
success
|
||||||
|
issue { id identifier title url }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
"""
|
||||||
"""
|
input_data: dict[str, Any] = {"teamId": team_id, "title": title}
|
||||||
input_data: dict[str, Any] = {"teamId": team_id, "title": title}
|
if description is not None:
|
||||||
if description is not None:
|
input_data["description"] = description
|
||||||
input_data["description"] = description
|
if state_id is not None:
|
||||||
if state_id is not None:
|
input_data["stateId"] = state_id
|
||||||
input_data["stateId"] = state_id
|
if assignee_id is not None:
|
||||||
if assignee_id is not None:
|
input_data["assigneeId"] = assignee_id
|
||||||
input_data["assigneeId"] = assignee_id
|
if priority is not None:
|
||||||
if priority is not None:
|
input_data["priority"] = priority
|
||||||
input_data["priority"] = priority
|
if label_ids:
|
||||||
if label_ids:
|
input_data["labelIds"] = label_ids
|
||||||
input_data["labelIds"] = label_ids
|
|
||||||
|
|
||||||
result = await self.execute_graphql_query(mutation, {"input": input_data})
|
result = await self.execute_graphql_query(mutation, {"input": input_data})
|
||||||
payload = result.get("data", {}).get("issueCreate", {})
|
payload = result.get("data", {}).get("issueCreate", {})
|
||||||
if not payload.get("success"):
|
if not payload.get("success"):
|
||||||
errors = result.get("errors", [])
|
errors = result.get("errors", [])
|
||||||
msg = (
|
msg = (
|
||||||
errors[0].get("message", "Unknown error") if errors else "Unknown error"
|
errors[0].get("message", "Unknown error")
|
||||||
)
|
if errors
|
||||||
raise Exception(f"issueCreate failed: {msg}")
|
else "Unknown error"
|
||||||
return payload.get("issue", {})
|
)
|
||||||
|
return {"status": "error", "message": f"issueCreate failed: {msg}"}
|
||||||
|
issue = payload.get("issue", {})
|
||||||
|
return {
|
||||||
|
"status": "success",
|
||||||
|
"id": issue.get("id"),
|
||||||
|
"identifier": issue.get("identifier"),
|
||||||
|
"title": issue.get("title"),
|
||||||
|
"url": issue.get("url"),
|
||||||
|
"message": f"Issue {issue.get('identifier')} created successfully.",
|
||||||
|
}
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"Error creating Linear issue: {e}")
|
||||||
|
return {"status": "error", "message": str(e)}
|
||||||
|
|
||||||
async def update_issue(
|
async def update_issue(
|
||||||
self,
|
self,
|
||||||
|
|
@ -638,57 +652,77 @@ class LinearConnector:
|
||||||
priority: int | None = None,
|
priority: int | None = None,
|
||||||
label_ids: list[str] | None = None,
|
label_ids: list[str] | None = None,
|
||||||
) -> dict[str, Any]:
|
) -> dict[str, Any]:
|
||||||
mutation = """
|
try:
|
||||||
mutation IssueUpdate($id: String!, $input: IssueUpdateInput!) {
|
mutation = """
|
||||||
issueUpdate(id: $id, input: $input) {
|
mutation IssueUpdate($id: String!, $input: IssueUpdateInput!) {
|
||||||
success
|
issueUpdate(id: $id, input: $input) {
|
||||||
issue { id identifier title url }
|
success
|
||||||
|
issue { id identifier title url }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
"""
|
||||||
"""
|
input_data: dict[str, Any] = {}
|
||||||
input_data: dict[str, Any] = {}
|
if title is not None:
|
||||||
if title is not None:
|
input_data["title"] = title
|
||||||
input_data["title"] = title
|
if description is not None:
|
||||||
if description is not None:
|
input_data["description"] = description
|
||||||
input_data["description"] = description
|
if state_id is not None:
|
||||||
if state_id is not None:
|
input_data["stateId"] = state_id
|
||||||
input_data["stateId"] = state_id
|
if assignee_id is not None:
|
||||||
if assignee_id is not None:
|
input_data["assigneeId"] = assignee_id
|
||||||
input_data["assigneeId"] = assignee_id
|
if priority is not None:
|
||||||
if priority is not None:
|
input_data["priority"] = priority
|
||||||
input_data["priority"] = priority
|
if label_ids is not None:
|
||||||
if label_ids is not None:
|
input_data["labelIds"] = label_ids
|
||||||
input_data["labelIds"] = label_ids
|
|
||||||
|
|
||||||
result = await self.execute_graphql_query(
|
result = await self.execute_graphql_query(
|
||||||
mutation, {"id": issue_id, "input": input_data}
|
mutation, {"id": issue_id, "input": input_data}
|
||||||
)
|
|
||||||
payload = result.get("data", {}).get("issueUpdate", {})
|
|
||||||
if not payload.get("success"):
|
|
||||||
errors = result.get("errors", [])
|
|
||||||
msg = (
|
|
||||||
errors[0].get("message", "Unknown error") if errors else "Unknown error"
|
|
||||||
)
|
)
|
||||||
raise Exception(f"issueUpdate failed: {msg}")
|
payload = result.get("data", {}).get("issueUpdate", {})
|
||||||
return payload.get("issue", {})
|
if not payload.get("success"):
|
||||||
|
errors = result.get("errors", [])
|
||||||
async def archive_issue(self, issue_id: str) -> bool:
|
msg = (
|
||||||
mutation = """
|
errors[0].get("message", "Unknown error")
|
||||||
mutation IssueArchive($id: String!) {
|
if errors
|
||||||
issueArchive(id: $id) {
|
else "Unknown error"
|
||||||
success
|
)
|
||||||
|
return {"status": "error", "message": f"issueUpdate failed: {msg}"}
|
||||||
|
issue = payload.get("issue", {})
|
||||||
|
return {
|
||||||
|
"status": "success",
|
||||||
|
"id": issue.get("id"),
|
||||||
|
"identifier": issue.get("identifier"),
|
||||||
|
"title": issue.get("title"),
|
||||||
|
"url": issue.get("url"),
|
||||||
|
"message": f"Issue {issue.get('identifier')} updated successfully.",
|
||||||
}
|
}
|
||||||
}
|
except Exception as e:
|
||||||
"""
|
logger.error(f"Error updating Linear issue: {e}")
|
||||||
result = await self.execute_graphql_query(mutation, {"id": issue_id})
|
return {"status": "error", "message": str(e)}
|
||||||
payload = result.get("data", {}).get("issueArchive", {})
|
|
||||||
if not payload.get("success"):
|
async def archive_issue(self, issue_id: str) -> dict[str, Any]:
|
||||||
errors = result.get("errors", [])
|
try:
|
||||||
msg = (
|
mutation = """
|
||||||
errors[0].get("message", "Unknown error") if errors else "Unknown error"
|
mutation IssueArchive($id: String!) {
|
||||||
)
|
issueArchive(id: $id) {
|
||||||
raise Exception(f"issueArchive failed: {msg}")
|
success
|
||||||
return True
|
}
|
||||||
|
}
|
||||||
|
"""
|
||||||
|
result = await self.execute_graphql_query(mutation, {"id": issue_id})
|
||||||
|
payload = result.get("data", {}).get("issueArchive", {})
|
||||||
|
if not payload.get("success"):
|
||||||
|
errors = result.get("errors", [])
|
||||||
|
msg = (
|
||||||
|
errors[0].get("message", "Unknown error")
|
||||||
|
if errors
|
||||||
|
else "Unknown error"
|
||||||
|
)
|
||||||
|
return {"status": "error", "message": f"issueArchive failed: {msg}"}
|
||||||
|
return {"status": "success", "message": "Issue archived successfully."}
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"Error archiving Linear issue: {e}")
|
||||||
|
return {"status": "error", "message": str(e)}
|
||||||
|
|
||||||
def format_issue_to_markdown(self, issue: dict[str, Any]) -> str:
|
def format_issue_to_markdown(self, issue: dict[str, Any]) -> str:
|
||||||
"""
|
"""
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue