launchpad-reviewers team mailing list archive
-
launchpad-reviewers team
-
Mailing list archive
-
Message #01215
[Merge] lp:~allenap/launchpad/structural-subscription-interfaces into lp:launchpad
Gavin Panella has proposed merging lp:~allenap/launchpad/structural-subscription-interfaces into lp:launchpad with lp:~allenap/launchpad/bug-subscription-filter-models-bug-639749 as a prerequisite.
Requested reviews:
Launchpad code reviewers (launchpad-reviewers): code
A quick branch to break up IStructuralSubscriptionTarget into two constituent interfaces ISSTRead and ISSTWrite. This simplifies the ZCML and makes future change much easier.
--
https://code.launchpad.net/~allenap/launchpad/structural-subscription-interfaces/+merge/36548
Your team Launchpad code reviewers is requested to review the proposed merge of lp:~allenap/launchpad/structural-subscription-interfaces into lp:launchpad.
=== modified file 'lib/lp/registry/configure.zcml'
--- lib/lp/registry/configure.zcml 2010-09-23 11:37:58 +0000
+++ lib/lp/registry/configure.zcml 2010-09-24 13:41:13 +0000
@@ -173,21 +173,11 @@
<!-- IStructuralSubscriptionTarget -->
<allow
- attributes="
- bug_subscriptions
- getBugNotificationsRecipients
- getSubscription
- getSubscriptions
- parent_subscription_target
- target_type_display
- userHasBugSubscriptions
- userCanAlterBugSubscription"/>
+ interface="lp.registry.interfaces.structuralsubscription.IStructuralSubscriptionTargetRead" />
<require
permission="launchpad.AnyPerson"
- attributes="
- addBugSubscription
- addSubscription
- removeBugSubscription"/>
+ interface="lp.registry.interfaces.structuralsubscription.IStructuralSubscriptionTargetWrite" />
+
</class>
<securedutility
class="lp.registry.model.distroseries.DistroSeriesSet"
@@ -318,21 +308,11 @@
<!-- IStructuralSubscriptionTarget -->
<allow
- attributes="
- bug_subscriptions
- getSubscriptions
- getSubscription
- getBugNotificationsRecipients
- parent_subscription_target
- target_type_display
- userHasBugSubscriptions
- userCanAlterBugSubscription"/>
+ interface="lp.registry.interfaces.structuralsubscription.IStructuralSubscriptionTargetRead" />
<require
permission="launchpad.AnyPerson"
- attributes="
- addSubscription
- addBugSubscription
- removeBugSubscription"/>
+ interface="lp.registry.interfaces.structuralsubscription.IStructuralSubscriptionTargetWrite" />
+
<require
permission="launchpad.Admin"
set_attributes="registrant"/>
@@ -444,28 +424,24 @@
getBugCounts
bug_count
total_bug_heat
- bug_subscriptions
- getSubscriptions
- getSubscription
- parent_subscription_target
- getBugNotificationsRecipients
getPersonsByEmail
getReleasesAndPublishingHistory
upstream_product
- target_type_display
_getOfficialTagClause
official_bug_tags
findRelatedArchives
- findRelatedArchivePublications
- userHasBugSubscriptions
- userCanAlterBugSubscription"/>
- <require
- permission="launchpad.AnyPerson"
- attributes="
- addSubscription
- addBugSubscription
- removeBugSubscription
- createBug"/>
+ findRelatedArchivePublications"/>
+ <require
+ permission="launchpad.AnyPerson"
+ attributes="createBug"/>
+
+ <!-- IStructuralSubscriptionTarget -->
+
+ <allow
+ interface="lp.registry.interfaces.structuralsubscription.IStructuralSubscriptionTargetRead" />
+ <require
+ permission="launchpad.AnyPerson"
+ interface="lp.registry.interfaces.structuralsubscription.IStructuralSubscriptionTargetWrite" />
<!-- IQuestionTarget -->
@@ -962,21 +938,11 @@
<!-- IStructuralSubscriptionTarget -->
<allow
- attributes="
- bug_subscriptions
- getSubscriptions
- getSubscription
- getBugNotificationsRecipients
- parent_subscription_target
- target_type_display
- userHasBugSubscriptions
- userCanAlterBugSubscription"/>
+ interface="lp.registry.interfaces.structuralsubscription.IStructuralSubscriptionTargetRead" />
<require
permission="launchpad.AnyPerson"
- attributes="
- addSubscription
- addBugSubscription
- removeBugSubscription"/>
+ interface="lp.registry.interfaces.structuralsubscription.IStructuralSubscriptionTargetWrite" />
+
</class>
<!-- IMilestoneSet -->
@@ -1238,22 +1204,10 @@
<!-- IStructuralSubscriptionTarget -->
<allow
- attributes="
- bug_subscriptions
- getSubscriptions
- getSubscription
- getBugNotificationsRecipients
- parent_subscription_target
- target_type_display
- userHasBugSubscriptions
- userCanAlterBugSubscription"/>
+ interface="lp.registry.interfaces.structuralsubscription.IStructuralSubscriptionTargetRead" />
<require
permission="launchpad.AnyPerson"
- attributes="
- addSubscription
- addBugSubscription
- removeBugSubscription
- userCanAlterSubscription"/>
+ interface="lp.registry.interfaces.structuralsubscription.IStructuralSubscriptionTargetWrite" />
<!-- IHasBugSupervisor -->
@@ -1391,21 +1345,11 @@
<!-- IStructuralSubscriptionTarget -->
<allow
- attributes="
- bug_subscriptions
- getBugNotificationsRecipients
- getSubscription
- getSubscriptions
- parent_subscription_target
- target_type_display
- userHasBugSubscriptions
- userCanAlterBugSubscription"/>
+ interface="lp.registry.interfaces.structuralsubscription.IStructuralSubscriptionTargetRead" />
<require
permission="launchpad.AnyPerson"
- attributes="
- addBugSubscription
- addSubscription
- removeBugSubscription"/>
+ interface="lp.registry.interfaces.structuralsubscription.IStructuralSubscriptionTargetWrite" />
+
</class>
<adapter
provides="canonical.launchpad.interfaces.IHasExternalBugTracker"
@@ -1518,22 +1462,10 @@
<!-- IStructuralSubscriptionTarget -->
<allow
- attributes="
- bug_subscriptions
- getSubscriptions
- getSubscription
- getBugNotificationsRecipients
- parent_subscription_target
- target_type_display
- userHasBugSubscriptions
- userCanAlterBugSubscription"/>
+ interface="lp.registry.interfaces.structuralsubscription.IStructuralSubscriptionTargetRead" />
<require
permission="launchpad.AnyPerson"
- attributes="
- addSubscription
- addBugSubscription
- removeBugSubscription
- userCanAlterSubscription"/>
+ interface="lp.registry.interfaces.structuralsubscription.IStructuralSubscriptionTargetWrite" />
<!-- IHasBugSupervisor -->
=== modified file 'lib/lp/registry/interfaces/structuralsubscription.py'
--- lib/lp/registry/interfaces/structuralsubscription.py 2010-08-20 20:31:18 +0000
+++ lib/lp/registry/interfaces/structuralsubscription.py 2010-09-24 13:41:13 +0000
@@ -129,9 +129,11 @@
title=_("The structure to which this subscription belongs.")))
-class IStructuralSubscriptionTarget(Interface):
- """A Launchpad Structure allowing users to subscribe to it."""
- export_as_webservice_entry()
+class IStructuralSubscriptionTargetRead(Interface):
+ """A Launchpad Structure allowing users to subscribe to it.
+
+ Read-only parts.
+ """
# We don't really want to expose the level details yet. Only
# BugNotificationLevel.COMMENTS is used at this time.
@@ -155,9 +157,48 @@
parent_subscription_target = Attribute(
"The target's parent, or None if one doesn't exist.")
+ # XXX: This has to go.
+ bug_subscriptions = Attribute(
+ "All subscriptions to bugs at the METADATA level or higher.")
+
def userCanAlterSubscription(subscriber, subscribed_by):
"""Check if a user can change a subscription for a person."""
+ def userCanAlterBugSubscription(subscriber, subscribed_by):
+ """Check if a user can change a bug subscription for a person."""
+
+ @operation_parameters(person=Reference(schema=IPerson))
+ @operation_returns_entry(IStructuralSubscription)
+ @export_read_operation()
+ def getSubscription(person):
+ """Return the subscription for `person`, if it exists."""
+
+ def getBugNotificationsRecipients(recipients=None, level=None):
+ """Return the set of bug subscribers to this target.
+
+ :param recipients: If recipients is not None, a rationale
+ is added for each subscriber.
+ :type recipients: `INotificationRecipientSet`
+ 'param level: If level is not None, only strucutral
+ subscribers with a subscrition level greater or equal
+ to the given value are returned.
+ :type level: `BugNotificationLevel`
+ :return: An `INotificationRecipientSet` instance containing
+ the bug subscribers.
+ """
+
+ target_type_display = Attribute("The type of the target, for display.")
+
+ def userHasBugSubscriptions(user):
+ """Is `user` subscribed, directly or via a team, to bug mail?"""
+
+
+class IStructuralSubscriptionTargetWrite(Interface):
+ """A Launchpad Structure allowing users to subscribe to it.
+
+ Modify-only parts.
+ """
+
def addSubscription(subscriber, subscribed_by):
"""Add a subscription for this structure.
@@ -170,9 +211,6 @@
:return: The new subscription.
"""
- def userCanAlterBugSubscription(subscriber, subscribed_by):
- """Check if a user can change a bug subscription for a person."""
-
@operation_parameters(
subscriber=Reference(
schema=IPerson,
@@ -216,30 +254,11 @@
:unsubscribed_by: The IPerson removing the subscription.
"""
- @operation_parameters(person=Reference(schema=IPerson))
- @operation_returns_entry(IStructuralSubscription)
- @export_read_operation()
- def getSubscription(person):
- """Return the subscription for `person`, if it exists."""
-
- def getBugNotificationsRecipients(recipients=None, level=None):
- """Return the set of bug subscribers to this target.
-
- :param recipients: If recipients is not None, a rationale
- is added for each subscriber.
- :type recipients: `INotificationRecipientSet`
- 'param level: If level is not None, only strucutral
- subscribers with a subscrition level greater or equal
- to the given value are returned.
- :type level: `BugNotificationLevel`
- :return: An `INotificationRecipientSet` instance containing
- the bug subscribers.
- """
-
- target_type_display = Attribute("The type of the target, for display.")
-
- def userHasBugSubscriptions(user):
- """Is `user` subscribed, directly or via a team, to bug mail?"""
+
+class IStructuralSubscriptionTarget(IStructuralSubscriptionTargetRead,
+ IStructuralSubscriptionTargetWrite):
+ """A Launchpad Structure allowing users to subscribe to it."""
+ export_as_webservice_entry()
class IStructuralSubscriptionForm(Interface):