Merge lp:~jml/launchpad/fix-import-warnings into lp:launchpad

Proposed by Jonathan Lange
Status: Merged
Approved by: Michael Hudson-Doyle
Approved revision: not available
Merged at revision: not available
Proposed branch: lp:~jml/launchpad/fix-import-warnings
Merge into: lp:launchpad
Diff against target: 924 lines (+118/-96)
32 files modified
lib/lp/bugs/browser/bug.py (+1/-2)
lib/lp/bugs/browser/bugtarget.py (+4/-3)
lib/lp/bugs/subscribers/bug.py (+7/-6)
lib/lp/bugs/subscribers/bugactivity.py (+4/-2)
lib/lp/bugs/subscribers/buglastupdated.py (+3/-1)
lib/lp/code/browser/branch.py (+3/-5)
lib/lp/code/interfaces/branch.py (+1/-2)
lib/lp/code/interfaces/branchjob.py (+3/-3)
lib/lp/code/interfaces/branchmergeproposal.py (+7/-3)
lib/lp/code/model/branchjob.py (+3/-4)
lib/lp/code/model/branchmergeproposaljob.py (+1/-0)
lib/lp/code/model/branchnamespace.py (+1/-2)
lib/lp/code/model/codeimport.py (+3/-4)
lib/lp/codehosting/inmemory.py (+3/-3)
lib/lp/codehosting/puller/worker.py (+3/-4)
lib/lp/codehosting/scanner/bzrsync.py (+3/-2)
lib/lp/codehosting/scanner/email.py (+2/-3)
lib/lp/codehosting/vfs/branchfs.py (+3/-0)
lib/lp/registry/browser/distributionsourcepackage.py (+2/-1)
lib/lp/registry/browser/mentoringoffer.py (+1/-1)
lib/lp/registry/browser/person.py (+2/-2)
lib/lp/registry/browser/product.py (+1/-1)
lib/lp/registry/browser/structuralsubscription.py (+8/-6)
lib/lp/registry/interfaces/distroseries.py (+1/-0)
lib/lp/registry/model/distributionsourcepackage.py (+2/-1)
lib/lp/registry/model/product.py (+7/-9)
lib/lp/scripts/utilities/importfascist.py (+7/-2)
lib/lp/services/job/runner.py (+5/-1)
lib/lp/soyuz/browser/sourcepackagerelease.py (+5/-0)
lib/lp/soyuz/scripts/gina/packages.py (+12/-10)
lib/lp/translations/scripts/po_import.py (+5/-6)
lib/lp/translations/scripts/translations_to_branch.py (+5/-7)
To merge this branch: bzr merge lp:~jml/launchpad/fix-import-warnings
Reviewer Review Type Date Requested Status
Michael Hudson-Doyle Approve
Review via email: mp+16965@code.launchpad.net

Commit message

Fix all of the import problems that were exposed by checking the 'lp' package

To post a comment you must log in.
Revision history for this message
Jonathan Lange (jml) wrote :

This fixes a bunch of the import warnings, hopefully in a sane way.

Revision history for this message
Michael Hudson-Doyle (mwhudson) wrote :

All good.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'lib/lp/bugs/browser/bug.py'
--- lib/lp/bugs/browser/bug.py 2009-12-09 16:32:19 +0000
+++ lib/lp/bugs/browser/bug.py 2010-01-10 04:32:20 +0000
@@ -49,9 +49,8 @@
49from canonical.cachedproperty import cachedproperty49from canonical.cachedproperty import cachedproperty
5050
51from canonical.launchpad import _51from canonical.launchpad import _
52from canonical.launchpad.interfaces._schema_circular_imports import IBug
53from canonical.launchpad.webapp.interfaces import ILaunchBag, NotFoundError52from canonical.launchpad.webapp.interfaces import ILaunchBag, NotFoundError
54from lp.bugs.interfaces.bug import IBugSet53from lp.bugs.interfaces.bug import IBug, IBugSet
55from lp.bugs.interfaces.bugattachment import BugAttachmentType54from lp.bugs.interfaces.bugattachment import BugAttachmentType
56from lp.bugs.interfaces.bugtask import (55from lp.bugs.interfaces.bugtask import (
57 BugTaskSearchParams, BugTaskStatus, IBugTask, IFrontPageBugTaskSearch)56 BugTaskSearchParams, BugTaskStatus, IBugTask, IFrontPageBugTaskSearch)
5857
=== modified file 'lib/lp/bugs/browser/bugtarget.py'
--- lib/lp/bugs/browser/bugtarget.py 2009-12-16 10:31:39 +0000
+++ lib/lp/bugs/browser/bugtarget.py 2010-01-10 04:32:20 +0000
@@ -39,6 +39,7 @@
39from canonical.cachedproperty import cachedproperty39from canonical.cachedproperty import cachedproperty
40from canonical.config import config40from canonical.config import config
41from lp.bugs.browser.bugtask import BugTaskSearchListingView41from lp.bugs.browser.bugtask import BugTaskSearchListingView
42from lp.bugs.interfaces.bug import IBug
42from canonical.launchpad.browser.feeds import (43from canonical.launchpad.browser.feeds import (
43 BugFeedLink, BugTargetLatestBugsFeedLink, FeedsMixin,44 BugFeedLink, BugTargetLatestBugsFeedLink, FeedsMixin,
44 PersonLatestBugsFeedLink)45 PersonLatestBugsFeedLink)
@@ -50,8 +51,6 @@
50 BugTaskStatus, IBugTaskSet, UNRESOLVED_BUGTASK_STATUSES)51 BugTaskStatus, IBugTaskSet, UNRESOLVED_BUGTASK_STATUSES)
51from canonical.launchpad.interfaces.launchpad import (52from canonical.launchpad.interfaces.launchpad import (
52 IHasExternalBugTracker, ILaunchpadUsage)53 IHasExternalBugTracker, ILaunchpadUsage)
53from canonical.launchpad.interfaces._schema_circular_imports import (
54 IBug, IDistribution)
55from canonical.launchpad.interfaces.hwdb import IHWSubmissionSet54from canonical.launchpad.interfaces.hwdb import IHWSubmissionSet
56from canonical.launchpad.interfaces.launchpad import ILaunchpadCelebrities55from canonical.launchpad.interfaces.launchpad import ILaunchpadCelebrities
57from canonical.launchpad.interfaces.temporaryblobstorage import (56from canonical.launchpad.interfaces.temporaryblobstorage import (
@@ -62,11 +61,13 @@
62from lp.bugs.interfaces.bug import (61from lp.bugs.interfaces.bug import (
63 CreateBugParams, IBugAddForm, IProjectBugAddForm)62 CreateBugParams, IBugAddForm, IProjectBugAddForm)
64from lp.bugs.interfaces.malone import IMaloneApplication63from lp.bugs.interfaces.malone import IMaloneApplication
64from lp.registry.interfaces.distribution import IDistribution
65from lp.registry.interfaces.distributionsourcepackage import (65from lp.registry.interfaces.distributionsourcepackage import (
66 IDistributionSourcePackage)66 IDistributionSourcePackage)
67from lp.registry.interfaces.distroseries import IDistroSeries67from lp.registry.interfaces.distroseries import IDistroSeries
68from lp.registry.interfaces.product import IProduct, IProject68from lp.registry.interfaces.product import IProduct
69from lp.registry.interfaces.productseries import IProductSeries69from lp.registry.interfaces.productseries import IProductSeries
70from lp.registry.interfaces.project import IProject
70from lp.registry.interfaces.sourcepackage import ISourcePackage71from lp.registry.interfaces.sourcepackage import ISourcePackage
71from canonical.launchpad.webapp import (72from canonical.launchpad.webapp import (
72 LaunchpadEditFormView, LaunchpadFormView, LaunchpadView, action,73 LaunchpadEditFormView, LaunchpadFormView, LaunchpadView, action,
7374
=== modified file 'lib/lp/bugs/subscribers/bug.py'
--- lib/lp/bugs/subscribers/bug.py 2009-06-25 00:40:31 +0000
+++ lib/lp/bugs/subscribers/bug.py 2010-01-10 04:32:20 +0000
@@ -1,4 +1,4 @@
1# Copyright 2009 Canonical Ltd. This software is licensed under the1# Copyright 2009, 2010 Canonical Ltd. This software is licensed under the
2# GNU Affero General Public License version 3 (see the file LICENSE).2# GNU Affero General Public License version 3 (see the file LICENSE).
33
4__metaclass__ = type4__metaclass__ = type
@@ -6,19 +6,20 @@
66
77
8from canonical.database.sqlbase import block_implicit_flushes8from canonical.database.sqlbase import block_implicit_flushes
9from canonical.launchpad.interfaces._schema_circular_imports import IPerson9from lp.registry.interfaces.person import IPerson
10
11
10@block_implicit_flushes12@block_implicit_flushes
11def notify_bug_modified(bug, event):13def notify_bug_modified(bug, event):
12 """Handle bug change events.14 """Handle bug change events.
13 15
14 Subscribe the security contacts for a bug when it16 Subscribe the security contacts for a bug when it
15 becomes security-related.17 becomes security-related.
16 """18 """
17 if (event.object.security_related and19 if (event.object.security_related and
18 not event.object_before_modification.security_related):20 not event.object_before_modification.security_related):
19 # The bug turned to be security-related, 21 # The bug turned out to be security-related, subscribe the security
20 # subscribe the security contact.22 # contact.
21 for pillar in bug.affected_pillars:23 for pillar in bug.affected_pillars:
22 if pillar.security_contact is not None:24 if pillar.security_contact is not None:
23 bug.subscribe(pillar.security_contact, IPerson(event.user))25 bug.subscribe(pillar.security_contact, IPerson(event.user))
24
2526
=== modified file 'lib/lp/bugs/subscribers/bugactivity.py'
--- lib/lp/bugs/subscribers/bugactivity.py 2009-07-17 00:26:05 +0000
+++ lib/lp/bugs/subscribers/bugactivity.py 2010-01-10 04:32:20 +0000
@@ -15,9 +15,11 @@
15from canonical.database.sqlbase import block_implicit_flushes15from canonical.database.sqlbase import block_implicit_flushes
16from lp.bugs.adapters.bugchange import (16from lp.bugs.adapters.bugchange import (
17 BugWatchAdded, BugWatchRemoved)17 BugWatchAdded, BugWatchRemoved)
18from canonical.launchpad.interfaces._schema_circular_imports import IBug, IPerson18from lp.bugs.interfaces.bug import IBug
19from lp.bugs.interfaces.bugactivity import IBugActivitySet19from lp.bugs.interfaces.bugactivity import IBugActivitySet
20from lp.registry.interfaces.milestone import IMilestone, IProductRelease20from lp.registry.interfaces.milestone import IMilestone
21from lp.registry.interfaces.person import IPerson
22from lp.registry.interfaces.productrelease import IProductRelease
21from lp.soyuz.interfaces.sourcepackagerelease import ISourcePackageRelease23from lp.soyuz.interfaces.sourcepackagerelease import ISourcePackageRelease
22from lp.bugs.adapters.bugchange import BugTaskAdded24from lp.bugs.adapters.bugchange import BugTaskAdded
2325
2426
=== modified file 'lib/lp/bugs/subscribers/buglastupdated.py'
--- lib/lp/bugs/subscribers/buglastupdated.py 2009-06-25 00:40:31 +0000
+++ lib/lp/bugs/subscribers/buglastupdated.py 2010-01-10 04:32:20 +0000
@@ -9,8 +9,10 @@
99
10import pytz10import pytz
1111
12from canonical.launchpad.interfaces._schema_circular_imports import IBug12from lp.bugs.interfaces.bug import IBug
13from canonical.launchpad.interfaces.launchpad import IHasBug13from canonical.launchpad.interfaces.launchpad import IHasBug
14
15
14def update_bug_date_last_updated(object, event):16def update_bug_date_last_updated(object, event):
15 """Update IBug.date_last_updated to the current date."""17 """Update IBug.date_last_updated to the current date."""
16 if IBug.providedBy(object):18 if IBug.providedBy(object):
1719
=== modified file 'lib/lp/code/browser/branch.py'
--- lib/lp/code/browser/branch.py 2009-12-18 15:14:45 +0000
+++ lib/lp/code/browser/branch.py 2010-01-10 04:32:20 +0000
@@ -79,16 +79,14 @@
79from lp.code.browser.branchmergeproposal import (79from lp.code.browser.branchmergeproposal import (
80 latest_proposals_for_each_branch)80 latest_proposals_for_each_branch)
81from lp.code.enums import (81from lp.code.enums import (
82 BranchLifecycleStatus, BranchType, RevisionControlSystems,82 BranchLifecycleStatus, BranchType, CodeImportJobState,
83 UICreatableBranchType)83 CodeImportReviewStatus, RevisionControlSystems, UICreatableBranchType)
84from lp.code.errors import InvalidBranchMergeProposal84from lp.code.errors import InvalidBranchMergeProposal
85from lp.code.interfaces.branch import (85from lp.code.interfaces.branch import (
86 BranchCreationForbidden, BranchExists, IBranch,86 BranchCreationForbidden, BranchExists, IBranch,
87 user_has_special_branch_access)87 user_has_special_branch_access)
88from lp.code.interfaces.branchtarget import IBranchTarget88from lp.code.interfaces.branchtarget import IBranchTarget
89from lp.code.interfaces.codeimport import CodeImportReviewStatus89from lp.code.interfaces.codeimportjob import ICodeImportJobWorkflow
90from lp.code.interfaces.codeimportjob import (
91 CodeImportJobState, ICodeImportJobWorkflow)
92from lp.code.interfaces.branchnamespace import IBranchNamespacePolicy90from lp.code.interfaces.branchnamespace import IBranchNamespacePolicy
93from lp.code.interfaces.codereviewvote import ICodeReviewVoteReference91from lp.code.interfaces.codereviewvote import ICodeReviewVoteReference
94from lp.registry.interfaces.person import IPerson, IPersonSet92from lp.registry.interfaces.person import IPerson, IPersonSet
9593
=== modified file 'lib/lp/code/interfaces/branch.py'
--- lib/lp/code/interfaces/branch.py 2009-12-09 08:10:10 +0000
+++ lib/lp/code/interfaces/branch.py 2010-01-10 04:32:20 +0000
@@ -50,8 +50,7 @@
50 call_with, collection_default_content, export_as_webservice_collection,50 call_with, collection_default_content, export_as_webservice_collection,
51 export_as_webservice_entry, export_factory_operation,51 export_as_webservice_entry, export_factory_operation,
52 export_operation_as, export_read_operation, export_write_operation,52 export_operation_as, export_read_operation, export_write_operation,
53 exported, operation_parameters, operation_returns_collection_of,53 exported, operation_parameters, operation_returns_entry, REQUEST_USER)
54 operation_returns_entry, REQUEST_USER)
5554
56from canonical.config import config55from canonical.config import config
5756
5857
=== modified file 'lib/lp/code/interfaces/branchjob.py'
--- lib/lp/code/interfaces/branchjob.py 2009-12-03 21:29:28 +0000
+++ lib/lp/code/interfaces/branchjob.py 2010-01-10 04:32:20 +0000
@@ -15,8 +15,11 @@
15 'IBranchDiffJobSource',15 'IBranchDiffJobSource',
16 'IBranchUpgradeJob',16 'IBranchUpgradeJob',
17 'IBranchUpgradeJobSource',17 'IBranchUpgradeJobSource',
18 'IReclaimBranchSpaceJob',
19 'IReclaimBranchSpaceJobSource',
18 'IRevisionMailJob',20 'IRevisionMailJob',
19 'IRevisionMailJobSource',21 'IRevisionMailJobSource',
22 'IRevisionsAddedJob',
20 'IRevisionsAddedJobSource',23 'IRevisionsAddedJobSource',
21 'IRosettaUploadJob',24 'IRosettaUploadJob',
22 'IRosettaUploadJobSource',25 'IRosettaUploadJobSource',
@@ -31,7 +34,6 @@
31from lp.services.job.interfaces.job import IJob, IRunnableJob34from lp.services.job.interfaces.job import IJob, IRunnableJob
3235
3336
34
35class IBranchJob(Interface):37class IBranchJob(Interface):
36 """A job related to a branch."""38 """A job related to a branch."""
3739
@@ -164,7 +166,6 @@
164 def iterReady():166 def iterReady():
165 """Iterate through ready IRosettaUploadJobs."""167 """Iterate through ready IRosettaUploadJobs."""
166168
167
168 def findUnfinishedJobs(branch, since=None):169 def findUnfinishedJobs(branch, since=None):
169 """Find any `IRosettaUploadJob`s for `branch` that haven't run yet.170 """Find any `IRosettaUploadJob`s for `branch` that haven't run yet.
170171
@@ -193,4 +194,3 @@
193194
194 def iterReady():195 def iterReady():
195 """Iterate through ready IReclaimBranchSpaceJobs."""196 """Iterate through ready IReclaimBranchSpaceJobs."""
196
197197
=== modified file 'lib/lp/code/interfaces/branchmergeproposal.py'
--- lib/lp/code/interfaces/branchmergeproposal.py 2010-01-06 14:14:35 +0000
+++ lib/lp/code/interfaces/branchmergeproposal.py 2010-01-10 04:32:20 +0000
@@ -16,6 +16,8 @@
16 'ICreateMergeProposalJobSource',16 'ICreateMergeProposalJobSource',
17 'IMergeProposalCreatedJob',17 'IMergeProposalCreatedJob',
18 'IMergeProposalCreatedJobSource',18 'IMergeProposalCreatedJobSource',
19 'IUpdatePreviewDiffJobSource',
20 'notify_modified',
19 ]21 ]
2022
2123
@@ -129,8 +131,8 @@
129131
130 reviewed_revision_id = exported(132 reviewed_revision_id = exported(
131 Text(133 Text(
132 title=_("The revision id that has been approved by the reviewer.")134 title=_(
133 ),135 "The revision id that has been approved by the reviewer.")),
134 exported_as='reviewed_revno')136 exported_as='reviewed_revno')
135137
136 commit_message = exported(138 commit_message = exported(
@@ -259,7 +261,7 @@
259 CollectionField(261 CollectionField(
260 title=_('The votes cast or expected for this proposal'),262 title=_('The votes cast or expected for this proposal'),
261 value_type=Reference(schema=Interface), #ICodeReviewVoteReference263 value_type=Reference(schema=Interface), #ICodeReviewVoteReference
262 readonly=True264 readonly=True,
263 )265 )
264 )266 )
265267
@@ -604,6 +606,8 @@
604 """Get a context for running this kind of job in."""606 """Get a context for running this kind of job in."""
605607
606608
609# XXX: JonathanLange 2010-01-06: This is only used in the scanner, perhaps it
610# should be moved there.
607def notify_modified(proposal, func, *args, **kwargs):611def notify_modified(proposal, func, *args, **kwargs):
608 """Call func, then notify about the changes it made.612 """Call func, then notify about the changes it made.
609613
610614
=== modified file 'lib/lp/code/model/branchjob.py'
--- lib/lp/code/model/branchjob.py 2009-12-10 18:20:09 +0000
+++ lib/lp/code/model/branchjob.py 2010-01-10 04:32:20 +0000
@@ -190,7 +190,7 @@
190190
191 def getOopsVars(self):191 def getOopsVars(self):
192 """See `IRunnableJob`."""192 """See `IRunnableJob`."""
193 vars = BaseRunnableJob.getOopsVars(self)193 vars = BaseRunnableJob.getOopsVars(self)
194 vars.extend([194 vars.extend([
195 ('branch_job_id', self.context.id),195 ('branch_job_id', self.context.id),
196 ('branch_job_type', self.context.job_type.title)])196 ('branch_job_type', self.context.job_type.title)])
@@ -203,8 +203,8 @@
203 """A Job that calculates the a diff related to a Branch."""203 """A Job that calculates the a diff related to a Branch."""
204204
205 implements(IBranchDiffJob)205 implements(IBranchDiffJob)
206
207 classProvides(IBranchDiffJobSource)206 classProvides(IBranchDiffJobSource)
207
208 @classmethod208 @classmethod
209 def create(cls, branch, from_revision_spec, to_revision_spec):209 def create(cls, branch, from_revision_spec, to_revision_spec):
210 """See `IBranchDiffJobSource`."""210 """See `IBranchDiffJobSource`."""
@@ -439,7 +439,7 @@
439 history = self.bzr_branch.revision_history()439 history = self.bzr_branch.revision_history()
440 for num, revid in enumerate(history):440 for num, revid in enumerate(history):
441 if revid in added_revisions:441 if revid in added_revisions:
442 yield repository.get_revision(revid), num+1442 yield repository.get_revision(revid), num + 1
443443
444 def generateDiffs(self):444 def generateDiffs(self):
445 """Determine whether to generate diffs."""445 """Determine whether to generate diffs."""
@@ -930,4 +930,3 @@
930 shutil.rmtree(mirrored_path)930 shutil.rmtree(mirrored_path)
931 if os.path.exists(hosted_path):931 if os.path.exists(hosted_path):
932 shutil.rmtree(hosted_path)932 shutil.rmtree(hosted_path)
933
934933
=== modified file 'lib/lp/code/model/branchmergeproposaljob.py'
--- lib/lp/code/model/branchmergeproposaljob.py 2010-01-07 21:02:00 +0000
+++ lib/lp/code/model/branchmergeproposaljob.py 2010-01-10 04:32:20 +0000
@@ -12,6 +12,7 @@
12 'BranchMergeProposalJob',12 'BranchMergeProposalJob',
13 'CreateMergeProposalJob',13 'CreateMergeProposalJob',
14 'MergeProposalCreatedJob',14 'MergeProposalCreatedJob',
15 'UpdatePreviewDiffJob',
15 ]16 ]
1617
17import contextlib18import contextlib
1819
=== modified file 'lib/lp/code/model/branchnamespace.py'
--- lib/lp/code/model/branchnamespace.py 2009-08-04 00:41:49 +0000
+++ lib/lp/code/model/branchnamespace.py 2010-01-10 04:32:20 +0000
@@ -6,7 +6,6 @@
6__metaclass__ = type6__metaclass__ = type
7__all__ = [7__all__ = [
8 'BranchNamespaceSet',8 'BranchNamespaceSet',
9 'get_namespace',
10 'PackageNamespace',9 'PackageNamespace',
11 'PersonalNamespace',10 'PersonalNamespace',
12 'ProductNamespace',11 'ProductNamespace',
@@ -47,9 +46,9 @@
47 IProduct, IProductSet, NoSuchProduct)46 IProduct, IProductSet, NoSuchProduct)
48from lp.registry.interfaces.sourcepackagename import (47from lp.registry.interfaces.sourcepackagename import (
49 ISourcePackageNameSet, NoSuchSourcePackageName)48 ISourcePackageNameSet, NoSuchSourcePackageName)
49from lp.services.utils import iter_split
50from canonical.launchpad.webapp.interfaces import (50from canonical.launchpad.webapp.interfaces import (
51 IStoreSelector, MAIN_STORE, DEFAULT_FLAVOR)51 IStoreSelector, MAIN_STORE, DEFAULT_FLAVOR)
52from lp.code.xmlrpc.codehosting import iter_split
5352
5453
55class _BaseNamespace:54class _BaseNamespace:
5655
=== modified file 'lib/lp/code/model/codeimport.py'
--- lib/lp/code/model/codeimport.py 2010-01-05 21:29:59 +0000
+++ lib/lp/code/model/codeimport.py 2010-01-10 04:32:20 +0000
@@ -35,12 +35,11 @@
35from lp.registry.model.productseries import ProductSeries35from lp.registry.model.productseries import ProductSeries
36from canonical.launchpad.webapp.interfaces import NotFoundError36from canonical.launchpad.webapp.interfaces import NotFoundError
37from lp.code.enums import (37from lp.code.enums import (
38 BranchType, CodeImportResultStatus, CodeImportReviewStatus,38 BranchType, CodeImportJobState, CodeImportResultStatus,
39 RevisionControlSystems)39 CodeImportReviewStatus, RevisionControlSystems)
40from lp.code.interfaces.codeimport import ICodeImport, ICodeImportSet40from lp.code.interfaces.codeimport import ICodeImport, ICodeImportSet
41from lp.code.interfaces.codeimportevent import ICodeImportEventSet41from lp.code.interfaces.codeimportevent import ICodeImportEventSet
42from lp.code.interfaces.codeimportjob import (42from lp.code.interfaces.codeimportjob import ICodeImportJobWorkflow
43 CodeImportJobState, ICodeImportJobWorkflow)
44from lp.code.interfaces.branchnamespace import (43from lp.code.interfaces.branchnamespace import (
45 get_branch_namespace)44 get_branch_namespace)
46from lp.code.model.codeimportresult import CodeImportResult45from lp.code.model.codeimportresult import CodeImportResult
4746
=== modified file 'lib/lp/codehosting/inmemory.py'
--- lib/lp/codehosting/inmemory.py 2009-08-28 06:39:38 +0000
+++ lib/lp/codehosting/inmemory.py 2010-01-10 04:32:20 +0000
@@ -6,7 +6,7 @@
6__metaclass__ = type6__metaclass__ = type
7__all__ = [7__all__ = [
8 'InMemoryFrontend',8 'InMemoryFrontend',
9 'XMLRPCWrapper'9 'XMLRPCWrapper',
10 ]10 ]
1111
12import operator12import operator
@@ -28,10 +28,10 @@
28 BRANCH_TRANSPORT, CONTROL_TRANSPORT, LAUNCHPAD_ANONYMOUS,28 BRANCH_TRANSPORT, CONTROL_TRANSPORT, LAUNCHPAD_ANONYMOUS,
29 LAUNCHPAD_SERVICES)29 LAUNCHPAD_SERVICES)
30from lp.registry.interfaces.pocket import PackagePublishingPocket30from lp.registry.interfaces.pocket import PackagePublishingPocket
31from lp.services.utils import iter_split
31from lp.testing.factory import ObjectFactory32from lp.testing.factory import ObjectFactory
32from canonical.launchpad.validators import LaunchpadValidationError33from canonical.launchpad.validators import LaunchpadValidationError
33from lp.code.xmlrpc.codehosting import (34from lp.code.xmlrpc.codehosting import datetime_from_tuple
34 datetime_from_tuple, iter_split)
35from canonical.launchpad.xmlrpc import faults35from canonical.launchpad.xmlrpc import faults
3636
3737
3838
=== modified file 'lib/lp/codehosting/puller/worker.py'
--- lib/lp/codehosting/puller/worker.py 2009-12-22 00:26:49 +0000
+++ lib/lp/codehosting/puller/worker.py 2010-01-10 04:32:20 +0000
@@ -32,13 +32,11 @@
32 'BranchMirrorer',32 'BranchMirrorer',
33 'BranchLoopError',33 'BranchLoopError',
34 'BranchReferenceForbidden',34 'BranchReferenceForbidden',
35 'BranchReferenceValueError',
36 'get_canonical_url_for_branch_name',35 'get_canonical_url_for_branch_name',
37 'install_worker_ui_factory',36 'install_worker_ui_factory',
38 'PullerWorker',37 'PullerWorker',
39 'PullerWorkerProtocol',38 'PullerWorkerProtocol',
40 'StackedOnBranchNotFound',39 'StackedOnBranchNotFound',
41 'URLChecker',
42 ]40 ]
4341
4442
@@ -363,8 +361,8 @@
363 stacked-on branch for the product of the branch we are mirroring.361 stacked-on branch for the product of the branch we are mirroring.
364 None or '' if there is no such branch.362 None or '' if there is no such branch.
365 :param protocol: An instance of `PullerWorkerProtocol`.363 :param protocol: An instance of `PullerWorkerProtocol`.
366 :param branch_mirrorer: An instance of `BranchMirrorer`. If not passed,364 :param branch_mirrorer: An instance of `BranchMirrorer`. If not
367 one will be chosen based on the value of `branch_type`.365 passed, one will be chosen based on the value of `branch_type`.
368 :param oops_prefix: An oops prefix to pass to `setOopsToken` on the366 :param oops_prefix: An oops prefix to pass to `setOopsToken` on the
369 global ErrorUtility.367 global ErrorUtility.
370 """368 """
@@ -519,6 +517,7 @@
519WORKER_ACTIVITY_PROGRESS_BAR = 'progress bar'517WORKER_ACTIVITY_PROGRESS_BAR = 'progress bar'
520WORKER_ACTIVITY_NETWORK = 'network'518WORKER_ACTIVITY_NETWORK = 'network'
521519
520
522class PullerWorkerUIFactory(SilentUIFactory):521class PullerWorkerUIFactory(SilentUIFactory):
523 """An UIFactory that always says yes to breaking locks."""522 """An UIFactory that always says yes to breaking locks."""
524523
525524
=== modified file 'lib/lp/codehosting/scanner/bzrsync.py'
--- lib/lp/codehosting/scanner/bzrsync.py 2009-12-17 02:00:16 +0000
+++ lib/lp/codehosting/scanner/bzrsync.py 2010-01-10 04:32:20 +0000
@@ -9,6 +9,8 @@
99
10__all__ = [10__all__ = [
11 "BzrSync",11 "BzrSync",
12 'schedule_diff_updates',
13 'schedule_translation_upload',
12 ]14 ]
1315
14import logging16import logging
@@ -31,8 +33,7 @@
31from lp.codehosting.puller.worker import BranchMirrorer33from lp.codehosting.puller.worker import BranchMirrorer
32from lp.codehosting.scanner import events34from lp.codehosting.scanner import events
33from lp.codehosting.vfs.branchfs import BranchPolicy35from lp.codehosting.vfs.branchfs import BranchPolicy
34from lp.code.interfaces.branch import (36from lp.code.bzr import BranchFormat, ControlFormat, RepositoryFormat
35 BranchFormat, ControlFormat, RepositoryFormat)
36from lp.code.interfaces.branchjob import IRosettaUploadJobSource37from lp.code.interfaces.branchjob import IRosettaUploadJobSource
37from lp.code.interfaces.branchrevision import IBranchRevisionSet38from lp.code.interfaces.branchrevision import IBranchRevisionSet
38from lp.code.interfaces.revision import IRevisionSet39from lp.code.interfaces.revision import IRevisionSet
3940
=== modified file 'lib/lp/codehosting/scanner/email.py'
--- lib/lp/codehosting/scanner/email.py 2009-06-30 16:56:07 +0000
+++ lib/lp/codehosting/scanner/email.py 2010-01-10 04:32:20 +0000
@@ -11,12 +11,11 @@
1111
12from zope.component import adapter, getUtility12from zope.component import adapter, getUtility
1313
14from lp.codehosting.scanner import events
15from canonical.config import config14from canonical.config import config
15from lp.code.enums import BranchSubscriptionNotificationLevel
16from lp.code.interfaces.branchjob import (16from lp.code.interfaces.branchjob import (
17 IRevisionsAddedJobSource, IRevisionMailJobSource)17 IRevisionsAddedJobSource, IRevisionMailJobSource)
18from lp.code.interfaces.branchsubscription import (18from lp.codehosting.scanner import events
19 BranchSubscriptionNotificationLevel)
2019
2120
22def subscribers_want_notification(db_branch):21def subscribers_want_notification(db_branch):
2322
=== modified file 'lib/lp/codehosting/vfs/branchfs.py'
--- lib/lp/codehosting/vfs/branchfs.py 2009-12-22 23:50:27 +0000
+++ lib/lp/codehosting/vfs/branchfs.py 2010-01-10 04:32:20 +0000
@@ -50,6 +50,7 @@
50 'AsyncLaunchpadTransport',50 'AsyncLaunchpadTransport',
51 'BadUrl',51 'BadUrl',
52 'BadUrlLaunchpad',52 'BadUrlLaunchpad',
53 'BadUrlScheme',
53 'BadUrlSsh',54 'BadUrlSsh',
54 'branch_id_to_path',55 'branch_id_to_path',
55 'BranchPolicy',56 'BranchPolicy',
@@ -108,6 +109,7 @@
108109
109class BadUrlScheme(BadUrl):110class BadUrlScheme(BadUrl):
110 """Found a URL with an untrusted scheme."""111 """Found a URL with an untrusted scheme."""
112
111 def __init__(self, scheme, url):113 def __init__(self, scheme, url):
112 BadUrl.__init__(self, scheme, url)114 BadUrl.__init__(self, scheme, url)
113 self.scheme = scheme115 self.scheme = scheme
@@ -441,6 +443,7 @@
441443
442444
443class DirectDatabaseLaunchpadServer(AsyncVirtualServer):445class DirectDatabaseLaunchpadServer(AsyncVirtualServer):
446
444 def __init__(self, scheme, branch_transport):447 def __init__(self, scheme, branch_transport):
445 AsyncVirtualServer.__init__(self, scheme)448 AsyncVirtualServer.__init__(self, scheme)
446 self._transport_dispatch = BranchTransportDispatch(branch_transport)449 self._transport_dispatch = BranchTransportDispatch(branch_transport)
447450
=== modified file 'lib/lp/registry/browser/distributionsourcepackage.py'
--- lib/lp/registry/browser/distributionsourcepackage.py 2009-12-05 18:37:28 +0000
+++ lib/lp/registry/browser/distributionsourcepackage.py 2010-01-10 04:32:20 +0000
@@ -44,12 +44,13 @@
44from lp.soyuz.browser.sourcepackagerelease import (44from lp.soyuz.browser.sourcepackagerelease import (
45 extract_bug_numbers, extract_email_addresses, linkify_changelog)45 extract_bug_numbers, extract_email_addresses, linkify_changelog)
46from lp.soyuz.interfaces.archive import IArchiveSet46from lp.soyuz.interfaces.archive import IArchiveSet
47from lp.registry.interfaces.distributionsourcepackage import (
48 IDistributionSourcePackage)
47from lp.soyuz.interfaces.distributionsourcepackagerelease import (49from lp.soyuz.interfaces.distributionsourcepackagerelease import (
48 IDistributionSourcePackageRelease)50 IDistributionSourcePackageRelease)
49from lp.soyuz.interfaces.packagediff import IPackageDiffSet51from lp.soyuz.interfaces.packagediff import IPackageDiffSet
50from lp.registry.browser.packaging import PackagingDeleteView52from lp.registry.browser.packaging import PackagingDeleteView
51from lp.registry.interfaces.pocket import pocketsuffix53from lp.registry.interfaces.pocket import pocketsuffix
52from lp.registry.interfaces.product import IDistributionSourcePackage
53from lp.translations.browser.customlanguagecode import (54from lp.translations.browser.customlanguagecode import (
54 HasCustomLanguageCodesTraversalMixin)55 HasCustomLanguageCodesTraversalMixin)
5556
5657
=== modified file 'lib/lp/registry/browser/mentoringoffer.py'
--- lib/lp/registry/browser/mentoringoffer.py 2009-06-25 04:06:00 +0000
+++ lib/lp/registry/browser/mentoringoffer.py 2010-01-10 04:32:20 +0000
@@ -16,11 +16,11 @@
16 ]16 ]
1717
18from canonical.launchpad import _18from canonical.launchpad import _
19from lp.bugs.interfaces.bugtask import IBugTask
19from lp.blueprints.interfaces.specification import ISpecification20from lp.blueprints.interfaces.specification import ISpecification
20from lp.registry.interfaces.distribution import IDistribution21from lp.registry.interfaces.distribution import IDistribution
21from lp.registry.interfaces.mentoringoffer import (22from lp.registry.interfaces.mentoringoffer import (
22 IMentoringOffer, IMentoringOfferSet)23 IMentoringOffer, IMentoringOfferSet)
23from lp.registry.interfaces.milestone import IBugTask
24from lp.registry.interfaces.person import IPerson24from lp.registry.interfaces.person import IPerson
25from lp.registry.interfaces.product import IProduct25from lp.registry.interfaces.product import IProduct
26from lp.registry.interfaces.project import IProject26from lp.registry.interfaces.project import IProject
2727
=== modified file 'lib/lp/registry/browser/person.py'
--- lib/lp/registry/browser/person.py 2010-01-06 13:42:17 +0000
+++ lib/lp/registry/browser/person.py 2010-01-10 04:32:20 +0000
@@ -144,7 +144,7 @@
144 BugTaskSearchParams, BugTaskStatus, UNRESOLVED_BUGTASK_STATUSES)144 BugTaskSearchParams, BugTaskStatus, UNRESOLVED_BUGTASK_STATUSES)
145from lp.services.worlddata.interfaces.country import ICountry145from lp.services.worlddata.interfaces.country import ICountry
146from canonical.launchpad.interfaces.emailaddress import (146from canonical.launchpad.interfaces.emailaddress import (
147 EmailAddressStatus, IEmailAddressSet)147 EmailAddressStatus, IEmailAddress, IEmailAddressSet)
148from canonical.launchpad.interfaces.geoip import IRequestPreferredLanguages148from canonical.launchpad.interfaces.geoip import IRequestPreferredLanguages
149from canonical.launchpad.interfaces.gpghandler import (149from canonical.launchpad.interfaces.gpghandler import (
150 GPGKeyNotFoundError, IGPGHandler)150 GPGKeyNotFoundError, IGPGHandler)
@@ -165,7 +165,7 @@
165from lp.registry.interfaces.mailinglistsubscription import (165from lp.registry.interfaces.mailinglistsubscription import (
166 MailingListAutoSubscribePolicy)166 MailingListAutoSubscribePolicy)
167from lp.registry.interfaces.person import (167from lp.registry.interfaces.person import (
168 IEmailAddress, INewPerson, IPerson, IPersonChangePassword, IPersonClaim,168 INewPerson, IPerson, IPersonChangePassword, IPersonClaim,
169 IPersonSet, ITeam, ITeamReassignment, PersonCreationRationale,169 IPersonSet, ITeam, ITeamReassignment, PersonCreationRationale,
170 PersonVisibility, TeamMembershipRenewalPolicy, TeamSubscriptionPolicy)170 PersonVisibility, TeamMembershipRenewalPolicy, TeamSubscriptionPolicy)
171from lp.registry.interfaces.poll import IPollSet, IPollSubset171from lp.registry.interfaces.poll import IPollSet, IPollSubset
172172
=== modified file 'lib/lp/registry/browser/product.py'
--- lib/lp/registry/browser/product.py 2009-12-11 19:54:04 +0000
+++ lib/lp/registry/browser/product.py 2010-01-10 04:32:20 +0000
@@ -58,7 +58,7 @@
58from lp.blueprints.browser.specificationtarget import (58from lp.blueprints.browser.specificationtarget import (
59 HasSpecificationsMenuMixin)59 HasSpecificationsMenuMixin)
60from lp.bugs.interfaces.bugtask import RESOLVED_BUGTASK_STATUSES60from lp.bugs.interfaces.bugtask import RESOLVED_BUGTASK_STATUSES
61from lp.bugs.interfaces.bugwatch import IBugTracker61from lp.bugs.interfaces.bugtracker import IBugTracker
62from lp.services.worlddata.interfaces.country import ICountry62from lp.services.worlddata.interfaces.country import ICountry
63from canonical.launchpad.interfaces.launchpad import ILaunchpadCelebrities63from canonical.launchpad.interfaces.launchpad import ILaunchpadCelebrities
64from canonical.launchpad.interfaces.librarian import ILibraryFileAliasSet64from canonical.launchpad.interfaces.librarian import ILibraryFileAliasSet
6565
=== modified file 'lib/lp/registry/browser/structuralsubscription.py'
--- lib/lp/registry/browser/structuralsubscription.py 2009-12-05 18:37:28 +0000
+++ lib/lp/registry/browser/structuralsubscription.py 2010-01-10 04:32:20 +0000
@@ -17,7 +17,8 @@
17from zope.schema.vocabulary import SimpleTerm, SimpleVocabulary17from zope.schema.vocabulary import SimpleTerm, SimpleVocabulary
1818
19from canonical.cachedproperty import cachedproperty19from canonical.cachedproperty import cachedproperty
20from lp.registry.interfaces.product import IDistributionSourcePackage20from lp.registry.interfaces.distributionsourcepackage import (
21 IDistributionSourcePackage)
21from lp.registry.interfaces.structuralsubscription import (22from lp.registry.interfaces.structuralsubscription import (
22 BugNotificationLevel, IStructuralSubscriptionForm)23 BugNotificationLevel, IStructuralSubscriptionForm)
23from lp.registry.interfaces.structuralsubscription import (24from lp.registry.interfaces.structuralsubscription import (
@@ -30,6 +31,7 @@
30from canonical.launchpad.webapp.menu import Link31from canonical.launchpad.webapp.menu import Link
31from canonical.widgets import LabeledMultiCheckBoxWidget32from canonical.widgets import LabeledMultiCheckBoxWidget
3233
34
33class StructuralSubscriptionView(LaunchpadFormView):35class StructuralSubscriptionView(LaunchpadFormView):
34 """View class for structural subscriptions."""36 """View class for structural subscriptions."""
3537
@@ -137,7 +139,7 @@
137 if self.isSubscribed(team))139 if self.isSubscribed(team))
138 return {140 return {
139 'subscribe_me': self.currentUserIsSubscribed(),141 'subscribe_me': self.currentUserIsSubscribed(),
140 'subscriptions_team': subscribed_teams142 'subscriptions_team': subscribed_teams,
141 }143 }
142144
143 def isSubscribed(self, person):145 def isSubscribed(self, person):
@@ -175,7 +177,7 @@
175 is_subscribed = self.isSubscribed(self.user)177 is_subscribed = self.isSubscribed(self.user)
176 subscribe = data['subscribe_me']178 subscribe = data['subscribe_me']
177 if (not is_subscribed) and subscribe:179 if (not is_subscribed) and subscribe:
178 sub = target.addBugSubscription(self.user, self.user)180 target.addBugSubscription(self.user, self.user)
179 self.request.response.addNotification(181 self.request.response.addNotification(
180 'You have subscribed to "%s". You will now receive an '182 'You have subscribed to "%s". You will now receive an '
181 'e-mail each time someone reports or changes one of '183 'e-mail each time someone reports or changes one of '
@@ -204,7 +206,7 @@
204 team for team in teams if self.isSubscribed(team))206 team for team in teams if self.isSubscribed(team))
205207
206 for team in form_selected_teams - subscriptions:208 for team in form_selected_teams - subscriptions:
207 sub = target.addBugSubscription(team, self.user)209 target.addBugSubscription(team, self.user)
208 self.request.response.addNotification(210 self.request.response.addNotification(
209 'The %s team will now receive an e-mail each time '211 'The %s team will now receive an e-mail each time '
210 'someone reports or changes a public bug in "%s".' % (212 'someone reports or changes a public bug in "%s".' % (
@@ -225,7 +227,7 @@
225 target = self.context227 target = self.context
226 new_subscription = data['new_subscription']228 new_subscription = data['new_subscription']
227 if new_subscription is not None:229 if new_subscription is not None:
228 sub = target.addBugSubscription(new_subscription, self.user)230 target.addBugSubscription(new_subscription, self.user)
229 self.request.response.addNotification(231 self.request.response.addNotification(
230 '%s will now receive an e-mail each time someone '232 '%s will now receive an e-mail each time someone '
231 'reports or changes a public bug in "%s".' % (233 'reports or changes a public bug in "%s".' % (
@@ -288,7 +290,7 @@
288290
289 def subscribe(self):291 def subscribe(self):
290 """The subscribe menu link.292 """The subscribe menu link.
291 293
292 If the user, or any of the teams he's a member of, already has a294 If the user, or any of the teams he's a member of, already has a
293 subscription to the context, the link offer to edit the subscriptions295 subscription to the context, the link offer to edit the subscriptions
294 and displays the edit icon. Otherwise, the link offers to subscribe296 and displays the edit icon. Otherwise, the link offers to subscribe
295297
=== modified file 'lib/lp/registry/interfaces/distroseries.py'
--- lib/lp/registry/interfaces/distroseries.py 2009-12-14 13:49:03 +0000
+++ lib/lp/registry/interfaces/distroseries.py 2010-01-10 04:32:20 +0000
@@ -13,6 +13,7 @@
13 'IDistroSeriesEditRestricted',13 'IDistroSeriesEditRestricted',
14 'IDistroSeriesPublic',14 'IDistroSeriesPublic',
15 'IDistroSeriesSet',15 'IDistroSeriesSet',
16 'ISeriesMixin',
16 'NoSuchDistroSeries',17 'NoSuchDistroSeries',
17 ]18 ]
1819
1920
=== modified file 'lib/lp/registry/model/distributionsourcepackage.py'
--- lib/lp/registry/model/distributionsourcepackage.py 2009-12-05 18:37:28 +0000
+++ lib/lp/registry/model/distributionsourcepackage.py 2010-01-10 04:32:20 +0000
@@ -31,8 +31,9 @@
31from lp.bugs.model.bugtarget import BugTargetBase31from lp.bugs.model.bugtarget import BugTargetBase
32from lp.bugs.model.bugtask import BugTask32from lp.bugs.model.bugtask import BugTask
33from lp.code.model.hasbranches import HasBranchesMixin, HasMergeProposalsMixin33from lp.code.model.hasbranches import HasBranchesMixin, HasMergeProposalsMixin
34from lp.registry.interfaces.distributionsourcepackage import (
35 IDistributionSourcePackage)
34from lp.registry.interfaces.pocket import PackagePublishingPocket36from lp.registry.interfaces.pocket import PackagePublishingPocket
35from lp.registry.interfaces.product import IDistributionSourcePackage
36from lp.registry.model.karma import KarmaTotalCache37from lp.registry.model.karma import KarmaTotalCache
37from lp.registry.model.person import Person38from lp.registry.model.person import Person
38from lp.registry.model.sourcepackage import (39from lp.registry.model.sourcepackage import (
3940
=== modified file 'lib/lp/registry/model/product.py'
--- lib/lp/registry/model/product.py 2010-01-06 12:18:25 +0000
+++ lib/lp/registry/model/product.py 2010-01-10 04:32:20 +0000
@@ -221,7 +221,7 @@
221 dbName='mugshot', foreignKey='LibraryFileAlias', default=None)221 dbName='mugshot', foreignKey='LibraryFileAlias', default=None)
222 screenshotsurl = StringCol(222 screenshotsurl = StringCol(
223 dbName='screenshotsurl', notNull=False, default=None)223 dbName='screenshotsurl', notNull=False, default=None)
224 wikiurl = StringCol(dbName='wikiurl', notNull=False, default=None)224 wikiurl = StringCol(dbName='wikiurl', notNull=False, default=None)
225 programminglang = StringCol(225 programminglang = StringCol(
226 dbName='programminglang', notNull=False, default=None)226 dbName='programminglang', notNull=False, default=None)
227 downloadurl = StringCol(dbName='downloadurl', notNull=False, default=None)227 downloadurl = StringCol(dbName='downloadurl', notNull=False, default=None)
@@ -773,7 +773,7 @@
773 Specification.product = %s AND773 Specification.product = %s AND
774 Specification.id = MentoringOffer.specification774 Specification.id = MentoringOffer.specification
775 """ % sqlvalues(self.id) + """ AND NOT775 """ % sqlvalues(self.id) + """ AND NOT
776 (""" + Specification.completeness_clause +")",776 (""" + Specification.completeness_clause + ")",
777 clauseTables=['Specification'],777 clauseTables=['Specification'],
778 distinct=True)778 distinct=True)
779 via_bugs = MentoringOffer.select("""779 via_bugs = MentoringOffer.select("""
@@ -876,7 +876,7 @@
876876
877 # filter based on completion. see the implementation of877 # filter based on completion. see the implementation of
878 # Specification.is_complete() for more details878 # Specification.is_complete() for more details
879 completeness = Specification.completeness_clause879 completeness = Specification.completeness_clause
880880
881 if SpecificationFilter.COMPLETE in filter:881 if SpecificationFilter.COMPLETE in filter:
882 query += ' AND ( %s ) ' % completeness882 query += ' AND ( %s ) ' % completeness
@@ -929,7 +929,6 @@
929 series.driver = owner929 series.driver = owner
930 return series930 return series
931931
932
933 def getRelease(self, version):932 def getRelease(self, version):
934 """See `IProduct`."""933 """See `IProduct`."""
935 store = Store.of(self)934 store = Store.of(self)
@@ -959,14 +958,14 @@
959 Packaging.productseriesID == ProductSeries.id,958 Packaging.productseriesID == ProductSeries.id,
960 ProductSeries.product == self,959 ProductSeries.product == self,
961 Packaging.distroseriesID == DistroSeries.id,960 Packaging.distroseriesID == DistroSeries.id,
962 DistroSeries.distributionID == Distribution.id961 DistroSeries.distributionID == Distribution.id,
963 ).config(distinct=True).order_by(Distribution.name)962 ).config(distinct=True).order_by(Distribution.name)
964963
965 def setBugSupervisor(self, bug_supervisor, user):964 def setBugSupervisor(self, bug_supervisor, user):
966 """See `IHasBugSupervisor`."""965 """See `IHasBugSupervisor`."""
967 self.bug_supervisor = bug_supervisor966 self.bug_supervisor = bug_supervisor
968 if bug_supervisor is not None:967 if bug_supervisor is not None:
969 subscription = self.addBugSubscription(bug_supervisor, user)968 self.addBugSubscription(bug_supervisor, user)
970969
971 def composeCustomLanguageCodeMatch(self):970 def composeCustomLanguageCodeMatch(self):
972 """See `HasCustomLanguageCodesMixin`."""971 """See `HasCustomLanguageCodesMixin`."""
@@ -1008,8 +1007,7 @@
1008 series.getTimeline(include_inactive=include_inactive)1007 series.getTimeline(include_inactive=include_inactive)
1009 for series in series_list1008 for series in series_list
1010 if include_inactive or series.active or1009 if include_inactive or series.active or
1011 series == self.development_focus1010 series == self.development_focus]
1012 ]
10131011
10141012
1015class ProductSet:1013class ProductSet:
@@ -1296,7 +1294,7 @@
1296 Product.id == ProductSeries.productID,1294 Product.id == ProductSeries.productID,
1297 POTemplate.productseriesID == ProductSeries.id,1295 POTemplate.productseriesID == ProductSeries.id,
1298 Product.official_rosetta == True,1296 Product.official_rosetta == True,
1299 Person.id == Product._ownerID1297 Person.id == Product._ownerID,
1300 ).config(distinct=True).order_by(Product.title)1298 ).config(distinct=True).order_by(Product.title)
13011299
1302 # We only want Product - the other tables are just to populate1300 # We only want Product - the other tables are just to populate
13031301
=== modified file 'lib/lp/scripts/utilities/importfascist.py'
--- lib/lp/scripts/utilities/importfascist.py 2009-12-24 06:33:34 +0000
+++ lib/lp/scripts/utilities/importfascist.py 2010-01-10 04:32:20 +0000
@@ -16,6 +16,7 @@
16warnings.filterwarnings('ignore', category=UserWarning, append=True,16warnings.filterwarnings('ignore', category=UserWarning, append=True,
17 message=r'Module .*? is being added to sys.path')17 message=r'Module .*? is being added to sys.path')
1818
19
19def text_lines_to_set(text):20def text_lines_to_set(text):
20 return set(line.strip() for line in text.splitlines() if line.strip())21 return set(line.strip() for line in text.splitlines() if line.strip())
2122
@@ -59,7 +60,11 @@
59 'cookielib': set(['domain_match']),60 'cookielib': set(['domain_match']),
60 'email.Utils': set(['mktime_tz']),61 'email.Utils': set(['mktime_tz']),
61 'textwrap': set(['dedent']),62 'textwrap': set(['dedent']),
62 'zope.component': set(['adapter', 'provideHandler']),63 'zope.component': set(
64 ['adapter',
65 'ComponentLookupError',
66 'provideHandler',
67 ]),
63 }68 }
6469
6570
@@ -279,7 +284,7 @@
279 sorting_map = {284 sorting_map = {
280 DatabaseImportPolicyViolation: database_violations,285 DatabaseImportPolicyViolation: database_violations,
281 FromStarPolicyViolation: fromstar_violations,286 FromStarPolicyViolation: fromstar_violations,
282 NotInModuleAllPolicyViolation: notinall_violations287 NotInModuleAllPolicyViolation: notinall_violations,
283 }288 }
284 for error in naughty_imports:289 for error in naughty_imports:
285 sorting_map[error.__class__].append(error)290 sorting_map[error.__class__].append(error)
286291
=== modified file 'lib/lp/services/job/runner.py'
--- lib/lp/services/job/runner.py 2009-12-10 19:26:46 +0000
+++ lib/lp/services/job/runner.py 2010-01-10 04:32:20 +0000
@@ -8,7 +8,11 @@
8__metaclass__ = type8__metaclass__ = type
99
1010
11__all__ = ['JobRunner']11__all__ = [
12 'BaseRunnableJob',
13 'JobRunner',
14 'JobRunnerProcess',
15 ]
1216
1317
14import contextlib18import contextlib
1519
=== modified file 'lib/lp/soyuz/browser/sourcepackagerelease.py'
--- lib/lp/soyuz/browser/sourcepackagerelease.py 2009-10-22 12:44:47 +0000
+++ lib/lp/soyuz/browser/sourcepackagerelease.py 2010-01-10 04:32:20 +0000
@@ -5,7 +5,12 @@
55
6__metaclass__ = type6__metaclass__ = type
77
8# XXX: JonathanLange 2010-01-06: Many of these functions should be moved to a
9# generic lp.services.text module.
8__all__ = [10__all__ = [
11 'extract_bug_numbers',
12 'extract_email_addresses',
13 'linkify_changelog',
9 'SourcePackageReleaseView',14 'SourcePackageReleaseView',
10 ]15 ]
1116
1217
=== modified file 'lib/lp/soyuz/scripts/gina/packages.py'
--- lib/lp/soyuz/scripts/gina/packages.py 2009-06-25 04:06:00 +0000
+++ lib/lp/soyuz/scripts/gina/packages.py 2010-01-10 04:32:20 +0000
@@ -12,7 +12,15 @@
12__metaclass__ = type12__metaclass__ = type
1313
1414
15__all__ = ['AbstractPackageData', 'SourcePackageData', 'BinaryPackageData']15__all__ = [
16 'AbstractPackageData',
17 'BinaryPackageData',
18 'get_dsc_path',
19 'PoolFileNotFound',
20 'prioritymap',
21 'SourcePackageData',
22 'urgencymap',
23 ]
1624
17import re25import re
18import os26import os
@@ -140,12 +148,13 @@
140148
141 return dsc, changelog, copyright149 return dsc, changelog, copyright
142150
151
143def parse_person(val):152def parse_person(val):
144 if "," in val:153 if "," in val:
145 # Some emails have ',' like "Adam C. Powell, IV154 # Some emails have ',' like "Adam C. Powell, IV
146 # <hazelsct@debian.org>". rfc822.parseaddr seems to do not155 # <hazelsct@debian.org>". rfc822.parseaddr seems to do not
147 # handle this properly, so we munge them here156 # handle this properly, so we munge them here
148 val = val.replace(',','')157 val = val.replace(',', '')
149 return rfc822.parseaddr(val)158 return rfc822.parseaddr(val)
150159
151160
@@ -175,12 +184,6 @@
175184
176 line = line.split(":")185 line = line.split(":")
177 algo = int(line[3])186 algo = int(line[3])
178 if GPGALGOS.has_key(algo):
179 algochar = GPGALGOS[algo]
180 else:
181 algochar = "?" % algo
182 # STRIPPED GPGID Support by cprov 20041004
183 # id = line[2] + algochar + "/" + line[4][-8:]
184 id = line[4][-8:]187 id = line[4][-8:]
185 algorithm = algo188 algorithm = algo
186 keysize = line[2]189 keysize = line[2]
@@ -380,7 +383,6 @@
380383
381 AbstractPackageData.__init__(self)384 AbstractPackageData.__init__(self)
382385
383
384 def do_package(self, archive_root):386 def do_package(self, archive_root):
385 """Get the Changelog and urgency from the package on archive.387 """Get the Changelog and urgency from the package on archive.
386388
@@ -397,7 +399,7 @@
397 self.changelog = None399 self.changelog = None
398 if changelog and changelog[0]:400 if changelog and changelog[0]:
399 cldata = changelog[0]401 cldata = changelog[0]
400 if cldata.has_key("changes"):402 if 'changes' in cldata:
401 if cldata["package"] != self.package:403 if cldata["package"] != self.package:
402 log.warn("Changelog package %s differs from %s" %404 log.warn("Changelog package %s differs from %s" %
403 (cldata["package"], self.package))405 (cldata["package"], self.package))
404406
=== modified file 'lib/lp/translations/scripts/po_import.py'
--- lib/lp/translations/scripts/po_import.py 2010-01-06 12:18:25 +0000
+++ lib/lp/translations/scripts/po_import.py 2010-01-10 04:32:20 +0000
@@ -7,13 +7,14 @@
77
88
9__all__ = [9__all__ = [
10 'ImportProcess',10 'TranslationsImport',
11 ]11 ]
1212
13from datetime import datetime, timedelta13from datetime import datetime, timedelta
14import sys14import sys
1515
16from pytz import timezone16import pytz
17
17from zope.component import getUtility18from zope.component import getUtility
1819
19from canonical.config import config20from canonical.config import config
@@ -143,9 +144,7 @@
143 """Import entries from the queue."""144 """Import entries from the queue."""
144 self.logger.debug("Starting the import process.")145 self.logger.debug("Starting the import process.")
145146
146 UTC = timezone('UTC')147 self.deadline = datetime.now(pytz.UTC) + self.time_to_run
147
148 self.deadline = datetime.now(UTC) + self.time_to_run
149 translation_import_queue = getUtility(ITranslationImportQueue)148 translation_import_queue = getUtility(ITranslationImportQueue)
150149
151 # Get the list of each product or distroseries with pending imports.150 # Get the list of each product or distroseries with pending imports.
@@ -160,7 +159,7 @@
160159
161 have_work = True160 have_work = True
162161
163 while have_work and datetime.now(UTC) < self.deadline:162 while have_work and datetime.now(pytz.UTC) < self.deadline:
164 have_work = False163 have_work = False
165164
166 # For fairness, service all queues at least once; don't165 # For fairness, service all queues at least once; don't
167166
=== modified file 'lib/lp/translations/scripts/translations_to_branch.py'
--- lib/lp/translations/scripts/translations_to_branch.py 2010-01-06 12:18:25 +0000
+++ lib/lp/translations/scripts/translations_to_branch.py 2010-01-10 04:32:20 +0000
@@ -9,7 +9,8 @@
99
10import os.path10import os.path
11from datetime import datetime, timedelta11from datetime import datetime, timedelta
12from pytz import timezone12
13import pytz
1314
14from zope.component import getUtility15from zope.component import getUtility
1516
@@ -27,9 +28,6 @@
27from lp.services.scripts.base import LaunchpadCronScript28from lp.services.scripts.base import LaunchpadCronScript
2829
2930
30UTC = timezone('UTC')
31
32
33class ExportTranslationsToBranch(LaunchpadCronScript):31class ExportTranslationsToBranch(LaunchpadCronScript):
34 """Commit translations to translations_branches where requested."""32 """Commit translations to translations_branches where requested."""
3533
@@ -69,7 +67,7 @@
69 branch = source.translations_branch67 branch = source.translations_branch
70 jobsource = getUtility(IRosettaUploadJobSource)68 jobsource = getUtility(IRosettaUploadJobSource)
71 unfinished_jobs = jobsource.findUnfinishedJobs(69 unfinished_jobs = jobsource.findUnfinishedJobs(
72 branch, since=datetime.now(UTC) - timedelta(days=1))70 branch, since=datetime.now(pytz.UTC) - timedelta(days=1))
7371
74 if unfinished_jobs.any():72 if unfinished_jobs.any():
75 raise ConcurrentUpdateError(73 raise ConcurrentUpdateError(
@@ -133,11 +131,11 @@
133 # The bzr timestamp is a float representing UTC-based seconds131 # The bzr timestamp is a float representing UTC-based seconds
134 # since the epoch. It stores the timezone as well, but we can132 # since the epoch. It stores the timezone as well, but we can
135 # ignore it here.133 # ignore it here.
136 return datetime.fromtimestamp(revision.timestamp, UTC)134 return datetime.fromtimestamp(revision.timestamp, pytz.UTC)
137135
138 def _getLatestTranslationsCommit(self, branch):136 def _getLatestTranslationsCommit(self, branch):
139 """Get date of last translations commit to `branch`, if any."""137 """Get date of last translations commit to `branch`, if any."""
140 cutoff_date = datetime.now(UTC) - self.previous_commit_cutoff_age138 cutoff_date = datetime.now(pytz.UTC) - self.previous_commit_cutoff_age
141139
142 revno, current_rev = branch.last_revision_info()140 revno, current_rev = branch.last_revision_info()
143 repository = branch.repository141 repository = branch.repository