From 408288719e7515ac01c6eb81a5a2d9a1c63a62bc Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Wed, 9 Jun 2010 16:16:45 -0500 Subject: Enhance base package listing in package details Add two methods to the package class, base_package() and split_packages(), that allow us to grab other related packages to one we are interested in. This allows us to list the Base Package on the package details page as a link. With the split_packages() method, we can also now list and link all sub-packages on the package details page; e.g. for 'kernel26' we can now link through to 'kernel26-firmware' and 'kernel26-headers'. Signed-off-by: Dan McGee --- main/models.py | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) (limited to 'main/models.py') diff --git a/main/models.py b/main/models.py index e106313c..7eeec854 100644 --- a/main/models.py +++ b/main/models.py @@ -264,6 +264,36 @@ def get_depends(self): self.deps_cache = deps return deps + def base_package(self): + """ + Locate the base package for this package. It may be this very package, + or if it was built in a way that the base package isn't real, will + return None. + """ + try: + # start by looking for something in this repo + return Package.objects.get(arch=self.arch, + repo=self.repo, pkgname=self.pkgbase) + except Package.DoesNotExist: + # this package might be split across repos? just find one + # that matches the correct [testing] repo flag + pkglist = Package.objects.filter(arch=self.arch, + repo__testing=self.repo.testing, pkgname=self.pkgbase) + if len(pkglist) > 0: + return pkglist[0] + return None + + def split_packages(self): + """ + Return all packages that were built with this one (e.g. share a pkgbase + value). The package this method is called on will never be in the list, + and we will never return a package that does not have the same + repo.testing flag. For any non-split packages, the return value will be + an empty list. + """ + return Package.objects.filter(arch=self.arch, + repo__testing=self.repo.testing, pkgbase=self.pkgbase).exclude(id=self.id) + def get_svn_link(self, svnpath): linkbase = "http://repos.archlinux.org/wsvn/%s/%s/%s/" repo = self.repo.name.lower() -- cgit v1.2.3-54-g00ecf