38 lines
1.0 KiB
Python
38 lines
1.0 KiB
Python
|
from django.contrib.auth.models import User
|
||
|
from django.db import connection
|
||
|
|
||
|
from main.utils import cache_function
|
||
|
from packages.models import PackageRelation
|
||
|
|
||
|
@cache_function(300)
|
||
|
def get_annotated_maintainers():
|
||
|
maintainers = User.objects.filter(is_active=True).order_by(
|
||
|
'first_name', 'last_name')
|
||
|
|
||
|
# annotate the maintainers with # of maintained and flagged packages
|
||
|
pkg_count_sql = """
|
||
|
SELECT pr.user_id, COUNT(*), COUNT(p.flag_date)
|
||
|
FROM packages_packagerelation pr
|
||
|
JOIN packages p
|
||
|
ON pr.pkgbase = p.pkgbase
|
||
|
WHERE pr.type = %s
|
||
|
GROUP BY pr.user_id
|
||
|
"""
|
||
|
cursor = connection.cursor()
|
||
|
cursor.execute(pkg_count_sql, [PackageRelation.MAINTAINER])
|
||
|
results = cursor.fetchall()
|
||
|
|
||
|
pkg_count = {}
|
||
|
flag_count = {}
|
||
|
for k, total, flagged in results:
|
||
|
pkg_count[k] = total
|
||
|
flag_count[k] = flagged
|
||
|
|
||
|
for m in maintainers:
|
||
|
m.package_count = pkg_count.get(m.id, 0)
|
||
|
m.flagged_count = flag_count.get(m.id, 0)
|
||
|
|
||
|
return maintainers
|
||
|
|
||
|
# vim: set ts=4 sw=4 et:
|