Right now, when you recursively call _iterate_on_dir, you are just creating a generator object, not iterating it.
Correction: self._iterate_on_dir(full_path)
should become:
for thing in self._iterate_on_dir(full_path):
yield thing
Python 3, :
yield from self._iterate_on_dir(full_path)