class Severity(models.Model): """ List of bug severities healthmeter understands. +--------------+----------+---------+---------+--------------+ |Health Monitor|RHBugzilla|Launchpad|Debbugs |GNOME Bugzilla| |Severity Level| | | | | +--------------+----------+---------+---------+--------------+ | | |Wishlist |wishlist |Enhancement | | | +---------+---------+--------------+ |1 |Low | | |Trivial | | | |Low |minor +--------------+ | | | | |Minor | +--------------+----------+---------+---------+--------------+ |2 |Medium |Medium |normal |Normal | +--------------+----------+---------+---------+--------------+ |3 |High |High |important|Major | +--------------+----------+---------+---------+--------------+ | | | |serious | | | | | +---------+Critical | |4 |Urgent |Critical |grave | | | | | +---------+--------------+ | | | |critical |Blocker | +--------------+----------+---------+---------+--------------+ """ name = models.CharField(max_length=20, unique=True) level = models.IntegerField(unique=True) objects = get_natural_key_manager('level') def __str__(self): return self.name
class License(models.Model): name = models.TextField(unique=True) is_osi_approved = models.BooleanField() objects = get_natural_key_manager('name') def __str__(self): return self.name
class MetricAlgorithm(models.Model): name = models.CharField(max_length=50, unique=True) desc = models.CharField(max_length=300) objects = get_natural_key_manager('name') def __str__(self): return self.name
class Product(models.Model): name = models.CharField(max_length=255, unique=True) url = models.URLField(blank=True, default='') business_unit = models.ForeignKey(BusinessUnit, related_name='products') objects = get_natural_key_manager('name') def __str__(self): return self.name
class EmailDomain(models.Model): domain = models.CharField(max_length=255, unique=True) objects = managers.get_natural_key_manager('domain') class Meta: verbose_name = "Email Domain" ordering = ['domain'] def __str__(self): return self.domain
class Blog(models.Model): rss_url = models.URLField(max_length=255, unique=True) url = models.URLField(max_length=255, default='') projects = TreeManyToManyField(Project, related_name='blogs', blank=True) last_updated = models.DateTimeField(blank=True, null=True, default=None) objects = get_natural_key_manager('rss_url') def __str__(self): return self.url
class BusinessUnit(models.Model): name = models.CharField(max_length=255, unique=True) objects = get_natural_key_manager('name') def __str__(self): return self.name @property def root_projects(self): return self.projects.filter(parent__isnull=True)
class Bug(models.Model): tracker_info = models.ForeignKey(BugNamespace, related_name='bugs') bug_id = models.CharField(max_length=20) close_date = models.DateTimeField(null=True) severity = models.ForeignKey(Severity, related_name='bugs', null=True) objects = get_natural_key_manager('tracker_info', 'bug_id') class Meta: unique_together = ('tracker_info', 'bug_id') def __str__(self): return 'Bug #%s on %s' % (self.bug_id, self.tracker_info)
class Post(models.Model): author = models.ForeignKey(Participant, related_name='mailing_list_posts') timestamp = models.DateTimeField(db_index=True) subject = models.TextField() message_id = models.CharField(max_length=255, unique=True) mailing_lists = models.ManyToManyField(MailingList, related_name='posts') references = models.ManyToManyField('self', related_name='replies') objects = get_natural_key_manager('message_id') def __str__(self): return self.message_id
class Comment(models.Model): bug = models.ForeignKey(Bug, related_name='comments') author = models.ForeignKey(Participant, related_name='bug_comments') timestamp = models.DateTimeField(db_index=True) comment_id = models.CharField(max_length=10) objects = get_natural_key_manager('bug', 'comment_id') def __str__(self): return 'Comment #%s on %s' % (self.comment_id, self.bug) class Meta: unique_together = ('bug', 'comment_id')
class MailingList(models.Model): posting_address = models.EmailField(unique=True) archive_url = models.CharField(max_length=10000) last_updated = models.DateTimeField(blank=True, null=True, default=None) projects = TreeManyToManyField(Project, through='MailingListProject', related_name='mailing_lists', blank=True) objects = get_natural_key_manager('posting_address') def __str__(self): return self.posting_address
class BugTracker(models.Model): baseurl = models.URLField(max_length=255, unique=True) bt_type = models.ForeignKey(Type, related_name="types") username = models.CharField(max_length=255, null=True, blank=True) password = PlaintextPasswordField(max_length=255, null=True, blank=True) api_token = PlaintextPasswordField(max_length=255, null=True, blank=True) objects = get_natural_key_manager('baseurl') class Meta: verbose_name = "Bug Tracker" def __str__(self): return self.baseurl
class Release(models.Model): project = models.ForeignKey(Project, related_name='releases') version = models.CharField(max_length=100) date = models.DateField() objects = get_natural_key_manager('project', 'version') def __str__(self): return "{0} {1}{2}".format(self.project.name, '' if self.version.startswith('v') else 'v', self.version) class Meta: unique_together = ('project', 'version') ordering = ('date', 'version')
class MailingListProject(models.Model): mailing_list = models.ForeignKey(MailingList) project = TreeForeignKey(Project) purpose = models.ForeignKey(Purpose) objects = get_natural_key_manager('project', 'mailing_list') def __str__(self): return "%s (%s): %s" % (self.project.name, self.purpose.name, self.mailing_list.posting_address) class Meta: verbose_name = "Mailing List-Project relationship" unique_together = ('project', 'mailing_list') ordering = ('project__name', )
class BugNamespace(models.Model): bug_tracker = models.ForeignKey(BugTracker, related_name='namespaces') product = models.CharField(max_length=100, null=True, blank=True) component = models.CharField(max_length=100, null=True, blank=True) last_updated = models.DateTimeField(blank=True, null=True, default=None) projects = TreeManyToManyField(Project, related_name='bug_trackers', blank=True) objects = get_natural_key_manager('product', 'component', 'bug_tracker') def __str__(self): return '(%s, %s) on %s' % (self.product, self.component, self.bug_tracker) class Meta: unique_together = ('product', 'component', 'bug_tracker') verbose_name = "Bug Namespace"
class Type(models.Model): name = models.CharField(max_length=10, unique=True) objects = get_natural_key_manager('name') def __str__(self): return self.name