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. ) """ 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'),)