~launchpad-pqm/launchpad/devel

« back to all changes in this revision

Viewing changes to lib/lp/bugs/model/bugtarget.py

[r=allenap][bug=874250] Resurrect
 bugnomination-timeout-bug-874250-lazy-heat from the dead.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright 2010 Canonical Ltd.  This software is licensed under the
 
1
# Copyright 2010-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
# pylint: disable-msg=E0611,W0212
17
17
from storm.locals import (
18
18
    Int,
19
19
    Reference,
 
20
    SQL,
20
21
    Storm,
21
22
    Unicode,
22
23
    )
23
24
from zope.component import getUtility
24
25
from zope.interface import implements
25
26
 
26
 
from canonical.database.sqlbase import (
27
 
    cursor,
28
 
    sqlvalues,
29
 
    )
 
27
from canonical.database.sqlbase import sqlvalues
30
28
from canonical.launchpad.interfaces.lpstorm import (
31
29
    IMasterObject,
32
30
    IMasterStore,
52
50
    UNRESOLVED_BUGTASK_STATUSES,
53
51
    )
54
52
from lp.bugs.interfaces.bugtaskfilter import simple_weight_calculator
55
 
from lp.bugs.model.bugtask import (
56
 
    BugTaskSet,
57
 
    )
 
53
from lp.bugs.model.bugtask import BugTaskSet
58
54
from lp.registry.interfaces.distribution import IDistribution
59
55
from lp.registry.interfaces.distributionsourcepackage import (
60
56
    IDistributionSourcePackage,
300
296
        else:
301
297
            raise NotImplementedError
302
298
 
303
 
        results = [0]
304
 
        for query in sql:
305
 
            cur = cursor()
306
 
            cur.execute(query)
307
 
            record = cur.fetchone()
308
 
            if record is not None:
309
 
                results.append(record[0])
310
 
            cur.close()
311
 
        self.setMaxBugHeat(max(results))
 
299
        # Use Storm's lazy expression values
 
300
        # <https://storm.canonical.com/Tutorial#Expression_values>
 
301
        expr = SQL(
 
302
            "(SELECT COALESCE(MAX(heat), 0) FROM (%s) AS geoff)" % (
 
303
                " UNION ALL ".join("(%s)" % query for query in sql)))
 
304
        self.setMaxBugHeat(expr)
312
305
 
313
306
        # If the product is part of a project group we calculate the maximum
314
307
        # heat for the project group too.