|
1 | | -from copy import deepcopy |
2 | | -from dataclasses import dataclass, field |
| 1 | +from dataclasses import dataclass, field, replace |
3 | 2 | from datetime import datetime, timedelta |
4 | 3 | from inspect import iscoroutinefunction |
5 | 4 | from typing import ( |
@@ -53,7 +52,7 @@ class ResultStatus(TextChoices): |
53 | 52 | P = ParamSpec("P") |
54 | 53 |
|
55 | 54 |
|
56 | | -@dataclass |
| 55 | +@dataclass(frozen=True) |
57 | 56 | class Task(Generic[P, T]): |
58 | 57 | priority: int |
59 | 58 | """The priority of the task""" |
@@ -98,22 +97,21 @@ def using( |
98 | 97 | Create a new task with modified defaults |
99 | 98 | """ |
100 | 99 |
|
101 | | - task = deepcopy(self) |
| 100 | + changes: Dict[str, Any] = {} |
| 101 | + |
102 | 102 | if priority is not None: |
103 | | - task.priority = priority |
| 103 | + changes["priority"] = priority |
104 | 104 | if queue_name is not None: |
105 | | - task.queue_name = queue_name |
| 105 | + changes["queue_name"] = queue_name |
106 | 106 | if run_after is not None: |
107 | 107 | if isinstance(run_after, timedelta): |
108 | | - task.run_after = timezone.now() + run_after |
| 108 | + changes["run_after"] = timezone.now() + run_after |
109 | 109 | else: |
110 | | - task.run_after = run_after |
| 110 | + changes["run_after"] = run_after |
111 | 111 | if backend is not None: |
112 | | - task.backend = backend |
113 | | - |
114 | | - task.get_backend().validate_task(task) |
| 112 | + changes["backend"] = backend |
115 | 113 |
|
116 | | - return task |
| 114 | + return replace(self, **changes) |
117 | 115 |
|
118 | 116 | def enqueue(self, *args: P.args, **kwargs: P.kwargs) -> "TaskResult[T]": |
119 | 117 | """ |
|
0 commit comments