~launchpad-pqm/launchpad/devel

« back to all changes in this revision

Viewing changes to lib/lp/code/model/sourcepackagerecipebuild.py

  • Committer: Julian Edwards
  • Date: 2011-07-28 20:46:18 UTC
  • mfrom: (13553 devel)
  • mto: This revision was merged to the branch mainline in revision 13555.
  • Revision ID: julian.edwards@canonical.com-20110728204618-tivj2wx2oa9s32bx
merge trunk

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright 2010-2011 Canonical Ltd.  This software is licensed under the
 
1
# Copyright 2010 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=F0401,E1002
15
15
    timedelta,
16
16
    )
17
17
import logging
 
18
import sys
18
19
 
19
20
from psycopg2 import ProgrammingError
20
21
from pytz import utc
23
24
    Reference,
24
25
    Storm,
25
26
    )
26
 
from storm.store import (
27
 
    EmptyResultSet,
28
 
    Store,
 
27
from storm.store import Store
 
28
from zope.component import (
 
29
    getUtility,
29
30
    )
30
 
from zope.component import getUtility
31
31
from zope.interface import (
32
32
    classProvides,
33
33
    implements,
34
34
    )
35
35
 
36
36
from canonical.database.constants import UTC_NOW
 
37
from canonical.launchpad.browser.librarian import ProxiedLibraryFileAlias
 
38
from canonical.launchpad.interfaces.lpstorm import (
 
39
    IMasterStore,
 
40
    IStore,
 
41
    )
 
42
from canonical.launchpad.webapp import errorlog
37
43
from lp.app.errors import NotFoundError
38
44
from lp.buildmaster.enums import (
39
45
    BuildFarmJobType,
60
66
    )
61
67
from lp.code.model.sourcepackagerecipedata import SourcePackageRecipeData
62
68
from lp.registry.interfaces.pocket import PackagePublishingPocket
63
 
from lp.registry.model.person import Person
64
 
from lp.services.database.bulk import load_related
65
 
from lp.services.database.decoratedresultset import DecoratedResultSet
66
 
from lp.services.database.lpstorm import (
67
 
    IMasterStore,
68
 
    IStore,
69
 
    )
70
69
from lp.services.job.model.job import Job
71
 
from lp.services.librarian.browser import ProxiedLibraryFileAlias
72
 
from lp.soyuz.interfaces.archive import CannotUploadToArchive
73
 
from lp.soyuz.model.archive import Archive
74
70
from lp.soyuz.model.binarypackagebuild import BinaryPackageBuild
75
71
from lp.soyuz.model.buildfarmbuildjob import BuildFarmBuildJob
 
72
from lp.soyuz.interfaces.archive import CannotUploadToArchive
76
73
from lp.soyuz.model.sourcepackagerelease import SourcePackageRelease
77
74
 
78
75
 
102
99
    @property
103
100
    def binary_builds(self):
104
101
        """See `ISourcePackageRecipeBuild`."""
105
 
        return Store.of(self).find(
106
 
            BinaryPackageBuild,
 
102
        return Store.of(self).find(BinaryPackageBuild,
107
103
            BinaryPackageBuild.source_package_release ==
108
 
                SourcePackageRelease.id,
 
104
            SourcePackageRelease.id,
109
105
            SourcePackageRelease.source_package_recipe_build == self.id)
110
106
 
111
107
    @property
232
228
                    # disabled, security, wrong pocket etc
233
229
                    logger.debug(
234
230
                        ' - daily build failed for %s: %s',
235
 
                        series_name, repr(e))
 
231
                        series_name, str(e))
236
232
                except BuildNotAllowedForDistro:
237
233
                    logger.debug(
238
234
                        ' - cannot build against %s.' % series_name)
240
236
                    raise
241
237
                except:
242
238
                    logger.exception(' - problem with %s', series_name)
 
239
                    info = sys.exc_info()
 
240
                    errorlog.globalErrorUtility.raising(info)
243
241
                else:
244
242
                    logger.debug(' - build requested for %s', series_name)
245
243
                    builds.append(build)
287
285
            PackageBuild.build_farm_job_id == build_farm_job.id).one()
288
286
 
289
287
    @classmethod
290
 
    def getByBuildFarmJobs(cls, build_farm_jobs):
291
 
        """See `ISpecificBuildFarmJobSource`."""
292
 
        if len(build_farm_jobs) == 0:
293
 
            return EmptyResultSet()
294
 
        build_farm_job_ids = [
295
 
            build_farm_job.id for build_farm_job in build_farm_jobs]
296
 
 
297
 
        def eager_load(rows):
298
 
            # Circular imports.
299
 
            from lp.code.model.sourcepackagerecipe import SourcePackageRecipe
300
 
            package_builds = load_related(
301
 
                PackageBuild, rows, ['package_build_id'])
302
 
            archives = load_related(Archive, package_builds, ['archive_id'])
303
 
            load_related(Person, archives, ['ownerID'])
304
 
            sprs = load_related(
305
 
                SourcePackageRecipe, rows, ['recipe_id'])
306
 
            SourcePackageRecipe.preLoadDataForSourcePackageRecipes(sprs)
307
 
        resultset = Store.of(build_farm_jobs[0]).find(cls,
308
 
            cls.package_build_id == PackageBuild.id,
309
 
            PackageBuild.build_farm_job_id.is_in(build_farm_job_ids))
310
 
        return DecoratedResultSet(resultset, pre_iter_hook=eager_load)
311
 
 
312
 
    @classmethod
313
288
    def getRecentBuilds(cls, requester, recipe, distroseries, _now=None):
314
289
        from lp.buildmaster.model.buildfarmjob import BuildFarmJob
315
290
        if _now is None: