Skip to content

The Task "from_dict" constructor should populate "section_id" with None by default using ".get" #93

Closed
@michael-genson

Description

@michael-genson

Bug description

Optional fields in the "from_dict" constructor for each object type use .get such that, if the field is missing, it's populated with None. The section_id on class Task does not do this, even though it should default to None.

It seems that the Todoist API always returns a null section_id so this doesn't matter in practice, but if you're mocking the API (for testing) it's a minor inconvenience.

Expected behaviour

If a Task is constructed from a dict that does not have a section_id, it should set section_id to None.

Is reproducible

Yes

To reproduce

# this raises a KeyError due to a missing section_id
task = Task.from_dict(
    {
        "assigner_id": "abc123",
        "assignee_id": "abc123",
        "comment_count": 0,
        "is_completed": False,
        "content": "def234",
        "created_at": "2023-04-24T00:00:00.0000Z",
        "creator_id": "abc123",
        "description": "",
        "labels": [],
        "order": 1,
        "priority": 1,
        "url": "https://github.com/",
    }
)

Steps taken to try to reproduce

N/A, the fix is easy, you can simply replace section_id=obj["section_id"], with section_id=obj.get("section_id") (or, as a user, just supply a null section_id, of course)

Screenshots

N/A

Version information:

  • Package version: v2.0.2
  • Python version: 3.9

Additional information

See https://github.com/Doist/todoist-api-python/blob/main/todoist_api_python/models.py#L158

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions