Skip to content

Commit ac1c491

Browse files
franccescoclaude
andcommitted
feat(models): add archived status to Todo, IssueDetails, and IssueListItem
Expose archive status on models that were previously missing it: - Todo: derives archived from API's CloseTime field using new IsPresent type - IssueDetails/IssueListItem: passes through API's Archived boolean Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 43472c2 commit ac1c491

4 files changed

Lines changed: 9 additions & 0 deletions

File tree

src/bloomy/models.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ def _parse_optional_float(v: Any) -> float | None:
3636
# Reusable annotated types for optional fields that may come as empty strings
3737
OptionalDatetime = Annotated[datetime | None, BeforeValidator(_parse_optional_datetime)]
3838
OptionalFloat = Annotated[float | None, BeforeValidator(_parse_optional_float)]
39+
# Coerces a nullable value (e.g. a datetime or None) into a bool (present = True)
40+
IsPresent = Annotated[bool, BeforeValidator(lambda v: v is not None and v != "")]
3941

4042

4143
class GoalStatus(StrEnum):
@@ -157,6 +159,7 @@ class Todo(BloomyBaseModel):
157159
meeting_id: int | None = Field(alias="OriginId", default=None)
158160
meeting_name: str | None = Field(alias="Origin", default=None)
159161
complete: bool = Field(alias="Complete", default=False)
162+
archived: IsPresent = Field(alias="CloseTime", default=False)
160163

161164

162165
class Issue(BloomyBaseModel):
@@ -301,6 +304,7 @@ class IssueDetails(BloomyBaseModel):
301304
notes_url: str
302305
created_at: str
303306
completed_at: str | None = None
307+
archived: bool = False
304308
meeting_id: int
305309
meeting_title: str
306310
user_id: int
@@ -314,6 +318,7 @@ class IssueListItem(BloomyBaseModel):
314318
title: str
315319
notes_url: str
316320
created_at: str
321+
archived: bool = False
317322
meeting_id: int
318323
meeting_title: str | None
319324

src/bloomy/operations/async_/todos.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,7 @@ async def create(
120120
"DetailsUrl": data.get("DetailsUrl"),
121121
"DueDate": data.get("DueDate"),
122122
"CompleteTime": None,
123+
"CloseTime": None,
123124
"CreateTime": data.get("CreateTime", datetime.now(UTC).isoformat()),
124125
"OriginId": meeting_id,
125126
"Origin": None,

src/bloomy/operations/mixins/issues_transform.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ def _transform_issue_details(self, data: dict[str, Any]) -> IssueDetails:
3333
notes_url=data["DetailsUrl"],
3434
created_at=data["CreateTime"],
3535
completed_at=data["CloseTime"],
36+
archived=data["Archived"],
3637
meeting_id=data["OriginId"],
3738
meeting_title=data["Origin"],
3839
user_id=data["Owner"]["Id"],
@@ -57,6 +58,7 @@ def _transform_issue_list(
5758
title=issue["Name"],
5859
notes_url=issue["DetailsUrl"],
5960
created_at=issue["CreateTime"],
61+
archived=issue["Archived"],
6062
meeting_id=issue["OriginId"],
6163
meeting_title=issue["Origin"],
6264
)

src/bloomy/operations/todos.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,7 @@ def create(
120120
"DetailsUrl": data.get("DetailsUrl"),
121121
"DueDate": data.get("DueDate"),
122122
"CompleteTime": None,
123+
"CloseTime": None,
123124
"CreateTime": data.get("CreateTime", datetime.now(UTC).isoformat()),
124125
"OriginId": meeting_id,
125126
"Origin": None,

0 commit comments

Comments
 (0)