[#106] fix GeneratorList with Python 3 (add __next__)
Credit for this fix goes to @tosher: https://github.com/mwclient/mwclient/issues#issuecomment-154751657 I just figured out exactly what changes his comment suggested, and poked around a bit to figure out what was going on and why they're needed. `GeneratorList` (and things deriving from it, e.g. `Category`) was broken for iteration purposes in Python 3. In Python 3 the iterator protocol requires a `__next__` method, not a `next` method as in Python 2. 8d0650cd renamed `List`'s `next` method to `__next__` and added a small wrapper `next` method to account for this, but did not make the same change for `GeneratorList`. So when you iterate over a `GeneratorList` with Python 3, it winds up calling `List.__next__` (since `GeneratorList` inherits from `List`), not `GeneratorList.next`. So we don't hit the bit that turns the results into mwclient page objects, and just get the raw dicts from the `List` method. We also have to change a couple of direct calls to `List.next` to call `List.__next__` instead. If we don't do this, then when the call originates from a child class, things get messed up, because `List.next` calls `self.__next__` - and that will wind up calling the child class' `__next__`, not `List`'s `__next__`. Confused yet? :)
Loading
Please register or sign in to comment