~dennis/ubot/trunk

« back to all changes in this revision

Viewing changes to ubotweb/encyclopedia/models.py

  • Committer: Dennis Kaarsemaker
  • Date: 2008-03-17 21:39:35 UTC
  • Revision ID: dennis@blackbird-20080317213935-migv1bllicjgqd8j
* A few small fixes
* Small doc update (really needs more)
* Add stubby bugtracker helper
* Add encyclopedia helper

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
from django.db import models
 
2
from django.core import validators
 
3
 
 
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")
 
7
 
 
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])
 
16
 
 
17
    def __str__(self):
 
18
        if self.channel:
 
19
            return '%s (%s)' % (self.name, self.channel)
 
20
        return self.name
 
21
    
 
22
    def __repr__(self):
 
23
        return '<Factoid %s>' % self.name
 
24
 
 
25
    def msg(self):
 
26
        self.error = False
 
27
        return self.value
 
28
    
 
29
    class Meta:
 
30
        unique_together = (('name','channel'),)
 
31
 
 
32
    class Admin:
 
33
        list_display = ('name', 'channel', 'added_by', 'value', 'alias_of')
 
34
        search_fields = ('name', 'value')
 
35
        ordering = ('-popularity', '+name')
 
36
 
 
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)
 
43
 
 
44
    def msg(self):
 
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)
 
50
 
 
51
    def __str__(self):
 
52
        return "%s (%s/%s)" % (self.packagename, self.version, self.release)
 
53
 
 
54
    class Admin:
 
55
        search_fields = ('packagename','source')
 
56
        list_filter = ('release',)
 
57
        list_display = ('packagename','release','version')
 
58
 
 
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)
 
67
 
 
68
    def msg(self):
 
69
        source = self.source and (' (Source: %s)' % self.source) or ''
 
70
        url = ''
 
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)
 
79
 
 
80
    def __str__(self):
 
81
        return "%s (%s/%s)" % (self.packagename, self.version, self.release)
 
82
 
 
83
    class Admin:
 
84
        search_fields = ('packagename','source')
 
85
        list_filter = ('release','component')
 
86
        list_display = ('packagename','source','release','version','component')