diff options
author | Dan McGee <dan@archlinux.org> | 2012-02-02 09:36:29 -0600 |
---|---|---|
committer | Dan McGee <dan@archlinux.org> | 2012-02-02 09:36:29 -0600 |
commit | 1f18484cae88e5553caa5fd593ef31ad458adb25 (patch) | |
tree | 63ab86a94bfcb6400015c5c9f69d23c26719e352 | |
parent | 07f74a87dd77edfff96e18964643eab9bd6ea81d (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__.py | 40 |
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()), |