33from dataclasses import dataclass , field
44from typing import Any , Literal
55
6- from dataclasses_json import DataClassJsonMixin
6+ from dataclass_wizard import JSONPyWizard
77
88from todoist_api_python .utils import get_url_for_task
99
1010VIEW_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
0 commit comments