'Return an iterator over widget descriptions accessible from
`package`.'

def iter_widget_descriptions(self, package, category_name=None, distribution=None):

    package = asmodule(package)
    for path in package.__path__:
        for (_, mod_name, ispkg) in pkgutil.iter_modules([path]):
            if ispkg:
                continue
            name = ((package.__name__ + '.') + mod_name)
            source_path = os.path.join(path, (mod_name + '.py'))
            desc = None
            if self.cache_can_ignore(source_path, distribution):
                log.info('Ignoring    %r.', source_path)
                continue
            if self.cache_has_valid_entry(source_path, distribution):
                desc = self.cache_get(source_path).description
            if (desc is None):
                try:
                    module = asmodule(name)
                except ImportError:
                    log.info('Could    not    import    %r.', name, exc_info=True)
                    continue
                except Exception:
                    log.warning('Error    while    importing    %r.', name, exc_info=True)
                    continue
                try:
                    desc = self.widget_description(module, category_name=category_name, distribution=distribution)
                except WidgetSpecificationError:
                    self.cache_log_error(source_path, WidgetSpecificationError, distribution)
                    continue
                except Exception:
                    log.warning('Problem    parsing    %r', name, exc_info=True)
                    continue
            (yield desc)
            self.cache_insert(source_path, os.stat(source_path).st_mtime, desc, distribution)
