euscanwww: Changed all feeds to support url options
Signed-off-by: volpino <fox91@anche.no>
This commit is contained in:
parent
8b39853b5f
commit
58d6ecc490
@ -48,38 +48,69 @@ class BaseFeed(Feed):
|
||||
def item_categories(self, vlog):
|
||||
return [vlog.package.category]
|
||||
|
||||
def items(self, data=None):
|
||||
user = data.get("user", None) if data else None
|
||||
options = data.get("options", None) if data else None
|
||||
|
||||
upstream_info = True
|
||||
portage_info = True
|
||||
|
||||
# first of all consider options, then user preferences
|
||||
if options:
|
||||
upstream_info = "upstream_info" in options
|
||||
portage_info = "portage_info" in options
|
||||
elif user:
|
||||
profile = get_profile(user)
|
||||
upstream_info = profile.upstream_info
|
||||
portage_info = profile.portage_info
|
||||
|
||||
ret, max_items = self._items(data)
|
||||
|
||||
if not upstream_info:
|
||||
ret = ret.exclude(overlay="")
|
||||
if not portage_info:
|
||||
ret = ret.exclude(~Q(overlay=""))
|
||||
|
||||
return ret.order_by("-datetime")[:max_items]
|
||||
|
||||
|
||||
class GlobalFeed(BaseFeed):
|
||||
title = "euscan"
|
||||
link = "/"
|
||||
description = "Last euscan changes"
|
||||
|
||||
def categories(self):
|
||||
def get_object(self, request):
|
||||
return {"options": request.GET}
|
||||
|
||||
def categories(self, data):
|
||||
categories = Package.objects.categories()
|
||||
return [category['category'] for category in categories]
|
||||
|
||||
def items(self):
|
||||
return VersionLog.objects.order_by('-id')[:250]
|
||||
def _items(self, data):
|
||||
return VersionLog.objects.all(), 250
|
||||
|
||||
|
||||
class PackageFeed(BaseFeed):
|
||||
feed_type = Atom1Feed
|
||||
|
||||
def get_object(self, request, category, package):
|
||||
return get_object_or_404(Package, category=category, name=package)
|
||||
return {
|
||||
"obj": get_object_or_404(Package, category=category, name=package),
|
||||
"options": request.GET,
|
||||
}
|
||||
|
||||
def title(self, package):
|
||||
return "%s" % package
|
||||
def title(self, data):
|
||||
return "%s" % data["obj"]
|
||||
|
||||
def link(self, package):
|
||||
return reverse('djeuscan.views.package', args=[package.category,
|
||||
package.name])
|
||||
def link(self, data):
|
||||
return reverse('djeuscan.views.package', args=[data["obj"].category,
|
||||
data["obj"].name])
|
||||
|
||||
def description(self, package):
|
||||
return package.description
|
||||
def description(self, data):
|
||||
return data["obj"].description
|
||||
|
||||
def items(self, package):
|
||||
return VersionLog.objects.for_package(package, order=True)[:30]
|
||||
def _items(self, data):
|
||||
return VersionLog.objects.for_package(data["obj"]), 30
|
||||
|
||||
def item_description(self, vlog):
|
||||
return ''
|
||||
@ -89,39 +120,46 @@ class MaintainerFeed(BaseFeed):
|
||||
feed_type = Atom1Feed
|
||||
|
||||
def get_object(self, request, maintainer_id):
|
||||
return get_object_or_404(Maintainer, id=maintainer_id)
|
||||
return {
|
||||
"obj": get_object_or_404(Maintainer, id=maintainer_id),
|
||||
"options": request.GET,
|
||||
}
|
||||
|
||||
def title(self, maintainer):
|
||||
return "%s" % maintainer
|
||||
def title(self, data):
|
||||
return "%s" % data["obj"]
|
||||
|
||||
def description(self, maintainer):
|
||||
return "Last changes for %s" % maintainer
|
||||
def description(self, data):
|
||||
return "Last changes for %s" % data["obj"]
|
||||
|
||||
def link(self, maintainer):
|
||||
def link(self, data):
|
||||
return reverse('djeuscan.views.maintainer',
|
||||
kwargs={'maintainer_id': maintainer.id})
|
||||
kwargs={'maintainer_id': data["obj"].id})
|
||||
|
||||
def items(self, maintainer):
|
||||
return VersionLog.objects.for_maintainer(maintainer, order=True)[:50]
|
||||
def _items(self, data):
|
||||
return VersionLog.objects.for_maintainer(data["obj"]), 50
|
||||
|
||||
|
||||
class HerdFeed(BaseFeed):
|
||||
feed_type = Atom1Feed
|
||||
|
||||
def get_object(self, request, herd):
|
||||
return get_object_or_404(Herd, herd=herd)
|
||||
return {
|
||||
"obj": get_object_or_404(Herd, herd=herd),
|
||||
"options": request.GET,
|
||||
}
|
||||
|
||||
def title(self, herd):
|
||||
return "%s" % herd
|
||||
def title(self, data):
|
||||
return "%s" % data["obj"]
|
||||
|
||||
def description(self, herd):
|
||||
return "Last changes for %s" % herd
|
||||
def description(self, data):
|
||||
return "Last changes for %s" % data["obj"]
|
||||
|
||||
def link(self, herd):
|
||||
return reverse('djeuscan.views.herd', kwargs={'herd': herd.herd})
|
||||
def link(self, data):
|
||||
return reverse('djeuscan.views.herd',
|
||||
kwargs={'herd': data["obj"].herd})
|
||||
|
||||
def items(self, herd):
|
||||
return VersionLog.objects.for_herd(herd, order=True)[:100]
|
||||
def _items(self, data):
|
||||
return VersionLog.objects.for_herd(data["obj"]), 100
|
||||
|
||||
|
||||
class CategoryFeed(BaseFeed):
|
||||
@ -130,56 +168,46 @@ class CategoryFeed(BaseFeed):
|
||||
def get_object(self, request, category):
|
||||
if not Package.objects.categories().count():
|
||||
raise FeedDoesNotExist
|
||||
return category
|
||||
return {
|
||||
"obj": category,
|
||||
"options": request.GET,
|
||||
}
|
||||
|
||||
def title(self, category):
|
||||
return "%s" % category
|
||||
def title(self, data):
|
||||
return "%s" % data["obj"]
|
||||
|
||||
def description(self, category):
|
||||
return "Last changes for %s" % category
|
||||
def description(self, data):
|
||||
return "Last changes for %s" % data["obj"]
|
||||
|
||||
def link(self, category):
|
||||
return reverse('djeuscan.views.category', args=[category])
|
||||
def link(self, data):
|
||||
return reverse('djeuscan.views.category', args=[data["obj"]])
|
||||
|
||||
def items(self, category):
|
||||
return VersionLog.objects.for_category(category, order=True)[:100]
|
||||
def _items(self, data):
|
||||
return VersionLog.objects.for_category(data["obj"]), 100
|
||||
|
||||
|
||||
class UserFeed(BaseFeed):
|
||||
link = "/"
|
||||
|
||||
def description(self, data):
|
||||
return "%s - last euscan changes"
|
||||
return "%s - last euscan changes" % data["user"]
|
||||
|
||||
def title(self, data):
|
||||
return "%s - watched packages" % data[0]
|
||||
return "%s - watched packages" % data["user"]
|
||||
|
||||
def get_object(self, request):
|
||||
options = request.GET
|
||||
return request.user, options
|
||||
return {
|
||||
"user": request.user,
|
||||
"options": request.GET,
|
||||
}
|
||||
|
||||
def items(self, data):
|
||||
user, options = data
|
||||
def _items(self, data):
|
||||
user, options = data["user"], data["options"]
|
||||
|
||||
profile = get_profile(user)
|
||||
packages = get_account_packages(user)
|
||||
overlays = [o.name for o in profile.overlays.all()]
|
||||
|
||||
ret = VersionLog.objects.filter(
|
||||
return VersionLog.objects.filter(
|
||||
Q(package__in=packages) | Q(overlay__in=overlays)
|
||||
)
|
||||
|
||||
# first of all consider options, then user preferences
|
||||
if options:
|
||||
upstream_info = "upstream_info" in options
|
||||
portage_info = "portage_info" in options
|
||||
else:
|
||||
upstream_info = profile.upstream_info
|
||||
portage_info = profile.portage_info
|
||||
|
||||
if not upstream_info:
|
||||
ret = ret.exclude(overlay="")
|
||||
if not portage_info:
|
||||
ret = ret.exclude(~Q(overlay=""))
|
||||
|
||||
return ret.order_by("-datetime")[:100]
|
||||
), 100
|
||||
|
Loading…
Reference in New Issue
Block a user