summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan McGee <dan@archlinux.org>2012-02-02 09:36:29 -0600
committerDan McGee <dan@archlinux.org>2012-02-02 09:36:29 -0600
commit1f18484cae88e5553caa5fd593ef31ad458adb25 (patch)
tree63ab86a94bfcb6400015c5c9f69d23c26719e352
parent07f74a87dd77edfff96e18964643eab9bd6ea81d (diff)
Extract split_package_details() method
This is never currently called directly as a view method, but is used by the normal package details view as a fallback if a package cannot be located. This also fixes an issue where looking up a package in a repo it is not in returns the split details page for one package, which is incorrect behavior. Signed-off-by: Dan McGee <dan@archlinux.org>
-rw-r--r--packages/views/__init__.py40
1 files changed, 23 insertions, 17 deletions
diff --git a/packages/views/__init__.py b/packages/views/__init__.py
index 5be4833e..63942474 100644
--- a/packages/views/__init__.py
+++ b/packages/views/__init__.py
@@ -103,6 +103,28 @@ def update(request):
messages.error(request, "Are you trying to adopt or disown?")
return redirect('/packages/')
+def split_package_details(request, name='', repo='', arch=''):
+ arch = get_object_or_404(Arch, name=arch)
+ arches = [ arch ]
+ arches.extend(Arch.objects.filter(agnostic=True))
+ repo = get_object_or_404(Repo, name__iexact=repo)
+ pkgs = Package.objects.normal().filter(pkgbase=name,
+ repo__testing=repo.testing, repo__staging=repo.staging,
+ arch__in=arches).order_by('pkgname')
+ if len(pkgs) == 0:
+ raise Http404
+ # we have packages, but ensure at least one is in the given repo
+ if not any(True for pkg in pkgs if pkg.repo == repo):
+ raise Http404
+ context = {
+ 'list_title': 'Split Package Details',
+ 'name': name,
+ 'arch': arch,
+ 'packages': pkgs,
+ }
+ return direct_to_template(request, 'packages/packages_list.html',
+ context)
+
def details(request, name='', repo='', arch=''):
if all([name, repo, arch]):
try:
@@ -112,23 +134,7 @@ def details(request, name='', repo='', arch=''):
return direct_to_template(request, 'packages/details.html',
{'pkg': pkg, })
except Package.DoesNotExist:
- arch = get_object_or_404(Arch, name=arch)
- arches = [ arch ]
- arches.extend(Arch.objects.filter(agnostic=True))
- repo = get_object_or_404(Repo, name__iexact=repo)
- pkgs = Package.objects.normal().filter(pkgbase=name,
- repo__testing=repo.testing, repo__staging=repo.staging,
- arch__in=arches).order_by('pkgname')
- if len(pkgs) == 0:
- raise Http404
- context = {
- 'list_title': 'Split Package Details',
- 'name': name,
- 'arch': arch,
- 'packages': pkgs,
- }
- return direct_to_template(request, 'packages/packages_list.html',
- context)
+ return split_package_details(request, name, repo, arch)
else:
pkg_data = [
('arch', arch.lower()),