summaryrefslogtreecommitdiff
path: root/sitemaps.py
diff options
context:
space:
mode:
Diffstat (limited to 'sitemaps.py')
-rw-r--r--sitemaps.py158
1 files changed, 146 insertions, 12 deletions
diff --git a/sitemaps.py b/sitemaps.py
index e321fe85..03ad9254 100644
--- a/sitemaps.py
+++ b/sitemaps.py
@@ -1,23 +1,42 @@
+from datetime import datetime, timedelta
+from pytz import utc
+
from django.contrib.sitemaps import Sitemap
+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
+from releng.models import Release
+from todolists.models import Todolist
-class PackagesSitemap(Sitemap):
- changefreq = "weekly"
- priority = "0.5"
+class PackagesSitemap(Sitemap):
def items(self):
- return Package.objects.select_related('arch', 'repo').all()
- return Package.objects.all()
+ return Package.objects.normal().only(
+ 'pkgname', 'last_update', 'files_last_update',
+ 'repo__name', 'repo__testing', 'repo__staging',
+ 'arch__name').order_by()
def lastmod(self, obj):
return obj.last_update
+ def changefreq(self, obj):
+ if obj.repo.testing or obj.repo.staging:
+ return "daily"
+ return "weekly"
+
+ def priority(self, obj):
+ if obj.repo.testing:
+ return "0.4"
+ if obj.repo.staging:
+ return "0.1"
+ return "0.5"
+
class PackageFilesSitemap(PackagesSitemap):
- changefreq = "monthly"
- priority = "0.3"
+ changefreq = "weekly"
+ priority = "0.1"
def location(self, obj):
return PackagesSitemap.location(self, obj) + 'files/'
@@ -40,14 +59,129 @@ 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.7"
+ def __init__(self):
+ now = datetime.utcnow().replace(tzinfo=utc)
+ self.one_day_ago = now - timedelta(days=1)
+ self.one_week_ago = now - timedelta(days=7)
+
+ def items(self):
+ return News.objects.all().defer('content', 'guid', 'title').order_by()
+
+ def lastmod(self, obj):
+ return obj.last_modified
+
+ def priority(self, obj):
+ if obj.last_modified > self.one_week_ago:
+ return "0.9"
+ return "0.8"
+
+ def changefreq(self, obj):
+ if obj.last_modified > self.one_day_ago:
+ return 'daily'
+ if obj.last_modified > self.one_week_ago:
+ return 'weekly'
+ return 'yearly'
+
+
+class RecentNewsSitemap(NewsSitemap):
+ def items(self):
+ now = datetime.utcnow().replace(tzinfo=utc)
+ cutoff = now - timedelta(days=30)
+ return super(RecentNewsSitemap, self).items().filter(postdate__gte=cutoff)
+
+
+class ReleasesSitemap(Sitemap):
+ changefreq = "monthly"
def items(self):
- return News.objects.all()
+ return Release.objects.all().defer('info', 'torrent_data').order_by()
def lastmod(self, obj):
- return obj.postdate
+ return obj.last_modified
+
+ def priority(self, obj):
+ if obj.available:
+ return "0.6"
+ return "0.2"
+
+
+class TodolistSitemap(Sitemap):
+ priority = "0.4"
+
+ def __init__(self):
+ now = datetime.utcnow().replace(tzinfo=utc)
+ self.two_weeks_ago = now - timedelta(days=14)
+
+ def items(self):
+ return Todolist.objects.all().defer('raw').order_by()
+
+ def lastmod(self, obj):
+ return obj.last_modified
+
+ def changefreq(self, obj):
+ if obj.last_modified > self.two_weeks_ago:
+ return 'weekly'
+ return 'monthly'
+
+
+class BaseSitemap(Sitemap):
+ DEFAULT_PRIORITY = 0.7
+
+ base_viewnames = (
+ ('index', 1.0, 'hourly'),
+ ('packages-search', 0.8, 'hourly'),
+ ('page-download', 0.8, 'monthly'),
+ ('page-keys', 0.8, 'weekly'),
+ ('news-list', 0.7, 'weekly'),
+ ('groups-list', 0.5, 'weekly'),
+ ('mirror-status', 0.4, 'hourly'),
+ 'page-about',
+ 'page-art',
+ 'page-svn',
+ 'page-donate',
+ 'feeds-list',
+ 'mirror-list',
+ 'mirror-status',
+ 'mirrorlist',
+ 'packages-differences',
+ ('releng-test-overview', 0.3, 'monthly'),
+ 'releng-release-list',
+ 'visualize-index',
+ )
+
+ def items(self):
+ return self.base_viewnames
+
+ def location(self, obj):
+ name = obj
+ if isinstance(obj, tuple):
+ name = obj[0]
+ return reverse(name)
+
+ def priority(self, obj):
+ if isinstance(obj, tuple):
+ return obj[1]
+ return self.DEFAULT_PRIORITY
+
+ def changefreq(self, obj):
+ if isinstance(obj, tuple):
+ return obj[2]
+ return 'monthly'
# vim: set ts=4 sw=4 et: