Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- **Breaking**: `update_section` now accepts only keyword arguments after `section_id`; any one of `name`, `order`, or `collapsed` can be updated in the same call.
- **Breaking**: `add_label` and `update_label` now accept `order` instead of `item_order` for label ordering. (#247)

### Fixed

- Loading a project no longer fails when its `view_style` is one the SDK doesn't know yet; `Project.view_style` is now typed as `str` and keeps the value as sent.

## [3.2.1] - 2026-01-22

### Fixed
Expand Down
12 changes: 12 additions & 0 deletions tests/test_models.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
from __future__ import annotations

import pytest

from tests.data.test_defaults import (
DEFAULT_ATTACHMENT_RESPONSE,
DEFAULT_COLLABORATOR_RESPONSE,
Expand Down Expand Up @@ -76,6 +78,16 @@ def test_project_from_dict() -> None:
assert project.updated_at == parse_datetime(str(sample_data["updated_at"]))


@pytest.mark.parametrize("view_style", ["table", "some_future_view_style"])
def test_project_from_dict_with_unknown_view_style(view_style: str) -> None:
sample_data = dict(DEFAULT_PROJECT_RESPONSE)
sample_data["view_style"] = view_style

project = Project.from_dict(sample_data)

assert project.view_style == view_style


def test_project_url() -> None:
inbox = Project.from_dict(dict(DEFAULT_PROJECT_RESPONSE))
assert inbox.url == "https://app.todoist.com/app/inbox"
Expand Down
3 changes: 2 additions & 1 deletion todoist_api_python/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,8 @@ class _(JSONPyWizard.Meta): # noqa:N801
is_favorite: bool
is_archived: bool
can_assign_tasks: bool
view_style: ViewStyle
# Not `ViewStyle`: the API can add view styles, which a Literal would fail to load.
view_style: str
created_at: ApiDate
updated_at: ApiDate

Expand Down
Loading