Пример #1
0
def catalog_search():
    query = flask.request.args.get("query") or ""
    page = int(flask.request.args.get("page") or "1")

    devices_response = api.certifiedmodeldevices(query=query,
                                                 offset=(int(page) - 1) * 20)

    devices = devices_response["objects"]
    total = devices_response["meta"]["total_count"]

    num_pages = math.ceil(total / 20)

    params = flask.request.args.copy()
    params.pop("page", None)

    query_items = []

    for key, valuelist in params.lists():
        for value in valuelist:
            query_items.append(f"{key}={value}")

    return flask.render_template(
        "catalog/search.html",
        devices=devices,
        query=query,
        total=total,
        query_string="&".join(query_items),
        page=page,
        pages=get_pagination_page_array(page, num_pages),
    )
Пример #2
0
def desktop_models():
    query = flask.request.args.get("query") or ""
    page = int(flask.request.args.get("page") or "1")
    level = flask.request.args.get("level") or "Any"
    categories = flask.request.args.getlist("category") or [
        "Desktop",
        "Laptop",
    ]
    releases = flask.request.args.getlist("release")
    vendors = flask.request.args.getlist("vendors")

    if level.lower() == "any":
        level = None

    models_response = api.certifiedmodels(
        level=level,
        category__in=",".join(categories),
        major_release__in=",".join(releases) if releases else None,
        vendor=vendors,
        query=query,
        offset=(int(page) - 1) * 20,
    )
    models = models_response["objects"]
    total = models_response["meta"]["total_count"]

    num_pages = math.ceil(total / 20)

    all_releases = []
    all_vendors = []

    for release in api.certifiedreleases(limit="0")["objects"]:
        if int(release["desktops"]) > 0 or int(release["laptops"]) > 0:
            all_releases.append(release["release"])

    for vendor in api.certifiedmakes(limit="0")["objects"]:
        if int(vendor["desktops"]) > 0 or int(vendor["laptops"]) > 0:
            all_vendors.append(vendor["make"])

    params = flask.request.args.copy()
    params.pop("page", None)
    query_items = []
    for key, valuelist in params.lists():
        for value in valuelist:
            query_items.append(f"{key}={value}")

    return flask.render_template(
        "desktop/models.html",
        models=models,
        query=query,
        level=level,
        categories=categories,
        releases=releases,
        all_releases=sorted(all_releases, reverse=True),
        vendors=vendors,
        all_vendors=sorted(all_vendors),
        total=total,
        query_string="&".join(query_items),
        page=page,
        pages=get_pagination_page_array(page, num_pages),
    )
Пример #3
0
def catalog_component(identifier, subsystem=None):
    page = int(flask.request.args.get("page") or "1")

    devices = api.certifiedmodeldevices(identifier=identifier.replace(
        "---", "/"),
                                        subsystem=subsystem,
                                        limit=1)["objects"]

    if not devices:
        flask.abort(404)

    models_response = api.certifiedmodels(
        device_identifier=identifier,
        device_subsystem=subsystem,
        offset=(int(page) - 1) * 20,
    )
    models = models_response["objects"]
    total = models_response["meta"]["total_count"]
    num_pages = math.ceil(total / 20)

    return flask.render_template(
        "catalog/component.html",
        device=devices[0],
        models=models,
        total=total,
        page=page,
        pages=get_pagination_page_array(page, num_pages),
    )
Пример #4
0
def catalog_component(identifier, subsystem=None):
    page = int(flask.request.args.get("page") or "1")

    devices = api.certifiedmodeldevices(identifier=identifier.replace(
        "---", "/"),
                                        subsystem=subsystem,
                                        limit=0)["objects"]

    if not devices:
        flask.abort(404)

    canonical_ids = [device["canonical_id"] for device in devices]

    # Only get the first 267 canonical_ids, as the URL will be too long
    # otherwise
    models_response = api.certifiedmodels(
        canonical_id__in=",".join(canonical_ids[:267]),
        offset=(int(page) - 1) * 20,
    )
    models = models_response["objects"]
    total = models_response["meta"]["total_count"]
    num_pages = math.ceil(total / 20)

    return flask.render_template(
        "catalog/component.html",
        device=devices[0],
        models=models,
        total=total,
        page=page,
        pages=get_pagination_page_array(page, num_pages),
    )
Пример #5
0
def server_models():
    query = flask.request.args.get("query") or ""
    page = int(flask.request.args.get("page") or "1")
    releases = flask.request.args.getlist("release")
    vendors = flask.request.args.getlist("vendors")

    models_response = api.certifiedmodels(
        category="Server",
        major_release__in=",".join(releases) if releases else None,
        vendor=vendors,
        query=query,
        offset=(int(page) - 1) * 20,
    )
    models = models_response["objects"]
    total = models_response["meta"]["total_count"]

    num_pages = math.ceil(total / 20)

    vendor_data = api.vendorsummaries_server()["vendors"]

    all_releases = []
    all_vendors = []

    for vendor_datum in vendor_data:
        all_vendors.append(vendor_datum["vendor"])
        for release in vendor_datum["releases"]:
            if release not in all_releases:
                all_releases.append(release)

    params = flask.request.args.copy()
    params.pop("page", None)
    query_items = []
    for key, valuelist in params.lists():
        for value in valuelist:
            query_items.append(f"{key}={value}")

    return flask.render_template(
        "server/models.html",
        models=models,
        query=query,
        releases=releases,
        all_releases=sorted(all_releases, reverse=True),
        vendors=vendors,
        all_vendors=sorted(all_vendors),
        total=total,
        page=page,
        query_string="&".join(query_items),
        pages=get_pagination_page_array(page, num_pages),
    )
Пример #6
0
def components():
    query = flask.request.args.get("query") or ""
    page = int(flask.request.args.get("page") or "1")
    canonical_id = flask.request.args.get("canonical_id")
    vendors = flask.request.args.getlist("vendor")

    components_response = api.componentsummaries(
        make=vendors,
        query=query,
        offset=(int(page) - 1) * 20,
        canonical_id=canonical_id,
    )
    components = components_response["objects"]
    total = components_response["meta"]["total_count"]

    num_pages = math.ceil(total / 20)

    all_vendors = ["AMD", "Lenovo", "nVidia"]

    params = flask.request.args.copy()
    params.pop("page", None)
    query_items = []
    for key, valuelist in params.lists():
        for value in valuelist:
            query_items.append(f"{key}={value}")

    return flask.render_template(
        "components/index.html",
        components=components,
        query=query,
        vendors=vendors,
        all_vendors=sorted(all_vendors),
        total=total,
        query_string="&".join(query_items),
        page=page,
        pages=get_pagination_page_array(page, num_pages),
    )
Пример #7
0
def models():
    """
    NOTE: if/when the model list pages are redesigned, consider collapsing all
    of the /foo/models paths to a generalized /models handler that uses only a
    generalized models.html template.
    """
    query = flask.request.args.get("query") or ""
    page = int(flask.request.args.get("page") or "1")
    level = flask.request.args.get("level") or "Any"
    categories = flask.request.args.getlist("category") or [
        "Desktop",
        "Laptop",
        "Server",
        "Server SoC",
        "Ubuntu Core",
    ]
    releases = flask.request.args.getlist("release")
    vendors = flask.request.args.getlist("vendors")

    if level.lower() == "any":
        level = None

    models_response = api.certifiedmodels(
        level=level,
        category__in=",".join(categories),
        major_release__in=",".join(releases) if releases else None,
        vendor=vendors,
        query=query,
        offset=(int(page) - 1) * 20,
    )
    models = models_response["objects"]
    total = models_response["meta"]["total_count"]

    num_pages = math.ceil(total / 20)

    all_categories = [
        "Desktop",
        "Laptop",
        "Server",
        "Server SoC",
        "Ubuntu Core",
    ]
    all_releases = [
        release["release"]
        for release in api.certifiedreleases(limit="0")["objects"]
    ]
    all_vendors = [
        vendor["make"] for vendor in api.certifiedmakes(limit="0")["objects"]
    ]

    params = flask.request.args.copy()
    params.pop("page", None)
    query_items = []
    for key, valuelist in params.lists():
        for value in valuelist:
            query_items.append(f"{key}={value}")

    return flask.render_template(
        "models.html",
        models=models,
        query=query,
        level=level,
        categories=categories,
        all_categories=all_categories,
        releases=releases,
        all_releases=sorted(all_releases, reverse=True),
        vendors=vendors,
        all_vendors=sorted(all_vendors),
        total=total,
        query_string="&".join(query_items),
        page=page,
        pages=get_pagination_page_array(page, num_pages),
    )
Пример #8
0
def make(make):
    meta = api.certifiedmakes(limit="0", make__iexact=make)["meta"]
    if meta["total_count"] == 0:
        flask.abort(404)

    query = flask.request.args.get("query") or ""
    page = int(flask.request.args.get("page") or "1")
    level = flask.request.args.get("level") or "Any"
    categories = flask.request.args.getlist("category") or [
        "Desktop",
        "Laptop",
        "Server",
        "Server SoC",
        "Ubuntu Core",
    ]
    releases = flask.request.args.getlist("release")

    if level.lower() == "any":
        level = None

    models_response = api.certifiedmodels(
        level=level,
        category__in=",".join(categories),
        major_release__in=",".join(releases) if releases else None,
        make__iexact=make,
        query=query,
        offset=(int(page) - 1) * 20,
    )
    models = models_response["objects"]
    total = models_response["meta"]["total_count"]

    num_pages = math.ceil(total / 20)

    all_categories = [
        "Desktop",
        "Laptop",
        "Server",
        "Server SoC",
        "Ubuntu Core",
    ]
    all_releases = [
        release["release"]
        for release in api.certifiedreleases(limit="0")["objects"]
    ]

    params = flask.request.args.copy()
    params.pop("page", None)
    query_items = []
    for key, valuelist in params.lists():
        for value in valuelist:
            query_items.append(f"{key}={value}")

    return flask.render_template(
        "models.html",
        make=make,
        models=models,
        query=query,
        level=level,
        categories=categories,
        all_categories=all_categories,
        releases=releases,
        all_releases=sorted(all_releases, reverse=True),
        total=total,
        query_string="&".join(query_items),
        page=page,
        pages=get_pagination_page_array(page, num_pages),
    )