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 \
dist_templates_packages_DATA = \
src/templates/packages/changelog.html \
+ src/templates/packages/index.html \
src/templates/packages/view-file.html
templates_packagesdir = $(templatesdir)/packages
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
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 \
-{% 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 %}
(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),
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):
limit = self.get_argument("limit", 10)
try:
limit = int(limit)
+
except ValueError:
limit = 10