@@ -34,6 +34,11 @@ def wrapper(func):
34
34
35
35
return wrapper if invoked else wrapper (func )
36
36
37
+ def _wrap_as_new (original , new ):
38
+ if isinstance (original , tasks .Task ):
39
+ return tasks .WrappedCallableTask (new )
40
+ return new
41
+
37
42
38
43
def _list_annotating_decorator (attribute , * values ):
39
44
def attach_list (func ):
@@ -47,8 +52,7 @@ def inner_decorator(*args, **kwargs):
47
52
setattr (inner_decorator , attribute , list (_values ))
48
53
# Don't replace @task new-style task objects with inner_decorator by
49
54
# itself -- wrap in a new Task object first.
50
- if isinstance (func , tasks .Task ):
51
- inner_decorator = tasks .WrappedCallableTask (inner_decorator )
55
+ inner_decorator = _wrap_as_new (func , inner_decorator )
52
56
return inner_decorator
53
57
return attach_list
54
58
@@ -133,6 +137,7 @@ def decorated(*args, **kwargs):
133
137
if not hasattr (decorated , 'return_value' ):
134
138
decorated .return_value = func (* args , ** kwargs )
135
139
return decorated .return_value
140
+ decorated = _wrap_as_new (func , decorated )
136
141
# Mark as serial (disables parallelism) and return
137
142
return serial (decorated )
138
143
@@ -150,7 +155,7 @@ def serial(func):
150
155
"""
151
156
if not getattr (func , 'parallel' , False ):
152
157
func .serial = True
153
- return func
158
+ return _wrap_as_new ( func , func )
154
159
155
160
156
161
def parallel (pool_size = None ):
@@ -174,7 +179,7 @@ def inner(*args, **kwargs):
174
179
inner .parallel = True
175
180
inner .serial = False
176
181
inner .pool_size = pool_size
177
- return inner
182
+ return _wrap_as_new ( func , inner )
178
183
179
184
# Allow non-factory-style decorator use (@decorator vs @decorator())
180
185
if type (pool_size ) == type (real_decorator ):
@@ -206,5 +211,5 @@ def outer(func):
206
211
def inner (* args , ** kwargs ):
207
212
with settings (** kw_settings ):
208
213
return func (* args , ** kwargs )
209
- return inner
214
+ return _wrap_as_new ( func , inner )
210
215
return outer
0 commit comments