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), )
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), )
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), )
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), )
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), )
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), )
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), )
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), )