]> git.ipfire.org Git - pbs.git/commitdiff
Refactor query to list all packages
authorMichael Tremer <michael.tremer@ipfire.org>
Thu, 26 Oct 2017 16:47:03 +0000 (17:47 +0100)
committerMichael Tremer <michael.tremer@ipfire.org>
Thu, 26 Oct 2017 16:47:03 +0000 (17:47 +0100)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
Makefile.am
po/POTFILES.in
src/buildservice/packages.py
src/templates/packages/index.html [moved from src/templates/packages-list.html with 55% similarity]
src/web/__init__.py
src/web/packages.py

index 7b5d672030a76adff37dc994724f3e41de2d2ad4..0dd77d78d79acfc4a34b7d784fa173c205e93aee 100644 (file)
@@ -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
index b14e27604d3e1129bf3ddc8f9849bdf2eb83ea4d..849e14f27198b5e5f428c79acac0c8cbc74161a4 100644 (file)
@@ -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
index 47dc251326f95b82332e99da03933c9650de327e..e960558e24516d14e71968d97c8e85e582c066ff 100644 (file)
@@ -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 \
similarity index 55%
rename from src/templates/packages-list.html
rename to src/templates/packages/index.html
index 05ee8b8040ef37488b4ede85ef1b2f83dedbf98a..6b8f583db27525fef106c14c56a6ee2b2b974b47 100644 (file)
@@ -1,4 +1,4 @@
-{% extends "base.html" %}
+{% extends "../base.html" %}
 
 {% block title %}{{ _("Package list") }}{% end block %}
 
                <h1>{{ _("Package list") }}</h1>
        </div>
 
-       <div class="row">
-               <div class="span6">
-                       <p>
-                               {{ _("This is an alphabetically ordered list of all packages in the distribution.") }}
-                               {{ _("Click on a link to see further information about the package.") }}
-                       </p>
-               </div>
-
-               <div class="span6">
-                       <div class="btn-group">
-                               <a class="btn dropdown-toggle" data-toggle="dropdown" href="#">
-                                       {{ _("Selection") }}
-                                       <span class="caret"></span>
-                               </a>
-                               <ul class="dropdown-menu">
-                                       <li>
-                                               <a href="?show=broken">{{ _("Show broken packages") }}</a>
-                                       </li>
-                                       <li>
-                                               <a href="?show=all">{{ _("Show all packages") }}</a>
-                                       </li>
-                               </ul>
-                       </div>
-               </div>
-       </div>
+       <p>
+               {{ _("This is an alphabetically ordered list of all packages in the distribution.") }}
+               {{ _("Click on a link to see further information about the package.") }}
+       </p>
 
        <div class="row">
                <div class="span12">
                                                <tr>
                                                        <td colspan="2">
                                                                <a name="{{ letter }}"></a>
-                                                               <h2>{{ letter.upper() }} <small>({{ len(pkgs) }})</small></h2>
+                                                               <h2>{{ letter.upper() }}</h2>
                                                        </td>
                                                </tr>
-                                               {% for pkg, summary in pkgs %}
+                                               {% for pkg in pkgs %}
                                                        <tr>
                                                                <td>
-                                                                       <a href="/package/{{ pkg }}">{{ pkg }}</a>
+                                                                       <a href="/package/{{ pkg.name }}">{{ pkg.name }}</a>
                                                                </td>
                                                                <td>
-                                                                       {{ summary }}
+                                                                       {{ pkg.summary }}
                                                                </td>
                                                        </tr>
                                                {% end %}
index 3069997ae34cdd8395761944d7d539699622e5b3..754b0b5281e0cdb2044245ed83a03bebbb85317e 100644 (file)
@@ -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),
index 4ec12aa86968f421c810e43dbc7d4b9921b95169..88429310b121b4de3b8b3a39b0aae54e3143f836 100644 (file)
@@ -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 "<first char>" --> [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 "<first char>" --> [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