From: Michael Tremer Date: Thu, 26 Oct 2017 16:47:03 +0000 (+0100) Subject: Refactor query to list all packages X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b5800237d65423eb2ad328c2a4847ce0b564d349;p=pbs.git Refactor query to list all packages Signed-off-by: Michael Tremer --- diff --git a/Makefile.am b/Makefile.am index 7b5d6720..0dd77d78 100644 --- a/Makefile.am +++ b/Makefile.am @@ -190,7 +190,6 @@ dist_templates_DATA = \ src/templates/package-detail.html \ src/templates/package-detail-list.html \ src/templates/package-properties.html \ - src/templates/packages-list.html \ src/templates/queue.html \ src/templates/register-activation-fail.html \ src/templates/register-activation-success.html \ @@ -313,6 +312,7 @@ templates_modules_selectdir = $(templates_modulesdir)/select dist_templates_packages_DATA = \ src/templates/packages/changelog.html \ + src/templates/packages/index.html \ src/templates/packages/view-file.html templates_packagesdir = $(templatesdir)/packages diff --git a/po/POTFILES.in b/po/POTFILES.in index b14e2760..849e14f2 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -127,7 +127,7 @@ src/templates/package-properties.html src/templates/packages/builds/scratch.html src/templates/packages/builds/times.html src/templates/packages/changelog.html -src/templates/packages-list.html +src/templates/packages/index.html src/templates/packages/view-file.html src/templates/queue.html src/templates/register-activation-fail.html diff --git a/src/buildservice/packages.py b/src/buildservice/packages.py index 47dc2513..e960558e 100644 --- a/src/buildservice/packages.py +++ b/src/buildservice/packages.py @@ -35,6 +35,17 @@ class Packages(base.Object): return self._get_package("SELECT * FROM packages \ WHERE id = %s", pkg_id) + def get_list(self): + """ + Returns a list with all package names and the summary line + that have at one time been part of the distribution + """ + res = self.db.query("SELECT DISTINCT packages.name AS name, packages.summary AS summary FROM builds \ + LEFT JOIN packages ON builds.pkg_id = packages.id \ + WHERE builds.type = %s AND builds.state != %s", "release", "obsolete") + + return res + def get_all_names(self, user=None, states=None): query = "SELECT DISTINCT packages.name AS name, summary FROM packages \ JOIN builds ON builds.pkg_id = packages.id \ diff --git a/src/templates/packages-list.html b/src/templates/packages/index.html similarity index 55% rename from src/templates/packages-list.html rename to src/templates/packages/index.html index 05ee8b80..6b8f583d 100644 --- a/src/templates/packages-list.html +++ b/src/templates/packages/index.html @@ -1,4 +1,4 @@ -{% extends "base.html" %} +{% extends "../base.html" %} {% block title %}{{ _("Package list") }}{% end block %} @@ -17,31 +17,10 @@

{{ _("Package list") }}

-
-
-

- {{ _("This is an alphabetically ordered list of all packages in the distribution.") }} - {{ _("Click on a link to see further information about the package.") }} -

-
- - -
+

+ {{ _("This is an alphabetically ordered list of all packages in the distribution.") }} + {{ _("Click on a link to see further information about the package.") }} +

@@ -67,16 +46,16 @@ -

{{ letter.upper() }} ({{ len(pkgs) }})

+

{{ letter.upper() }}

- {% for pkg, summary in pkgs %} + {% for pkg in pkgs %} - {{ pkg }} + {{ pkg.name }} - {{ summary }} + {{ pkg.summary }} {% end %} diff --git a/src/web/__init__.py b/src/web/__init__.py index 3069997a..754b0b52 100644 --- a/src/web/__init__.py +++ b/src/web/__init__.py @@ -131,7 +131,7 @@ class Application(tornado.web.Application): (r"/profile/builds", users.UsersBuildsHandler), # Packages - (r"/packages", packages.PackageListHandler), + (r"/packages", packages.IndexHandler), (r"/package/([\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12})", packages.PackageDetailHandler), (r"/package/([\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12})/download(.*)", packages.PackageFileDownloadHandler), (r"/package/([\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12})/view(.*)", packages.PackageFileViewHandler), diff --git a/src/web/packages.py b/src/web/packages.py index 4ec12aa8..88429310 100644 --- a/src/web/packages.py +++ b/src/web/packages.py @@ -8,44 +8,30 @@ from . import base from ..constants import BUFFER_SIZE -class PackageIDDetailHandler(base.BaseHandler): - def get(self, id): - package = self.packages.get_by_id(id) - if not package: - return tornado.web.HTTPError(404, "Package not found: %s" % id) - - self.render("package-detail.html", package=package) - - -class PackageListHandler(base.BaseHandler): +class IndexHandler(base.BaseHandler): def get(self): + # Sort all packages in an array like "" --> [packages, ...] + # to print them in a table for each letter of the alphabet. packages = {} - show = self.get_argument("show", None) - if show == "all": - states = None - elif show == "obsoletes": - states = ["obsolete"] - elif show == "broken": - states = ["broken"] - else: - states = ["building", "stable", "testing"] + for pkg in self.backend.packages.get_list(): + c = pkg.name[0].lower() - # Get all packages that fulfill the required parameters. - pkgs = self.backend.packages.get_all_names( - user=self.current_user, states=states) + try: + packages[c].append(pkg) + except KeyError: + packages[c] = [pkg] - # Sort all packages in an array like "" --> [packages, ...] - # to print them in a table for each letter of the alphabet. - for pkg in pkgs: - c = pkg[0][0].lower() + self.render("packages/index.html", packages=packages) - if not packages.has_key(c): - packages[c] = [] - packages[c].append(pkg) +class PackageIDDetailHandler(base.BaseHandler): + def get(self, id): + package = self.packages.get_by_id(id) + if not package: + return tornado.web.HTTPError(404, "Package not found: %s" % id) - self.render("packages-list.html", packages=packages) + self.render("package-detail.html", package=package) class PackageNameHandler(base.BaseHandler): @@ -90,6 +76,7 @@ class PackageChangelogHandler(base.BaseHandler): limit = self.get_argument("limit", 10) try: limit = int(limit) + except ValueError: limit = 10