1
from django.db import models
2
from django.core import validators
4
def alias_or_value(field_data, all_data):
5
if all_data['value'] and all_data['alias_of']:
6
raise validators.ValidationError("Must be either alias or factoid, not both")
8
class Factoid(models.Model):
9
name = models.CharField("Name", maxlength=25)
10
value = models.TextField("Value", maxlength=1024, blank=True, validator_list=[alias_or_value])
11
channel = models.CharField("Channel", blank=True, maxlength=30, help_text="Leave blank to make it default")
12
added_by = models.CharField("Author", maxlength=50, editable=False)
13
added_at = models.DateTimeField("Added at", auto_now=True)
14
popularity = models.IntegerField("Popularity", default=0, editable=False)
15
alias_of = models.ForeignKey('self', verbose_name = "Alias of", blank=True, null=True, validator_list=[alias_or_value])
19
return '%s (%s)' % (self.name, self.channel)
23
return '<Factoid %s>' % self.name
30
unique_together = (('name','channel'),)
33
list_display = ('name', 'channel', 'added_by', 'value', 'alias_of')
34
search_fields = ('name', 'value')
35
ordering = ('-popularity', '+name')
37
debian = ('etch','lenny','sid','sarge')
38
ubuntu = ('dapper','gutsy','hardy','feisty')
39
class SourcePackage(models.Model):
40
packagename = models.CharField("Name", maxlength=64, db_index=True)
41
version = models.CharField("Version", maxlength=64)
42
release = models.CharField("Release", maxlength=16, db_index=True)
45
if self.release in debian:
46
url = ' http://packages.qa.debian.org/%s/%s.html' % (self.packagename[0], self.packagename)
47
elif self.release in ubuntu:
48
url = ' https://launchpad.net/ubuntu/+source/' + self.packagename
49
return "%s is a sourcepackage in %s, version %s%s" % (self.packagename, self.release, self.version, url)
52
return "%s (%s/%s)" % (self.packagename, self.version, self.release)
55
search_fields = ('packagename','source')
56
list_filter = ('release',)
57
list_display = ('packagename','release','version')
59
class BinaryPackage(models.Model):
60
packagename = models.CharField("Name", maxlength=64, db_index=True)
61
version = models.CharField("Version", maxlength=64)
62
release = models.CharField("Release", maxlength=16, db_index=True)
63
shortdesc = models.CharField("Name", maxlength=128)
64
source = models.CharField("Source", maxlength=64, blank=True, null=True)
65
component = models.CharField("Component", maxlength=32)
66
priority = models.CharField("Priority", maxlength=16)
69
source = self.source and (' (Source: %s)' % self.source) or ''
71
if self.release in debian:
72
s = self.source or self.packagename
73
url = ' http://packages.qa.debian.org/%s/%s.html' % (s[0], s)
74
elif self.release in ubuntu:
75
s = self.source or self.packagename
76
url = ' https://launchpad.net/ubuntu/+source/' + s
77
return "%s%s: %s. In component %s, is %s. Version %s (%s)%s" % (self.packagename, source, self.shortdesc, self.component,
78
self.priority, self.version, self.release, url)
81
return "%s (%s/%s)" % (self.packagename, self.version, self.release)
84
search_fields = ('packagename','source')
85
list_filter = ('release','component')
86
list_display = ('packagename','source','release','version','component')