Issue Operations (v2)¶
GraphQL operations for managing issues. See the v2 guide
for how client.v2 relates to client.v1/client.issue, and for the
description ("notes") and archive/restore behavior shared across v2 entities.
API Reference¶
IssueOperations
¶
Bases: GraphQLOperations, IssueOperationsMixin
Class to handle v2 (GraphQL) operations related to issues.
Methods:
-
details–Get details for an issue.
-
list–List issues for a meeting.
-
create–Create a new issue.
-
update–Update an existing issue.
-
solve–Mark an issue as solved.
-
reopen–Reopen a solved issue.
-
archive–Archive an issue.
-
restore–Restore an archived issue.
Methods:¶
details
¶
details(issue_id: int) -> Issue
Get details for an issue.
Parameters:
-
issue_id(int) –The ID of the issue.
Returns:
-
Issue–An
Issuemodel instance.
list
¶
list(meeting_id: int, *, long_term: bool = False, include_solved: bool = False, include_archived: bool = False) -> list[Issue]
List issues for a meeting.
Parameters:
-
meeting_id(int) –The ID of the meeting.
-
long_term(bool, default:False) –If
True, list long-term (department plan) issues instead of short-term ones.include_solvedandinclude_archivedhave no effect in this mode. -
include_solved(bool, default:False) –If
True, also include recently solved issues. -
include_archived(bool, default:False) –If
True, also include archived issues.
Returns:
-
list[Issue]–A list of
Issuemodel instances, ordered by creation date.
create
¶
create(meeting_id: int, title: str, user_id: int | None = None, notes: str | None = None, long_term: bool = False) -> Issue
Create a new issue.
Parameters:
-
meeting_id(int) –The ID of the meeting to create the issue in. For L10 meetings this doubles as the recurrence id
CreateIssueneeds. -
title(str) –The title of the issue.
-
user_id(int | None, default:None) –The ID of the issue owner (defaults to the current user).
-
notes(str | None, default:None) –Description text for the issue.
-
long_term(bool, default:False) –Whether to create it directly as a long-term (department plan) issue.
Returns:
-
Issue–The newly created
Issue.
update
¶
update(issue_id: int, *, title: str | None = None, user_id: int | None = None, notes: str | None = None, long_term: bool | None = None, meeting_id: int | None = None) -> Issue
Update an existing issue.
Parameters:
-
issue_id(int) –The ID of the issue to update.
-
title(str | None, default:None) –New title for the issue.
-
user_id(int | None, default:None) –New owner for the issue.
-
notes(str | None, default:None) –New description text for the issue.
-
long_term(bool | None, default:None) –Move the issue to/from the long-term (department plan) list.
-
meeting_id(int | None, default:None) –Move the issue to a different meeting.
Returns:
-
Issue–The updated
Issue.
Raises:
-
ValueError–If no update fields are provided.
solve
¶
solve(issue_id: int) -> Issue
Mark an issue as solved.
Note
Verified live: this has no effect on an already-archived issue
(including a long-term one) — completedTimestamp is updated but
completed stays False. Solve issues before archiving them.
Parameters:
-
issue_id(int) –The ID of the issue to solve.
Returns:
-
Issue–The updated
Issue.
reopen
¶
reopen(issue_id: int) -> Issue
Reopen a solved issue.
Parameters:
-
issue_id(int) –The ID of the issue to reopen.
Returns:
-
Issue–The updated
Issue.
Async Version¶
The async version AsyncIssueOperations provides the same methods as above, but with async/await support:
AsyncIssueOperations
¶
Async class to handle v2 (GraphQL) operations related to issues.
Async Usage
All methods have the same parameters and return types as their sync counterparts. Simply add await before each method call.
Usage Examples¶
from bloomy import Client
with Client(api_key="your-api-key") as client:
# Create a new issue
issue = client.v2.issue.create(
meeting_id=123,
title="Server performance degradation",
notes="Response times increased by 50% during peak hours",
)
# Get issue details
details = client.v2.issue.details(issue.id)
print(f"Owner: {details.owner.full_name if details.owner else 'Unassigned'}")
# List short-term issues for a meeting
meeting_issues = client.v2.issue.list(meeting_id=123)
# Include recently solved and archived issues too
all_issues = client.v2.issue.list(
meeting_id=123, include_solved=True, include_archived=True
)
# List long-term (department plan) issues instead
long_term_issues = client.v2.issue.list(meeting_id=123, long_term=True)
# Update an issue
updated = client.v2.issue.update(issue.id, title="Updated title")
# Solve, then reopen
solved = client.v2.issue.solve(issue.id)
reopened = client.v2.issue.reopen(issue.id)
# Archive, then restore
client.v2.issue.archive(issue.id)
client.v2.issue.restore(issue.id)
import asyncio
from bloomy import AsyncClient
async def main():
async with AsyncClient(api_key="your-api-key") as client:
# Create a new issue
issue = await client.v2.issue.create(
meeting_id=123,
title="Server performance degradation",
notes="Response times increased by 50% during peak hours",
)
# Get issue details
details = await client.v2.issue.details(issue.id)
# List short-term issues for a meeting
meeting_issues = await client.v2.issue.list(meeting_id=123)
# Update an issue
updated = await client.v2.issue.update(issue.id, title="Updated title")
# Solve, then reopen
solved = await client.v2.issue.solve(issue.id)
reopened = await client.v2.issue.reopen(issue.id)
asyncio.run(main())
Available Methods¶
| Method | Description | Parameters | Returns |
|---|---|---|---|
details() |
Get an issue | issue_id |
Issue |
list() |
List issues for a meeting | meeting_id, long_term, include_solved, include_archived |
list[Issue] |
create() |
Create an issue | meeting_id, title, user_id, notes, long_term |
Issue |
update() |
Update an issue | issue_id, title, user_id, notes, long_term, meeting_id |
Issue |
solve() |
Mark an issue as solved | issue_id |
Issue |
reopen() |
Reopen a solved issue | issue_id |
Issue |
archive() |
Archive an issue | issue_id |
Issue |
restore() |
Restore an archived (short-term) issue | issue_id |
Issue |
Long-term issues
Setting long_term=True on create() or update() moves an issue to the
long-term (department plan) list, and list(long_term=True) returns that
list. include_solved and include_archived have no effect in that mode.
The API stores long-term issues with an archived flag, but the SDK reports
archived=False for them because the web app shows them on the Long-Term
tab. archive() removes a long-term issue from that list, and restore()
brings it back to the short-term list. Use
update(issue_id, long_term=False) to move an issue back to short term
without archiving it.
Update requirements
At least one field must be provided to update(), or it raises ValueError.