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
|
# Copyright 2009 Canonical Ltd. This software is licensed under the
# GNU Affero General Public License version 3 (see the file LICENSE).
# pylint: disable-msg=E0611,W0212
__metaclass__ = type
__all__ = [
'BinaryAndSourcePackageName',
'BinaryAndSourcePackageNameVocabulary',
]
from sqlobject import StringCol
from zope.interface import implements
from zope.schema.vocabulary import SimpleTerm
from canonical.database.sqlbase import SQLBase
from canonical.launchpad.webapp.vocabulary import (
BatchedCountableIterator,
NamedSQLObjectHugeVocabulary,
)
from lp.soyuz.interfaces.binarypackagename import IBinaryAndSourcePackageName
class BinaryAndSourcePackageName(SQLBase):
"""See IBinaryAndSourcePackageName"""
implements(IBinaryAndSourcePackageName)
_table = 'BinaryAndSourcePackageNameView'
_idName = 'name'
_idType = unicode
_defaultOrder = 'name'
name = StringCol(dbName='name', notNull=True, unique=True,
alternateID=True)
class BinaryAndSourcePackageNameIterator(BatchedCountableIterator):
"""Iterator for BinaryAndSourcePackageNameVocabulary.
Builds descriptions from source and binary descriptions it can
identify based on the names returned when queried.
"""
def getTermsWithDescriptions(self, results):
return [SimpleTerm(obj, obj.name, obj.name)
for obj in results]
class BinaryAndSourcePackageNameVocabulary(NamedSQLObjectHugeVocabulary):
"""A vocabulary for searching for binary and sourcepackage names.
This is useful for, e.g., reporting a bug on a 'package' when a reporter
often has no idea about whether they mean a 'binary package' or a 'source
package'.
The value returned by a widget using this vocabulary will be either an
ISourcePackageName or an IBinaryPackageName.
"""
_table = BinaryAndSourcePackageName
displayname = 'Select a Package'
_orderBy = 'name'
iterator = BinaryAndSourcePackageNameIterator
def getTermByToken(self, token):
"""See `IVocabularyTokenized`."""
# package names are always lowercase.
super_class = super(BinaryAndSourcePackageNameVocabulary, self)
return super_class.getTermByToken(token.lower())
|