pyvikunja 0.8__py3-none-any.whl → 0.10__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
- from enum import Enum
1
+ from enum import IntEnum
2
2
 
3
3
 
4
- class RepeatMode(Enum):
4
+ class RepeatMode(IntEnum):
5
5
  DEFAULT = 0
6
6
  MONTHLY = 1
7
7
  FROM_CURRENT_DATE = 2
pyvikunja/models/task.py CHANGED
@@ -33,6 +33,27 @@ class Task(BaseModel):
33
33
  self.labels: List[Label] = [Label(label_data) for label_data in data.get('labels', []) or []]
34
34
  self.assignees: List[User] = [User(user_data) for user_data in data.get('assignees', []) or []]
35
35
 
36
+ # Parse repeat_mode into an enum
37
+ self.repeat_mode: RepeatMode = self._parse_repeat_mode(data.get('repeat_mode'))
38
+
39
+ # Parse repeat_after into timedelta
40
+ self.repeat_after: Optional[timedelta] = self._parse_repeat_after(data.get('repeat_after'))
41
+
42
+ def _parse_repeat_mode(self, mode: Optional[int]) -> Optional[RepeatMode]:
43
+ """Convert repeat_mode integer into an Enum value, defaulting to NONE."""
44
+ try:
45
+ return RepeatMode(mode) if mode is not None else None
46
+ except ValueError:
47
+ return None
48
+
49
+ def _parse_repeat_after(self, seconds: Optional[int]) -> Optional[timedelta]:
50
+ """Convert repeat_after seconds into a timedelta."""
51
+ try:
52
+ return timedelta(seconds=seconds) if seconds else None
53
+ except:
54
+ # Error parsing seconds to timedelta. Possibly too large.
55
+ return None
56
+
36
57
  async def update(self, data: Dict) -> 'Task':
37
58
  # Merge self.data with the new data (data overrides keys in self.data)
38
59
  combined = {**self.data, **data}
@@ -94,12 +115,14 @@ class Task(BaseModel):
94
115
  iso_date = str(date.isoformat())
95
116
  return await self.update({'end_date': iso_date})
96
117
 
97
- async def set_repeating_interval(self, interval: timedelta, mode: RepeatMode = RepeatMode.DEFAULT) -> 'Task':
98
- # Convert the timedelta to total seconds
99
- total_seconds = int(interval.total_seconds())
100
- # Update the repeating interval for the task
118
+ async def set_repeating_interval(self, interval: Optional[timedelta] = None, mode: Optional[RepeatMode] = None) -> 'Task':
119
+ new_interval = interval if interval else self.repeat_after
120
+ total_seconds = int(new_interval.total_seconds())
121
+
122
+ new_mode = mode if mode else self.repeat_mode
123
+
101
124
  return await self.update({'repeat_after': total_seconds,
102
- 'repeat_mode': mode.value})
125
+ 'repeat_mode': new_mode.value})
103
126
 
104
127
  async def delete_task(self) -> Dict:
105
128
  return await self.api.delete_task(self.id)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: pyvikunja
3
- Version: 0.8
3
+ Version: 0.10
4
4
  Summary: A Python wrapper for Vikunja API
5
5
  Author: Joseph Shufflebotham
6
6
  License: AGPL
@@ -3,13 +3,13 @@ pyvikunja/api.py,sha256=mHPn0XPFrYNCG3ChIUnluAOP08z3YyUL_3nors9RuYU,6920
3
3
  pyvikunja/models/label.py,sha256=cOOuVYDVDMmK96Ev22EDgWwXljkAonQNL4XsTMay4K4,467
4
4
  pyvikunja/models/models.py,sha256=RCPsYQtcgE-W5ZmhwGDejAI76nHZ9-1X-x5GeTG4RnI,637
5
5
  pyvikunja/models/project.py,sha256=viVIe3lVgbh7k05ADDds1cwzvC1vf4tT2vSNjbB7KMk,1179
6
- pyvikunja/models/task.py,sha256=wsJcfb3M2YdOKITE8jgku4mdAnL8q21HNdupptXWsyM,4442
6
+ pyvikunja/models/task.py,sha256=nBAyTBCzsK8LVa_HCtzAgm8_OXRbe4z_RDdfO-KeGyk,5385
7
7
  pyvikunja/models/team.py,sha256=0Z3828Cm3nNuNr1z2on63fLYAVW325_SQKi5RmqXf-I,559
8
8
  pyvikunja/models/user.py,sha256=36duFNyGXKzlwqO0d6FA-C1KTCci2sIMU1IBIF-N_LM,310
9
- pyvikunja/models/enum/repeat_mode.py,sha256=T0cOJcCYJjewZ9dQ41cEFYmOEEfW73cM4xxNYmH8y6s,106
9
+ pyvikunja/models/enum/repeat_mode.py,sha256=xkDPfYeRz342ovqro1UVBAoegpPgpZQYTnyo2sf6R7I,112
10
10
  pyvikunja/models/enum/task_priority.py,sha256=aVz1HEofIqwUkXG0vYm58n_vLNbgqtbvHuQ5K-YQqA0,119
11
- pyvikunja-0.8.dist-info/LICENSE,sha256=hIahDEOTzuHCU5J2nd07LWwkLW7Hko4UFO__ffsvB-8,34523
12
- pyvikunja-0.8.dist-info/METADATA,sha256=6qwKYwpuz89skchRjmmKwlLIwchoTgzsqJU9XF78iVI,187
13
- pyvikunja-0.8.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
14
- pyvikunja-0.8.dist-info/top_level.txt,sha256=WVV9zgxUBuWOkUY1t_U7zI0paWWTVelKYB4vjsiKsks,10
15
- pyvikunja-0.8.dist-info/RECORD,,
11
+ pyvikunja-0.10.dist-info/LICENSE,sha256=hIahDEOTzuHCU5J2nd07LWwkLW7Hko4UFO__ffsvB-8,34523
12
+ pyvikunja-0.10.dist-info/METADATA,sha256=4BWWPIzxRpkVXqvtg0K3PcGX8ISUhoO0jY05dXwGj6E,188
13
+ pyvikunja-0.10.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
14
+ pyvikunja-0.10.dist-info/top_level.txt,sha256=WVV9zgxUBuWOkUY1t_U7zI0paWWTVelKYB4vjsiKsks,10
15
+ pyvikunja-0.10.dist-info/RECORD,,