~launchpad-pqm/launchpad/devel

« back to all changes in this revision

Viewing changes to lib/lp/bugs/interfaces/bugtask.py

  • Committer: Launchpad Patch Queue Manager
  • Date: 2011-10-06 01:24:37 UTC
  • mfrom: (14039.1.12 bug-759467)
  • Revision ID: launchpad@pqm.canonical.com-20111006012437-x4xn9cohnyp5ztlx
[r=gmb][bug=759467] [r=gmb][bug=759467] Store
 INCOMPLETE_WITH_RESPONSE and INCOMPLETE_WITHOUT_RESPONSE for BugTask status
 to make queries more efficient.

Show diffs side-by-side

added added

removed removed

Lines of Context:
17
17
    'BugTaskStatus',
18
18
    'BugTaskStatusSearch',
19
19
    'BugTaskStatusSearchDisplay',
 
20
    'DB_INCOMPLETE_BUGTASK_STATUSES',
 
21
    'DB_UNRESOLVED_BUGTASK_STATUSES',
20
22
    'DEFAULT_SEARCH_BUGTASK_STATUSES_FOR_DISPLAY',
21
23
    'IAddBugTaskForm',
22
24
    'IAddBugTaskWithProductCreationForm',
196
198
        this product or source package.
197
199
        """)
198
200
 
 
201
    # INCOMPLETE is never actually stored now: INCOMPLETE_WITH_RESPONSE and
 
202
    # INCOMPLETE_WITHOUT_RESPONSE are mapped to INCOMPLETE on read, and on
 
203
    # write INCOMPLETE is mapped to INCOMPLETE_WITHOUT_RESPONSE. This permits
 
204
    # An index on the INCOMPLETE_WITH*_RESPONSE queries that the webapp
 
205
    # generates.
199
206
    INCOMPLETE = DBItem(15, """
200
207
        Incomplete
201
208
 
269
276
        affected software.
270
277
        """)
271
278
 
272
 
    # DBItem values 35 and 40 are used by
273
 
    # BugTaskStatusSearch.INCOMPLETE_WITH_RESPONSE and
274
 
    # BugTaskStatusSearch.INCOMPLETE_WITHOUT_RESPONSE
275
 
 
276
279
    UNKNOWN = DBItem(999, """
277
280
        Unknown
278
281
 
287
290
    """
288
291
    use_template(BugTaskStatus, exclude=('UNKNOWN'))
289
292
 
290
 
    sort_order = (
291
 
        'NEW', 'INCOMPLETE_WITH_RESPONSE', 'INCOMPLETE_WITHOUT_RESPONSE',
292
 
        'INCOMPLETE', 'OPINION', 'INVALID', 'WONTFIX', 'EXPIRED',
293
 
        'CONFIRMED', 'TRIAGED', 'INPROGRESS', 'FIXCOMMITTED', 'FIXRELEASED')
294
 
 
295
 
    INCOMPLETE_WITH_RESPONSE = DBItem(35, """
 
293
    INCOMPLETE_WITH_RESPONSE = DBItem(13, """
296
294
        Incomplete (with response)
297
295
 
298
296
        This bug has new information since it was last marked
299
297
        as requiring a response.
300
298
        """)
301
299
 
302
 
    INCOMPLETE_WITHOUT_RESPONSE = DBItem(40, """
 
300
    INCOMPLETE_WITHOUT_RESPONSE = DBItem(14, """
303
301
        Incomplete (without response)
304
302
 
305
303
        This bug requires more information, but no additional
371
369
    BugTaskStatus.INPROGRESS,
372
370
    BugTaskStatus.FIXCOMMITTED)
373
371
 
 
372
# Actual values stored in the DB:
 
373
DB_INCOMPLETE_BUGTASK_STATUSES = (
 
374
    BugTaskStatusSearch.INCOMPLETE_WITH_RESPONSE,
 
375
    BugTaskStatusSearch.INCOMPLETE_WITHOUT_RESPONSE,
 
376
    )
 
377
 
 
378
DB_UNRESOLVED_BUGTASK_STATUSES = (
 
379
    UNRESOLVED_BUGTASK_STATUSES +
 
380
    DB_INCOMPLETE_BUGTASK_STATUSES
 
381
    )
 
382
 
374
383
RESOLVED_BUGTASK_STATUSES = (
375
384
    BugTaskStatus.FIXRELEASED,
376
385
    BugTaskStatus.OPINION,
481
490
    # bugwatch; this would be better described in a separate interface,
482
491
    # but adding a marker interface during initialization is expensive,
483
492
    # and adding it post-initialization is not trivial.
 
493
    # Note that status is a property because the model only exposes INCOMPLETE
 
494
    # but the DB stores INCOMPLETE_WITH_RESPONSE and
 
495
    # INCOMPLETE_WITHOUT_RESPONSE for query efficiency.
484
496
    status = exported(
485
497
        Choice(title=_('Status'), vocabulary=BugTaskStatus,
486
498
               default=BugTaskStatus.NEW, readonly=True))
 
499
    _status = Attribute('The actual status DB column used in queries.')
487
500
    importance = exported(
488
501
        Choice(title=_('Importance'), vocabulary=BugTaskImportance,
489
502
               default=BugTaskImportance.UNDECIDED, readonly=True))