def _model_tree_iteration(self, model, visited, context): model = IModel(model) if model in visited: self.log('Skiping already validated model: %r', model) return visited.append(model) yield self._validate_model(model, context) if IQueryModel.providedBy(model): querymodel = yield model.query_items(offset=0, limit=10) items = yield querymodel.fetch_items() else: try: items = yield model.fetch_items() except NotSupported: self.info('Not iteration further down the model %r because ' 'it doesnt support fetching items', model) return for item in items: try: submodel = yield item.fetch() except Unauthorized: continue if IModel.providedBy(submodel): subcontext = context.descend(submodel) yield self._model_tree_iteration(submodel, visited, subcontext)
def _model_tree_iteration(self, model, visited, context): model = IModel(model) if model in visited: self.log('Skiping already validated model: %r', model) return visited.append(model) yield self._validate_model(model, context) items = yield model.fetch_items() for item in items: submodel = yield item.fetch() if IModel.providedBy(submodel): subcontext = context.descend(submodel) yield self._model_tree_iteration(submodel, visited, subcontext)