| 318 | ) |
| 319 | |
| 320 | def as_task_v2(self, task_id, name, args=None, kwargs=None, |
| 321 | countdown=None, eta=None, group_id=None, group_index=None, |
| 322 | expires=None, retries=0, chord=None, |
| 323 | callbacks=None, errbacks=None, reply_to=None, |
| 324 | time_limit=None, soft_time_limit=None, |
| 325 | create_sent_event=False, root_id=None, parent_id=None, |
| 326 | shadow=None, chain=None, now=None, timezone=None, |
| 327 | origin=None, ignore_result=False, argsrepr=None, kwargsrepr=None, stamped_headers=None, |
| 328 | replaced_task_nesting=0, **options): |
| 329 | |
| 330 | args = args or () |
| 331 | kwargs = kwargs or {} |
| 332 | if not isinstance(args, (list, tuple)): |
| 333 | raise TypeError('task args must be a list or tuple') |
| 334 | if not isinstance(kwargs, Mapping): |
| 335 | raise TypeError('task keyword arguments must be a mapping') |
| 336 | if countdown: # convert countdown to ETA |
| 337 | self._verify_seconds(countdown, 'countdown') |
| 338 | now = now or self.app.now() |
| 339 | timezone = timezone or self.app.timezone |
| 340 | eta = maybe_make_aware( |
| 341 | now + timedelta(seconds=countdown), tz=timezone, |
| 342 | ) |
| 343 | if isinstance(expires, numbers.Real): |
| 344 | self._verify_seconds(expires, 'expires') |
| 345 | now = now or self.app.now() |
| 346 | timezone = timezone or self.app.timezone |
| 347 | expires = maybe_make_aware( |
| 348 | now + timedelta(seconds=expires), tz=timezone, |
| 349 | ) |
| 350 | if not isinstance(eta, str): |
| 351 | eta = eta and eta.isoformat() |
| 352 | # If we retry a task `expires` will already be ISO8601-formatted. |
| 353 | if not isinstance(expires, str): |
| 354 | expires = expires and expires.isoformat() |
| 355 | |
| 356 | if argsrepr is None: |
| 357 | argsrepr = saferepr(args, self.argsrepr_maxsize) |
| 358 | if kwargsrepr is None: |
| 359 | kwargsrepr = saferepr(kwargs, self.kwargsrepr_maxsize) |
| 360 | |
| 361 | if not root_id: # empty root_id defaults to task_id |
| 362 | root_id = task_id |
| 363 | |
| 364 | stamps = {header: options[header] for header in stamped_headers or []} |
| 365 | headers = { |
| 366 | 'lang': 'py', |
| 367 | 'task': name, |
| 368 | 'id': task_id, |
| 369 | 'shadow': shadow, |
| 370 | 'eta': eta, |
| 371 | 'expires': expires, |
| 372 | 'group': group_id, |
| 373 | 'group_index': group_index, |
| 374 | 'retries': retries, |
| 375 | 'timelimit': [time_limit, soft_time_limit], |
| 376 | 'root_id': root_id, |
| 377 | 'parent_id': parent_id, |