def projects(bound: Optional[str] = None) -> Response: # process search filterinfo = MetapackagesFilterInfo() filterinfo.parse_flask_args() request = filterinfo.get_request() request.set_bound(bound) # get packages def get_packages( request: MetapackageRequest ) -> Tuple[Dict[str, Dict[str, Any]], List[PackageDataSummarizable]]: metapackages = get_db().query_metapackages( **request.__dict__, limit=config['METAPACKAGES_PER_PAGE'], ) packages = [ PackageDataSummarizable(**item) for item in get_db().get_metapackages_packages( list(metapackages.keys()), summarizable=True) ] return metapackages, packages metapackages, packages = get_packages(request) # on empty result, fallback to show first, last set of results if not packages: request = filterinfo.get_request() if bound and bound.startswith('..'): request.require_name_to(None) metapackages, packages = get_packages(request) firstname, lastname = get_packages_name_range(packages) metapackagedata = packages_to_summary_items(packages, filterinfo.get_repo(), filterinfo.get_maintainer()) return flask.render_template('projects.html', firstname=firstname, lastname=lastname, search=filterinfo.get_dict(), advanced=filterinfo.is_advanced(), metapackages=metapackages, metapackagedata=metapackagedata, repo=filterinfo.get_repo(), maintainer=filterinfo.get_maintainer())
def api_v1_projects(bound: Optional[str] = None) -> Any: filterinfo = MetapackagesFilterInfo() filterinfo.parse_flask_args() request = filterinfo.get_request() request.set_bound(bound) metapackages = get_db().query_metapackages( **request.__dict__, limit=config['METAPACKAGES_PER_PAGE']) packages = get_db().get_metapackages_packages(list(metapackages.keys())) metapackages = packages_to_metapackages(packages) metapackages = { metapackage_name: [api_v1_package_to_json(package) for package in packageset] for metapackage_name, packageset in metapackages.items() } return (dump_json(metapackages), {'Content-type': 'application/json'})