Rather than tracking iteration by storing self.index, you could change this function to a generator by using the yield statement. Something like this would be a little simpler:

```
def iterate_sources(self):
    for source in self.sources:
        yield source
```

Just a suggestion, YMMV :)