| 709 | return self._get_token() |
| 710 | |
| 711 | def __repr__(self) -> str: |
| 712 | # When `Task` is deserialized the constructor will not run and |
| 713 | # `self._repr` is thus undefined. |
| 714 | if not hasattr(self, "_repr") or not self._repr: |
| 715 | head = funcname(self.func) |
| 716 | tail = ")" |
| 717 | label_size = 40 |
| 718 | args = self.args |
| 719 | kwargs = self.kwargs |
| 720 | if args or kwargs: |
| 721 | label_size2 = int( |
| 722 | (label_size - len(head) - len(tail) - len(str(self.key))) |
| 723 | // (len(args) + len(kwargs)) |
| 724 | ) |
| 725 | if args: |
| 726 | if label_size2 > 5: |
| 727 | args_repr = ", ".join(repr(t) for t in args) |
| 728 | else: |
| 729 | args_repr = "..." |
| 730 | else: |
| 731 | args_repr = "" |
| 732 | if kwargs: |
| 733 | if label_size2 > 5: |
| 734 | kwargs_repr = ", " + ", ".join( |
| 735 | f"{k}={repr(v)}" for k, v in sorted(kwargs.items()) |
| 736 | ) |
| 737 | else: |
| 738 | kwargs_repr = ", ..." |
| 739 | else: |
| 740 | kwargs_repr = "" |
| 741 | self._repr = f"<Task {self.key!r} {head}({args_repr}{kwargs_repr}{tail}>" |
| 742 | return self._repr |
| 743 | |
| 744 | def __call__(self, values=()): |
| 745 | self._verify_values(values) |