Ensure that this works:

```python
@setup
def mytask():
    print("I am a setup task")

with dag_maker() as dag:
    mytask.override(task_id='newtask')

assert len(dag.task_group.children) == 1
setup_task = dag.task_group.children["newtask"]
assert setup_task._is_setup
```
and teardown also works
for arg in chain(self.op_args, self.op_kwargs.values()):
            if isinstance(arg, Dataset):
                self.inlets.append(arg)
        return_value = super().execute(context)
        return self._handle_output(return_value=return_value, context=context, xcom_push=self.xcom_push)
    def _handle_output(self, return_value: Any, context: Context, xcom_push: Callable):
        """
        Handles logic for whether a decorator needs to push a single return value or multiple return values.
        It sets outlets if any datasets are found in the returned value(s)
        :param return_value:
        :param context:
        :param xcom_push:
        """
        if isinstance(return_value, Dataset):
            self.outlets.append(return_value)
        if isinstance(return_value, list):
            for item in return_value:
                if isinstance(item, Dataset):
                    self.outlets.append(item)
        if not self.multiple_outputs: