3fb20c942d
These users are being marked inactive because they are no longer developers; thus they should have all of their maintainer relations removed from the database. This is one of two causes of "orphan" package relation objects, the other being pkgbase values that go out of existence. Signed-off-by: Dan McGee <dan@archlinux.org>
62 lines
2.0 KiB
Python
62 lines
2.0 KiB
Python
from django.db import models
|
|
from django.db.models.signals import post_save
|
|
from django.contrib.auth.models import User
|
|
|
|
class PackageRelation(models.Model):
|
|
'''
|
|
Represents maintainership (or interest) in a package by a given developer.
|
|
It is not a true foreign key to packages as we want to key off
|
|
pkgbase/pkgname instead, as well as preserve this information across
|
|
package deletes, adds, and in all repositories.
|
|
'''
|
|
MAINTAINER = 1
|
|
WATCHER = 2
|
|
TYPE_CHOICES = (
|
|
(MAINTAINER, 'Maintainer'),
|
|
(WATCHER, 'Watcher'),
|
|
)
|
|
pkgbase = models.CharField(max_length=255)
|
|
user = models.ForeignKey(User, related_name="package_relations")
|
|
type = models.PositiveIntegerField(choices=TYPE_CHOICES, default=MAINTAINER)
|
|
|
|
def __unicode__(self):
|
|
return "%s: %s (%s)" % (
|
|
self.pkgbase, self.user, self.get_type_display())
|
|
|
|
class Meta:
|
|
unique_together = (('pkgbase', 'user', 'type'),)
|
|
|
|
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)
|
|
|
|
def __unicode__(self):
|
|
return "%s: %s" % (name, pkg)
|
|
|
|
class License(models.Model):
|
|
pkg = models.ForeignKey('main.Package', related_name='licenses')
|
|
name = models.CharField(max_length=255)
|
|
|
|
def __unicode__(self):
|
|
return self.name
|
|
|
|
class Meta:
|
|
ordering = ['name']
|
|
|
|
def remove_inactive_maintainers(sender, instance, created, **kwargs):
|
|
# instance is an auth.models.User; we want to remove any existing
|
|
# maintainer relations if the user is no longer active
|
|
if not instance.is_active:
|
|
maint_relations = PackageRelation.objects.filter(user=instance,
|
|
type=PackageRelation.MAINTAINER)
|
|
maint_relations.delete()
|
|
|
|
post_save.connect(remove_inactive_maintainers, sender=User,
|
|
dispatch_uid="packages.models")
|
|
|
|
# vim: set ts=4 sw=4 et:
|