summaryrefslogtreecommitdiff
path: root/patchtracker/models.py
diff options
context:
space:
mode:
Diffstat (limited to 'patchtracker/models.py')
-rw-r--r--patchtracker/models.py89
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 (&#8203;) """
+ return '&#8203;'.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'),)