[snapshot/master] Make list of binary packages browseable as well
---
web/app/snapshot/controllers/package.py | 50 +++++++++++++-------
web/app/snapshot/controllers/root.py | 1 +
web/app/snapshot/model/snapshotmodel.py | 18 ++++---
web/app/snapshot/public/robots.txt | 1 +
.../templates/package-binary-list-packages.mako | 13 +++++
web/app/snapshot/templates/root.mako | 10 ++++-
6 files changed, 66 insertions(+), 27 deletions(-)
create mode 100644 web/app/snapshot/templates/package-binary-list-packages.mako
diff --git a/web/app/snapshot/controllers/package.py b/web/app/snapshot/controllers/package.py
index b9e86c7..f124514 100644
--- a/web/app/snapshot/controllers/package.py
+++ b/web/app/snapshot/controllers/package.py
@@ -27,30 +27,32 @@ class PackageController(BaseController):
if not self.db is None:
self.db.close()
- def _make_crumbs_base(self):
+ def _build_crumbs(self, pkg=None, version=None, start=None, is_binary=False):
crumbs = []
url = urllib.quote(request.environ.get('SCRIPT_NAME')) + "/"
crumbs.append( { 'url': url, 'name': 'snapshot.debian.org', 'sep': '|' });
- return (url, crumbs)
-
- def _build_crumbs(self, srcpkg=None, version=None, start=None):
- (url, crumbs) = self._make_crumbs_base()
- crumbs.append( { 'url': None, 'name': 'source package:', 'sep': '' });
+ if is_binary:
+ crumbs.append( { 'url': None, 'name': 'binary package:', 'sep': '' });
+ else:
+ crumbs.append( { 'url': None, 'name': 'source package:', 'sep': '' });
if not start:
- if srcpkg.startswith('lib') and len(srcpkg) >= 4:
- start = srcpkg[0:4]
+ if pkg.startswith('lib') and len(pkg) >= 4:
+ start = pkg[0:4]
else:
- start = srcpkg[0:1]
+ start = pkg[0:1]
- url += 'package/'
+ if is_binary:
+ url += 'binary/'
+ else:
+ url += 'package/'
crumbs.append( { 'url': url + '?cat=%s'%urllib.quote(start), 'name': start+'*' } )
- if not srcpkg is None:
- url += urllib.quote(srcpkg) + '/'
- crumbs.append( { 'url': url, 'name': srcpkg });
+ if not pkg is None:
+ url += urllib.quote(pkg) + '/'
+ crumbs.append( { 'url': url, 'name': pkg });
if version:
url += urllib.quote(version) + '/'
@@ -160,6 +162,22 @@ class PackageController(BaseController):
if 'bin' in request.params:
url = url_quote(request.params['bin'] + "/")
return redirect_to(url)
+ elif 'cat' in request.params:
+ try:
+ #etag_cache( g.shm.packages_get_etag(self._db()) )
+ set_expires(int(config['app_conf']['expires.package.root_cat']))
+
+ start = request.params['cat']
+ pkgs = g.shm.packages_get_name_starts_with(self._db(), start, get_binary=True)
+ if pkgs is None:
+ abort(404, 'No binary packages in this category.')
+ c.start = start
+ c.packages = link_quote_array(pkgs)
+ c.breadcrumbs = self._build_crumbs(start=start, is_binary=True)
+ c.title = '%s*'%(start)
+ return render('/package-binary-list-packages.mako')
+ finally:
+ self._db_close()
else:
return redirect_to("../")
@@ -190,13 +208,9 @@ class PackageController(BaseController):
b['escaped_name'] = self._attribute_escape(b['name'])
b['escaped_version'] = self._attribute_escape(b['version'])
- url, crumbs = self._make_crumbs_base()
- crumbs.append( { 'url': None, 'name': 'binary package:', 'sep': '' });
- crumbs.append( { 'url': None, 'name': binary });
-
c.binary = binary
c.binaryversions = binaryversions
- c.breadcrumbs = crumbs
+ c.breadcrumbs = self._build_crumbs(binary, is_binary=True)
c.title = binary
return render('/package-binary.mako')
finally:
diff --git a/web/app/snapshot/controllers/root.py b/web/app/snapshot/controllers/root.py
index 1737ebe..9d90007 100644
--- a/web/app/snapshot/controllers/root.py
+++ b/web/app/snapshot/controllers/root.py
@@ -17,6 +17,7 @@ class RootController(BaseController):
db = DBInstance(g.pool)
c.names = link_quote_array(g.shm.archives_get_list(db))
c.srcstarts = link_quote_array(g.shm.packages_get_name_starts(db))
+ c.binstarts = link_quote_array(g.shm.packages_get_name_starts(db, get_binary=True))
set_expires(int(config['app_conf']['expires.root']))
return render('/root.mako')
finally:
diff --git a/web/app/snapshot/model/snapshotmodel.py b/web/app/snapshot/model/snapshotmodel.py
index 20823b4..07205e2 100644
--- a/web/app/snapshot/model/snapshotmodel.py
+++ b/web/app/snapshot/model/snapshotmodel.py
@@ -322,22 +322,24 @@ class SnapshotModel:
{ 'hash': hash } )
return rows
- @beaker_cache(expire=600, cache_response=False, type='memory', key=None)
- def packages_get_name_starts(self, db):
- rows = db.query("""SELECT DISTINCT substring( name FROM 1 FOR 1 ) AS start FROM srcpkg
+ @beaker_cache(expire=600, cache_response=False, type='memory', key='get_binary')
+ def packages_get_name_starts(self, db, get_binary=False):
+ table = ('srcpkg', 'binpkg')[get_binary]
+ rows = db.query("""SELECT DISTINCT substring( name FROM 1 FOR 1 ) AS start FROM """+table+"""
UNION ALL
- SELECT DISTINCT substring( name FROM 1 FOR 4 ) AS start FROM srcpkg WHERE name LIKE 'lib_%%'
+ SELECT DISTINCT substring( name FROM 1 FOR 4 ) AS start FROM """+table+""" WHERE name LIKE 'lib_%%'
ORDER BY start""")
return map(lambda x: x['start'], rows)
- def packages_get_name_starts_with(self, db, start):
- if not start in self.packages_get_name_starts(db):
+ def packages_get_name_starts_with(self, db, start, get_binary=False):
+ if not start in self.packages_get_name_starts(db, get_binary):
return None
+ table = ('srcpkg', 'binpkg')[get_binary]
if start == "l":
- rows = db.query("""SELECT DISTINCT name FROM srcpkg WHERE name LIKE %(start)s AND NOT (name LIKE 'lib_%%') ORDER BY name""",
+ rows = db.query("""SELECT DISTINCT name FROM """+table+""" WHERE name LIKE %(start)s AND NOT (name LIKE 'lib_%%') ORDER BY name""",
{'start': start+"%" })
else:
- rows = db.query("""SELECT DISTINCT name FROM srcpkg WHERE name LIKE %(start)s ORDER BY name""",
+ rows = db.query("""SELECT DISTINCT name FROM """+table+""" WHERE name LIKE %(start)s ORDER BY name""",
{'start': start+"%" })
return map(lambda x: x['name'], rows)
diff --git a/web/app/snapshot/public/robots.txt b/web/app/snapshot/public/robots.txt
index d736b20..a837008 100644
--- a/web/app/snapshot/public/robots.txt
+++ b/web/app/snapshot/public/robots.txt
@@ -1,4 +1,5 @@
User-agent: *
Disallow: /archive/*
+Disallow: /binary/*
Disallow: /package/*
diff --git a/web/app/snapshot/templates/package-binary-list-packages.mako b/web/app/snapshot/templates/package-binary-list-packages.mako
new file mode 100644
index 0000000..4bd2b55
--- /dev/null
+++ b/web/app/snapshot/templates/package-binary-list-packages.mako
@@ -0,0 +1,13 @@
+<%inherit file="/page.mako" />
+
+<h1>Binary packages ${c.start}*</h1>
+
+<p>
+%for pkg in c.packages:
+<a href="${pkg['quoted']}/">${pkg['raw']}</a><br />
+%endfor
+</p>
+
+## vim:syn=html
+## vim:set ts=4:
+## vim:set shiftwidth=4:
diff --git a/web/app/snapshot/templates/root.mako b/web/app/snapshot/templates/root.mako
index 2dc1f4b..6c02196 100644
--- a/web/app/snapshot/templates/root.mako
+++ b/web/app/snapshot/templates/root.mako
@@ -16,6 +16,8 @@
<h1>Packages</h1>
+<h2>source packages:</h2>
+
Search in the index of source packages:<br />
<ul class="inlineList">
%for letter in c.srcstarts:
@@ -27,7 +29,13 @@ Search in the index of source packages:<br />
<p>Or enter a <strong>source</strong> package name directly: <input name="src" /> <input type="submit" value="Submit" /></p>
</form>
-<h2>Binary packages</h2>
+<h2>binary packages:</h2>
+
+<ul class="inlineList">
+%for letter in c.binstarts:
+ <li><a href="binary/?cat=${letter['quoted']}">${letter['raw']}</a></li>
+%endfor
+</ul>
<form action="binary/">
<p>Search for a <strong>binary</strong> package name: <input name="bin" /> <input type="submit" value="Submit" /></p>
--
1.5.6.5
Reply to: