diff options
Diffstat (limited to 'patchtracker/models.py')
-rw-r--r-- | patchtracker/models.py | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/patchtracker/models.py b/patchtracker/models.py new file mode 100644 index 0000000..1758609 --- /dev/null +++ b/patchtracker/models.py @@ -0,0 +1,89 @@ +import os +import re + +import Conf +import Patch + +from django.db import models + +class SourcePackage (models.Model): + name = models.CharField(max_length=1024) + version = models.CharField(max_length=1024) + format = models.CharField(max_length=64) + loc = models.CharField(max_length=4096) + diffgz_name = models.CharField(max_length=4096, null=True, blank=True) + diffgz_size = models.IntegerField(null=True, blank=True) + diffgz_md5sum = models.CharField(max_length=32, null=True, blank=True) + debtar_name = models.CharField(max_length=4096, null=True, blank=True) + debtar_size = models.IntegerField(null=True, blank=True) + debtar_md5sum = models.CharField(max_length=32, null=True, blank=True) + maintainer = models.CharField(max_length=1024) + uploaders = models.CharField(max_length=4096, null=True, blank=True) + + def type( self ): + """ Source package "type". Not incredibly useful, i guess... """ + if self.diffgz_name or self.debtar_name: + return "Debian-diff" + else: + return "Native" + + def diffhandler( self ): + """ Return a diffhandler object too the caller """ + if self.diffgz_name: + dgz = os.sep.join([Conf.archive_root, self.loc, self.diffgz_name]) + return Patch.DiffGzHandler(dgz) + elif self.debtar_name: + dtar = os.sep.join([Conf.archive_root, self.loc, self.debtar_name]) + return Patch.DebTarHandler(dtar) + + def anchor_name(self): + """ output a version of the package name suitable for use as an + anchor name (i.e. <a name="foo">) """ + return re.sub("([^a-zA-Z0-9-])", (lambda x: "_%d"%(ord(x.group(1)))), self.name) + + def wrappable_version(self): + """ output a version that can be broken up by a web browser using + the unicode zero-whitespace-break character (​) """ + return '​'.join([self.version[i:i+12] for i in range(0,len(self.version),12)]) + + def __unicode__( self ): + return "%s (%s)"%(self.name, self.version) + + class Meta: + managed = False + db_table = 'packages' + unique_together = (('name','version'),) + +class RepositorySuite (models.Model): + name = models.CharField(max_length=1024, unique=True) + + def __unicode__( self ): + return unicode(self.name) + + class Meta: + managed = False + db_table = 'suites' + +class RepositoryComponent (models.Model): + name = models.CharField(max_length=1024, unique=True) + + def __unicode__( self ): + return unicode(self.name) + + class Meta: + managed = False + db_table = 'components' + +class SourcePackageMapping (models.Model): + rowid = models.AutoField(primary_key=True) + package = models.ForeignKey(SourcePackage) + suite = models.ForeignKey(RepositorySuite) + component = models.ForeignKey(RepositoryComponent) + + def __unicode__( self ): + return "%s / %s / %s"%(unicode(self.package),unicode(self.suite),unicode(self.component)) + + class Meta: + managed = False + db_table = 'package_rel_map' + unique_together = (('package','suite','component'),) |