~launchpad-pqm/launchpad/devel

« back to all changes in this revision

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

  • Committer: Launchpad Patch Queue Manager
  • Date: 2011-08-03 11:23:34 UTC
  • mfrom: (13457.6.16 upgrade-stderr)
  • Revision ID: launchpad@pqm.canonical.com-20110803112334-acnupsa7jmzmdeet
[r=stevenk][bug=819751] Fix the implementation of several methods in
 LoggingUIFactory.

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
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
36
43
from lp.app.errors import NotFoundError
37
44
from lp.buildmaster.enums import (
38
45
    BuildFarmJobType,
59
66
    )
60
67
from lp.code.model.sourcepackagerecipedata import SourcePackageRecipeData
61
68
from lp.registry.interfaces.pocket import PackagePublishingPocket
62
 
from lp.registry.model.person import Person
63
 
from lp.services.database.bulk import load_related
64
 
from lp.services.database.constants import UTC_NOW
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 preloadBuildsData(cls, builds):
291
 
        # Circular imports.
292
 
        from lp.code.model.sourcepackagerecipe import SourcePackageRecipe
293
 
        package_builds = load_related(
294
 
            PackageBuild, builds, ['package_build_id'])
295
 
        archives = load_related(Archive, package_builds, ['archive_id'])
296
 
        load_related(Person, archives, ['ownerID'])
297
 
        sprs = load_related(
298
 
            SourcePackageRecipe, builds, ['recipe_id'])
299
 
        SourcePackageRecipe.preLoadDataForSourcePackageRecipes(sprs)
300
 
 
301
 
    @classmethod
302
 
    def getByBuildFarmJobs(cls, build_farm_jobs):
303
 
        """See `ISpecificBuildFarmJobSource`."""
304
 
        if len(build_farm_jobs) == 0:
305
 
            return EmptyResultSet()
306
 
        build_farm_job_ids = [
307
 
            build_farm_job.id for build_farm_job in build_farm_jobs]
308
 
 
309
 
        resultset = Store.of(build_farm_jobs[0]).find(cls,
310
 
            cls.package_build_id == PackageBuild.id,
311
 
            PackageBuild.build_farm_job_id.is_in(build_farm_job_ids))
312
 
        return DecoratedResultSet(
313
 
            resultset, pre_iter_hook=cls.preloadBuildsData)
314
 
 
315
 
    @classmethod
316
288
    def getRecentBuilds(cls, requester, recipe, distroseries, _now=None):
317
289
        from lp.buildmaster.model.buildfarmjob import BuildFarmJob
318
290
        if _now is None:
431
403
        We override this to provide a delegate specific to package builds."""
432
404
        self.build_farm_job = BuildFarmBuildJob(self.build)
433
405
 
434
 
    @staticmethod
435
 
    def preloadBuildFarmJobs(jobs):
436
 
        from lp.code.model.sourcepackagerecipebuild import (
437
 
            SourcePackageRecipeBuild,
438
 
            )
439
 
        return list(IStore(SourcePackageRecipeBuildJob).find(
440
 
            SourcePackageRecipeBuild,
441
 
            [SourcePackageRecipeBuildJob.id.is_in([job.id for job in jobs]),
442
 
             SourcePackageRecipeBuildJob.build_id ==
443
 
                 SourcePackageRecipeBuild.id]))
444
 
 
445
 
    @classmethod
446
 
    def preloadJobsData(cls, jobs):
447
 
        load_related(Job, jobs, ['job_id'])
448
 
        builds = load_related(
449
 
            SourcePackageRecipeBuild, jobs, ['build_id'])
450
 
        SourcePackageRecipeBuild.preloadBuildsData(builds)
451
 
 
452
406
    @classmethod
453
407
    def new(cls, build, job):
454
408
        """See `ISourcePackageRecipeBuildJobSource`."""