You may want to use `self.objects` here - it does all the magic with unrestricted querying / unrestricted traversing / progress logging:

```python
query = {'object_provides': IShopRoot.__identifier__}
msg = 'Remove IShopRoot from objects providing it'
for obj in self.objects(query, msg):
    noLongerProvides(obj, IShopRoot)
    catalog.reindexObject(obj, idxs=['object_provides'])
```
See https://github.com/4teamwork/ftw.upgrade#updating-objects-with-progress-logging