code: def iter_widgets(self, file=None, place=None):
          '''
          Iterate registered widgets, optionally matching given criteria.
  
          :param file: optional file object will be passed to widgets' filter
                       functions.
          :type file: browsepy.file.Node or None
          :param place: optional template place hint.
          :type place: str
          :yields: widget instances
          :ytype: object
          '''
          for filter, dynamic, cwidget in self._widgets:
              try:
                  if file and filter and not filter(file):
                      continue
              except BaseException as e:
                  # Exception is handled  as this method execution is deffered,
                  # making hard to debug for plugin developers.
                  warnings.warn(
                      'Plugin action filtering failed with error: %s' % e,
                      RuntimeWarning
                      )
                  continue
              if place and place != cwidget.place:
                  continue
              if file and dynamic:
                  cwidget = self._resolve_widget(file, cwidget)
              yield cwidgef iter_widgets(self, file=None, place=None):
          '''
          Iterate registered widgets, optionally matching given criteria.
  
          :param file: optional file object will be passed to widgets' filter
                       functions.
          :type file: browsepy.file.Node or None
          :param place: optional template place hint.
          :type place: str
          :yields: widget instances
          :ytype: object
          '''
          for filter, dynamic, cwidget in self._widgets:
              try:
                  if file and filter and not filter(file):
                      continue
              except BaseException as e:
                  # Exception is handled  as this method execution is deffered,
                  # making hard to debug for plugin developers.
                  warnings.warn(
                      'Plugin action filtering failed with error: %s' % e,
                      RuntimeWarning
                      )
                  continue
              if place and place != cwidget.place:
                  continue
              if file and dynamic:
                  cwidget = self._resolve_widget(file, cwidget)
              yield cwidget
docs: Iterate registered widgets, optionally matching given criteria.
  
          :param file: optional file object will be passed to widgets' filter
                       functions.
          :type file: browsepy.file.Node or None
          :param place: optional template place hint.
          :type place: str
          :yields: widget instances
          :ytype: object