~launchpad-pqm/launchpad/devel

« back to all changes in this revision

Viewing changes to lib/lp/app/browser/vocabulary.py

  • Committer: Jelmer Vernooij
  • Date: 2011-09-21 14:28:02 UTC
  • mfrom: (14006 devel)
  • mto: This revision was merged to the branch mainline in revision 14010.
  • Revision ID: jelmer@canonical.com-20110921142802-7ggkc204igsy532w
MergeĀ lp:launchpad

Show diffs side-by-side

added added

removed removed

Lines of Context:
46
46
    )
47
47
from lp.registry.interfaces.person import IPerson
48
48
from lp.registry.interfaces.product import IProduct
 
49
from lp.registry.interfaces.projectgroup import IProjectGroup
49
50
from lp.registry.interfaces.sourcepackagename import ISourcePackageName
50
51
from lp.registry.model.pillaraffiliation import IHasAffiliation
51
52
from lp.registry.model.sourcepackagename import getSourcePackageDescriptions
73
74
    link_css = Attribute('CSS Class for links')
74
75
    badges = Attribute('List of badge img attributes')
75
76
    metadata = Attribute('Metadata about the entry')
 
77
    target_type = Attribute('Target data for target picker entries.')
76
78
 
77
79
 
78
80
class PickerEntry:
81
83
 
82
84
    def __init__(self, description=None, image=None, css=None, alt_title=None,
83
85
                 title_link=None, details=None, alt_title_link=None,
84
 
                 link_css='sprite new-window', badges=None, metadata=None):
 
86
                 link_css='sprite new-window', badges=None, metadata=None,
 
87
                 target_type=None):
85
88
        self.description = description
86
89
        self.image = image
87
90
        self.css = css
92
95
        self.link_css = link_css
93
96
        self.badges = badges
94
97
        self.metadata = metadata
 
98
        self.target_type = target_type
95
99
 
96
100
 
97
101
class IPickerEntrySource(Interface):
233
237
class TargetPickerEntrySourceAdapter(DefaultPickerEntrySourceAdapter):
234
238
    """Adapt targets (Product, Package, Distribution) to PickerEntrySource."""
235
239
 
 
240
    target_type = ""
 
241
 
236
242
    def getDescription(self, target):
237
243
        """Gets the description data for target picker entries."""
238
244
        raise NotImplemented
239
245
 
 
246
    def getMaintainer(self, target):
 
247
        """Gets the maintainer information for the target picker entry."""
 
248
        raise NotImplemented
 
249
 
240
250
    def getPickerEntries(self, term_values, context_object, **kwarg):
241
251
        """See `IPickerEntrySource`"""
242
252
        entries = (
244
254
                .getPickerEntries(term_values, context_object, **kwarg))
245
255
        for target, picker_entry in izip(term_values, entries):
246
256
            picker_entry.description = self.getDescription(target)
 
257
            enhanced = bool(getFeatureFlag(
 
258
                'disclosure.target_picker_enhancements.enabled'))
 
259
            if enhanced:
 
260
                picker_entry.alt_title = target.name
 
261
                picker_entry.target_type = self.target_type
 
262
                maintainer = self.getMaintainer(target)
 
263
                if maintainer is not None:
 
264
                    picker_entry.details = [
 
265
                        'Maintainer: %s' % self.getMaintainer(target)]
247
266
        return entries
248
267
 
249
268
 
269
288
    TargetPickerEntrySourceAdapter):
270
289
    """Adapts IDistributionSourcePackage to IPickerEntrySource."""
271
290
 
 
291
    target_type = "package"
 
292
 
 
293
    def getMaintainer(self, target):
 
294
        """See `TargetPickerEntrySource`"""
 
295
        return target.currentrelease.maintainer.displayname
 
296
 
272
297
    def getDescription(self, target):
273
298
        """See `TargetPickerEntrySource`"""
274
299
        binaries = target.publishing_history[0].getBuiltBinaries()
280
305
        return description
281
306
 
282
307
 
 
308
@adapter(IProjectGroup)
 
309
class ProjectGroupPickerEntrySourceAdapter(TargetPickerEntrySourceAdapter):
 
310
    """Adapts IProduct to IPickerEntrySource."""
 
311
 
 
312
    target_type = "project group"
 
313
 
 
314
    def getMaintainer(self, target):
 
315
        """See `TargetPickerEntrySource`"""
 
316
        return target.owner.displayname
 
317
 
 
318
    def getDescription(self, target):
 
319
        """See `TargetPickerEntrySource`"""
 
320
        return target.summary
 
321
 
 
322
 
283
323
@adapter(IProduct)
284
324
class ProductPickerEntrySourceAdapter(TargetPickerEntrySourceAdapter):
285
325
    """Adapts IProduct to IPickerEntrySource."""
286
326
 
 
327
    target_type = "project"
 
328
 
 
329
    def getMaintainer(self, target):
 
330
        """See `TargetPickerEntrySource`"""
 
331
        return target.owner.displayname
 
332
 
287
333
    def getDescription(self, target):
288
334
        """See `TargetPickerEntrySource`"""
289
335
        return target.summary
292
338
@adapter(IDistribution)
293
339
class DistributionPickerEntrySourceAdapter(TargetPickerEntrySourceAdapter):
294
340
 
 
341
    target_type = "distribution"
 
342
 
 
343
    def getMaintainer(self, target):
 
344
        """See `TargetPickerEntrySource`"""
 
345
        try:
 
346
            return target.currentseries.owner.displayname
 
347
        except AttributeError:
 
348
            return None
 
349
 
295
350
    def getDescription(self, target):
296
351
        """See `TargetPickerEntrySource`"""
297
352
        return target.summary
434
489
                entry['badges'] = picker_entry.badges
435
490
            if picker_entry.metadata is not None:
436
491
                entry['metadata'] = picker_entry.metadata
 
492
            if picker_entry.target_type is not None:
 
493
                entry['target_type'] = picker_entry.target_type
437
494
            result.append(entry)
438
495
 
439
496
        self.request.response.setHeader('Content-type', 'application/json')