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).
4
4
# pylint: disable-msg=F0401,E1002
26
from storm.store import (
27
from storm.store import Store
28
from zope.component import (
30
from zope.component import getUtility
31
31
from zope.interface import (
36
from canonical.database.constants import UTC_NOW
37
from canonical.launchpad.browser.librarian import ProxiedLibraryFileAlias
38
from canonical.launchpad.interfaces.lpstorm import (
42
from canonical.launchpad.webapp import errorlog
36
43
from lp.app.errors import NotFoundError
37
44
from lp.buildmaster.enums import (
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 (
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
103
100
def binary_builds(self):
104
101
"""See `ISourcePackageRecipeBuild`."""
105
return Store.of(self).find(
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)
232
228
# disabled, security, wrong pocket etc
234
230
' - daily build failed for %s: %s',
235
series_name, repr(e))
236
232
except BuildNotAllowedForDistro:
238
234
' - cannot build against %s.' % series_name)
287
285
PackageBuild.build_farm_job_id == build_farm_job.id).one()
290
def preloadBuildsData(cls, builds):
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'])
298
SourcePackageRecipe, builds, ['recipe_id'])
299
SourcePackageRecipe.preLoadDataForSourcePackageRecipes(sprs)
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]
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)
316
288
def getRecentBuilds(cls, requester, recipe, distroseries, _now=None):
317
289
from lp.buildmaster.model.buildfarmjob import BuildFarmJob
431
403
We override this to provide a delegate specific to package builds."""
432
404
self.build_farm_job = BuildFarmBuildJob(self.build)
435
def preloadBuildFarmJobs(jobs):
436
from lp.code.model.sourcepackagerecipebuild import (
437
SourcePackageRecipeBuild,
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]))
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)
453
407
def new(cls, build, job):
454
408
"""See `ISourcePackageRecipeBuildJobSource`."""