From 3e31808521e990b3b86d25de7d49cdd90a2de29f Mon Sep 17 00:00:00 2001 From: eliott Date: Sat, 8 Mar 2008 12:11:02 -0800 Subject: More changes to the multiarch model. --- devel/views.py | 23 +++++++++++++++-------- main/models.py | 28 ++++++++++++++++++++-------- packages/views.py | 30 +++++++++--------------------- templates/devel/index.html | 26 ++++++++++++++++++++++---- templates/devel/siteindex.html | 2 +- templates/feeds/news_description.html | 1 - templates/feeds/news_title.html | 1 - templates/feeds/packages_description.html | 1 - templates/feeds/packages_title.html | 1 - templates/packages/details.html | 20 +++++++++----------- templates/packages/search.html | 18 +++++++++--------- templates/todolists/view.html | 2 ++ todolists/views.py | 2 +- 13 files changed, 88 insertions(+), 67 deletions(-) delete mode 100644 templates/feeds/news_description.html delete mode 100644 templates/feeds/news_title.html delete mode 100644 templates/feeds/packages_description.html delete mode 100644 templates/feeds/packages_title.html diff --git a/devel/views.py b/devel/views.py index 741b869..978837b 100644 --- a/devel/views.py +++ b/devel/views.py @@ -4,7 +4,7 @@ from django.contrib.auth.models import User from django.core import validators from archweb_dev.main.utils import render_response, validate from archweb_dev.main.models import Package, Repo, Todolist, TodolistPkg -from archweb_dev.main.models import UserProfile, News, Donor, Mirror +from archweb_dev.main.models import UserProfile, News, Donor, Mirror, Arch from django.http import HttpResponse from django.template import Context, loader @@ -26,6 +26,13 @@ def index(request): pkgs = Package.objects.filter(maintainer=thismaint.id).filter(needupdate=True).order_by('repo', 'pkgname') else: pkgs = None + arch_stats = [] + for arch in Arch.objects.all(): + arch_stats.append({ + 'name': arch.name, + 'count': Package.objects.filter(arch__exact = arch).count(), + 'flagged': Package.objects.filter(arch__exact = arch).filter(needupdate=True).count() + }) repo_stats = [] for repo in Repo.objects.all(): @@ -35,12 +42,10 @@ def index(request): 'flagged': Package.objects.filter(repo__exact = repo).filter(needupdate=True).count() }) - return render_response(request, 'devel/index.html', - {'stats':stats, - 'pkgs':pkgs, - 'todos':todos, - 'maint':thismaint, - 'repos': repo_stats}) + return render_response( + request, 'devel/index.html', + {'stats': stats, 'pkgs': pkgs, 'todos': todos, 'maint': thismaint, + 'repos': repo_stats, 'archs': arch_stats}) @login_required #@is_maintainer @@ -86,7 +91,9 @@ def siteindex(request): news = News.objects.order_by('-postdate', '-id')[:10] pkgs = Package.objects.exclude(repo__name__exact='Testing').order_by('-last_update')[:15] repos = Repo.objects.order_by('name') - return render_response(request, 'devel/siteindex.html', {'news_updates':news,'pkg_updates':pkgs,'repos':repos}) + return render_response( + request, 'devel/siteindex.html', + {'news_updates': news, 'pkg_updates': pkgs, 'repos': repos}) def cvs(request): return render_response(request, 'devel/cvs.html') diff --git a/main/models.py b/main/models.py index 1a6423c..7b31f07 100644 --- a/main/models.py +++ b/main/models.py @@ -137,6 +137,8 @@ class Arch(models.Model): class Meta: db_table = 'arch' ordering = ['name'] + def __str__(self): + return self.name class Repo(models.Model): id = models.AutoField(primary_key=True) @@ -154,8 +156,8 @@ class Repo(models.Model): class Package(models.Model): id = models.AutoField(primary_key=True) - repo = models.ForeignKey(Repo) - arch = models.ForeignKey(Arch) + repo = models.ForeignKey('Repo') + arch = models.ForeignKey('Arch') maintainer = models.ForeignKey(User, related_name='package_maintainer') needupdate = models.BooleanField(default=False) pkgname = models.CharField(maxlength=255) @@ -163,7 +165,7 @@ class Package(models.Model): pkgrel = models.CharField(maxlength=255) pkgdesc = models.CharField(maxlength=255) url = models.URLField() - depends = models.ForeignKey(PackageDepends) + depends = models.ForeignKey('PackageDepends') last_update = models.DateTimeField(null=True, blank=True) objects = PackageManager() class Meta: @@ -173,6 +175,16 @@ class Package(models.Model): def get_absolute_url(self): return '/packages/%i/' % self.id + def required_by_urlize(self): + urls = [] + requiredby = PackageDepends.objects.filter(depname=self.pkgname) + for req in requiredby.package_set.all(): + urls.append( + '
  • %s
  • ' % \ + (req.id,req.pkgname)) + return ''.join(urls) + + def depends_urlize(self): urls = [] for dep in self.packagedepends_set.all(): @@ -181,7 +193,7 @@ class Package(models.Model): except IndexError: # couldn't find a package in the DB # it might be a virtual depend - urls.append('
  • %s
  • ' % dep.depname) + urls.append('
  • %s (v)
  • ' % dep.depname) continue urls.append( '
  • %s
  • ' % (p.id,dep.depname)) @@ -189,14 +201,14 @@ class Package(models.Model): class PackageFile(models.Model): id = models.AutoField(primary_key=True) - pkg = models.ForeignKey(Package) + pkg = models.ForeignKey('Package') path = models.CharField(maxlength=255) class Meta: db_table = 'packages_files' class PackageDepends(models.Model): id = models.AutoField(primary_key=True) - pkg = models.ForeignKey(Package) + pkg = models.ForeignKey('Package') depname = models.CharField(db_index=True, maxlength=255) depvcmp = models.CharField(maxlength=255) class Meta: @@ -214,8 +226,8 @@ class Todolist(models.Model): class TodolistPkg(models.Model): id = models.AutoField(primary_key=True) - list = models.ForeignKey(Todolist) - pkg = models.ForeignKey(Package) + list = models.ForeignKey('Todolist') + pkg = models.ForeignKey('Package') complete = models.BooleanField(default=False) class Meta: db_table = 'todolists_pkgs' diff --git a/packages/views.py b/packages/views.py index 25bb342..fef5efc 100644 --- a/packages/views.py +++ b/packages/views.py @@ -7,7 +7,8 @@ from django.contrib.auth.decorators import login_required from django.contrib.auth.models import User from datetime import datetime from archweb_dev.main.utils import validate, render_response -from archweb_dev.main.models import Package, PackageFile, Repo, Category +from archweb_dev.main.models import Arch, Repo +from archweb_dev.main.models import Package, PackageFile, PackageDepends from django.core.exceptions import ObjectDoesNotExist @@ -45,18 +46,7 @@ def details(request, pkgid=0, name='', repo=''): pkgid = p[0].id pkg = get_object_or_404(Package, id=pkgid) - origin_repo = None - if pkg.repo.name == 'Testing': - try: - origin_repo = Package.objects.filter( - pkgname__exact = pkg.pkgname).exclude( - repo__name__exact = pkg.repo.name).get().repo.name - except ObjectDoesNotExist: - origin_repo = None - return render_response( - request, - 'packages/details.html', - {'pkg': pkg, 'origin_repo': origin_repo}) + return render_response(request, 'packages/details.html', {'pkg': pkg}) def search(request, query=''): if request.GET.has_key('q'): @@ -65,7 +55,7 @@ def search(request, query=''): # fetch the form vars repo = request.GET.get('repo', 'all') - category = request.GET.get('category', 'all') + arch = request.GET.get('arch', 'all') lastupdate = request.GET.get('lastupdate', '') limit = int(request.GET.get('limit', '50')) skip = int(request.GET.get('skip', '0')) @@ -74,10 +64,10 @@ def search(request, query=''): # build the form lists repos = Repo.objects.order_by('name') - cats = Category.objects.order_by('category') + archs = Arch.objects.order_by('name') # copy GET data over and add the lists c = request.GET.copy() - c['repos'], c['categories'] = repos, cats + c['repos'], c['archs'] = repos, archs c['limit'], c['skip'] = limit, skip c['lastupdate'] = lastupdate c['sort'] = sort @@ -100,18 +90,16 @@ def search(request, query=''): else: results = Package.objects.all() if repo != 'all': results = results.filter(repo__name__exact=repo) - if category != 'all': results = results.filter(category__category__exact=category) + if arch != 'all': results = results.filter(arch__name__exact=arch) if maint != 'all': results = results.filter(maintainer=maint) if lastupdate: results = results.filter(last_update__gte=datetime(int(lastupdate[0:4]),int(lastupdate[5:7]),int(lastupdate[8:10]))) - # select_related() shouldn't be needed -- we're working around a Django bug - #results = results.select_related().order_by('repos.name', 'category', 'pkgname') # sort results if sort == '': - results = results.order_by('repo', 'category', 'pkgname') + results = results.order_by('repo', 'arch', 'pkgname') else: # duplicate sort fields shouldn't hurt anything - results = results.order_by(sort, 'repo', 'category', 'pkgname') + results = results.order_by(sort, 'repo', 'arch', 'pkgname') qs = request.GET.copy() # build pagination urls diff --git a/templates/devel/index.html b/templates/devel/index.html index afbec25..091fcb9 100644 --- a/templates/devel/index.html +++ b/templates/devel/index.html @@ -23,11 +23,29 @@ {% endif %}
    -

    Repository Package Stats

    +

    Stats by Architecture

    + + + + + + + {% for arch in archs %} + + + + + + {% endfor %} +
    Arch# Packages# Flagged
    {{ arch.name }}{{ repo.count }} packages{{ repo.flagged }} packages
    +
    +

    +
    +

    Stats by Repository

    - + {% for repo in repos %} @@ -42,11 +60,11 @@

    -

    Maintainer Package Stats

    +

    Stats by Maintainer

    Repository# Package# Packages # Flagged
    - + {% for maint in stats %} diff --git a/templates/devel/siteindex.html b/templates/devel/siteindex.html index 0c25fd8..e97d915 100644 --- a/templates/devel/siteindex.html +++ b/templates/devel/siteindex.html @@ -21,7 +21,7 @@ {% for pkg in pkg_updates %} - + {% endfor %} diff --git a/templates/feeds/news_description.html b/templates/feeds/news_description.html deleted file mode 100644 index 26e1cbb..0000000 --- a/templates/feeds/news_description.html +++ /dev/null @@ -1 +0,0 @@ -{{ obj.content }} diff --git a/templates/feeds/news_title.html b/templates/feeds/news_title.html deleted file mode 100644 index d355de5..0000000 --- a/templates/feeds/news_title.html +++ /dev/null @@ -1 +0,0 @@ -{{ obj.title }} diff --git a/templates/feeds/packages_description.html b/templates/feeds/packages_description.html deleted file mode 100644 index 6b9c47b..0000000 --- a/templates/feeds/packages_description.html +++ /dev/null @@ -1 +0,0 @@ -{{ obj.pkgdesc }} diff --git a/templates/feeds/packages_title.html b/templates/feeds/packages_title.html deleted file mode 100644 index a273162..0000000 --- a/templates/feeds/packages_title.html +++ /dev/null @@ -1 +0,0 @@ -{{ obj.pkgname }} {{ obj.pkgver }}-{{ obj.pkgrel }} diff --git a/templates/packages/details.html b/templates/packages/details.html index a0e7821..1435557 100644 --- a/templates/packages/details.html +++ b/templates/packages/details.html @@ -6,11 +6,6 @@

    {{ pkg.pkgname }} {{ pkg.pkgver }}-{{ pkg.pkgrel }}

    Maintainer# Package# Packages # Flagged
    {{ pkg.pkgname }} {{ pkg.pkgver }}-{{ pkg.pkgrel }}{{ pkg.category.category }}{{ pkg.arch.name }}
    + + + - - - @@ -66,11 +61,14 @@ {{ pkg.depends_urlize }} - + + + diff --git a/templates/packages/search.html b/templates/packages/search.html index c5006cd..309f926 100644 --- a/templates/packages/search.html +++ b/templates/packages/search.html @@ -17,24 +17,24 @@
    Architecture:{{ pkg.arch.name }}
    Repository: {{ pkg.repo.name }}
    Category:{{ pkg.category.category }}
    Description: {{ pkg.pkgdesc }} +
    -

    Sources:

    +

    Required By:

      - {{ pkg.sources_urlize }} + {{ pkg.required_by_urlize }}
    + - {% endif %} + - @@ -87,8 +87,8 @@ {% if not user.is_anonymous %} {% endif %} + - {% if pkg.needupdate %} diff --git a/templates/todolists/view.html b/templates/todolists/view.html index 7cd58dc..b77e6e7 100644 --- a/templates/todolists/view.html +++ b/templates/todolists/view.html @@ -6,6 +6,7 @@
    Arch RepositoryCategory Keywords Last Update Per Page
    - - {% for r in repos %} - + {% for a in archs %} + {% endfor %} - - {% for c in categories %} - + {% for r in repos %} + {% endfor %} @@ -75,8 +75,8 @@  Arch RepoCategory Name Version Description{{ pkg.arch.name }} {{ pkg.repo.name }}{{ pkg.category.category }} {{ pkg.pkgname }}{{ pkg.pkgver }}-{{ pkg.pkgrel }}
    + @@ -14,6 +15,7 @@ {% for pkg in pkgs %} + diff --git a/todolists/views.py b/todolists/views.py index 59dc5db..dbfd440 100644 --- a/todolists/views.py +++ b/todolists/views.py @@ -49,7 +49,7 @@ def add(request): todo.save() # now link in packages for p in request.POST.get('packages').split("\n"): - for pkg in Package.objects.filter(pkgname=p.strip()): + for pkg in Package.objects.filter(pkgname=p.strip()).order_by('arch'): todopkg = TodolistPkg( list = todo, pkg = pkg) -- cgit v1.2.3-24-g4f1b
    IDArch Repo Name Maintainer
    {{ pkg.pkg.id }}{{ pkg.pkg.arch.name }} {{ pkg.pkg.repo.name }} {{ pkg.pkg.pkgname }} {{ pkg.pkg.maintainer.get_full_name }}