summaryrefslogtreecommitdiff
path: root/packages/models.py
diff options
context:
space:
mode:
Diffstat (limited to 'packages/models.py')
-rw-r--r--packages/models.py56
1 files changed, 44 insertions, 12 deletions
diff --git a/packages/models.py b/packages/models.py
index a950bddb..d2fe1878 100644
--- a/packages/models.py
+++ b/packages/models.py
@@ -1,9 +1,9 @@
-from datetime import datetime
-
from django.db import models
from django.db.models.signals import pre_save, post_save
from django.contrib.auth.models import User
+from main.utils import set_created_field
+
class PackageRelation(models.Model):
'''
Represents maintainership (or interest) in a package by a given developer.
@@ -25,27 +25,63 @@ class PackageRelation(models.Model):
def get_associated_packages(self):
# TODO: delayed import to avoid circular reference
from main.models import Package
- return Package.objects.filter(pkgbase=self.pkgbase).select_related(
- 'arch', 'repo')
+ return Package.objects.normal().filter(pkgbase=self.pkgbase)
def repositories(self):
packages = self.get_associated_packages()
return sorted(set([p.repo for p in packages]))
def __unicode__(self):
- return "%s: %s (%s)" % (
+ return u'%s: %s (%s)' % (
self.pkgbase, self.user, self.get_type_display())
class Meta:
unique_together = (('pkgbase', 'user', 'type'),)
+class Signoff(models.Model):
+ '''
+ A signoff for a package (by pkgbase) at a given point in time. These are
+ not keyed directly to a Package object so they don't ever get deleted when
+ Packages come and go from testing repositories.
+ '''
+ pkgbase = models.CharField(max_length=255, db_index=True)
+ pkgver = models.CharField(max_length=255)
+ pkgrel = models.CharField(max_length=255)
+ epoch = models.PositiveIntegerField(default=0)
+ arch = models.ForeignKey('main.Arch')
+ repo = models.ForeignKey('main.Repo')
+ user = models.ForeignKey(User, related_name="package_signoffs")
+ created = models.DateTimeField(editable=False)
+ revoked = models.DateTimeField(null=True)
+ comments = models.TextField(null=True, blank=True)
+
+ REQUIRED = 2
+
+ @property
+ def packages(self):
+ # TODO: delayed import to avoid circular reference
+ from main.models import Package
+ return Package.objects.normal().filter(pkgbase=self.pkgbase,
+ pkgver=self.pkgver, pkgrel=self.pkgrel, epoch=pkg.epoch,
+ arch=self.arch, repo=self.repo)
+
+ @property
+ def full_version(self):
+ if self.epoch > 0:
+ return u'%d:%s-%s' % (self.epoch, self.pkgver, self.pkgrel)
+ return u'%s-%s' % (self.pkgver, self.pkgrel)
+
+ def __unicode__(self):
+ return u'%s-%s: %s' % (
+ self.pkgbase, self.full_version, self.user)
+
class PackageGroup(models.Model):
'''
Represents a group a package is in. There is no actual group entity,
only names that link to given packages.
'''
pkg = models.ForeignKey('main.Package', related_name='groups')
- name = models.CharField(max_length=255)
+ name = models.CharField(max_length=255, db_index=True)
def __unicode__(self):
return "%s: %s" % (self.name, self.pkg)
@@ -112,15 +148,11 @@ def remove_inactive_maintainers(sender, instance, created, **kwargs):
type=PackageRelation.MAINTAINER)
maint_relations.delete()
-def set_created_field(sender, **kwargs):
- # We use this same callback for both Isos and Tests
- obj = kwargs['instance']
- if not obj.created:
- obj.created = datetime.utcnow()
-
post_save.connect(remove_inactive_maintainers, sender=User,
dispatch_uid="packages.models")
pre_save.connect(set_created_field, sender=PackageRelation,
dispatch_uid="packages.models")
+pre_save.connect(set_created_field, sender=Signoff,
+ dispatch_uid="packages.models")
# vim: set ts=4 sw=4 et: