summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichal Donat <michal@donat.cz>2019-12-14 22:36:50 +0100
committerJelle van der Waa <jelle@vdwaa.nl>2019-12-18 17:26:04 +0100
commit864864ae88830173a236a6dd55f2143c6181c4f1 (patch)
tree538233058a7e0c4ec13ab54e7989c34199b17f23
parentb7ed83032c4cf400f6a6f61af9f890e2002f8327 (diff)
downloadarchweb-864864ae88830173a236a6dd55f2143c6181c4f1.tar.gz
archweb-864864ae88830173a236a6dd55f2143c6181c4f1.zip
add packages rss feeds for "all stable repos" and "all testing repos"
https://bugs.archlinux.org/task/59329
-rw-r--r--feeds.py143
-rw-r--r--templates/public/feeds.html42
2 files changed, 150 insertions, 35 deletions
diff --git a/feeds.py b/feeds.py
index 42eea04d..5b49ca82 100644
--- a/feeds.py
+++ b/feeds.py
@@ -74,10 +74,23 @@ class PackageFeed(Feed):
qs = qs.filter(Q(arch=a) | Q(arch__agnostic=True))
obj['arch'] = a
if repo != '':
- # feed for a single arch AND repo
- r = Repo.objects.get(name__iexact=repo)
- qs = qs.filter(repo=r)
- obj['repo'] = r
+ if repo == 'stable-repos':
+ # feed for a single arch AND all stable repos
+ r = Repo.objects.filter(testing=False, staging=False)
+ qs = qs.filter(repo__in=r)
+ obj['repos'] = r
+ setattr(obj['repos'], 'name', 'all stable repositories')
+ elif repo == 'testing-repos':
+ # feed for a single arch AND all testing repos
+ r = Repo.objects.filter(testing=True, staging=False)
+ qs = qs.filter(repo__in=r)
+ obj['repos'] = r
+ setattr(obj['repos'], 'name', 'all testing repositories')
+ else:
+ # feed for a single arch AND repo
+ r = Repo.objects.get(name__iexact=repo)
+ qs = qs.filter(repo=r)
+ obj['repo'] = r
else:
qs = qs.filter(repo__staging=False)
obj['qs'] = qs[:50]
@@ -85,24 +98,47 @@ class PackageFeed(Feed):
def title(self, obj):
s = 'Arch Linux: Recent package updates'
- if 'repo' in obj and 'arch' in obj:
- s += ' (%s [%s])' % (obj['arch'].name, obj['repo'].name.lower())
- elif 'repo' in obj:
- s += ' [%s]' % (obj['repo'].name.lower())
- elif 'arch' in obj:
- s += ' (%s)' % (obj['arch'].name)
- return s
+ fields = dict(
+ arch=obj['arch'].name if 'arch' in obj else None,
+ repo='[%s]' % obj['repo'].name.lower() if 'repo' in obj else None,
+ repos=obj['repos'].name if 'repos' in obj else None,)
+
+ if fields['arch']:
+ if fields['repo']:
+ s += ' (%(arch)s in %(repo)s)'
+ elif fields['repos']:
+ s += ' (%(arch)s in %(repos)s)'
+ else:
+ s += ' (%(arch)s)'
+
+ elif fields['repo']:
+ s += ' in %(repo)s'
+
+ elif fields['repos']:
+ s += ' in %(repos)s'
+
+ return s % fields
def description(self, obj):
- s = 'Recently updated packages in the Arch Linux package repositories'
- if 'arch' in obj:
- s += ' for the \'%s\' architecture' % obj['arch'].name.lower()
+ s = 'Recently updated packages'
+
+ fields = dict(
+ arch=obj['arch'].name if 'arch' in obj else None,
+ repo='[%s]' % obj['repo'].name.lower() if 'repo' in obj else None,
+ repos=', '.join(['[%s]' % r.name.lower() for r in obj['repos'].all()]) if 'repos' in obj else None,)
+
+ if fields['arch']:
+ s += ' for the \'%(arch)s\' architecture'
if not obj['arch'].agnostic:
s += ' (including \'any\' packages)'
- if 'repo' in obj:
- s += ' in the [%s] repository' % obj['repo'].name.lower()
+ if fields['repo']:
+ s += ' in the Arch Linux %(repo)s repository'
+ elif fields['repos']:
+ s += ' in the %(repos)s repositories'
+ else:
+ s += ' in the Arch Linux package repositories'
s += '.'
- return s
+ return s % fields
subtitle = description
@@ -165,10 +201,23 @@ class PackageUpdatesFeed(Feed):
qs = qs.filter(Q(arch=a) | Q(arch__agnostic=True))
obj['arch'] = a
if repo != '':
- # feed for a single arch AND repo
- r = Repo.objects.get(name__iexact=repo)
- qs = qs.filter(repo=r)
- obj['repo'] = r
+ if repo == 'stable-repos':
+ # feed for a single arch AND all stable repos
+ r = Repo.objects.filter(testing=False, staging=False)
+ qs = qs.filter(repo__in=r)
+ obj['repos'] = r
+ setattr(obj['repos'], 'name', 'all stable repositories')
+ elif repo == 'testing-repos':
+ # feed for a single arch AND all testing repos
+ r = Repo.objects.filter(testing=True, staging=False)
+ qs = qs.filter(repo__in=r)
+ obj['repos'] = r
+ setattr(obj['repos'], 'name', 'all testing repositories')
+ else:
+ # feed for a single arch AND repo
+ r = Repo.objects.get(name__iexact=repo)
+ qs = qs.filter(repo=r)
+ obj['repo'] = r
else:
qs = qs.filter(repo__staging=False)
@@ -176,25 +225,49 @@ class PackageUpdatesFeed(Feed):
return obj
def title(self, obj):
- s = 'Arch Linux: Recent {} packages'.format(obj['action'])
- if 'repo' in obj and 'arch' in obj:
- s += ' (%s [%s])' % (obj['arch'].name, obj['repo'].name.lower())
- elif 'repo' in obj:
- s += ' [%s]' % (obj['repo'].name.lower())
- elif 'arch' in obj:
- s += ' (%s)' % (obj['arch'].name)
- return s
+ s = 'Arch Linux: Recently %(action)s packages' % obj
+
+ fields = dict(
+ arch=obj['arch'].name if 'arch' in obj else None,
+ repo='[%s]' % obj['repo'].name.lower() if 'repo' in obj else None,
+ repos=obj['repos'].name if 'repos' in obj else None,)
+
+ if fields['arch']:
+ if fields['repo']:
+ s += ' (%(arch)s in %(repo)s)'
+ elif fields['repos']:
+ s += ' (%(arch)s in %(repos)s)'
+ else:
+ s += ' (%(arch)s)'
+
+ elif fields['repo']:
+ s += ' in %(repo)s'
+
+ elif fields['repos']:
+ s += ' in %(repos)s'
+
+ return s % fields
def description(self, obj):
- s = 'Recently {} packages in the Arch Linux package repositories'.format(obj['action'])
- if 'arch' in obj:
- s += ' for the \'%s\' architecture' % obj['arch'].name.lower()
+ s = 'Recently %(action)s packages' % obj
+
+ fields = dict(
+ arch=obj['arch'].name if 'arch' in obj else None,
+ repo='[%s]' % obj['repo'].name.lower() if 'repo' in obj else None,
+ repos=', '.join(['[%s]' % r.name.lower() for r in obj['repos'].all()]) if 'repos' in obj else None,)
+
+ if fields['arch']:
+ s += ' for the \'%(arch)s\' architecture'
if not obj['arch'].agnostic:
s += ' (including \'any\' packages)'
- if 'repo' in obj:
- s += ' in the [%s] repository' % obj['repo'].name.lower()
+ if fields['repo']:
+ s += ' in the Arch Linux %(repo)s repository'
+ elif fields['repos']:
+ s += ' in the %(repos)s repositories'
+ else:
+ s += ' in the Arch Linux package repositories'
s += '.'
- return s
+ return s % fields
subtitle = description
diff --git a/templates/public/feeds.html b/templates/public/feeds.html
index 435930db..3b967ce0 100644
--- a/templates/public/feeds.html
+++ b/templates/public/feeds.html
@@ -44,6 +44,20 @@
<td><a href="/feeds/packages/{{ arch }}/" class="rss">Feed</a></td>
{% endfor %}
</tr>
+ <tr>
+ <td><strong>All Stable Repos</strong></td>
+ <td><a href="/feeds/packages/all/stable-repos/" class="rss">Feed</a></td>
+ {% for arch in arches %}
+ <td><a href="/feeds/packages/{{ arch }}/stable-repos/" class="rss">Feed</a></td>
+ {% endfor %}
+ </tr>
+ <tr>
+ <td><strong>All Testing Repos</strong></td>
+ <td><a href="/feeds/packages/all/testing-repos/" class="rss">Feed</a></td>
+ {% for arch in arches %}
+ <td><a href="/feeds/packages/{{ arch }}/testing-repos/" class="rss">Feed</a></td>
+ {% endfor %}
+ </tr>
{% for repo in repos %}
<tr>
<td><strong>{{ repo }}</strong></td>
@@ -78,6 +92,20 @@
<td><a href="/feeds/packages/added/{{ arch }}/" class="rss">Feed</a></td>
{% endfor %}
</tr>
+ <tr>
+ <td><strong>All Stable Repos</strong></td>
+ <td><a href="/feeds/packages/added/all/stable-repos/" class="rss">Feed</a></td>
+ {% for arch in arches %}
+ <td><a href="/feeds/packages/added/{{ arch }}/stable-repos/" class="rss">Feed</a></td>
+ {% endfor %}
+ </tr>
+ <tr>
+ <td><strong>All Testing Repos</strong></td>
+ <td><a href="/feeds/packages/added/all/testing-repos/" class="rss">Feed</a></td>
+ {% for arch in arches %}
+ <td><a href="/feeds/packages/added/{{ arch }}/testing-repos/" class="rss">Feed</a></td>
+ {% endfor %}
+ </tr>
{% for repo in repos %}
<tr>
<td><strong>{{ repo }}</strong></td>
@@ -109,6 +137,20 @@
<td><a href="/feeds/packages/removed/{{ arch }}/" class="rss">Feed</a></td>
{% endfor %}
</tr>
+ <tr>
+ <td><strong>All Stable Repos</strong></td>
+ <td><a href="/feeds/packages/removed/all/stable-repos/" class="rss">Feed</a></td>
+ {% for arch in arches %}
+ <td><a href="/feeds/packages/removed/{{ arch }}/stable-repos/" class="rss">Feed</a></td>
+ {% endfor %}
+ </tr>
+ <tr>
+ <td><strong>All Testing Repos</strong></td>
+ <td><a href="/feeds/packages/removed/all/testing-repos/" class="rss">Feed</a></td>
+ {% for arch in arches %}
+ <td><a href="/feeds/packages/removed/{{ arch }}/testing-repos/" class="rss">Feed</a></td>
+ {% endfor %}
+ </tr>
{% for repo in repos %}
<tr>
<td><strong>{{ repo }}</strong></td>