launchpad-reviewers team mailing list archive
-
launchpad-reviewers team
-
Mailing list archive
-
Message #02400
[Merge] lp:~gary/launchpad/bugstructuralsubscription into lp:launchpad/db-devel
Gary Poster has proposed merging lp:~gary/launchpad/bugstructuralsubscription into lp:launchpad/db-devel.
Requested reviews:
Launchpad code reviewers (launchpad-reviewers)
For more details, see:
https://code.launchpad.net/~gary/launchpad/bugstructuralsubscription/+merge/47072
Move structural subscriptions from registry to bugs in preparation for merging bug subscription filters with structural subscriptions.
This is a big patch, but largely a manual one.
--
https://code.launchpad.net/~gary/launchpad/bugstructuralsubscription/+merge/47072
Your team Launchpad code reviewers is requested to review the proposed merge of lp:~gary/launchpad/bugstructuralsubscription into lp:launchpad/db-devel.
=== modified file 'lib/canonical/launchpad/interfaces/_schema_circular_imports.py'
--- lib/canonical/launchpad/interfaces/_schema_circular_imports.py 2010-12-22 07:53:52 +0000
+++ lib/canonical/launchpad/interfaces/_schema_circular_imports.py 2011-01-21 19:02:35 +0000
@@ -97,7 +97,7 @@
from lp.registry.interfaces.product import IProduct
from lp.registry.interfaces.productseries import IProductSeries
from lp.registry.interfaces.sourcepackage import ISourcePackage
-from lp.registry.interfaces.structuralsubscription import (
+from lp.bugs.interfaces.structuralsubscription import (
IStructuralSubscription,
IStructuralSubscriptionTarget,
)
=== modified file 'lib/lp/bugs/browser/configure.zcml'
--- lib/lp/bugs/browser/configure.zcml 2011-01-11 23:01:02 +0000
+++ lib/lp/bugs/browser/configure.zcml 2011-01-21 19:02:35 +0000
@@ -1176,6 +1176,31 @@
BugWatchSetNavigation"/>
</facet>
+ <!-- Structural subscriptions -->
+ <facet
+ facet="bugs">
+ <browser:page
+ for="lp.bugs.interfaces.structuralsubscription.IStructuralSubscriptionTarget"
+ name="+subscribe"
+ permission="launchpad.AnyPerson"
+ class="lp.bugs.browser.structuralsubscription.StructuralSubscriptionView"
+ template="../templates/structural-subscriptions-manage.pt"/>
+ <browser:page
+ for="lp.bugs.interfaces.structuralsubscription.IStructuralSubscriptionTarget"
+ name="+portlet-structural-subscribers"
+ permission="zope.Public"
+ class="lp.bugs.browser.structuralsubscription.StructuralSubscribersPortletView"
+ template="../templates/structural-subscription-target-portlet-subscribers.pt"/>
+ </facet>
+
+ <browser:url
+ for="lp.bugs.interfaces.structuralsubscription.IStructuralSubscription"
+ path_expression="string:+subscription/${subscriber/name}"
+ attribute_to_parent="target"/>
+ <browser:navigation
+ module="lp.bugs.browser.structuralsubscription"
+ classes="StructuralSubscriptionNavigation"/>
+
<!-- Bug Subscription Filters -->
<facet facet="bugs">
<browser:url
@@ -1196,7 +1221,7 @@
permission="launchpad.Edit"
name="+edit" />
<browser:page
- for="lp.registry.interfaces.structuralsubscription.IStructuralSubscription"
+ for="lp.bugs.interfaces.structuralsubscription.IStructuralSubscription"
class=".bugsubscriptionfilter.BugSubscriptionFilterCreateView"
template="../../app/templates/generic-edit.pt"
permission="launchpad.View"
=== renamed file 'lib/lp/registry/browser/structuralsubscription.py' => 'lib/lp/bugs/browser/structuralsubscription.py'
--- lib/lp/registry/browser/structuralsubscription.py 2010-12-20 20:16:02 +0000
+++ lib/lp/bugs/browser/structuralsubscription.py 2011-01-21 19:02:35 +0000
@@ -38,17 +38,17 @@
LaunchpadFormView,
)
from lp.bugs.browser.bugsubscription import AdvancedSubscriptionMixin
+from lp.bugs.interfaces.structuralsubscription import (
+ IStructuralSubscription,
+ IStructuralSubscriptionForm,
+ IStructuralSubscriptionTarget,
+ )
from lp.registry.enum import BugNotificationLevel
from lp.registry.interfaces.distributionsourcepackage import (
IDistributionSourcePackage,
)
from lp.registry.interfaces.milestone import IProjectGroupMilestone
from lp.registry.interfaces.person import IPersonSet
-from lp.registry.interfaces.structuralsubscription import (
- IStructuralSubscription,
- IStructuralSubscriptionForm,
- IStructuralSubscriptionTarget,
- )
from lp.services.propertycache import cachedproperty
=== modified file 'lib/lp/bugs/browser/tests/test_bugsubscriptionfilter.py'
--- lib/lp/bugs/browser/tests/test_bugsubscriptionfilter.py 2011-01-14 11:02:44 +0000
+++ lib/lp/bugs/browser/tests/test_bugsubscriptionfilter.py 2011-01-21 19:02:35 +0000
@@ -25,7 +25,7 @@
BugTaskImportance,
BugTaskStatus,
)
-from lp.registry.browser.structuralsubscription import (
+from lp.bugs.browser.structuralsubscription import (
StructuralSubscriptionNavigation,
)
from lp.testing import (
=== renamed file 'lib/lp/registry/browser/tests/test_structuralsubscription.py' => 'lib/lp/bugs/browser/tests/test_structuralsubscription.py'
--- lib/lp/registry/browser/tests/test_structuralsubscription.py 2010-12-21 09:42:47 +0000
+++ lib/lp/bugs/browser/tests/test_structuralsubscription.py 2011-01-21 19:02:35 +0000
@@ -21,6 +21,9 @@
DatabaseFunctionalLayer,
LaunchpadFunctionalLayer,
)
+from lp.bugs.browser.structuralsubscription import (
+ StructuralSubscriptionView,
+ )
from lp.registry.browser.distribution import DistributionNavigation
from lp.registry.browser.distributionsourcepackage import (
DistributionSourcePackageNavigation,
@@ -30,9 +33,6 @@
from lp.registry.browser.product import ProductNavigation
from lp.registry.browser.productseries import ProductSeriesNavigation
from lp.registry.browser.project import ProjectNavigation
-from lp.registry.browser.structuralsubscription import (
- StructuralSubscriptionView,
- )
from lp.registry.enum import BugNotificationLevel
from lp.testing import (
feature_flags,
=== modified file 'lib/lp/bugs/configure.zcml'
--- lib/lp/bugs/configure.zcml 2011-01-18 20:49:35 +0000
+++ lib/lp/bugs/configure.zcml 2011-01-21 19:02:35 +0000
@@ -1055,6 +1055,41 @@
recipient"/>
</class>
+ <!-- StructuralSubscription -->
+
+ <class
+ class="lp.bugs.model.structuralsubscription.StructuralSubscription">
+ <allow
+ interface=".interfaces.structuralsubscription.IStructuralSubscriptionPublic" />
+ <require
+ set_schema=".interfaces.structuralsubscription.IStructuralSubscriptionPublic"
+ permission="zope.Public" />
+ <require
+ interface=".interfaces.structuralsubscription.IStructuralSubscriptionRestricted"
+ permission="launchpad.Edit" />
+ </class>
+ <adapter
+ factory=".model.structuralsubscription.DistroSeriesTargetHelper"
+ permission="zope.Public"/>
+ <adapter
+ factory=".model.structuralsubscription.ProjectGroupTargetHelper"
+ permission="zope.Public"/>
+ <adapter
+ factory=".model.structuralsubscription.DistributionSourcePackageTargetHelper"
+ permission="zope.Public"/>
+ <adapter
+ factory=".model.structuralsubscription.MilestoneTargetHelper"
+ permission="zope.Public"/>
+ <adapter
+ factory=".model.structuralsubscription.ProductTargetHelper"
+ permission="zope.Public"/>
+ <adapter
+ factory=".model.structuralsubscription.ProductSeriesTargetHelper"
+ permission="zope.Public"/>
+ <adapter
+ factory=".model.structuralsubscription.DistributionTargetHelper"
+ permission="zope.Public"/>
+
<webservice:register module="lp.bugs.interfaces.webservice" />
</configure>
=== renamed file 'lib/lp/registry/doc/structural-subscriptions.txt' => 'lib/lp/bugs/doc/structural-subscriptions.txt'
--- lib/lp/registry/doc/structural-subscriptions.txt 2011-01-18 21:20:48 +0000
+++ lib/lp/bugs/doc/structural-subscriptions.txt 2011-01-21 19:02:35 +0000
@@ -11,7 +11,7 @@
>>> from lp.registry.interfaces.person import IPersonSet
>>> from lp.registry.interfaces.product import IProductSet
>>> from lp.registry.interfaces.sourcepackagename import ISourcePackageNameSet
- >>> from lp.registry.model.structuralsubscription import (
+ >>> from lp.bugs.model.structuralsubscription import (
... StructuralSubscription)
>>> person_set = getUtility(IPersonSet)
=== modified file 'lib/lp/bugs/interfaces/bugsubscriptionfilter.py'
--- lib/lp/bugs/interfaces/bugsubscriptionfilter.py 2011-01-11 12:00:44 +0000
+++ lib/lp/bugs/interfaces/bugsubscriptionfilter.py 2011-01-21 19:02:35 +0000
@@ -29,7 +29,7 @@
BugTaskImportance,
BugTaskStatus,
)
-from lp.registry.interfaces.structuralsubscription import (
+from lp.bugs.interfaces.structuralsubscription import (
IStructuralSubscription,
)
from lp.services.fields import SearchTag
=== renamed file 'lib/lp/registry/interfaces/structuralsubscription.py' => 'lib/lp/bugs/interfaces/structuralsubscription.py'
=== modified file 'lib/lp/bugs/interfaces/webservice.py'
--- lib/lp/bugs/interfaces/webservice.py 2010-12-20 20:16:02 +0000
+++ lib/lp/bugs/interfaces/webservice.py 2011-01-21 19:02:35 +0000
@@ -31,6 +31,8 @@
'ICveSet',
'IHasBugs',
'IMaloneApplication',
+ 'IStructuralSubscription',
+ 'IStructuralSubscriptionTarget',
'IllegalRelatedBugTasksParams',
'IllegalTarget',
'NominationError',
@@ -83,6 +85,10 @@
ICveSet,
)
from lp.bugs.interfaces.malone import IMaloneApplication
+from lp.bugs.interfaces.structuralsubscription import (
+ IStructuralSubscription,
+ IStructuralSubscriptionTarget,
+ )
=== modified file 'lib/lp/bugs/model/bug.py'
--- lib/lp/bugs/model/bug.py 2011-01-14 11:04:24 +0000
+++ lib/lp/bugs/model/bug.py 2011-01-21 19:02:35 +0000
@@ -147,6 +147,9 @@
from lp.bugs.interfaces.bugtracker import BugTrackerType
from lp.bugs.interfaces.bugwatch import IBugWatchSet
from lp.bugs.interfaces.cve import ICveSet
+from lp.bugs.interfaces.structuralsubscription import (
+ IStructuralSubscriptionTarget,
+ )
from lp.bugs.mail.bugnotificationrecipients import BugNotificationRecipients
from lp.bugs.model.bugattachment import BugAttachment
from lp.bugs.model.bugbranch import BugBranch
@@ -175,9 +178,6 @@
from lp.registry.interfaces.productseries import IProductSeries
from lp.registry.interfaces.series import SeriesStatus
from lp.registry.interfaces.sourcepackage import ISourcePackage
-from lp.registry.interfaces.structuralsubscription import (
- IStructuralSubscriptionTarget,
- )
from lp.registry.model.person import (
Person,
person_sort_key,
=== modified file 'lib/lp/bugs/model/bugtask.py'
--- lib/lp/bugs/model/bugtask.py 2011-01-20 04:50:35 +0000
+++ lib/lp/bugs/model/bugtask.py 2011-01-21 19:02:35 +0000
@@ -125,8 +125,12 @@
UserCannotEditBugTaskMilestone,
UserCannotEditBugTaskStatus,
)
+from lp.bugs.interfaces.structuralsubscription import (
+ IStructuralSubscriptionTarget,
+ )
from lp.bugs.model.bugnomination import BugNomination
from lp.bugs.model.bugsubscription import BugSubscription
+from lp.bugs.model.structuralsubscription import StructuralSubscription
from lp.registry.enum import BugNotificationLevel
from lp.registry.interfaces.distribution import (
IDistribution,
@@ -157,12 +161,8 @@
from lp.registry.interfaces.projectgroup import IProjectGroup
from lp.registry.interfaces.sourcepackage import ISourcePackage
from lp.registry.interfaces.sourcepackagename import ISourcePackageNameSet
-from lp.registry.interfaces.structuralsubscription import (
- IStructuralSubscriptionTarget,
- )
from lp.registry.model.pillar import pillar_sort_key
from lp.registry.model.sourcepackagename import SourcePackageName
-from lp.registry.model.structuralsubscription import StructuralSubscription
from lp.services.propertycache import get_property_cache
from lp.soyuz.enums import PackagePublishingStatus
from lp.soyuz.model.publishing import SourcePackagePublishingHistory
=== renamed file 'lib/lp/registry/model/structuralsubscription.py' => 'lib/lp/bugs/model/structuralsubscription.py'
--- lib/lp/registry/model/structuralsubscription.py 2011-01-20 20:11:53 +0000
+++ lib/lp/bugs/model/structuralsubscription.py 2011-01-21 19:02:35 +0000
@@ -69,7 +69,7 @@
from lp.registry.interfaces.product import IProduct
from lp.registry.interfaces.productseries import IProductSeries
from lp.registry.interfaces.projectgroup import IProjectGroup
-from lp.registry.interfaces.structuralsubscription import (
+from lp.bugs.interfaces.structuralsubscription import (
IStructuralSubscription,
IStructuralSubscriptionTarget,
IStructuralSubscriptionTargetHelper,
=== modified file 'lib/lp/bugs/model/tests/test_bug.py'
--- lib/lp/bugs/model/tests/test_bug.py 2010-11-12 18:05:45 +0000
+++ lib/lp/bugs/model/tests/test_bug.py 2011-01-21 19:02:35 +0000
@@ -4,9 +4,9 @@
__metaclass__ = type
from canonical.testing.layers import DatabaseFunctionalLayer
+from lp.bugs.model.structuralsubscription import StructuralSubscription
from lp.registry.enum import BugNotificationLevel
from lp.registry.interfaces.person import PersonVisibility
-from lp.registry.model.structuralsubscription import StructuralSubscription
from lp.testing import (
login_person,
person_logged_in,
=== modified file 'lib/lp/bugs/security.py'
--- lib/lp/bugs/security.py 2010-10-04 11:16:57 +0000
+++ lib/lp/bugs/security.py 2011-01-21 19:02:35 +0000
@@ -20,7 +20,7 @@
from lp.bugs.interfaces.bugsubscriptionfilter import IBugSubscriptionFilter
from lp.bugs.interfaces.bugtracker import IBugTracker
from lp.bugs.interfaces.bugwatch import IBugWatch
-
+from lp.bugs.interfaces.structuralsubscription import IStructuralSubscription
class EditBugNominationStatus(AuthorizationBase):
permission = 'launchpad.Driver'
@@ -174,6 +174,16 @@
user.in_launchpad_developers)
+class EditStructuralSubscription(AuthorizationBase):
+ """Edit permissions for `IStructuralSubscription`."""
+ permission = "launchpad.Edit"
+ usedfor = IStructuralSubscription
+
+ def checkAuthenticated(self, user):
+ """Subscribers can edit their own structural subscriptions."""
+ return user.inTeam(self.obj.subscriber)
+
+
class EditBugSubscriptionFilter(AuthorizationBase):
"""Bug subscription filters may only be modified by the subscriber."""
permission = 'launchpad.Edit'
=== renamed file 'lib/lp/registry/templates/structural-subscription-target-portlet-subscribers.pt' => 'lib/lp/bugs/templates/structural-subscription-target-portlet-subscribers.pt'
=== renamed file 'lib/lp/registry/templates/structural-subscriptions-manage.pt' => 'lib/lp/bugs/templates/structural-subscriptions-manage.pt'
=== renamed file 'lib/lp/registry/tests/structural-subscription-target.txt' => 'lib/lp/bugs/tests/structural-subscription-target.txt'
=== modified file 'lib/lp/bugs/tests/test_bugcontact.py'
--- lib/lp/bugs/tests/test_bugcontact.py 2010-10-04 19:50:45 +0000
+++ lib/lp/bugs/tests/test_bugcontact.py 2011-01-21 19:02:35 +0000
@@ -12,7 +12,7 @@
tearDown,
)
from canonical.testing.layers import DatabaseFunctionalLayer
-from lp.registry.tests.test_structuralsubscriptiontarget import (
+from lp.bugs.tests.test_structuralsubscriptiontarget import (
distributionSetUp,
productSetUp,
)
=== renamed file 'lib/lp/registry/tests/test_structuralsubscription.py' => 'lib/lp/bugs/tests/test_structuralsubscription.py'
=== renamed file 'lib/lp/registry/tests/test_structuralsubscriptiontarget.py' => 'lib/lp/bugs/tests/test_structuralsubscriptiontarget.py'
--- lib/lp/registry/tests/test_structuralsubscriptiontarget.py 2010-11-26 17:08:03 +0000
+++ lib/lp/bugs/tests/test_structuralsubscriptiontarget.py 2011-01-21 19:02:35 +0000
@@ -32,6 +32,11 @@
BugTaskImportance,
BugTaskStatus,
)
+from lp.bugs.interfaces.structuralsubscription import (
+ IStructuralSubscriptionTarget,
+ IStructuralSubscriptionTargetHelper,
+ )
+from lp.bugs.model.structuralsubscription import StructuralSubscription
from lp.bugs.tests.test_bugtarget import bugtarget_filebug
from lp.registry.enum import BugNotificationLevel
from lp.registry.errors import (
@@ -41,11 +46,6 @@
from lp.registry.interfaces.distribution import IDistributionSet
from lp.registry.interfaces.product import IProductSet
from lp.registry.interfaces.sourcepackagename import ISourcePackageNameSet
-from lp.registry.interfaces.structuralsubscription import (
- IStructuralSubscriptionTarget,
- IStructuralSubscriptionTargetHelper,
- )
-from lp.registry.model.structuralsubscription import StructuralSubscription
from lp.testing import (
ANONYMOUS,
login,
=== modified file 'lib/lp/registry/browser/configure.zcml'
--- lib/lp/registry/browser/configure.zcml 2011-01-19 22:53:32 +0000
+++ lib/lp/registry/browser/configure.zcml 2011-01-21 19:02:35 +0000
@@ -2280,29 +2280,6 @@
template="../templates/sourcepackage-remove-packaging.pt"
/>
- <browser:page
- for="lp.registry.interfaces.structuralsubscription.IStructuralSubscriptionTarget"
- name="+subscribe"
- permission="launchpad.AnyPerson"
- facet="bugs"
- class="lp.registry.browser.structuralsubscription.StructuralSubscriptionView"
- template="../templates/structural-subscriptions-manage.pt"/>
- <browser:page
- for="lp.registry.interfaces.structuralsubscription.IStructuralSubscriptionTarget"
- name="+portlet-structural-subscribers"
- facet="bugs"
- permission="zope.Public"
- class="lp.registry.browser.structuralsubscription.StructuralSubscribersPortletView"
- template="../templates/structural-subscription-target-portlet-subscribers.pt"/>
-
- <browser:url
- for="lp.registry.interfaces.structuralsubscription.IStructuralSubscription"
- path_expression="string:+subscription/${subscriber/name}"
- attribute_to_parent="target"/>
- <browser:navigation
- module="lp.registry.browser.structuralsubscription"
- classes="StructuralSubscriptionNavigation"/>
-
<browser:url
for="lp.registry.interfaces.personproduct.IPersonProduct"
path_expression="product/name"
=== modified file 'lib/lp/registry/browser/distribution.py'
--- lib/lp/registry/browser/distribution.py 2011-01-18 21:44:21 +0000
+++ lib/lp/registry/browser/distribution.py 2011-01-21 19:02:35 +0000
@@ -81,6 +81,9 @@
HasSpecificationsMenuMixin,
)
from lp.bugs.browser.bugtask import BugTargetTraversalMixin
+from lp.bugs.browser.structuralsubscription import (
+ StructuralSubscriptionTargetTraversalMixin,
+ )
from lp.registry.browser import RegistryEditFormView
from lp.registry.browser.announcement import HasAnnouncementsView
from lp.registry.browser.menu import (
@@ -88,9 +91,6 @@
RegistryCollectionActionMenuBase,
)
from lp.registry.browser.pillar import PillarBugsMenu
-from lp.registry.browser.structuralsubscription import (
- StructuralSubscriptionTargetTraversalMixin,
- )
from lp.registry.interfaces.distribution import (
IDerivativeDistribution,
IDistribution,
=== modified file 'lib/lp/registry/browser/distributionsourcepackage.py'
--- lib/lp/registry/browser/distributionsourcepackage.py 2010-12-02 16:14:30 +0000
+++ lib/lp/registry/browser/distributionsourcepackage.py 2011-01-21 19:02:35 +0000
@@ -59,11 +59,11 @@
from lp.app.browser.tales import CustomizableFormatter
from lp.app.interfaces.launchpad import IServiceUsage
from lp.bugs.browser.bugtask import BugTargetTraversalMixin
+from lp.bugs.browser.structuralsubscription import (
+ StructuralSubscriptionTargetTraversalMixin,
+ )
from lp.bugs.interfaces.bug import IBugSet
from lp.registry.browser.pillar import PillarBugsMenu
-from lp.registry.browser.structuralsubscription import (
- StructuralSubscriptionTargetTraversalMixin,
- )
from lp.registry.interfaces.distributionsourcepackage import (
IDistributionSourcePackage,
)
=== modified file 'lib/lp/registry/browser/distroseries.py'
--- lib/lp/registry/browser/distroseries.py 2010-11-23 23:22:27 +0000
+++ lib/lp/registry/browser/distroseries.py 2011-01-21 19:02:35 +0000
@@ -70,11 +70,11 @@
HasSpecificationsMenuMixin,
)
from lp.bugs.browser.bugtask import BugTargetTraversalMixin
-from lp.registry.browser import MilestoneOverlayMixin
-from lp.registry.browser.structuralsubscription import (
+from lp.bugs.browser.structuralsubscription import (
StructuralSubscriptionMenuMixin,
StructuralSubscriptionTargetTraversalMixin,
)
+from lp.registry.browser import MilestoneOverlayMixin
from lp.registry.interfaces.distroseries import IDistroSeries
from lp.registry.interfaces.distroseriesdifference import (
IDistroSeriesDifferenceSource,
=== modified file 'lib/lp/registry/browser/milestone.py'
--- lib/lp/registry/browser/milestone.py 2011-01-19 21:43:54 +0000
+++ lib/lp/registry/browser/milestone.py 2011-01-21 19:02:35 +0000
@@ -55,16 +55,16 @@
LaunchpadFormView,
)
from lp.bugs.browser.bugtask import BugTaskListingItem
+from lp.bugs.browser.structuralsubscription import (
+ StructuralSubscriptionMenuMixin,
+ StructuralSubscriptionTargetTraversalMixin,
+ )
from lp.bugs.interfaces.bugtask import IBugTaskSet
from lp.registry.browser import (
get_status_counts,
RegistryDeleteViewMixin,
)
from lp.registry.browser.product import ProductDownloadFileMixin
-from lp.registry.browser.structuralsubscription import (
- StructuralSubscriptionMenuMixin,
- StructuralSubscriptionTargetTraversalMixin,
- )
from lp.registry.interfaces.distroseries import IDistroSeries
from lp.registry.interfaces.milestone import (
IMilestone,
=== modified file 'lib/lp/registry/browser/pillar.py'
--- lib/lp/registry/browser/pillar.py 2010-10-07 13:26:53 +0000
+++ lib/lp/registry/browser/pillar.py 2011-01-21 19:02:35 +0000
@@ -35,7 +35,7 @@
ServiceUsage,
)
from lp.app.interfaces.launchpad import IServiceUsage
-from lp.registry.browser.structuralsubscription import (
+from lp.bugs.browser.structuralsubscription import (
StructuralSubscriptionMenuMixin,
)
from lp.registry.interfaces.distributionsourcepackage import (
=== modified file 'lib/lp/registry/browser/product.py'
--- lib/lp/registry/browser/product.py 2011-01-13 20:57:45 +0000
+++ lib/lp/registry/browser/product.py 2011-01-21 19:02:35 +0000
@@ -169,7 +169,7 @@
PillarView,
)
from lp.registry.browser.productseries import get_series_branch_error
-from lp.registry.browser.structuralsubscription import (
+from lp.bugs.browser.structuralsubscription import (
StructuralSubscriptionMenuMixin,
StructuralSubscriptionTargetTraversalMixin,
)
=== modified file 'lib/lp/registry/browser/productseries.py'
--- lib/lp/registry/browser/productseries.py 2010-11-26 02:49:16 +0000
+++ lib/lp/registry/browser/productseries.py 2011-01-21 19:02:35 +0000
@@ -127,7 +127,7 @@
InvolvedMenu,
PillarView,
)
-from lp.registry.browser.structuralsubscription import (
+from lp.bugs.browser.structuralsubscription import (
StructuralSubscriptionMenuMixin,
StructuralSubscriptionTargetTraversalMixin,
)
=== modified file 'lib/lp/registry/browser/project.py'
--- lib/lp/registry/browser/project.py 2011-01-15 00:42:50 +0000
+++ lib/lp/registry/browser/project.py 2011-01-21 19:02:35 +0000
@@ -87,7 +87,7 @@
ProjectAddStepOne,
ProjectAddStepTwo,
)
-from lp.registry.browser.structuralsubscription import (
+from lp.bugs.browser.structuralsubscription import (
StructuralSubscriptionTargetTraversalMixin,
)
from lp.registry.interfaces.product import IProductSet
=== modified file 'lib/lp/registry/configure.zcml'
--- lib/lp/registry/configure.zcml 2011-01-13 15:12:36 +0000
+++ lib/lp/registry/configure.zcml 2011-01-21 19:02:35 +0000
@@ -10,7 +10,6 @@
xmlns:lp="http://namespaces.canonical.com/lp"
xmlns:webservice="http://namespaces.canonical.com/webservice"
i18n_domain="launchpad">
- <authorizations module=".security" />
<include
file="vocabularies.zcml"/>
<include
@@ -213,10 +212,10 @@
<!-- IStructuralSubscriptionTarget -->
<allow
- interface="lp.registry.interfaces.structuralsubscription.IStructuralSubscriptionTargetRead" />
+ interface="lp.bugs.interfaces.structuralsubscription.IStructuralSubscriptionTargetRead" />
<require
permission="launchpad.AnyPerson"
- interface="lp.registry.interfaces.structuralsubscription.IStructuralSubscriptionTargetWrite" />
+ interface="lp.bugs.interfaces.structuralsubscription.IStructuralSubscriptionTargetWrite" />
</class>
<securedutility
@@ -235,9 +234,6 @@
for="lp.registry.interfaces.distroseries.IDistroSeries"
factory="lp.registry.browser.distroseries.DistroSeriesBreadcrumb"
permission="zope.Public"/>
- <adapter
- factory=".model.structuralsubscription.DistroSeriesTargetHelper"
- permission="zope.Public"/>
<facet
facet="overview">
@@ -351,10 +347,10 @@
<!-- IStructuralSubscriptionTarget -->
<allow
- interface="lp.registry.interfaces.structuralsubscription.IStructuralSubscriptionTargetRead" />
+ interface="lp.bugs.interfaces.structuralsubscription.IStructuralSubscriptionTargetRead" />
<require
permission="launchpad.AnyPerson"
- interface="lp.registry.interfaces.structuralsubscription.IStructuralSubscriptionTargetWrite" />
+ interface="lp.bugs.interfaces.structuralsubscription.IStructuralSubscriptionTargetWrite" />
<require
permission="launchpad.Admin"
@@ -391,9 +387,6 @@
for="lp.registry.interfaces.projectgroup.IProjectGroupSet"
factory="lp.registry.browser.project.ProjectSetBreadcrumb"
permission="zope.Public"/>
- <adapter
- factory=".model.structuralsubscription.ProjectGroupTargetHelper"
- permission="zope.Public"/>
<facet
facet="answers"/>
@@ -485,10 +478,10 @@
<!-- IStructuralSubscriptionTarget -->
<allow
- interface="lp.registry.interfaces.structuralsubscription.IStructuralSubscriptionTargetRead" />
+ interface="lp.bugs.interfaces.structuralsubscription.IStructuralSubscriptionTargetRead" />
<require
permission="launchpad.AnyPerson"
- interface="lp.registry.interfaces.structuralsubscription.IStructuralSubscriptionTargetWrite" />
+ interface="lp.bugs.interfaces.structuralsubscription.IStructuralSubscriptionTargetWrite" />
<!-- IQuestionTarget -->
@@ -525,9 +518,6 @@
<adapter
factory="lp.registry.browser.distributionsourcepackage.distribution_from_distributionsourcepackage"/>
<adapter
- factory=".model.structuralsubscription.DistributionSourcePackageTargetHelper"
- permission="zope.Public"/>
- <adapter
factory="lp.registry.browser.distributionsourcepackage.DistributionSourcePackageBreadcrumb"/>
<!-- CommercialSubscription -->
@@ -987,15 +977,12 @@
<!-- IStructuralSubscriptionTarget -->
<allow
- interface="lp.registry.interfaces.structuralsubscription.IStructuralSubscriptionTargetRead" />
+ interface="lp.bugs.interfaces.structuralsubscription.IStructuralSubscriptionTargetRead" />
<require
permission="launchpad.AnyPerson"
- interface="lp.registry.interfaces.structuralsubscription.IStructuralSubscriptionTargetWrite" />
+ interface="lp.bugs.interfaces.structuralsubscription.IStructuralSubscriptionTargetWrite" />
</class>
- <adapter
- factory=".model.structuralsubscription.MilestoneTargetHelper"
- permission="zope.Public"/>
<!-- IMilestoneSet -->
@@ -1274,10 +1261,10 @@
<!-- IStructuralSubscriptionTarget -->
<allow
- interface="lp.registry.interfaces.structuralsubscription.IStructuralSubscriptionTargetRead" />
+ interface="lp.bugs.interfaces.structuralsubscription.IStructuralSubscriptionTargetRead" />
<require
permission="launchpad.AnyPerson"
- interface="lp.registry.interfaces.structuralsubscription.IStructuralSubscriptionTargetWrite" />
+ interface="lp.bugs.interfaces.structuralsubscription.IStructuralSubscriptionTargetWrite" />
<!-- IHasBugSupervisor -->
@@ -1289,9 +1276,6 @@
attributes="
setBugSupervisor"/>
</class>
- <adapter
- factory=".model.structuralsubscription.ProductTargetHelper"
- permission="zope.Public"/>
<!-- ProductWithLicenses
This is a decorator for IProduct that eliminates an additional query
@@ -1416,10 +1400,10 @@
<!-- IStructuralSubscriptionTarget -->
<allow
- interface="lp.registry.interfaces.structuralsubscription.IStructuralSubscriptionTargetRead" />
+ interface="lp.bugs.interfaces.structuralsubscription.IStructuralSubscriptionTargetRead" />
<require
permission="launchpad.AnyPerson"
- interface="lp.registry.interfaces.structuralsubscription.IStructuralSubscriptionTargetWrite" />
+ interface="lp.bugs.interfaces.structuralsubscription.IStructuralSubscriptionTargetWrite" />
</class>
<adapter
@@ -1437,9 +1421,6 @@
for="lp.registry.interfaces.productseries.IProductSeries"
factory="lp.registry.browser.productseries.ProductSeriesBreadcrumb"
permission="zope.Public"/>
- <adapter
- factory=".model.structuralsubscription.ProductSeriesTargetHelper"
- permission="zope.Public"/>
<!-- This is class TimelineProductSeries -->
@@ -1560,10 +1541,10 @@
<!-- IStructuralSubscriptionTarget -->
<allow
- interface="lp.registry.interfaces.structuralsubscription.IStructuralSubscriptionTargetRead" />
+ interface="lp.bugs.interfaces.structuralsubscription.IStructuralSubscriptionTargetRead" />
<require
permission="launchpad.AnyPerson"
- interface="lp.registry.interfaces.structuralsubscription.IStructuralSubscriptionTargetWrite" />
+ interface="lp.bugs.interfaces.structuralsubscription.IStructuralSubscriptionTargetWrite" />
<!-- IHasBugSupervisor -->
@@ -1589,9 +1570,6 @@
for="lp.registry.interfaces.distribution.IDistributionSet"
factory="lp.registry.browser.distribution.DistributionSetBreadcrumb"
permission="zope.Public"/>
- <adapter
- factory=".model.structuralsubscription.DistributionTargetHelper"
- permission="zope.Public"/>
<!-- DistributionSet -->
@@ -1858,20 +1836,6 @@
interface="lp.registry.interfaces.packaging.IPackagingUtil"/>
</securedutility>
- <!-- StructuralSubscription -->
-
- <class
- class="lp.registry.model.structuralsubscription.StructuralSubscription">
- <allow
- interface=".interfaces.structuralsubscription.IStructuralSubscriptionPublic" />
- <require
- set_schema=".interfaces.structuralsubscription.IStructuralSubscriptionPublic"
- permission="zope.Public" />
- <require
- interface=".interfaces.structuralsubscription.IStructuralSubscriptionRestricted"
- permission="launchpad.Edit" />
- </class>
-
<!-- PersonNotification -->
<class
=== modified file 'lib/lp/registry/interfaces/distribution.py'
--- lib/lp/registry/interfaces/distribution.py 2011-01-18 03:15:37 +0000
+++ lib/lp/registry/interfaces/distribution.py 2011-01-21 19:02:35 +0000
@@ -73,6 +73,9 @@
IOfficialBugTagTargetRestricted,
)
from lp.bugs.interfaces.securitycontact import IHasSecurityContact
+from lp.bugs.interfaces.structuralsubscription import (
+ IStructuralSubscriptionTarget,
+ )
from lp.registry.interfaces.announcement import IMakesAnnouncements
from lp.registry.interfaces.distributionmirror import IDistributionMirror
from lp.registry.interfaces.karma import IKarmaContext
@@ -82,9 +85,6 @@
)
from lp.registry.interfaces.pillar import IPillar
from lp.registry.interfaces.role import IHasOwner
-from lp.registry.interfaces.structuralsubscription import (
- IStructuralSubscriptionTarget,
- )
from lp.services.fields import (
Description,
IconImageUpload,
=== modified file 'lib/lp/registry/interfaces/distributionsourcepackage.py'
--- lib/lp/registry/interfaces/distributionsourcepackage.py 2010-10-24 21:00:11 +0000
+++ lib/lp/registry/interfaces/distributionsourcepackage.py 2011-01-21 19:02:35 +0000
@@ -36,14 +36,14 @@
IHasOfficialBugTags,
)
from lp.bugs.interfaces.bugtask import IBugTask
+from lp.bugs.interfaces.structuralsubscription import (
+ IStructuralSubscriptionTarget,
+ )
from lp.code.interfaces.hasbranches import (
IHasBranches,
IHasMergeProposals,
)
from lp.registry.interfaces.distribution import IDistribution
-from lp.registry.interfaces.structuralsubscription import (
- IStructuralSubscriptionTarget,
- )
from lp.soyuz.enums import ArchivePurpose
=== modified file 'lib/lp/registry/interfaces/distroseries.py'
--- lib/lp/registry/interfaces/distroseries.py 2010-12-21 00:26:41 +0000
+++ lib/lp/registry/interfaces/distroseries.py 2011-01-21 19:02:35 +0000
@@ -63,6 +63,9 @@
IHasBugs,
IHasOfficialBugTags,
)
+from lp.bugs.interfaces.structuralsubscription import (
+ IStructuralSubscriptionTarget,
+ )
from lp.registry.errors import NoSuchDistroSeries
from lp.registry.interfaces.milestone import (
IHasMilestones,
@@ -75,9 +78,6 @@
SeriesStatus,
)
from lp.registry.interfaces.sourcepackage import ISourcePackage
-from lp.registry.interfaces.structuralsubscription import (
- IStructuralSubscriptionTarget,
- )
from lp.services.fields import (
ContentNameField,
Description,
=== modified file 'lib/lp/registry/interfaces/milestone.py'
--- lib/lp/registry/interfaces/milestone.py 2011-01-11 23:43:04 +0000
+++ lib/lp/registry/interfaces/milestone.py 2011-01-21 19:02:35 +0000
@@ -54,10 +54,10 @@
IHasOfficialBugTags,
)
from lp.bugs.interfaces.bugtask import IBugTask
+from lp.bugs.interfaces.structuralsubscription import (
+ IStructuralSubscriptionTarget,
+ )
from lp.registry.interfaces.productrelease import IProductRelease
-from lp.registry.interfaces.structuralsubscription import (
- IStructuralSubscriptionTarget,
- )
from lp.services.fields import (
ContentNameField,
FormattableDate,
=== modified file 'lib/lp/registry/interfaces/product.py'
--- lib/lp/registry/interfaces/product.py 2011-01-13 06:07:03 +0000
+++ lib/lp/registry/interfaces/product.py 2011-01-21 19:02:35 +0000
@@ -94,6 +94,9 @@
IOfficialBugTagTargetRestricted,
)
from lp.bugs.interfaces.securitycontact import IHasSecurityContact
+from lp.bugs.interfaces.structuralsubscription import (
+ IStructuralSubscriptionTarget,
+ )
from lp.code.interfaces.branchvisibilitypolicy import (
IHasBranchVisibilityPolicy,
)
@@ -117,9 +120,6 @@
from lp.registry.interfaces.productseries import IProductSeries
from lp.registry.interfaces.projectgroup import IProjectGroup
from lp.registry.interfaces.role import IHasOwner
-from lp.registry.interfaces.structuralsubscription import (
- IStructuralSubscriptionTarget,
- )
from lp.services.fields import (
Description,
IconImageUpload,
=== modified file 'lib/lp/registry/interfaces/productseries.py'
--- lib/lp/registry/interfaces/productseries.py 2011-01-11 22:53:57 +0000
+++ lib/lp/registry/interfaces/productseries.py 2011-01-21 19:02:35 +0000
@@ -68,7 +68,7 @@
ISeriesMixin,
SeriesStatus,
)
-from lp.registry.interfaces.structuralsubscription import (
+from lp.bugs.interfaces.structuralsubscription import (
IStructuralSubscriptionTarget,
)
from lp.services.fields import (
=== modified file 'lib/lp/registry/interfaces/projectgroup.py'
--- lib/lp/registry/interfaces/projectgroup.py 2010-12-15 19:32:47 +0000
+++ lib/lp/registry/interfaces/projectgroup.py 2011-01-21 19:02:35 +0000
@@ -59,6 +59,9 @@
IHasOfficialBugTags,
)
from lp.bugs.interfaces.bugtracker import IBugTracker
+from lp.bugs.interfaces.structuralsubscription import (
+ IStructuralSubscriptionTarget,
+ )
from lp.code.interfaces.branchvisibilitypolicy import (
IHasBranchVisibilityPolicy,
)
@@ -74,9 +77,6 @@
)
from lp.registry.interfaces.pillar import IPillar
from lp.registry.interfaces.role import IHasOwner
-from lp.registry.interfaces.structuralsubscription import (
- IStructuralSubscriptionTarget,
- )
from lp.services.fields import (
IconImageUpload,
LogoImageUpload,
=== modified file 'lib/lp/registry/interfaces/webservice.py'
--- lib/lp/registry/interfaces/webservice.py 2010-11-19 18:58:28 +0000
+++ lib/lp/registry/interfaces/webservice.py 2011-01-21 19:02:35 +0000
@@ -32,8 +32,6 @@
'ISSHKey',
'ISourcePackage',
'ISourcePackageName',
- 'IStructuralSubscription',
- 'IStructuralSubscriptionTarget',
'ITeam',
'ITeamMembership',
'ITimelineProductSeries',
@@ -96,10 +94,6 @@
from lp.registry.interfaces.sourcepackage import ISourcePackage
from lp.registry.interfaces.sourcepackagename import ISourcePackageName
from lp.registry.interfaces.ssh import ISSHKey
-from lp.registry.interfaces.structuralsubscription import (
- IStructuralSubscription,
- IStructuralSubscriptionTarget,
- )
from lp.registry.interfaces.teammembership import ITeamMembership
from lp.registry.interfaces.wikiname import IWikiName
# XXX: JonathanLange 2010-11-09 bug=673083: Legacy work-around for circular
=== modified file 'lib/lp/registry/model/distribution.py'
--- lib/lp/registry/model/distribution.py 2011-01-18 14:37:41 +0000
+++ lib/lp/registry/model/distribution.py 2011-01-21 19:02:35 +0000
@@ -114,6 +114,9 @@
OfficialBugTagTargetMixin,
)
from lp.bugs.model.bugtask import BugTask
+from lp.bugs.model.structuralsubscription import (
+ StructuralSubscriptionTargetMixin,
+ )
from lp.registry.errors import NoSuchDistroSeries
from lp.registry.interfaces.distribution import (
IBaseDistribution,
@@ -149,9 +152,6 @@
from lp.registry.model.pillar import HasAliasMixin
from lp.registry.model.hasdrivers import HasDriversMixin
from lp.registry.model.sourcepackagename import SourcePackageName
-from lp.registry.model.structuralsubscription import (
- StructuralSubscriptionTargetMixin,
- )
from lp.services.propertycache import (
cachedproperty,
get_property_cache,
=== modified file 'lib/lp/registry/model/distributionsourcepackage.py'
--- lib/lp/registry/model/distributionsourcepackage.py 2010-11-30 15:01:41 +0000
+++ lib/lp/registry/model/distributionsourcepackage.py 2011-01-21 19:02:35 +0000
@@ -51,6 +51,9 @@
HasBugHeatMixin,
)
from lp.bugs.model.bugtask import BugTask
+from lp.bugs.model.structuralsubscription import (
+ StructuralSubscriptionTargetMixin,
+ )
from lp.code.model.hasbranches import (
HasBranchesMixin,
HasMergeProposalsMixin,
@@ -67,9 +70,6 @@
SourcePackage,
SourcePackageQuestionTargetMixin,
)
-from lp.registry.model.structuralsubscription import (
- StructuralSubscriptionTargetMixin,
- )
from lp.soyuz.enums import (
ArchivePurpose,
PackagePublishingStatus,
=== modified file 'lib/lp/registry/model/distroseries.py'
--- lib/lp/registry/model/distroseries.py 2011-01-13 08:09:16 +0000
+++ lib/lp/registry/model/distroseries.py 2011-01-21 19:02:35 +0000
@@ -91,6 +91,9 @@
HasBugHeatMixin,
)
from lp.bugs.model.bugtask import BugTask
+from lp.bugs.model.structuralsubscription import (
+ StructuralSubscriptionTargetMixin,
+ )
from lp.registry.interfaces.distroseries import (
DerivationError,
IDistroSeries,
@@ -119,9 +122,6 @@
from lp.registry.model.series import SeriesMixin
from lp.registry.model.sourcepackage import SourcePackage
from lp.registry.model.sourcepackagename import SourcePackageName
-from lp.registry.model.structuralsubscription import (
- StructuralSubscriptionTargetMixin,
- )
from lp.services.propertycache import (
cachedproperty,
get_property_cache,
=== modified file 'lib/lp/registry/model/milestone.py'
--- lib/lp/registry/model/milestone.py 2010-12-01 21:30:55 +0000
+++ lib/lp/registry/model/milestone.py 2011-01-21 19:02:35 +0000
@@ -47,6 +47,9 @@
IBugTaskSet,
)
from lp.bugs.model.bugtarget import HasBugsBase
+from lp.bugs.model.structuralsubscription import (
+ StructuralSubscriptionTargetMixin,
+ )
from lp.registry.interfaces.milestone import (
IHasMilestones,
IMilestone,
@@ -54,9 +57,6 @@
IProjectGroupMilestone,
)
from lp.registry.model.productrelease import ProductRelease
-from lp.registry.model.structuralsubscription import (
- StructuralSubscriptionTargetMixin,
- )
FUTURE_NONE = datetime.date(datetime.MAXYEAR, 1, 1)
=== modified file 'lib/lp/registry/model/person.py'
--- lib/lp/registry/model/person.py 2011-01-20 20:11:53 +0000
+++ lib/lp/registry/model/person.py 2011-01-21 19:02:35 +0000
@@ -181,6 +181,7 @@
)
from lp.bugs.model.bugtarget import HasBugsBase
from lp.bugs.model.bugtask import get_related_bugtasks_search_params
+from lp.bugs.model.structuralsubscription import StructuralSubscription
from lp.code.model.hasbranches import (
HasBranchesMixin,
HasMergeProposalsMixin,
@@ -253,7 +254,6 @@
)
from lp.registry.model.personlocation import PersonLocation
from lp.registry.model.pillar import PillarName
-from lp.registry.model.structuralsubscription import StructuralSubscription
from lp.registry.model.teammembership import (
TeamMembership,
TeamMembershipSet,
=== modified file 'lib/lp/registry/model/product.py'
--- lib/lp/registry/model/product.py 2011-01-13 21:03:14 +0000
+++ lib/lp/registry/model/product.py 2011-01-21 19:02:35 +0000
@@ -122,6 +122,9 @@
from lp.bugs.model.bugtask import BugTask
from lp.bugs.model.bugtracker import BugTracker
from lp.bugs.model.bugwatch import BugWatch
+from lp.bugs.model.structuralsubscription import (
+ StructuralSubscriptionTargetMixin,
+ )
from lp.code.enums import BranchType
from lp.code.interfaces.branch import DEFAULT_BRANCH_STATUS_IN_LISTING
from lp.code.model.branchvisibilitypolicy import BranchVisibilityPolicyMixin
@@ -162,9 +165,6 @@
from lp.registry.model.productseries import ProductSeries
from lp.registry.model.series import ACTIVE_STATUSES
from lp.registry.model.sourcepackagename import SourcePackageName
-from lp.registry.model.structuralsubscription import (
- StructuralSubscriptionTargetMixin,
- )
from lp.services.propertycache import (
cachedproperty,
get_property_cache,
=== modified file 'lib/lp/registry/model/productseries.py'
--- lib/lp/registry/model/productseries.py 2010-11-30 21:39:25 +0000
+++ lib/lp/registry/model/productseries.py 2011-01-21 19:02:35 +0000
@@ -69,6 +69,9 @@
HasBugHeatMixin,
)
from lp.bugs.model.bugtask import BugTask
+from lp.bugs.model.structuralsubscription import (
+ StructuralSubscriptionTargetMixin,
+ )
from lp.registry.interfaces.packaging import PackagingType
from lp.registry.interfaces.person import validate_person
from lp.registry.interfaces.productseries import (
@@ -84,9 +87,6 @@
from lp.registry.model.packaging import Packaging
from lp.registry.model.productrelease import ProductRelease
from lp.registry.model.series import SeriesMixin
-from lp.registry.model.structuralsubscription import (
- StructuralSubscriptionTargetMixin,
- )
from lp.services.worlddata.model.language import Language
from lp.translations.interfaces.translations import (
TranslationsBranchImportMode,
=== modified file 'lib/lp/registry/model/projectgroup.py'
--- lib/lp/registry/model/projectgroup.py 2011-01-19 21:06:27 +0000
+++ lib/lp/registry/model/projectgroup.py 2011-01-21 19:02:35 +0000
@@ -77,6 +77,9 @@
OfficialBugTag,
)
from lp.bugs.model.bugtask import BugTask
+from lp.bugs.model.structuralsubscription import (
+ StructuralSubscriptionTargetMixin,
+ )
from lp.code.model.branchvisibilitypolicy import BranchVisibilityPolicyMixin
from lp.code.model.hasbranches import (
HasBranchesMixin,
@@ -101,9 +104,6 @@
from lp.registry.model.pillar import HasAliasMixin
from lp.registry.model.product import Product
from lp.registry.model.productseries import ProductSeries
-from lp.registry.model.structuralsubscription import (
- StructuralSubscriptionTargetMixin,
- )
from lp.services.worlddata.model.language import Language
from lp.translations.enums import TranslationPermission
from lp.translations.model.potemplate import POTemplate
=== removed file 'lib/lp/registry/security.py'
--- lib/lp/registry/security.py 2011-01-13 15:12:36 +0000
+++ lib/lp/registry/security.py 1970-01-01 00:00:00 +0000
@@ -1,23 +0,0 @@
-# Copyright 2011 Canonical Ltd. This software is licensed under the
-# GNU Affero General Public License version 3 (see the file LICENSE).
-
-"""Security adapters for Registry."""
-
-__metaclass__ = type
-__all__ = []
-
-from canonical.launchpad.security import AuthorizationBase
-from lp.registry.interfaces.structuralsubscription import (
- IStructuralSubscription,
- )
-
-
-class EditStructuralSubscription(AuthorizationBase):
- """Edit permissions for `IStructuralSubscription`."""
-
- usedfor = IStructuralSubscription
- permission = "launchpad.Edit"
-
- def checkAuthenticated(self, user):
- """Subscribers can edit their own structural subscriptions."""
- return user.inTeam(self.obj.subscriber)
=== modified file 'lib/lp/registry/tests/test_person.py'
--- lib/lp/registry/tests/test_person.py 2011-01-19 04:18:50 +0000
+++ lib/lp/registry/tests/test_person.py 2011-01-21 19:02:35 +0000
@@ -42,6 +42,7 @@
)
from lp.answers.model.answercontact import AnswerContact
from lp.blueprints.model.specification import Specification
+from lp.bugs.model.structuralsubscription import StructuralSubscription
from lp.bugs.interfaces.bugtask import IllegalRelatedBugTasksParams
from lp.bugs.model.bug import Bug
from lp.bugs.model.bugtask import get_related_bugtasks_search_params
@@ -64,7 +65,6 @@
KarmaTotalCache,
)
from lp.registry.model.person import Person
-from lp.registry.model.structuralsubscription import StructuralSubscription
from lp.services.openid.model.openididentifier import OpenIdIdentifier
from lp.soyuz.enums import ArchivePurpose
from lp.testing import (