← Back to team overview

launchpad-reviewers team mailing list archive

[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):