def METHOD_NAME(self, path: str, factory: PackageFactory) -> Iterable[PackageMaker]:
    for pkgpath_abs in _iter_directories(path):
        pkgpath_rel = os.path.relpath(pkgpath_abs, path)
        with factory.begin(pkgpath_rel) as pkg:
            manifests = [filename for filename in os.listdir(pkgpath_abs) if filename.endswith('.yaml')]
            for manifest in manifests:
                try:
                    with open(os.path.join(pkgpath_abs, manifest), 'r') as fd:
                        manifest_data = yaml.safe_load(fd)
                except UnicodeDecodeError:
                    pkg.log(f'failed to decode {manifest}, probably UTF-16 garbage', Logger.ERROR)
                    continue
                except yaml.MarkedYAMLError as e:
                    if e.problem_mark:
                        pkg.log(f'YAML error in {manifest} at line {e.problem_mark.line}: {e.problem}', Logger.ERROR)
                    else:
                        pkg.log(f'YAML error in {manifest}: {e.problem}', Logger.ERROR)
                    continue
                _parse_manifest(manifest_data, pkg)
            # skip manifests/ at the left and version directory at the right
            relevant_path = '/'.join(pkgpath_rel.split('/')[1:-1])
            pkg.add_name(relevant_path, NameType.WINGET_PATH)
            pkg.set_extra_field('path', pkgpath_rel)
            if not pkg.version:
                pkg.log('could not parse required information from all manifests, skipping', Logger.ERROR)
            else:
                yield pkg