def index(request): project_ids = [ r[0] for r in ( request.db.query(Project.id) .order_by(Project.zscore.desc().nullslast(), func.random()) .limit(5) .all() ) ] release_a = aliased( Release, request.db.query(Release) .distinct(Release.project_id) .filter(Release.project_id.in_(project_ids)) .order_by( Release.project_id, Release.is_prerelease.nullslast(), Release._pypi_ordering.desc(), ) .subquery(), ) trending_projects = ( request.db.query(release_a) .options(joinedload(release_a.project)) .order_by(func.array_idx(project_ids, release_a.project_id)) .all() ) latest_releases = ( request.db.query(Release) .options(joinedload(Release.project)) .order_by(Release.created.desc()) .limit(5) .all() ) counts = dict( request.db.query(RowCount.table_name, RowCount.count) .filter( RowCount.table_name.in_( [ Project.__tablename__, Release.__tablename__, File.__tablename__, User.__tablename__, ] ) ) .all() ) return { "latest_releases": latest_releases, "trending_projects": trending_projects, "num_projects": counts.get(Project.__tablename__, 0), "num_releases": counts.get(Release.__tablename__, 0), "num_files": counts.get(File.__tablename__, 0), "num_users": counts.get(User.__tablename__, 0), }
def index(request): project_names = [ r[0] for r in ( request.db.query(File.name) .group_by(File.name) .order_by(func.sum(File.downloads).desc()) .limit(5) .all()) ] release_a = aliased( Release, request.db.query(Release) .distinct(Release.name) .filter(Release.name.in_(project_names)) .order_by(Release.name, Release._pypi_ordering.desc()) .subquery(), ) top_projects = ( request.db.query(release_a) .options(joinedload(release_a.project), joinedload(release_a.uploader)) .order_by(func.array_idx(project_names, release_a.name)) .all() ) latest_releases = ( request.db.query(Release) .options(joinedload(Release.project), joinedload(Release.uploader)) .order_by(Release.created.desc()) .limit(5) .all() ) counts = dict( request.db.query(RowCount.table_name, RowCount.count) .filter( RowCount.table_name.in_([ Project.__tablename__, Release.__tablename__, File.__tablename__, User.__tablename__, ])) .all() ) return { "latest_releases": latest_releases, "top_projects": top_projects, "num_projects": counts.get(Project.__tablename__, 0), "num_releases": counts.get(Release.__tablename__, 0), "num_files": counts.get(File.__tablename__, 0), "num_users": counts.get(User.__tablename__, 0), }