~launchpad-pqm/launchpad/devel

« back to all changes in this revision

Viewing changes to lib/lp/answers/vocabulary.py

  • Committer: Launchpad Patch Queue Manager
  • Date: 2011-09-23 23:33:29 UTC
  • mfrom: (14022.1.7 valid-targets-1)
  • Revision ID: launchpad@pqm.canonical.com-20110923233329-3h43u5amuvd1yiee
[r=bac][bug=857448, 164424,
        117525] Restrict the target widget to pillars that use Launchpad

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright 2009 Canonical Ltd.  This software is licensed under the
 
1
# Copyright 2009-2011 Canonical Ltd.  This software is licensed under the
2
2
# GNU Affero General Public License version 3 (see the file LICENSE).
3
3
 
4
4
"""Named vocabularies defined by the Answers application."""
6
6
__metaclass__ = type
7
7
__all__ = [
8
8
    'FAQVocabulary',
 
9
    'UsesAnswersDistributionVocabulary',
9
10
    ]
10
11
 
 
12
from sqlobject import OR
 
13
 
11
14
from zope.interface import implements
12
15
from zope.schema.vocabulary import SimpleTerm
13
16
 
18
21
    )
19
22
from lp.answers.interfaces.faq import IFAQ
20
23
from lp.answers.interfaces.faqtarget import IFAQTarget
 
24
from lp.registry.interfaces.distribution import IDistribution
 
25
from lp.registry.vocabularies import DistributionVocabulary
21
26
 
22
27
 
23
28
class FAQVocabulary(FilteredVocabularyBase):
58
63
    def getTermByToken(self, token):
59
64
        """See `IVocabularyTokenized`."""
60
65
        try:
61
 
            faq_id = int(token)
 
66
            int(token)
62
67
        except ValueError:
63
68
            raise LookupError(token)
64
69
        faq = self.context.getFAQ(token)
74
79
        """See `IHugeVocabulary`."""
75
80
        results = self.context.findSimilarFAQs(query)
76
81
        return CountableIterator(results.count(), results, self.toTerm)
 
82
 
 
83
 
 
84
class UsesAnswersDistributionVocabulary(DistributionVocabulary):
 
85
    """Distributions that use Launchpad to track questions.
 
86
 
 
87
    If the context is a distribution, it is always included in the
 
88
    vocabulary. Historic data is not invalidated if a distro stops
 
89
    using Launchpad to track questions. This vocabulary offers the correct
 
90
    choices of distributions at this moment.
 
91
    """
 
92
 
 
93
    def __init__(self, context=None):
 
94
        super(UsesAnswersDistributionVocabulary, self).__init__(
 
95
            context=context)
 
96
        self.distribution = IDistribution(self.context, None)
 
97
 
 
98
    @property
 
99
    def _filter(self):
 
100
        if self.distribution is None:
 
101
            distro_id = 0
 
102
        else:
 
103
            distro_id = self.distribution.id
 
104
        return OR(
 
105
            self._table.q.official_answers == True,
 
106
            self._table.id == distro_id)