diff options
author | Dan McGee <dan@archlinux.org> | 2011-11-11 18:57:04 +0100 |
---|---|---|
committer | Dan McGee <dan@archlinux.org> | 2011-11-11 18:57:04 +0100 |
commit | a883b0af23143364ab0724fda2ecdef9aba8191f (patch) | |
tree | f13ceb1a24ee1b9618c6fdc9fb543f6c1a957671 | |
parent | 022692b3f33de8c45741d3cb27fa95f9f6facdea (diff) | |
download | archweb-a883b0af23143364ab0724fda2ecdef9aba8191f.tar.gz archweb-a883b0af23143364ab0724fda2ecdef9aba8191f.tar.xz |
Add a split packages sitemap
With very low priority, but this should at least give a few more
cross-linking pages to any crawlers using sitemaps.
Signed-off-by: Dan McGee <dan@archlinux.org>
-rw-r--r-- | packages/utils.py | 18 | ||||
-rw-r--r-- | sitemaps.py | 17 | ||||
-rw-r--r-- | urls.py | 1 |
3 files changed, 33 insertions, 3 deletions
diff --git a/packages/utils.py b/packages/utils.py index 0df0e38..f8e1f2a 100644 --- a/packages/utils.py +++ b/packages/utils.py @@ -2,10 +2,10 @@ from collections import defaultdict from operator import itemgetter from django.db import connection -from django.db.models import Count, Max +from django.db.models import Count, Max, F from django.contrib.auth.models import User -from main.models import Package, Repo +from main.models import Package, Arch, Repo from main.utils import cache_function, groupby_preserve_order, PackageStandin from .models import (PackageGroup, PackageRelation, SignoffSpecification, Signoff, DEFAULT_SIGNOFF_SPEC) @@ -49,6 +49,20 @@ def get_group_info(include_arches=None): groups.extend(val.itervalues()) return sorted(groups, key=itemgetter('name', 'arch')) +def get_split_packages_info(): + '''Return info on split packages that do not have an actual package name + matching the split pkgbase.''' + pkgnames = Package.objects.values('pkgname') + split_pkgs = Package.objects.exclude(pkgname=F('pkgbase')).exclude( + pkgbase__in=pkgnames).values('pkgbase', 'repo', 'arch').annotate( + last_update=Max('last_update')) + all_arches = Arch.objects.in_bulk(set(s['arch'] for s in split_pkgs)) + all_repos = Repo.objects.in_bulk(set(s['repo'] for s in split_pkgs)) + for split in split_pkgs: + split['arch'] = all_arches[split['arch']] + split['repo'] = all_repos[split['repo']] + return split_pkgs + class Difference(object): def __init__(self, pkgname, repo, pkg_a, pkg_b): self.pkgname = pkgname diff --git a/sitemaps.py b/sitemaps.py index 8ac5bc4..7718002 100644 --- a/sitemaps.py +++ b/sitemaps.py @@ -3,7 +3,7 @@ from django.core.urlresolvers import reverse from main.models import Package from news.models import News -from packages.utils import get_group_info +from packages.utils import get_group_info, get_split_packages_info class PackagesSitemap(Sitemap): changefreq = "weekly" @@ -41,6 +41,21 @@ class PackageGroupsSitemap(Sitemap): return '/groups/%s/%s/' % (obj['arch'], obj['name']) +class SplitPackagesSitemap(Sitemap): + changefreq = "weekly" + priority = "0.3" + + def items(self): + return get_split_packages_info() + + def lastmod(self, obj): + return obj['last_update'] + + def location(self, obj): + return '/packages/%s/%s/%s/' % ( + obj['repo'].name.lower(), obj['arch'], obj['pkgbase']) + + class NewsSitemap(Sitemap): changefreq = "never" priority = "0.8" @@ -18,6 +18,7 @@ our_sitemaps = { 'packages': sitemaps.PackagesSitemap, 'package-files': sitemaps.PackageFilesSitemap, 'package-groups': sitemaps.PackageGroupsSitemap, + 'split-packages': sitemaps.SplitPackagesSitemap, } admin.autodiscover() |