invoke.tasks.call raises "RuntimeError: maximum recursion depth exceeded while calling a Python object" #257

Closed
keimlink opened this Issue Jul 2, 2015 · 6 comments

Projects

None yet

3 participants

@keimlink
keimlink commented Jul 2, 2015

We have a Cookiecutter template for our Django projects and I decided to replace the Makefile with invoke. Everything works very well, invoke is more flexible than the previous solution. Thanks for the great software!

Unfortunately the tasks package I created works only with Python 2. Python 3 raises a "RuntimeError: maximum recursion depth exceeded while calling a Python object". I was able to track down the cause. It's invoke.tasks.call being used to build a list of pre-targets. The task wrapped with invoke.tasks.call works stand alone. Maybe my solution to build the pre-tasks list is not correct?

@bitprophet
Member

Do you have a full traceback handy? I'm not using this combo of feature+interpreter myself, but AFAIK it ought to work fine (i.e. your use of mixed object references & call() objects should be a fine way to implement things), so hopefully it's just a bug (& a hole in test coverage, presumably).

@keimlink
keimlink commented Jul 4, 2015

I hope this helps:

$ python -V
Python 3.4.3
$ pip freeze
invoke==0.10.1
$ inv clean
Traceback (most recent call last):
  File "/Users/keimlink/.virtualenvs/my-project/bin/inv", line 11, in <module>
    sys.exit(main())
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/cli.py", line 438, in main
    dispatch(sys.argv)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/cli.py", line 423, in dispatch
    args, collection, parser_contexts = parse(argv, version=version)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/cli.py", line 278, in parse
    collection = loader.load(coll_name) if coll_name else loader.load()
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/loader.py", line 53, in load
    return Collection.from_module(module, loaded_from=parent)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/collection.py", line 166, in from_module
    ret.tasks = copy.deepcopy(obj.tasks)
  File "/Users/keimlink/.pyenv/versions/3.4.3/lib/python3.4/copy.py", line 182, in deepcopy
    y = _reconstruct(x, rv, 1, memo)
  File "/Users/keimlink/.pyenv/versions/3.4.3/lib/python3.4/copy.py", line 323, in _reconstruct
    value = deepcopy(value, memo)
  File "/Users/keimlink/.pyenv/versions/3.4.3/lib/python3.4/copy.py", line 182, in deepcopy
    y = _reconstruct(x, rv, 1, memo)
  File "/Users/keimlink/.pyenv/versions/3.4.3/lib/python3.4/copy.py", line 300, in _reconstruct
    state = deepcopy(state, memo)
  File "/Users/keimlink/.pyenv/versions/3.4.3/lib/python3.4/copy.py", line 155, in deepcopy
    y = copier(x, memo)
  File "/Users/keimlink/.pyenv/versions/3.4.3/lib/python3.4/copy.py", line 246, in _deepcopy_dict
    y[deepcopy(key, memo)] = deepcopy(value, memo)
  File "/Users/keimlink/.pyenv/versions/3.4.3/lib/python3.4/copy.py", line 155, in deepcopy
    y = copier(x, memo)
  File "/Users/keimlink/.pyenv/versions/3.4.3/lib/python3.4/copy.py", line 219, in _deepcopy_list
    y.append(deepcopy(a, memo))
  File "/Users/keimlink/.pyenv/versions/3.4.3/lib/python3.4/copy.py", line 182, in deepcopy
    y = _reconstruct(x, rv, 1, memo)
  File "/Users/keimlink/.pyenv/versions/3.4.3/lib/python3.4/copy.py", line 301, in _reconstruct
    if hasattr(y, '__setstate__'):
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/keimlink/.virtualenvs/my-project/lib/python3.4/site-packages/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
RuntimeError: maximum recursion depth exceeded while calling a Python object
@bitprophet bitprophet added this to the 0.11 milestone Jul 6, 2015
@bitprophet
Member

Yup, that does help (obviously, once it enters final recursion, the rest doesn't, but the top part is pretty critical :D). Something to do with how we deepcopy or perform attribute access. Gives me some starting points when I take a look. Thanks!

@rm-- rm-- referenced this issue in transcode-de/cookiecutter-django-project Nov 17, 2015
Closed

Replace Make with invoke #19

@rm--
rm-- commented Nov 30, 2015

I wrote a test that triggers the problem in this commit.

For explaination:
I added a file with content of the documentation with the modification that I create a collection manually.

In the test I use the Collection.from_module() to load the file. That call ends in a RecursionError very similar to the traceback that @keimlink posted.

Hope that helps a little bit.
PS: During investigation I had the feeling that Lexicon or one of its base classes needs a own __deepcopy__ implemention. I never did something like this, so I could be wrong.
I think Python 3.4.3 or 3.5.0 make no big difference. ;)

# $ tox -e py35
GLOB sdist-make: /Users/rene/used_repos/invoke/setup.py
py35 inst-nodeps: /Users/rene/used_repos/invoke/.tox/dist/invoke-0.12.0.zip
py35 installed: alabaster==0.7.6,Babel==2.1.1,coverage==3.7.1,docutils==0.12,flake8==2.4.0,-e git+https://github.com/pyinvoke/invocations@3b30138505cbff8b2c56bf96770b136961b87fbb#egg=invocations-0.11.0,invoke==0.12.0,Jinja2==2.8,MarkupSafe==0.23,mccabe==0.3.1,mock==1.0.1,nose==1.3.0,pep8==1.5.7,pkginfo==1.2.1,pyflakes==0.8.1,Pygments==2.0.2,pytz==2015.7,releases==1.0.0,requests==2.8.1,semantic-version==2.4.2,six==1.10.0,snowballstemmer==1.2.0,spec==1.3.1,Sphinx==1.3.1,sphinx-rtd-theme==0.1.9,twine==1.5.0,wheel==0.24.0
py35 runtests: PYTHONHASHSEED='3944190071'
py35 runtests: commands[0] | pip install -r dev-requirements.txt
Obtaining file:///Users/rene/used_repos/invoke (from -r tasks-requirements.txt (line 2))
Requirement already satisfied (use --upgrade to upgrade): Sphinx>=1.1.2 in ./.tox/py35/lib/python3.5/site-packages (from -r dev-requirements.txt (line 1))
Requirement already satisfied (use --upgrade to upgrade): releases>=0.6.1 in ./.tox/py35/lib/python3.5/site-packages (from -r dev-requirements.txt (line 2))
Requirement already satisfied (use --upgrade to upgrade): alabaster>=0.6.0 in ./.tox/py35/lib/python3.5/site-packages (from -r dev-requirements.txt (line 3))
Requirement already satisfied (use --upgrade to upgrade): nose==1.3.0 in ./.tox/py35/lib/python3.5/site-packages (from -r dev-requirements.txt (line 4))
Requirement already satisfied (use --upgrade to upgrade): spec>=1.0.0 in ./.tox/py35/lib/python3.5/site-packages (from -r dev-requirements.txt (line 5))
Requirement already satisfied (use --upgrade to upgrade): mock==1.0.1 in ./.tox/py35/lib/python3.5/site-packages (from -r dev-requirements.txt (line 6))
Requirement already satisfied (use --upgrade to upgrade): flake8==2.4.0 in ./.tox/py35/lib/python3.5/site-packages (from -r dev-requirements.txt (line 7))
Obtaining invocations from git+https://github.com/pyinvoke/invocations#egg=invocations (from -r tasks-requirements.txt (line 1))
  Updating ./.tox/py35/src/invocations clone
Requirement already satisfied (use --upgrade to upgrade): semantic-version<2.5,>=2.4 in ./.tox/py35/lib/python3.5/site-packages (from -r tasks-requirements.txt (line 3))
Requirement already satisfied (use --upgrade to upgrade): wheel==0.24 in ./.tox/py35/lib/python3.5/site-packages (from -r tasks-requirements.txt (line 4))
Requirement already satisfied (use --upgrade to upgrade): twine==1.5 in ./.tox/py35/lib/python3.5/site-packages (from -r tasks-requirements.txt (line 5))
Requirement already satisfied (use --upgrade to upgrade): coverage==3.7.1 in ./.tox/py35/lib/python3.5/site-packages (from -r tasks-requirements.txt (line 6))
Requirement already satisfied (use --upgrade to upgrade): Jinja2>=2.3 in ./.tox/py35/lib/python3.5/site-packages (from Sphinx>=1.1.2->-r dev-requirements.txt (line 1))
Requirement already satisfied (use --upgrade to upgrade): Pygments>=2.0 in ./.tox/py35/lib/python3.5/site-packages (from Sphinx>=1.1.2->-r dev-requirements.txt (line 1))
Requirement already satisfied (use --upgrade to upgrade): six>=1.4 in ./.tox/py35/lib/python3.5/site-packages (from Sphinx>=1.1.2->-r dev-requirements.txt (line 1))
Requirement already satisfied (use --upgrade to upgrade): docutils>=0.11 in ./.tox/py35/lib/python3.5/site-packages (from Sphinx>=1.1.2->-r dev-requirements.txt (line 1))
Requirement already satisfied (use --upgrade to upgrade): snowballstemmer>=1.1 in ./.tox/py35/lib/python3.5/site-packages (from Sphinx>=1.1.2->-r dev-requirements.txt (line 1))
Requirement already satisfied (use --upgrade to upgrade): babel>=1.3 in ./.tox/py35/lib/python3.5/site-packages (from Sphinx>=1.1.2->-r dev-requirements.txt (line 1))
Requirement already satisfied (use --upgrade to upgrade): sphinx-rtd-theme<0.2,>=0.1 in ./.tox/py35/lib/python3.5/site-packages (from Sphinx>=1.1.2->-r dev-requirements.txt (line 1))
Requirement already satisfied (use --upgrade to upgrade): pyflakes<0.9,>=0.8.1 in ./.tox/py35/lib/python3.5/site-packages (from flake8==2.4.0->-r dev-requirements.txt (line 7))
Requirement already satisfied (use --upgrade to upgrade): mccabe<0.4,>=0.2.1 in ./.tox/py35/lib/python3.5/site-packages (from flake8==2.4.0->-r dev-requirements.txt (line 7))
Requirement already satisfied (use --upgrade to upgrade): pep8<1.6,>=1.5.7 in ./.tox/py35/lib/python3.5/site-packages (from flake8==2.4.0->-r dev-requirements.txt (line 7))
Requirement already satisfied (use --upgrade to upgrade): requests in ./.tox/py35/lib/python3.5/site-packages (from twine==1.5->-r tasks-requirements.txt (line 5))
Requirement already satisfied (use --upgrade to upgrade): pkginfo in ./.tox/py35/lib/python3.5/site-packages (from twine==1.5->-r tasks-requirements.txt (line 5))
Requirement already satisfied (use --upgrade to upgrade): MarkupSafe in ./.tox/py35/lib/python3.5/site-packages (from Jinja2>=2.3->Sphinx>=1.1.2->-r dev-requirements.txt (line 1))
Requirement already satisfied (use --upgrade to upgrade): pytz>=0a in ./.tox/py35/lib/python3.5/site-packages (from babel>=1.3->Sphinx>=1.1.2->-r dev-requirements.txt (line 1))
Installing collected packages: invocations, invoke
  Running setup.py develop for invocations
  Running setup.py develop for invoke
Successfully installed invocations-0.11.0 invoke-0.12.0
py35 runtests: commands[1] | spec

High level parsing tests
- aliases
- boolean args
- flag then equals sign then value
- flag then space then value
- flag value same as task name
- flag value then task
- inverse boolean flags
- multiple short flags adjacent
- namespaced task
- short boolean flag
- short flag then equals sign then value
- short flag then space then value
- short flag with adjacent value
- subcollection aliases
- subcollection default tasks
- tasks with duplicately named kwargs
- three tasks with args
- underscored flags can be given as dashed

Collection

    __getitem__
    - ValueError for empty subcol task name and no default
    - finds own tasks by name
    - finds subcollection tasks by dotted name
    - honors aliases in own tasks
    - honors own default task with no args
    - honors subcollection default tasks on subcollection name
    - honors subcollection task aliases
    - raises ValueError for no name and no default

    useful_special_methods
    - equality should be useful
    - repr

    from_module
    - adds tasks
    - allows tasks with explicit names to override bound name
    - derives collection name from module name
    - honors explicit collections
    - load collection from real module
    - returns unique Collection objects for same input module
    - submodule names are stripped to last chunk

        parameters
        - inline configuration
        - name and config simultaneously
        - name override

        explicit_root_ns
        - config override merges recursively
        - inline config overrides via merge not replacement
        - inline config with root namespaces overrides builtin
        - inline name overrides root namespace object name
        - root namespace object name overrides module name

    __init__
    - accepts load path kwarg
    - can accept collections as varargs too
    - can accept task varargs
    - initial string arg acts as name
    - initial string arg meshes with varargs and kwargs
    - kwargs act as name args for given objects

    task_names
    - includes aliases and defaults as values
    - returns all task names including subtasks

    to_contexts
    - allows flaglike access via flags
    - exposes aliases
    - exposes namespaced task aliases
    - exposes namespaced task names
    - exposes subcollection default tasks
    - positional arglist preserves order given
    - returns iterable of Contexts corresponding to tasks

    add_task
    - allows specifying task defaultness
    - associates given callable with given name
    - prefers name kwarg over task name attr
    - prefers task name attr over function name
    - raises ValueError if no name found
    - raises ValueError if task added mirrors subcollection name
    - raises ValueError on multiple defaults
    - specifying default False overrides task setting
    - uses function name as implicit name

    add_collection
    - adds collection as subcollection of self
    - can take module objects
    - raises ValueError if collection named same as task
    - raises ValueError if collection without name

    Configuration methods
    - access merges from subcollections
    - basic set and get
    - call returns dict
    - configure allows overwriting
    - configure merging is recursive for nested dicts
    - configure performs merging
    - invalid subcollection paths result in KeyError
    - keys don't have to exist in full path
    - parents overwrite children in path
    - sibling subcollections ignored
    - subcollection paths may be dotted

Shell tab-completion behavior
- bare double dash shows only long core options
- core bool flags have task name completion
- core flags taking values have no completion output
- core partial or invalid flags print all flags
- flag completion includes inverse booleans
- no input means just task names
- no input with no tasks yields empty response
- per task bool flags have task name completion
- per task flags complete with double dashes
- per task flags complete with single dashes
- per task flags taking values have no completion output
- per task partial or invalid flags print all flags
- task name completion includes aliases
- task name completion includes tasks already seen
- task names only complete other task names
- tasks with positional args complete with flags
- top level with dash means core options

Config

    __init__
    - accepts defaults dict
    - accepts env prefix option
    - accepts overrides dict
    - can be empty
    - configure global location prefix
    - configure project location
    - configure runtime path
    - configure user location prefix
    - default system prefix is etc
    - default user prefix is homedir
    - defaults dict is first posarg

    Config hierarchy in effect
    - cli overrides override all
    - collection overrides defaults
    - env vars override collection
    - env vars override project
    - env vars override systemwide
    - env vars override user
    - json prevents python
    - project overrides collection
    - project overrides systemwide
    - project overrides user
    - runtime overrides collection
    - runtime overrides env vars
    - runtime overrides project
    - runtime overrides systemwide
    - runtime overrides user
    - systemwide overrides collection
    - user overrides collection
    - user overrides systemwide
    - yaml prevents json or python

    Configuration file loading
    - honors conf file flag
    - loads no project specific file if no project home given
    - project specific
    - python modules don't load special vars
    - system global
    - unknown suffix in runtime path raises useful error
    - user specific

    Basic API components
    - allows dict and attr access
    - attr access has useful error msg
    - can be used directly after init
    - is iterable like dict
    - nested dict values also allow dual access
    - string display
    - subkeys get merged not overwritten
    - supports mutation dict protocols
    - supports readonly dict protocols

    clone
    - does not reload file data
    - preserves basic members
    - preserves env data
    - preserves file data
    - preserves merged config

    Environment variables
    - ambiguous underscores don't guess
    - base case
    - both types of underscores mixed
    - can declare prefix
    - non predeclared settings do not get consumed
    - underscores nested
    - underscores top level

        type_casting
        - None replaced
        - arbitrary types work too
        - boolean type inputs with non boolean defaults
        - booleans
        - numeric types become casted
        - strings replaced with env value
        - unicode replaced with env value

            uncastable_types
            - lists
            - tuples

Context

    Dict-like proxy for self.config
    - direct access allowed
    - get
    - getattr
    - getitem
    - iter
    - keys
    - update
    - values

    __init__
    - takes optional config arg

Executor

    Collection-driven config concerns
    - hands collection configuration to context
    - hands task specific configuration to context
    - subcollection config works with default tasks

    __init__
    - allows collection and config
    - uses blank config by default

    basic pre/post task functionality
    - call objs play well with context args
    - calls default to empty args always
    - may be call objects specifying args
    - post tasks
    - pre tasks

    execute
    - base case
    - contextualized tasks are given parser context arg
    - default tasks called when no tasks specified
    - kwargs

    deduping_and_chaining
    - chaining is depth first
    - deduping treats different calls to same task differently

        adjacent_hooks
        - deduping
        - no deduping

        non_adjacent_hooks
        - deduping
        - no deduping

        non_adjacent_top_level_tasks
        - deduping
        - no deduping

        adjacent_top_level_tasks
        - deduping
        - no deduping

    returns_return_value_of_specified_task
    - base case
    - with post tasks
    - with pre tasks

    autoprinting
    - defaults to off and no output
    - does not fire on post tasks
    - does not fire on pre tasks
    - prints return value to stdout when on
    - prints return value to stdout when on and in collection

__init__
- dunder version
- dunder version info
- dunder version looks generated from dunder version info

    exposes_bindings
    - argument
    - collection class
    - config class
    - context class
    - ctask decorator
    - exceptions
    - executor
    - failure class
    - filesystemloader
    - local class
    - program
    - pty size function
    - run function
    - runner class
    - runner result
    - task class
    - task decorator

Filesystem loader
- defaults to tasks collection
- exposes discovery start point
- has a default discovery start point
- raises CollectionNotFound if not found
- raises ImportError if found collection cannot be imported
- returns collection object if name found
- searches towards root of filesystem

Loader
- adds module parent dir to sys path
- can load package
- closes opened file object

Argument

    value
    - returns default if not set

    __repr__
    - just aliases dunder str

    set_value
    - allows setting value without casting
    - casts by default

    name
    - returns first name

    __init__
    - can declare positional
    - can set attr name to control name attr
    - default arg is name not names
    - may take name arg
    - may take names list
    - must get at least one name
    - positional is False by default

    value=
    - available as dot raw value
    - transformed appears as dot value with original as raw value
    - untransformed appears as dot value

    nicknames
    - returns rest of names

    'kind' kwarg
    - bool implies default False not None
    - bool implies no value needed
    - defaults to str
    - is optional
    - may validate on set
    - non bool implies value needed

    raw_value
    - is None when no value was actually seen

    takes_value
    - False if kind is bool
    - True by default

    names
    - is normalized to a tuple
    - returns tuple of all names

    __str__
    - does not show nickname parens if no nicknames
    - shows positionalness
    - shows useful info

ParserContext
- may give arg list at init time
- may have a name
- may have aliases

    needs_positional_arg
    - represents whether all positional args have values

    args
    - args dict includes all arg names
    - argument attr names appear in args but not flags
    - exposed as Lexicon
    - exposed as dict

    __deepcopy__
    - includes arguments
    - modifications to copied arguments do not touch originals
    - returns correct copy

    __str__
    - args show as repr
    - repr is str
    - with no args output is simple

    add_arg
    - adds all names to dot flags
    - adds flaglike name to dot flags
    - adds positional args to positional args
    - adds true bools to inverse flags
    - can take Argument instance
    - can take kwargs for single Argument
    - can take name arg
    - inverse flags works right with task driven underscored names
    - positional arg modifications affect args copy
    - positional args empty when none given
    - positional args filled in order
    - raises ValueError on duplicate
    - turns single character names into short flags

    help_tuples
    - case ignored during sorting
    - lowercase wins when values identical otherwise
    - mixed corelike options
    - returns list of help tuples
    - sorts alphabetically by longflag when no shortflag
    - sorts alphabetically by shortflag first
    - sorts heterogenous help output with longflag only options first

    help_for
    - equals sign for long form only
    - kind to placeholder map
    - optional values use brackets
    - raises ValueError for non flag values
    - short form before long form
    - shortflag inputs work too
    - task driven no helpstr
    - task driven with helpstr
    - true default args
    - underscored args
    - vanilla no helpstr
    - vanilla with helpstr

ParseResult
- acts as a list of parsed contexts
- exhibits remainder attribute

Parser
- can take initial and other contexts
- can take initial context
- can take just contexts as non keyword arg
- can take just other contexts
- ignore unknown defaults to False
- raises ValueError for unnamed Contexts in contexts
- raises error for context alias and name clashes
- raises error for context name and alias clashes
- raises error for context name clashes
- takes ignore unknown kwarg

    optional_arg_values
    - no value becomes True not default value
    - not given at all uses default value
    - value given gets preserved normally

        ambiguity_sanity_checks
        - actual other flag
        - flaglike value
        - no ambiguity with flaglike value if option val was given
        - task name
        - unfilled posargs

    task_repetition
    - is happy to handle same task multiple times
    - task args work correctly

    parse_argv
    - always includes initial context if one was given
    - arguments which take values get defaults overridden correctly
    - clones initial context
    - clones noninitial contexts
    - handles multiple boolean flags per context
    - ignore unknown does not mutate rest of argv
    - ignore unknown returns unparsed argv instead
    - inverse bools get set correctly
    - parses sys argv style list of strings
    - raises error if unknown contexts found
    - returned arguments not given contain default values
    - returned context member arguments contain given values
    - returned contexts are in order given
    - returns only contexts mentioned
    - returns remainder
    - unparsed does not share state

        positional_arguments
        - omitted positional arg raises ParseError
        - positional args can still be given as flags
        - positional args eat otherwise valid context names
        - single positional arg

        parsing_errors
        - attached context is None outside contexts
        - attaches context to ParseErrors
        - missing flag values raise ParseError

        equals_signs
        - does not require escaping equals signs in value
        - handles equals style long flags
        - handles equals style short flags

platform

    pty_size
    - calls fcntl with TIOCGWINSZ
    - defaults to 80x24 when stdout not a tty
    - uses default when stdout lacks fileno

Program

    miscellaneous behaviors
    - debug flag activates logging

    run
    - allows explicit task module specification
    - does not seek tasks module if namespace was given
    - expected failure types don't raise exceptions
    - handles task arguments
    - seeks and loads tasks module by default
    - should show context usage on context parse failures
    - should show core usage on core parse failures

    binary
    - defaults to argv when None
    - use binary basename when invoked absolutely
    - uses overridden value when given

    name
    - benefits from binary absolute behavior
    - defaults to capitalized binary when None
    - uses overridden value when given

    execute
    - uses executor class given

    initial_context
    - contains truly core arguments regardless of namespace value
    - non null namespace does not trigger task related args
    - null namespace triggers task related args

    Configuration-related concerns
    - env var prefix can be overridden
    - env vars load with prefix
    - per project config files are loaded
    - per project config files load with explicit ns
    - runtime config file honored
    - tasks dedupe honors configuration

    normalize_argv
    - defaults to sys argv
    - splits a string
    - uses a list unaltered

    run() related CLI flags affect 'run' config values
    - echo
    - hide
    - pty
    - warn only

    __init__
    - default version is unknown
    - env prefix can be overridden
    - env prefix defaults to INVOKE
    - executor class defaults to Executor
    - loader class defaults to FilesystemLoader
    - may specify binary
    - may specify executor class
    - may specify loader class
    - may specify name
    - may specify namespace
    - may specify version

    --help

        per-task
        - complains if given invalid task name
        - dedents correctly
        - dedents correctly for alt docstring style
        - displays docstrings if given
        - exits after printing
        - honors program binary
        - prints help for task only
        - works for unparameterized tasks

        core
        - bundled namspace help includes subcommand listing
        - core help doesn't get mad if loading fails
        - core help option prints core help
        - empty invocation with no default task prints help

    core_args
    - returns core args list

    --list
    - aliases sorted alphabetically
    - default tasks
    - docstrings shown alongside
    - empty collections say no tasks
    - namespacing
    - simple output
    - subcollections sorted in depth order
    - top level tasks listed first

    load_collection
    - complains when default collection not found
    - complains when explicit collection not found
    - uses loader class given

    print_version
    - displays name and version

Local

    pty_and_pty_fallback
    - can be overridden by config
    - can be overridden by kwarg
    - fallback affects result pty value
    - non spurious OSErrors bubble up
    - overridden fallback affects result pty value
    - pty is set to controlling terminal size
    - replaced stdin objects don't explode
    - spurious OSErrors handled gracefully
    - warning only fires once
    - when pty True we use pty fork and os exec

Runner

    echoing
    - enabled via config
    - enabled via kwarg
    - kwarg beats config
    - off by default
    - uses ansi bold

    threading
    - errors within io thread body bubble up

    __init__
    - context instance is required
    - takes a context instance

    warn
    - honors config
    - kwarg beats config

    encoding
    - defaults to encoding method result
    - honors config
    - honors kwarg

    pty
    - honors config
    - kwarg beats config
    - pty defaults to off

    hide
    - honors config
    - kwarg beats config

    output_hiding
    - False hides nothing
    - None hides nothing
    - True hides everything
    - accepts stderr alias for err
    - accepts stdout alias for out
    - both hides everything
    - does not affect capturing
    - err only hides stderr
    - out only hides stdout
    - unknown vals mention value given in error
    - unknown vals raises ValueError

    output_stream_overrides
    - err can be overridden
    - err defaults to sys stderr
    - out can be overridden
    - out defaults to sys stdout
    - pty defaults to sys
    - pty out can be overridden

    failure_handling
    - Failure repr includes stderr
    - Failure repr should present stdout when pty was used
    - fast failures
    - non one return codes still act as failure

    return_value
    - command executed
    - failed attr indicates failure
    - failed attr indicates success
    - ok attr indicates failure
    - ok attr indicates success
    - return code in result
    - stderr attribute contains stderr
    - stdout attribute contains stdout
    - whether pty was used

Task
- equality testing
- has useful repr

    attributes
    - can override name
    - has contextualized flag
    - has default flag
    - name defaults to body name

    callability
    - dunder call wraps body call
    - errors if contextualized and first arg not Context
    - tracks times called
    - wraps body docstring
    - wraps body name

    get_arguments
    - autocreated short flags can be disabled
    - autocreated shortflags don't collide
    - context arguments are not returned
    - early auto shortflags shouldnt lock out real shortflags
    - kinds are preserved
    - optional flag is preserved
    - positional args come first
    - positional flag is preserved
    - shortflags created by default
    - shortflags don't care about positionals
    - turns function signature into Arguments
    - underscores become dashes

ctask
- behaves like task with contextualized True

@task
- allows access to wrapped object
- allows alias specification
- allows annotating args as positional
- allows default specification
- allows multiple aliases
- allows star args as shortcut for pre
- context arguments should not appear in implicit positional list
- disallows ambiguity between star args and pre kwarg
- has autoprint option
- passes in contextualized kwarg
- pre tasks stored directly
- raises ValueError on multiple defaults
- sets arg help
- sets arg kind
- sets name
- sets which args are optional
- when positional arg missing all non default args are positional

======================================================================
ERROR: collection.from_module.load_collection_from_real_module
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/rene/.pyenv/versions/3.5.0/lib/python3.5/unittest/case.py", line 58, in testPartExecutor
    yield
  File "/Users/rene/.pyenv/versions/3.5.0/lib/python3.5/unittest/case.py", line 597, in run
    testMethod()
  File "/Users/rene/used_repos/invoke/.tox/py35/lib/python3.5/site-packages/nose/case.py", line 198, in runTest
    self.test(*self.arg)
  File "/Users/rene/used_repos/invoke/tests/collection.py", line 169, in load_collection_from_real_module
    c = Collection.from_module(my_tasks)
  File "/Users/rene/used_repos/invoke/invoke/collection.py", line 168, in from_module
    ret.tasks = copy.deepcopy(obj.tasks)
  File "/Users/rene/used_repos/invoke/.tox/py35/lib/python3.5/copy.py", line 182, in deepcopy
    y = _reconstruct(x, rv, 1, memo)
  File "/Users/rene/used_repos/invoke/.tox/py35/lib/python3.5/copy.py", line 321, in _reconstruct
    value = deepcopy(value, memo)
  File "/Users/rene/used_repos/invoke/.tox/py35/lib/python3.5/copy.py", line 182, in deepcopy
    y = _reconstruct(x, rv, 1, memo)
  File "/Users/rene/used_repos/invoke/.tox/py35/lib/python3.5/copy.py", line 298, in _reconstruct
    state = deepcopy(state, memo)
  File "/Users/rene/used_repos/invoke/.tox/py35/lib/python3.5/copy.py", line 155, in deepcopy
    y = copier(x, memo)
  File "/Users/rene/used_repos/invoke/.tox/py35/lib/python3.5/copy.py", line 244, in _deepcopy_dict
    y[deepcopy(key, memo)] = deepcopy(value, memo)
  File "/Users/rene/used_repos/invoke/.tox/py35/lib/python3.5/copy.py", line 155, in deepcopy
    y = copier(x, memo)
  File "/Users/rene/used_repos/invoke/.tox/py35/lib/python3.5/copy.py", line 219, in _deepcopy_list
    y.append(deepcopy(a, memo))
  File "/Users/rene/used_repos/invoke/.tox/py35/lib/python3.5/copy.py", line 182, in deepcopy
    y = _reconstruct(x, rv, 1, memo)
  File "/Users/rene/used_repos/invoke/.tox/py35/lib/python3.5/copy.py", line 299, in _reconstruct
    if hasattr(y, '__setstate__'):
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
  File "/Users/rene/used_repos/invoke/invoke/tasks.py", line 339, in __getattr__
    return getattr(self.task, name)
RecursionError: maximum recursion depth exceeded while calling a Python object

Ran 530 tests in 1.741 seconds
FAILED (failures=0, errors=1, skipped=10)

ERROR: InvocationError: '/Users/rene/used_repos/invoke/.tox/py35/bin/spec'
@bitprophet bitprophet modified the milestone: 0.13, 0.12 Dec 22, 2015
@presidento presidento added a commit to presidento/invoke that referenced this issue Jan 2, 2016
@presidento presidento Add missing __deepcopy__ to Call class
Having __getattr__ without __deepcopy__ causes infinite
recursion in Python 3 when you deepcopy that object. A test
is also updated to cause the error fixed in this commit.

Fixes #257

Signed-off-by: Máté Farkas <mate.farkas@balabit.com>
f0308af
@bitprophet bitprophet closed this in #300 Jan 13, 2016
@bitprophet bitprophet added a commit that referenced this issue Jan 13, 2016
@bitprophet bitprophet Changelog re #257, re #300 0ce8b0b
@bitprophet
Member

Rolling into #300, which just got merged

@bitprophet bitprophet reopened this Jan 13, 2016
@bitprophet bitprophet closed this Jan 13, 2016
@rm--
rm-- commented Jan 25, 2016

Tested our task that triggers the problem originally and it works as expected. Thanks a lot!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment