1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
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'),)
|