120 lines
4.5 KiB
Python
120 lines
4.5 KiB
Python
from .models import DISTRIBUTION_INSTALLABLE, DISTRIBUTION_PACKAGE, INSTALLABLE_PLATFORM_SPECS
|
|
|
|
DEFAULT_PACKAGE_RESOURCE_BUTTON_TEXT = "PyPI"
|
|
DEFAULT_PACKAGE_SOURCE_BUTTON_TEXT = "Source"
|
|
|
|
|
|
def package_button_labels(product):
|
|
resource = (getattr(product, "package_resource_button_text", "") or "").strip()
|
|
source = (getattr(product, "package_source_button_text", "") or "").strip()
|
|
return {
|
|
"package_resource_button_text": resource or DEFAULT_PACKAGE_RESOURCE_BUTTON_TEXT,
|
|
"package_source_button_text": source or DEFAULT_PACKAGE_SOURCE_BUTTON_TEXT,
|
|
}
|
|
|
|
|
|
def featured_version(qs):
|
|
ordered = qs.order_by("order", "pk")
|
|
cand = ordered.filter(is_featured_stable=True).first()
|
|
return cand if cand else ordered.first()
|
|
|
|
|
|
def install_specs_from_versions(version_list):
|
|
present = set()
|
|
for ver in version_list:
|
|
for field_name, *_ in INSTALLABLE_PLATFORM_SPECS:
|
|
if ver.has_platform_asset(field_name):
|
|
present.add(field_name)
|
|
return tuple(s for s in INSTALLABLE_PLATFORM_SPECS if s[0] in present)
|
|
|
|
|
|
def build_release_context(distribution, active_versions, product):
|
|
context = {
|
|
"distribution_installable": distribution == DISTRIBUTION_INSTALLABLE,
|
|
"distribution_package": distribution == DISTRIBUTION_PACKAGE,
|
|
"show_releases_section": False,
|
|
"featured_version": None,
|
|
"featured_install_cells": [],
|
|
"show_older_versions_link": False,
|
|
"package_versions": [],
|
|
**package_button_labels(product),
|
|
}
|
|
|
|
if distribution == DISTRIBUTION_INSTALLABLE:
|
|
featured = featured_version(active_versions)
|
|
if (
|
|
featured
|
|
and not featured.has_any_install_asset()
|
|
and not (featured.package_resource_url or "").strip()
|
|
):
|
|
for cand in active_versions.exclude(pk=featured.pk).order_by("order", "pk"):
|
|
if cand.has_any_install_asset() or (cand.package_resource_url or "").strip():
|
|
featured = cand
|
|
break
|
|
context["featured_version"] = featured
|
|
if featured and (
|
|
featured.has_any_install_asset()
|
|
or (featured.package_resource_url or "").strip()
|
|
):
|
|
if featured.has_any_install_asset():
|
|
specs = install_specs_from_versions([featured])
|
|
context["featured_install_cells"] = featured.install_urls_for_specs(specs)
|
|
context["show_releases_section"] = True
|
|
older_list = list(
|
|
active_versions.exclude(pk=featured.pk).order_by("order", "pk")
|
|
if featured
|
|
else active_versions.order_by("order", "pk")
|
|
)
|
|
context["show_older_versions_link"] = len(older_list) > 0
|
|
|
|
elif distribution == DISTRIBUTION_PACKAGE:
|
|
pkg_versions = list(active_versions.order_by("order", "pk"))
|
|
context["package_versions"] = pkg_versions
|
|
context["show_releases_section"] = len(pkg_versions) > 0
|
|
|
|
return context
|
|
|
|
|
|
def build_archive_context(distribution, active_versions, product):
|
|
featured = featured_version(active_versions)
|
|
archive = list(
|
|
active_versions.exclude(pk=featured.pk).order_by("order", "pk")
|
|
if featured
|
|
else active_versions.order_by("order", "pk")
|
|
)
|
|
context = {
|
|
"featured_version": featured,
|
|
"archive_versions": archive,
|
|
**package_button_labels(product),
|
|
}
|
|
|
|
if distribution == DISTRIBUTION_INSTALLABLE:
|
|
specs = install_specs_from_versions(archive)
|
|
context["archive_specs"] = specs
|
|
archive_rows_installable = []
|
|
for ver in archive:
|
|
cells = []
|
|
for field_name, label, icon in specs:
|
|
cells.append(
|
|
{
|
|
"field": field_name,
|
|
"label": label,
|
|
"icon": icon,
|
|
"url": ver.resolve_asset_url(field_name),
|
|
"external": bool((getattr(ver, field_name) or "").strip()),
|
|
}
|
|
)
|
|
archive_rows_installable.append({"version_obj": ver, "cells": cells})
|
|
context["archive_rows_installable"] = archive_rows_installable
|
|
context["archive_rows_package"] = False
|
|
context["distribution_installable"] = True
|
|
context["distribution_package"] = False
|
|
else:
|
|
context["archive_specs"] = ()
|
|
context["archive_rows_installable"] = []
|
|
context["archive_rows_package"] = True
|
|
context["distribution_installable"] = False
|
|
context["distribution_package"] = True
|
|
|
|
return context
|