コード例 #1
0
ファイル: packageproc.py プロジェクト: sgrif/repology
def packageset_to_best_by_repo(
        packages: Iterable[Package]) -> Dict[str, Package]:
    state_by_repo: Dict[str, Package] = {}

    for package in packageset_sort_by_version(packages):
        if package.repo not in state_by_repo or (
                PackageStatus.is_ignored(
                    state_by_repo[package.repo].versionclass)
                and not PackageStatus.is_ignored(package.versionclass)):
            state_by_repo[package.repo] = package

    return state_by_repo
コード例 #2
0
def api_v1_package_to_json(package: Package) -> Dict[str, Any]:
    output = {
        field: getattr(package, field)
        for field in (
            'repo',
            'subrepo',
            'name',
            'version',
            #'origversion',
            #'status',
            'maintainers',
            #'category',
            #'comment',
            #'homepage',
            'licenses',
            'downloads') if getattr(package, field)
    }

    # XXX: these tweaks should be implemented in core
    if package.homepage:
        output['www'] = [package.homepage]
    if package.comment:
        output['summary'] = package.comment
    if package.category:
        output['categories'] = [package.category]

    output['status'] = PackageStatus.as_string(package.versionclass)
    output[
        'origversion'] = package.rawversion if package.rawversion != package.version else None

    return output
コード例 #3
0
ファイル: repology-dump.py プロジェクト: palica/repology
def format_package_field(key: str, value: Any) -> str:
    if key == 'versionclass':
        return PackageStatus.as_string(value)
    if key == 'flags':
        return PackageFlags.as_string(value)
    if isinstance(value, dict):
        return str({k: v for k, v in sorted(value.items())})
    return str(value).replace('\n', '\\n')
コード例 #4
0
def packageset_to_best_by_repo(
        packages: Iterable[Package],
        allow_ignored: bool = False) -> Dict[str, Package]:
    state_by_repo: Dict[str, Package] = {}

    for package in packageset_sort_by_version(packages):
        # start with first package
        if package.repo not in state_by_repo:
            state_by_repo[package.repo] = package
            continue

        # replace by non-ignored if needed and possible
        if not allow_ignored and PackageStatus.is_ignored(
                state_by_repo[package.repo].versionclass):
            if not PackageStatus.is_ignored(package.versionclass):
                state_by_repo[package.repo] = package

    return state_by_repo
コード例 #5
0
ファイル: repology-dump.py プロジェクト: pombredanne/repology
def format_package_field(key: str, value: Any) -> str:
    if key == 'versionclass':
        return PackageStatus.as_string(value)
    if key == 'flags':
        return PackageFlags.as_string(value)
    if key == 'links':
        if value:
            return '[' + ', '.join(f'{LinkType.as_string(link_type)}={url}' for link_type, url in value) + ']'
        else:
            return 'None'
    if isinstance(value, dict):
        return str({k: v for k, v in sorted(value.items())})
    return str(value).replace('\n', '\\n')
コード例 #6
0
def packageset_to_best(packages: Iterable[Package],
                       allow_ignored: bool = False) -> Optional[Package]:
    sorted_packages = packageset_sort_by_version(packages)

    if not sorted_packages:
        return None

    # if allowed, return first package regardless of status
    if allow_ignored:
        return sorted_packages[0]

    # otherwise, return first non-ignore package
    for package in sorted_packages:
        if not PackageStatus.is_ignored(package.versionclass):
            return package

    # fallback to first package
    return sorted_packages[0]