Carriage return.
[archweb_dev-nj.git] / packages / models.py
blobbce638df5fa370c65c599c6ae9a99edf3b44306b
1 from django.db import models
2 from django.contrib.auth.models import User
3 import re
5 class PackageManager(models.Manager):
6 def get_flag_stats(self):
7 results = []
8 # first the orphans
9 unflagged = self.filter(maintainer=0).count()
10 flagged = self.filter(maintainer=0).filter(needupdate=True).count()
11 results.append((User(id=0,first_name='Orphans'), unflagged, flagged))
12 # now the rest
13 for maint in User.objects.all().order_by('first_name'):
14 unflagged = self.filter(maintainer=maint.id).count()
15 flagged = self.filter(maintainer=maint.id).filter(needupdate=True).count()
16 results.append((maint, unflagged, flagged))
17 return results
19 class Category(models.Model):
20 id = models.AutoField(primary_key=True)
21 category = models.CharField(maxlength=255)
22 class Meta:
23 db_table = 'categories'
24 verbose_name_plural = 'categories'
26 class Repo(models.Model):
27 id = models.AutoField(primary_key=True)
28 name = models.CharField(maxlength=255)
29 class Meta:
30 db_table = 'repos'
31 ordering = ['name']
32 def last_update(self):
33 try:
34 latest = Package.objects.filter(repo__name__exact=self.name).order_by('-last_update')[0]
35 return latest.last_update
36 except IndexError:
37 return "N/A"
39 class Package(models.Model):
40 id = models.AutoField(primary_key=True)
41 repo = models.ForeignKey(Repo)
42 maintainer = models.ForeignKey(User)
43 category = models.ForeignKey(Category)
44 needupdate = models.BooleanField(default=False)
45 pkgname = models.CharField(maxlength=255)
46 pkgver = models.CharField(maxlength=255)
47 pkgrel = models.CharField(maxlength=255)
48 pkgdesc = models.CharField(maxlength=255)
49 url = models.URLField()
50 sources = models.TextField()
51 depends = models.TextField()
52 last_update = models.DateTimeField(null=True, blank=True)
53 objects = PackageManager()
54 class Meta:
55 db_table = 'packages'
56 get_latest_by = 'last_update'
58 def get_absolute_url(self):
59 return '/packages/%i/' % self.id
61 def depends_urlize(self):
62 urls = ''
63 for dep in self.depends.split(' '):
64 # shave off any version qualifiers
65 nameonly = re.match(r"([a-z0-9-]+)", dep).group(1)
66 try:
67 p = Package.objects.filter(pkgname=nameonly)[0]
68 except IndexError:
69 # couldn't find a package in the DB -- it might be a virtual depend
70 urls = urls + '<li>' + dep + '</li>'
71 continue
72 url = '<li><a href="/packages/' + str(p.id) + '">' + dep + '</a></li>'
73 urls = urls + url
74 return urls
76 def sources_urlize(self):
77 urls = ''
78 for source in self.sources.split(' '):
79 if re.search('://', source):
80 url = '<li><a href="' + source + '">' + source + '</a></li>'
81 else:
82 url = '<li>' + source + '</li>'
83 urls = urls + url
84 return urls
86 class PackageFile(models.Model):
87 id = models.AutoField(primary_key=True)
88 pkg = models.ForeignKey(Package)
89 path = models.CharField(maxlength=255)
90 class Meta:
91 db_table = 'packages_files'
93 # vim: set ts=4 sw=4 et: