Skip to content

Commit 4fddb9e

Browse files
committed
Migrate from dataclasses-json to dataclass-wizard
1 parent 3a2ca78 commit 4fddb9e

File tree

4 files changed

+69
-70
lines changed

4 files changed

+69
-70
lines changed

CHANGELOG.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@
22

33
All notable changes to this project will be documented in this file.
44

5-
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
5+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

88
## [Unreleased]
99

1010
### Changed
1111

12-
- Use `dataclasses_json` for object mapping
12+
- Use `dataclass-wizard` for object mapping
1313

1414
### Fixes
1515

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ classifiers = [
1212
"Topic :: Software Development :: Libraries :: Python Modules",
1313
]
1414

15-
dependencies = ["requests>=2.32.3,<3", "dataclasses-json>=0.6.7,<0.7"]
15+
dependencies = ["requests>=2.32.3,<3", "dataclass-wizard>=0.35.0,<1.0"]
1616

1717
[project.urls]
1818
Homepage = "https://github.com/Doist/todoist-api-python"

todoist_api_python/models.py

Lines changed: 60 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,18 @@
33
from dataclasses import dataclass, field
44
from typing import Any, Literal
55

6-
from dataclasses_json import DataClassJsonMixin
6+
from dataclass_wizard import JSONPyWizard
77

88
from todoist_api_python.utils import get_url_for_task
99

1010
VIEW_STYLE = Literal["list", "board"]
1111

1212

1313
@dataclass
14-
class Project(DataClassJsonMixin):
14+
class Project(JSONPyWizard):
15+
class _(JSONPyWizard.Meta): # noqa:N801
16+
v1 = True
17+
1518
color: str
1619
comment_count: int
1720
id: str
@@ -28,40 +31,38 @@ class Project(DataClassJsonMixin):
2831

2932

3033
@dataclass
31-
class Section(DataClassJsonMixin):
34+
class Section(JSONPyWizard):
35+
class _(JSONPyWizard.Meta): # noqa:N801
36+
v1 = True
37+
3238
id: str
3339
name: str
3440
order: int
3541
project_id: str
3642

3743

3844
@dataclass
39-
class Due(DataClassJsonMixin):
45+
class Due(JSONPyWizard):
46+
class _(JSONPyWizard.Meta): # noqa:N801
47+
v1 = True
48+
4049
date: str
4150
is_recurring: bool
4251
string: str
4352

4453
datetime: str | None = None
4554
timezone: str | None = None
4655

47-
@classmethod
48-
def from_quick_add_response(cls, obj: dict[str, Any]) -> Due | None:
49-
due = obj.get("due")
50-
51-
if not due:
52-
return None
53-
54-
timezone = due.get("timezone")
55-
datetime: str | None = due["date"] if timezone is not None else None
56-
57-
due["datetime"] = datetime
58-
due["timezone"] = timezone
59-
60-
return cls.from_dict(due)
56+
def __post_init__(self) -> None:
57+
if not self.datetime and (self.date and self.timezone):
58+
self.datetime = self.date
6159

6260

6361
@dataclass
64-
class Task(DataClassJsonMixin):
62+
class Task(JSONPyWizard):
63+
class _(JSONPyWizard.Meta): # noqa:N801
64+
v1 = True
65+
6566
assignee_id: str | None
6667
assigner_id: str | None
6768
comment_count: int
@@ -91,9 +92,6 @@ def __post_init__(self) -> None:
9192
@classmethod
9293
def from_quick_add_response(cls, obj: dict[str, Any]) -> Task:
9394
obj_copy = obj.copy()
94-
obj_copy["due"] = (
95-
Due.from_quick_add_response(obj) if obj.get("due") is not None else None
96-
)
9795
obj_copy["comment_count"] = 0
9896
obj_copy["is_completed"] = False
9997
obj_copy["created_at"] = obj_copy.pop("added_at", None)
@@ -106,7 +104,10 @@ def from_quick_add_response(cls, obj: dict[str, Any]) -> Task:
106104

107105

108106
@dataclass
109-
class QuickAddResult(DataClassJsonMixin):
107+
class QuickAddResult(JSONPyWizard):
108+
class _(JSONPyWizard.Meta): # noqa:N801
109+
v1 = True
110+
110111
task: Task
111112

112113
resolved_project_name: str | None = None
@@ -145,14 +146,20 @@ def from_quick_add_response(cls, obj: dict[str, Any]) -> QuickAddResult:
145146

146147

147148
@dataclass
148-
class Collaborator(DataClassJsonMixin):
149+
class Collaborator(JSONPyWizard):
150+
class _(JSONPyWizard.Meta): # noqa:N801
151+
v1 = True
152+
149153
id: str
150154
email: str
151155
name: str
152156

153157

154158
@dataclass
155-
class Attachment(DataClassJsonMixin):
159+
class Attachment(JSONPyWizard):
160+
class _(JSONPyWizard.Meta): # noqa:N801
161+
v1 = True
162+
156163
resource_type: str | None = None
157164

158165
file_name: str | None = None
@@ -171,7 +178,10 @@ class Attachment(DataClassJsonMixin):
171178

172179

173180
@dataclass
174-
class Comment(DataClassJsonMixin):
181+
class Comment(JSONPyWizard):
182+
class _(JSONPyWizard.Meta): # noqa:N801
183+
v1 = True
184+
175185
content: str
176186
id: str
177187
posted_at: str
@@ -181,7 +191,10 @@ class Comment(DataClassJsonMixin):
181191

182192

183193
@dataclass
184-
class Label(DataClassJsonMixin):
194+
class Label(JSONPyWizard):
195+
class _(JSONPyWizard.Meta): # noqa:N801
196+
v1 = True
197+
185198
id: str
186199
name: str
187200
color: str
@@ -190,13 +203,19 @@ class Label(DataClassJsonMixin):
190203

191204

192205
@dataclass
193-
class AuthResult(DataClassJsonMixin):
206+
class AuthResult(JSONPyWizard):
207+
class _(JSONPyWizard.Meta): # noqa:N801
208+
v1 = True
209+
194210
access_token: str
195211
state: str | None
196212

197213

198214
@dataclass
199-
class Item(DataClassJsonMixin):
215+
class Item(JSONPyWizard):
216+
class _(JSONPyWizard.Meta): # noqa:N801
217+
v1 = True
218+
200219
id: str
201220
user_id: str
202221
project_id: str
@@ -221,13 +240,19 @@ class Item(DataClassJsonMixin):
221240

222241

223242
@dataclass
224-
class ItemCompletedInfo(DataClassJsonMixin):
243+
class ItemCompletedInfo(JSONPyWizard):
244+
class _(JSONPyWizard.Meta): # noqa:N801
245+
v1 = True
246+
225247
item_id: str
226248
completed_items: int
227249

228250

229251
@dataclass
230-
class CompletedItems(DataClassJsonMixin):
252+
class CompletedItems(JSONPyWizard):
253+
class _(JSONPyWizard.Meta): # noqa:N801
254+
v1 = True
255+
231256
items: list[Item]
232257
total: int
233258
completed_info: list[ItemCompletedInfo]
@@ -236,6 +261,9 @@ class CompletedItems(DataClassJsonMixin):
236261

237262

238263
@dataclass
239-
class Duration(DataClassJsonMixin):
264+
class Duration(JSONPyWizard):
265+
class _(JSONPyWizard.Meta): # noqa:N801
266+
v1 = True
267+
240268
amount: int
241269
unit: str

uv.lock

Lines changed: 6 additions & 35 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)