示例#1
0
 def _iter(self, reload=False):
     """Yield the document's items."""
     if self._itered and not reload:
         msg = "iterating document {}'s loaded items...".format(self)
         log.debug(msg)
         yield from list(self._items)
         return
     log.info("loading document {}'s items...".format(self))
     # Reload the document's item
     self._items = []
     for dirpath, dirnames, filenames in os.walk(self.path):
         for dirname in list(dirnames):
             path = os.path.join(dirpath, dirname, Document.CONFIG)
             if os.path.exists(path):
                 path = os.path.dirname(path)
                 dirnames.remove(dirname)
                 log.trace("skipped embedded document: {}".format(path))
         for filename in filenames:
             path = os.path.join(dirpath, filename)
             try:
                 item = Item(path,
                             root=self.root,
                             document=self,
                             tree=self.tree)
             except DoorstopError:
                 pass  # skip non-item files
             else:
                 self._items.append(item)
                 if reload:
                     item.load(reload=reload)
                 if settings.CACHE_ITEMS and self.tree:
                     self.tree._item_cache[item.uid] = item  # pylint: disable=W0212
                     log.trace("cached item: {}".format(item))
     # Set meta attributes
     self._itered = True
     # Yield items
     yield from list(self._items)