Merge ~cjwatson/launchpad:zcml-namespaces-url into launchpad:master

Proposed by Colin Watson
Status: Merged
Approved by: Colin Watson
Approved revision: 9c5bbab44a977395cb2bd851cb53210157fa1c75
Merge reported by: Otto Co-Pilot
Merged at revision: not available
Proposed branch: ~cjwatson/launchpad:zcml-namespaces-url
Merge into: launchpad:master
Diff against target: 1942 lines (+233/-221)
28 files modified
doc/explanation/framework.rst (+4/-4)
lib/lp/answers/browser/configure.zcml (+6/-5)
lib/lp/blueprints/browser/configure.zcml (+9/-8)
lib/lp/bugs/browser/configure.zcml (+23/-22)
lib/lp/buildmaster/browser/configure.zcml (+5/-4)
lib/lp/charms/browser/configure.zcml (+7/-6)
lib/lp/code/browser/configure.zcml (+23/-22)
lib/lp/oci/browser/configure.zcml (+6/-5)
lib/lp/registry/browser/configure.zcml (+54/-53)
lib/lp/services/auth/configure.zcml (+1/-1)
lib/lp/services/features/browser/configure.zcml (+2/-1)
lib/lp/services/identity/configure.zcml (+1/-1)
lib/lp/services/messages/browser/configure.zcml (+2/-2)
lib/lp/services/statistics/browser/configure.zcml (+3/-2)
lib/lp/services/temporaryblobstorage/configure.zcml (+2/-2)
lib/lp/services/verification/browser/configure.zcml (+3/-3)
lib/lp/services/webapp/doc/canonical_url.rst (+16/-16)
lib/lp/services/webapp/doc/zcmldirectives.rst (+1/-1)
lib/lp/services/webapp/meta.zcml (+1/-1)
lib/lp/services/webapp/metazcml.py (+1/-1)
lib/lp/services/webhooks/configure.zcml (+2/-2)
lib/lp/services/worlddata/browser/configure.zcml (+3/-2)
lib/lp/snappy/browser/configure.zcml (+10/-10)
lib/lp/soyuz/browser/configure.zcml (+27/-27)
lib/lp/soyuz/model/archive.py (+1/-1)
lib/lp/soyuz/model/archivepermission.py (+1/-1)
lib/lp/testopenid/browser/configure.zcml (+2/-1)
lib/lp/translations/browser/configure.zcml (+17/-17)
Reviewer Review Type Date Requested Status
Colin Watson (community) Approve
Review via email: mp+436869@code.launchpad.net

Commit message

Move ZCML url directive to lp namespace

Description of the change

As with commit 57196c1d6a220f00039e027768cc05368135f556, it makes sense to move our local `url` directive to our own namespace rather than poking it into the Zope browser namespace. This is a big patch, but it's mostly mechanical.

To post a comment you must log in.
Revision history for this message
Colin Watson (cjwatson) wrote :

Self-approving mechanical change in line with previous work.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
diff --git a/doc/explanation/framework.rst b/doc/explanation/framework.rst
index ef3342a..78e3cdf 100644
--- a/doc/explanation/framework.rst
+++ b/doc/explanation/framework.rst
@@ -51,10 +51,10 @@ Many of the details here are handled by custom code in
51provides many application-specific hooks, and51provides many application-specific hooks, and
52``lp.services.webapp.publishing`` which defines much of Launchpad's52``lp.services.webapp.publishing`` which defines much of Launchpad's
53traversal framework. The URL structure is defined in various53traversal framework. The URL structure is defined in various
54``configure.zcml`` files: ``browser:url`` tags are used to build up the54``configure.zcml`` files: ``lp:url`` tags are used to build up the canonical
55canonical URL for an object, and ``browser:navigation`` tags register55URL for an object, and ``browser:navigation`` tags register classes called
56classes called as part of traversal to resolve the next step from each56as part of traversal to resolve the next step from each intermediate object
57intermediate object in the URL (starting at57in the URL (starting at
58``lp.app.browser.launchpad.LaunchpadRootNavigation``).58``lp.app.browser.launchpad.LaunchpadRootNavigation``).
5959
60Page templating60Page templating
diff --git a/lib/lp/answers/browser/configure.zcml b/lib/lp/answers/browser/configure.zcml
index 87a6b76..abd9c42 100644
--- a/lib/lp/answers/browser/configure.zcml
+++ b/lib/lp/answers/browser/configure.zcml
@@ -6,6 +6,7 @@
6 xmlns="http://namespaces.zope.org/zope"6 xmlns="http://namespaces.zope.org/zope"
7 xmlns:browser="http://namespaces.zope.org/browser"7 xmlns:browser="http://namespaces.zope.org/browser"
8 xmlns:i18n="http://namespaces.zope.org/i18n"8 xmlns:i18n="http://namespaces.zope.org/i18n"
9 xmlns:lp="http://namespaces.canonical.com/lp"
9 i18n_domain="launchpad">10 i18n_domain="launchpad">
10<facet facet="answers">11<facet facet="answers">
1112
@@ -130,14 +131,14 @@
130 name="+index"131 name="+index"
131 />132 />
132133
133 <browser:url134 <lp:url
134 for="lp.answers.interfaces.question.IQuestion"135 for="lp.answers.interfaces.question.IQuestion"
135 path_expression="string:+question/${id}"136 path_expression="string:+question/${id}"
136 attribute_to_parent="target"137 attribute_to_parent="target"
137 rootsite="answers"138 rootsite="answers"
138 />139 />
139140
140 <browser:url141 <lp:url
141 for="lp.answers.interfaces.questionsubscription.IQuestionSubscription"142 for="lp.answers.interfaces.questionsubscription.IQuestionSubscription"
142 path_expression="string:subscriptions/${person}"143 path_expression="string:subscriptions/${person}"
143 attribute_to_parent="question"144 attribute_to_parent="question"
@@ -258,7 +259,7 @@
258 template="../../app/templates/generic-edit.pt"259 template="../../app/templates/generic-edit.pt"
259 />260 />
260261
261 <browser:url262 <lp:url
262 for="lp.answers.interfaces.question.IQuestionMessage"263 for="lp.answers.interfaces.question.IQuestionMessage"
263 path_expression="string:messages/${display_index}"264 path_expression="string:messages/${display_index}"
264 attribute_to_parent="question"265 attribute_to_parent="question"
@@ -287,7 +288,7 @@
287 classes="QuestionMessageNavigation"288 classes="QuestionMessageNavigation"
288 />289 />
289290
290 <browser:url291 <lp:url
291 for="lp.answers.interfaces.questioncollection.IQuestionSet"292 for="lp.answers.interfaces.questioncollection.IQuestionSet"
292 path_expression="string:questions"293 path_expression="string:questions"
293 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot"294 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot"
@@ -342,7 +343,7 @@
342 template="../../app/templates/generic-edit.pt"343 template="../../app/templates/generic-edit.pt"
343 />344 />
344345
345 <browser:url346 <lp:url
346 for="lp.answers.interfaces.faq.IFAQ"347 for="lp.answers.interfaces.faq.IFAQ"
347 path_expression="string:+faq/${id}"348 path_expression="string:+faq/${id}"
348 attribute_to_parent="target"349 attribute_to_parent="target"
diff --git a/lib/lp/blueprints/browser/configure.zcml b/lib/lp/blueprints/browser/configure.zcml
index aa5533b..2393698 100644
--- a/lib/lp/blueprints/browser/configure.zcml
+++ b/lib/lp/blueprints/browser/configure.zcml
@@ -6,6 +6,7 @@
6 xmlns="http://namespaces.zope.org/zope"6 xmlns="http://namespaces.zope.org/zope"
7 xmlns:browser="http://namespaces.zope.org/browser"7 xmlns:browser="http://namespaces.zope.org/browser"
8 xmlns:i18n="http://namespaces.zope.org/i18n"8 xmlns:i18n="http://namespaces.zope.org/i18n"
9 xmlns:lp="http://namespaces.canonical.com/lp"
9 xmlns:xmlrpc="http://namespaces.zope.org/xmlrpc"10 xmlns:xmlrpc="http://namespaces.zope.org/xmlrpc"
10 i18n_domain="launchpad">11 i18n_domain="launchpad">
1112
@@ -20,7 +21,7 @@
20 for="lp.blueprints.interfaces.sprint.ISprint"21 for="lp.blueprints.interfaces.sprint.ISprint"
21 name="+specs"22 name="+specs"
22 layer="lp.blueprints.publisher.BlueprintsLayer"/>23 layer="lp.blueprints.publisher.BlueprintsLayer"/>
23 <browser:url24 <lp:url
24 for="lp.blueprints.interfaces.sprint.ISprint"25 for="lp.blueprints.interfaces.sprint.ISprint"
25 path_expression="name"26 path_expression="name"
26 parent_utility="lp.blueprints.interfaces.sprint.ISprintSet"/>27 parent_utility="lp.blueprints.interfaces.sprint.ISprintSet"/>
@@ -135,7 +136,7 @@
135 name="+sprints"136 name="+sprints"
136 template="../templates/hassprints-sprints.pt"/>137 template="../templates/hassprints-sprints.pt"/>
137 </browser:pages>138 </browser:pages>
138 <browser:url139 <lp:url
139 for="lp.blueprints.interfaces.sprint.ISprintSet"140 for="lp.blueprints.interfaces.sprint.ISprintSet"
140 path_expression="string:sprints"141 path_expression="string:sprints"
141 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot"/>142 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot"/>
@@ -182,7 +183,7 @@
182 <browser:defaultView183 <browser:defaultView
183 for="lp.blueprints.interfaces.sprintspecification.ISprintSpecification"184 for="lp.blueprints.interfaces.sprintspecification.ISprintSpecification"
184 name="+decide"/>185 name="+decide"/>
185 <browser:url186 <lp:url
186 for="lp.blueprints.interfaces.sprintspecification.ISprintSpecification"187 for="lp.blueprints.interfaces.sprintspecification.ISprintSpecification"
187 path_expression="string:${sprint/name}"188 path_expression="string:${sprint/name}"
188 attribute_to_parent="specification"/>189 attribute_to_parent="specification"/>
@@ -199,7 +200,7 @@
199 for="lp.blueprints.interfaces.sprintspecification.ISprintSpecification"200 for="lp.blueprints.interfaces.sprintspecification.ISprintSpecification"
200 permission="zope.Public"201 permission="zope.Public"
201 template="../templates/sprintspecification-icon-status.pt"/>202 template="../templates/sprintspecification-icon-status.pt"/>
202 <browser:url203 <lp:url
203 for="lp.blueprints.interfaces.specificationsubscription.ISpecificationSubscription"204 for="lp.blueprints.interfaces.specificationsubscription.ISpecificationSubscription"
204 path_expression="string:+subscription/${person/name}"205 path_expression="string:+subscription/${person/name}"
205 attribute_to_parent="specification"/>206 attribute_to_parent="specification"/>
@@ -216,13 +217,13 @@
216 <browser:defaultView217 <browser:defaultView
217 for="lp.blueprints.interfaces.sprintattendance.ISprintAttendance"218 for="lp.blueprints.interfaces.sprintattendance.ISprintAttendance"
218 name="+edit"/>219 name="+edit"/>
219 <browser:url220 <lp:url
220 for="lp.blueprints.interfaces.sprintattendance.ISprintAttendance"221 for="lp.blueprints.interfaces.sprintattendance.ISprintAttendance"
221 path_expression="string:${attendee/name}"222 path_expression="string:${attendee/name}"
222 attribute_to_parent="sprint"/>223 attribute_to_parent="sprint"/>
223 <facet224 <facet
224 facet="specifications">225 facet="specifications">
225 <browser:url226 <lp:url
226 for="lp.blueprints.interfaces.specificationbranch.ISpecificationBranch"227 for="lp.blueprints.interfaces.specificationbranch.ISpecificationBranch"
227 urldata="lp.blueprints.browser.specificationbranch.SpecificationBranchURL"/>228 urldata="lp.blueprints.browser.specificationbranch.SpecificationBranchURL"/>
228 <browser:defaultView229 <browser:defaultView
@@ -246,7 +247,7 @@
246 <browser:defaultView247 <browser:defaultView
247 for="lp.blueprints.interfaces.specification.ISpecification"248 for="lp.blueprints.interfaces.specification.ISpecification"
248 name="+index"/>249 name="+index"/>
249 <browser:url250 <lp:url
250 for="lp.blueprints.interfaces.specification.ISpecification"251 for="lp.blueprints.interfaces.specification.ISpecification"
251 path_expression="string:+spec/${name}"252 path_expression="string:+spec/${name}"
252 attribute_to_parent="target"253 attribute_to_parent="target"
@@ -471,7 +472,7 @@
471 class="lp.blueprints.browser.specification.SpecificationLinkBranchView"472 class="lp.blueprints.browser.specification.SpecificationLinkBranchView"
472 template="../../app/templates/generic-edit.pt"473 template="../../app/templates/generic-edit.pt"
473 permission="launchpad.AnyPerson"/>474 permission="launchpad.AnyPerson"/>
474 <browser:url475 <lp:url
475 for="lp.blueprints.interfaces.specification.ISpecificationSet"476 for="lp.blueprints.interfaces.specification.ISpecificationSet"
476 path_expression="string:"477 path_expression="string:"
477 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot"478 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot"
diff --git a/lib/lp/bugs/browser/configure.zcml b/lib/lp/bugs/browser/configure.zcml
index e5d11ae..c21599c 100644
--- a/lib/lp/bugs/browser/configure.zcml
+++ b/lib/lp/bugs/browser/configure.zcml
@@ -6,6 +6,7 @@
6 xmlns="http://namespaces.zope.org/zope"6 xmlns="http://namespaces.zope.org/zope"
7 xmlns:browser="http://namespaces.zope.org/browser"7 xmlns:browser="http://namespaces.zope.org/browser"
8 xmlns:i18n="http://namespaces.zope.org/i18n"8 xmlns:i18n="http://namespaces.zope.org/i18n"
9 xmlns:lp="http://namespaces.canonical.com/lp"
9 xmlns:xmlrpc="http://namespaces.zope.org/xmlrpc"10 xmlns:xmlrpc="http://namespaces.zope.org/xmlrpc"
10 i18n_domain="launchpad">11 i18n_domain="launchpad">
11 <browser:feeds12 <browser:feeds
@@ -158,7 +159,7 @@
158 <browser:defaultView159 <browser:defaultView
159 for="lp.bugs.interfaces.bugmessage.IBugComment"160 for="lp.bugs.interfaces.bugmessage.IBugComment"
160 name="+index"/>161 name="+index"/>
161 <browser:url162 <lp:url
162 for="lp.bugs.interfaces.bugmessage.IBugComment"163 for="lp.bugs.interfaces.bugmessage.IBugComment"
163 path_expression="string:comments/${index}"164 path_expression="string:comments/${index}"
164 attribute_to_parent="bugtask"165 attribute_to_parent="bugtask"
@@ -203,7 +204,7 @@
203 provides="lazr.restful.interfaces.IEntry"204 provides="lazr.restful.interfaces.IEntry"
204 factory="lp.bugs.adapters.bug.bugcomment_to_entry"205 factory="lp.bugs.adapters.bug.bugcomment_to_entry"
205 />206 />
206 <browser:url207 <lp:url
207 for="lp.bugs.interfaces.malone.IMaloneApplication"208 for="lp.bugs.interfaces.malone.IMaloneApplication"
208 path_expression="string:bugs"209 path_expression="string:bugs"
209 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot"/>210 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot"/>
@@ -455,7 +456,7 @@
455 <browser:defaultView456 <browser:defaultView
456 for="lp.bugs.interfaces.bugtask.IBugTask"457 for="lp.bugs.interfaces.bugtask.IBugTask"
457 name="+index"/>458 name="+index"/>
458 <browser:url459 <lp:url
459 for="lp.bugs.interfaces.bugtask.IBugTask"460 for="lp.bugs.interfaces.bugtask.IBugTask"
460 path_expression="string:+bug/${bug/id}"461 path_expression="string:+bug/${bug/id}"
461 attribute_to_parent="target"462 attribute_to_parent="target"
@@ -481,7 +482,7 @@
481 permission="launchpad.View"482 permission="launchpad.View"
482 name="+activity"483 name="+activity"
483 template="../templates/bug-activity.pt"/>484 template="../templates/bug-activity.pt"/>
484 <browser:url485 <lp:url
485 for="lp.bugs.interfaces.bugactivity.IBugActivity"486 for="lp.bugs.interfaces.bugactivity.IBugActivity"
486 path_expression="string:activity"487 path_expression="string:activity"
487 attribute_to_parent="bug"488 attribute_to_parent="bug"
@@ -663,7 +664,7 @@
663 class="lp.bugs.browser.bugsubscription.BugSubscriptionAddView"664 class="lp.bugs.browser.bugsubscription.BugSubscriptionAddView"
664 permission="launchpad.AnyPerson"665 permission="launchpad.AnyPerson"
665 template="../templates/bug-addsubscriber.pt"/>666 template="../templates/bug-addsubscriber.pt"/>
666 <browser:url667 <lp:url
667 for="lp.bugs.interfaces.bugattachment.IBugAttachment"668 for="lp.bugs.interfaces.bugattachment.IBugAttachment"
668 urldata="lp.bugs.browser.bugattachment.BugAttachmentURL"/>669 urldata="lp.bugs.browser.bugattachment.BugAttachmentURL"/>
669 <browser:defaultView670 <browser:defaultView
@@ -705,17 +706,17 @@
705 <browser:defaultView706 <browser:defaultView
706 for="lp.bugs.interfaces.bugtracker.IBugTracker"707 for="lp.bugs.interfaces.bugtracker.IBugTracker"
707 name="+index"/>708 name="+index"/>
708 <browser:url709 <lp:url
709 for="lp.bugs.interfaces.bugtracker.IBugTracker"710 for="lp.bugs.interfaces.bugtracker.IBugTracker"
710 path_expression="string:${name}"711 path_expression="string:${name}"
711 parent_utility="lp.bugs.interfaces.bugtracker.IBugTrackerSet"712 parent_utility="lp.bugs.interfaces.bugtracker.IBugTrackerSet"
712 rootsite="bugs"/>713 rootsite="bugs"/>
713 <browser:url714 <lp:url
714 for="lp.bugs.interfaces.bugtracker.IBugTrackerComponentGroup"715 for="lp.bugs.interfaces.bugtracker.IBugTrackerComponentGroup"
715 path_expression="string:+components/${name}"716 path_expression="string:+components/${name}"
716 attribute_to_parent="bug_tracker"717 attribute_to_parent="bug_tracker"
717 rootsite="bugs"/>718 rootsite="bugs"/>
718 <browser:url719 <lp:url
719 for="lp.bugs.interfaces.bugtracker.IBugTrackerComponent"720 for="lp.bugs.interfaces.bugtracker.IBugTrackerComponent"
720 path_expression="name"721 path_expression="name"
721 attribute_to_parent="component_group"722 attribute_to_parent="component_group"
@@ -755,7 +756,7 @@
755 <browser:defaultView756 <browser:defaultView
756 for="lp.bugs.interfaces.bugtracker.IBugTrackerSet"757 for="lp.bugs.interfaces.bugtracker.IBugTrackerSet"
757 name="+index"/>758 name="+index"/>
758 <browser:url759 <lp:url
759 for="lp.bugs.interfaces.bugtracker.IBugTrackerSet"760 for="lp.bugs.interfaces.bugtracker.IBugTrackerSet"
760 path_expression="string:bugtrackers"761 path_expression="string:bugtrackers"
761 parent_utility="lp.bugs.interfaces.malone.IMaloneApplication"762 parent_utility="lp.bugs.interfaces.malone.IMaloneApplication"
@@ -774,7 +775,7 @@
774 class="lp.bugs.browser.bugtracker.BugTrackerAddView"775 class="lp.bugs.browser.bugtracker.BugTrackerAddView"
775 permission="launchpad.AnyPerson"776 permission="launchpad.AnyPerson"
776 template="../../app/templates/generic-edit.pt"/>777 template="../../app/templates/generic-edit.pt"/>
777 <browser:url778 <lp:url
778 for="lp.bugs.interfaces.bugtracker.IRemoteBug"779 for="lp.bugs.interfaces.bugtracker.IRemoteBug"
779 path_expression="string:${remotebug}"780 path_expression="string:${remotebug}"
780 attribute_to_parent="bugtracker"781 attribute_to_parent="bugtracker"
@@ -790,7 +791,7 @@
790 name="+index"791 name="+index"
791 template="../templates/remotebug-index.pt"/>792 template="../templates/remotebug-index.pt"/>
792 </browser:pages>793 </browser:pages>
793 <browser:url794 <lp:url
794 for="lp.bugs.interfaces.bugbranch.IBugBranch"795 for="lp.bugs.interfaces.bugbranch.IBugBranch"
795 path_expression="string:+bug/${bug/id}"796 path_expression="string:+bug/${bug/id}"
796 attribute_to_parent="branch"/>797 attribute_to_parent="branch"/>
@@ -819,7 +820,7 @@
819 classes="820 classes="
820 CveContextMenu821 CveContextMenu
821 CveSetContextMenu"/>822 CveSetContextMenu"/>
822 <browser:url823 <lp:url
823 for="lp.bugs.interfaces.cve.ICve"824 for="lp.bugs.interfaces.cve.ICve"
824 path_expression="sequence"825 path_expression="sequence"
825 parent_utility="lp.bugs.interfaces.cve.ICveSet"826 parent_utility="lp.bugs.interfaces.cve.ICveSet"
@@ -861,7 +862,7 @@
861 <browser:defaultView862 <browser:defaultView
862 for="lp.bugs.interfaces.cve.ICveSet"863 for="lp.bugs.interfaces.cve.ICveSet"
863 name="+index"/>864 name="+index"/>
864 <browser:url865 <lp:url
865 for="lp.bugs.interfaces.cve.ICveSet"866 for="lp.bugs.interfaces.cve.ICveSet"
866 path_expression="string:cve"867 path_expression="string:cve"
867 parent_utility="lp.bugs.interfaces.malone.IMaloneApplication"/>868 parent_utility="lp.bugs.interfaces.malone.IMaloneApplication"/>
@@ -893,7 +894,7 @@
893 class="lp.bugs.browser.buglinktarget.BugLinksListingView"894 class="lp.bugs.browser.buglinktarget.BugLinksListingView"
894 permission="zope.Public"895 permission="zope.Public"
895 template="../templates/cve-portlet-bugs2.pt"/>896 template="../templates/cve-portlet-bugs2.pt"/>
896 <browser:url897 <lp:url
897 for="lp.bugs.interfaces.vulnerability.IVulnerability"898 for="lp.bugs.interfaces.vulnerability.IVulnerability"
898 path_expression="string:+vulnerability/${id}"899 path_expression="string:+vulnerability/${id}"
899 attribute_to_parent="distribution"900 attribute_to_parent="distribution"
@@ -918,7 +919,7 @@
918 class="lp.bugs.browser.vulnerability.VulnerabilitySetIndexView"919 class="lp.bugs.browser.vulnerability.VulnerabilitySetIndexView"
919 permission="zope.Public"920 permission="zope.Public"
920 template="../templates/vulnerabilityset-index.pt" />921 template="../templates/vulnerabilityset-index.pt" />
921 <browser:url922 <lp:url
922 for="lp.bugs.interfaces.bugsubscription.IBugSubscription"923 for="lp.bugs.interfaces.bugsubscription.IBugSubscription"
923 path_expression="string:+subscription/${person/name}"924 path_expression="string:+subscription/${person/name}"
924 attribute_to_parent="bug"925 attribute_to_parent="bug"
@@ -930,7 +931,7 @@
930 <browser:defaultView931 <browser:defaultView
931 for="lp.bugs.interfaces.bug.IBug"932 for="lp.bugs.interfaces.bug.IBug"
932 name="+index"/>933 name="+index"/>
933 <browser:url934 <lp:url
934 for="lp.bugs.interfaces.bug.IBug"935 for="lp.bugs.interfaces.bug.IBug"
935 urldata="lp.bugs.browser.bug.BugURL"/>936 urldata="lp.bugs.browser.bug.BugURL"/>
936 <browser:navigation937 <browser:navigation
@@ -1014,7 +1015,7 @@
1014 module="lp.bugs.browser.bug"1015 module="lp.bugs.browser.bug"
1015 classes="1016 classes="
1016 BugSetNavigation"/>1017 BugSetNavigation"/>
1017 <browser:url1018 <lp:url
1018 for="lp.bugs.interfaces.bug.IBugSet"1019 for="lp.bugs.interfaces.bug.IBugSet"
1019 path_expression="string:bugs"1020 path_expression="string:bugs"
1020 parent_utility="lp.bugs.interfaces.malone.IMaloneApplication"/>1021 parent_utility="lp.bugs.interfaces.malone.IMaloneApplication"/>
@@ -1040,12 +1041,12 @@
1040 class="lp.bugs.browser.bugnomination.BugNominationEditView"1041 class="lp.bugs.browser.bugnomination.BugNominationEditView"
1041 permission="launchpad.Driver"1042 permission="launchpad.Driver"
1042 template="../templates/bugnomination-edit-form.pt"/>1043 template="../templates/bugnomination-edit-form.pt"/>
1043 <browser:url1044 <lp:url
1044 for="lp.bugs.interfaces.bugnomination.IBugNomination"1045 for="lp.bugs.interfaces.bugnomination.IBugNomination"
1045 path_expression="string:nominations/${id}"1046 path_expression="string:nominations/${id}"
1046 attribute_to_parent="bug"1047 attribute_to_parent="bug"
1047 rootsite="bugs" />1048 rootsite="bugs" />
1048 <browser:url1049 <lp:url
1049 for="lp.bugs.interfaces.bugwatch.IBugWatch"1050 for="lp.bugs.interfaces.bugwatch.IBugWatch"
1050 path_expression="string:+watch/${id}"1051 path_expression="string:+watch/${id}"
1051 attribute_to_parent="bug"1052 attribute_to_parent="bug"
@@ -1084,7 +1085,7 @@
1084 name="+error-help"1085 name="+error-help"
1085 template="../templates/bugwatch-error-help.pt"/>1086 template="../templates/bugwatch-error-help.pt"/>
1086 </browser:pages>1087 </browser:pages>
1087 <browser:url1088 <lp:url
1088 for="lp.bugs.interfaces.bugwatch.IBugWatchSet"1089 for="lp.bugs.interfaces.bugwatch.IBugWatchSet"
1089 path_expression="string:watches"1090 path_expression="string:watches"
1090 attribute_to_parent="bug"/>1091 attribute_to_parent="bug"/>
@@ -1116,7 +1117,7 @@
1116 permission="launchpad.AnyPerson"1117 permission="launchpad.AnyPerson"
1117 template="../templates/bugtarget-subscription-list.pt"/>1118 template="../templates/bugtarget-subscription-list.pt"/>
11181119
1119 <browser:url1120 <lp:url
1120 for="lp.bugs.interfaces.structuralsubscription.IStructuralSubscription"1121 for="lp.bugs.interfaces.structuralsubscription.IStructuralSubscription"
1121 path_expression="string:+subscription/${subscriber/name}"1122 path_expression="string:+subscription/${subscriber/name}"
1122 attribute_to_parent="target"/>1123 attribute_to_parent="target"/>
@@ -1125,7 +1126,7 @@
1125 classes="StructuralSubscriptionNavigation"/>1126 classes="StructuralSubscriptionNavigation"/>
11261127
1127 <!-- Bug Subscription Filters -->1128 <!-- Bug Subscription Filters -->
1128 <browser:url1129 <lp:url
1129 for="lp.bugs.interfaces.bugsubscriptionfilter.IBugSubscriptionFilter"1130 for="lp.bugs.interfaces.bugsubscriptionfilter.IBugSubscriptionFilter"
1130 path_expression="string:+filter/${id}"1131 path_expression="string:+filter/${id}"
1131 attribute_to_parent="structural_subscription"1132 attribute_to_parent="structural_subscription"
diff --git a/lib/lp/buildmaster/browser/configure.zcml b/lib/lp/buildmaster/browser/configure.zcml
index c1a40b4..83626e1 100644
--- a/lib/lp/buildmaster/browser/configure.zcml
+++ b/lib/lp/buildmaster/browser/configure.zcml
@@ -6,9 +6,10 @@
6 xmlns="http://namespaces.zope.org/zope"6 xmlns="http://namespaces.zope.org/zope"
7 xmlns:browser="http://namespaces.zope.org/browser"7 xmlns:browser="http://namespaces.zope.org/browser"
8 xmlns:i18n="http://namespaces.zope.org/i18n"8 xmlns:i18n="http://namespaces.zope.org/i18n"
9 xmlns:lp="http://namespaces.canonical.com/lp"
9 xmlns:xmlrpc="http://namespaces.zope.org/xmlrpc"10 xmlns:xmlrpc="http://namespaces.zope.org/xmlrpc"
10 i18n_domain="launchpad">11 i18n_domain="launchpad">
11 <browser:url12 <lp:url
12 for="lp.buildmaster.interfaces.processor.IProcessor"13 for="lp.buildmaster.interfaces.processor.IProcessor"
13 path_expression="string:${name}"14 path_expression="string:${name}"
14 parent_utility="lp.buildmaster.interfaces.processor.IProcessorSet" />15 parent_utility="lp.buildmaster.interfaces.processor.IProcessorSet" />
@@ -16,7 +17,7 @@
16 <browser:navigation17 <browser:navigation
17 module="lp.buildmaster.browser.processor"18 module="lp.buildmaster.browser.processor"
18 classes="ProcessorSetNavigation" />19 classes="ProcessorSetNavigation" />
19 <browser:url for="lp.buildmaster.interfaces.processor.IProcessorSet"20 <lp:url for="lp.buildmaster.interfaces.processor.IProcessorSet"
20 path_expression="string:+processors"21 path_expression="string:+processors"
21 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot"/>22 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot"/>
2223
@@ -33,7 +34,7 @@
33 permission="launchpad.View"34 permission="launchpad.View"
34 template="../templates/buildfarmjob-current.pt"/>35 template="../templates/buildfarmjob-current.pt"/>
3536
36 <browser:url37 <lp:url
37 for="lp.buildmaster.interfaces.builder.IBuilderSet"38 for="lp.buildmaster.interfaces.builder.IBuilderSet"
38 path_expression="string:builders"39 path_expression="string:builders"
39 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot"/>40 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot"/>
@@ -65,7 +66,7 @@
65 module="lp.buildmaster.browser.builder"66 module="lp.buildmaster.browser.builder"
66 classes="67 classes="
67 BuilderNavigation"/>68 BuilderNavigation"/>
68 <browser:url69 <lp:url
69 for="lp.buildmaster.interfaces.builder.IBuilder"70 for="lp.buildmaster.interfaces.builder.IBuilder"
70 path_expression="name"71 path_expression="name"
71 parent_utility="lp.buildmaster.interfaces.builder.IBuilderSet"/>72 parent_utility="lp.buildmaster.interfaces.builder.IBuilderSet"/>
diff --git a/lib/lp/charms/browser/configure.zcml b/lib/lp/charms/browser/configure.zcml
index 3741679..db532de 100644
--- a/lib/lp/charms/browser/configure.zcml
+++ b/lib/lp/charms/browser/configure.zcml
@@ -6,9 +6,10 @@
6 xmlns="http://namespaces.zope.org/zope"6 xmlns="http://namespaces.zope.org/zope"
7 xmlns:browser="http://namespaces.zope.org/browser"7 xmlns:browser="http://namespaces.zope.org/browser"
8 xmlns:i18n="http://namespaces.zope.org/i18n"8 xmlns:i18n="http://namespaces.zope.org/i18n"
9 xmlns:lp="http://namespaces.canonical.com/lp"
9 i18n_domain="launchpad">10 i18n_domain="launchpad">
10 <facet facet="overview">11 <facet facet="overview">
11 <browser:url12 <lp:url
12 for="lp.charms.interfaces.charmrecipe.ICharmRecipe"13 for="lp.charms.interfaces.charmrecipe.ICharmRecipe"
13 urldata="lp.charms.browser.charmrecipe.CharmRecipeURL" />14 urldata="lp.charms.browser.charmrecipe.CharmRecipeURL" />
14 <browser:menus15 <browser:menus
@@ -77,17 +78,17 @@
77 name="+new-charm-recipe"78 name="+new-charm-recipe"
78 template="../templates/charmrecipe-new.pt" />79 template="../templates/charmrecipe-new.pt" />
7980
80 <browser:url81 <lp:url
81 for="lp.charms.interfaces.charmrecipe.ICharmRecipeSet"82 for="lp.charms.interfaces.charmrecipe.ICharmRecipeSet"
82 path_expression="string:+charm-recipes"83 path_expression="string:+charm-recipes"
83 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot" />84 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot" />
8485
85 <browser:url86 <lp:url
86 for="lp.charms.interfaces.charmrecipe.ICharmRecipeBuildRequest"87 for="lp.charms.interfaces.charmrecipe.ICharmRecipeBuildRequest"
87 path_expression="string:+build-request/${id}"88 path_expression="string:+build-request/${id}"
88 attribute_to_parent="recipe" />89 attribute_to_parent="recipe" />
8990
90 <browser:url91 <lp:url
91 for="lp.charms.interfaces.charmrecipebuild.ICharmRecipeBuild"92 for="lp.charms.interfaces.charmrecipebuild.ICharmRecipeBuild"
92 path_expression="string:+build/${id}"93 path_expression="string:+build/${id}"
93 attribute_to_parent="recipe" />94 attribute_to_parent="recipe" />
@@ -130,11 +131,11 @@
130 factory="lp.services.webapp.breadcrumb.TitleBreadcrumb"131 factory="lp.services.webapp.breadcrumb.TitleBreadcrumb"
131 permission="zope.Public" />132 permission="zope.Public" />
132133
133 <browser:url134 <lp:url
134 for="lp.charms.interfaces.charmbase.ICharmBase"135 for="lp.charms.interfaces.charmbase.ICharmBase"
135 path_expression="string:${id}"136 path_expression="string:${id}"
136 parent_utility="lp.charms.interfaces.charmbase.ICharmBaseSet" />137 parent_utility="lp.charms.interfaces.charmbase.ICharmBaseSet" />
137 <browser:url138 <lp:url
138 for="lp.charms.interfaces.charmbase.ICharmBaseSet"139 for="lp.charms.interfaces.charmbase.ICharmBaseSet"
139 path_expression="string:+charm-bases"140 path_expression="string:+charm-bases"
140 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot" />141 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot" />
diff --git a/lib/lp/code/browser/configure.zcml b/lib/lp/code/browser/configure.zcml
index ea9052d..788c7f2 100644
--- a/lib/lp/code/browser/configure.zcml
+++ b/lib/lp/code/browser/configure.zcml
@@ -6,14 +6,15 @@
6 xmlns="http://namespaces.zope.org/zope"6 xmlns="http://namespaces.zope.org/zope"
7 xmlns:browser="http://namespaces.zope.org/browser"7 xmlns:browser="http://namespaces.zope.org/browser"
8 xmlns:i18n="http://namespaces.zope.org/i18n"8 xmlns:i18n="http://namespaces.zope.org/i18n"
9 xmlns:lp="http://namespaces.canonical.com/lp"
9 xmlns:xmlrpc="http://namespaces.zope.org/xmlrpc"10 xmlns:xmlrpc="http://namespaces.zope.org/xmlrpc"
10 i18n_domain="launchpad">11 i18n_domain="launchpad">
11 <browser:url12 <lp:url
12 for="lp.code.interfaces.branch.IBranchSet"13 for="lp.code.interfaces.branch.IBranchSet"
13 path_expression="string:branches"14 path_expression="string:branches"
14 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot"15 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot"
15 />16 />
16 <browser:url17 <lp:url
17 for="lp.code.interfaces.gitrepository.IGitRepositorySet"18 for="lp.code.interfaces.gitrepository.IGitRepositorySet"
18 path_expression="string:+git"19 path_expression="string:+git"
19 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot"20 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot"
@@ -95,7 +96,7 @@
95 permission="zope.Public"96 permission="zope.Public"
96 />97 />
9798
98 <browser:url99 <lp:url
99 for="lp.code.interfaces.codereviewvote.ICodeReviewVoteReference"100 for="lp.code.interfaces.codereviewvote.ICodeReviewVoteReference"
100 path_expression="string:+review/${id}"101 path_expression="string:+review/${id}"
101 attribute_to_parent="branch_merge_proposal"102 attribute_to_parent="branch_merge_proposal"
@@ -106,7 +107,7 @@
106 class="lp.code.browser.codereviewvote.CodeReviewVoteReassign"107 class="lp.code.browser.codereviewvote.CodeReviewVoteReassign"
107 permission="launchpad.AnyPerson"108 permission="launchpad.AnyPerson"
108 template="../../app/templates/generic-edit.pt"/>109 template="../../app/templates/generic-edit.pt"/>
109 <browser:url110 <lp:url
110 for="lp.code.interfaces.codeimportmachine.ICodeImportMachine"111 for="lp.code.interfaces.codeimportmachine.ICodeImportMachine"
111 path_expression="string:${hostname}"112 path_expression="string:${hostname}"
112 parent_utility="lp.code.interfaces.codeimportmachine.ICodeImportMachineSet"113 parent_utility="lp.code.interfaces.codeimportmachine.ICodeImportMachineSet"
@@ -123,7 +124,7 @@
123 <browser:navigation124 <browser:navigation
124 module="lp.code.browser.codeimportmachine"125 module="lp.code.browser.codeimportmachine"
125 classes="CodeImportMachineSetNavigation"/>126 classes="CodeImportMachineSetNavigation"/>
126 <browser:url127 <lp:url
127 for="lp.code.interfaces.codeimportmachine.ICodeImportMachineSet"128 for="lp.code.interfaces.codeimportmachine.ICodeImportMachineSet"
128 path_expression="string:+machines"129 path_expression="string:+machines"
129 parent_utility="lp.code.interfaces.codeimport.ICodeImportSet"130 parent_utility="lp.code.interfaces.codeimport.ICodeImportSet"
@@ -137,14 +138,14 @@
137 name="+index"138 name="+index"
138 template="../templates/codeimport-machines.pt"139 template="../templates/codeimport-machines.pt"
139 permission="zope.Public"/>140 permission="zope.Public"/>
140 <browser:url141 <lp:url
141 for="lp.code.interfaces.branchref.IBranchRef"142 for="lp.code.interfaces.branchref.IBranchRef"
142 path_expression="string:.bzr"143 path_expression="string:.bzr"
143 attribute_to_parent="branch"/>144 attribute_to_parent="branch"/>
144 <browser:navigation145 <browser:navigation
145 module="lp.code.browser.branchref"146 module="lp.code.browser.branchref"
146 classes="BranchRefNavigation"/>147 classes="BranchRefNavigation"/>
147 <browser:url148 <lp:url
148 for="lp.code.interfaces.codehosting.IBazaarApplication"149 for="lp.code.interfaces.codehosting.IBazaarApplication"
149 path_expression="string:+code"150 path_expression="string:+code"
150 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot"151 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot"
@@ -306,7 +307,7 @@
306 class="lp.code.browser.branchmergeproposal.BranchMergeProposalAddVoteView"307 class="lp.code.browser.branchmergeproposal.BranchMergeProposalAddVoteView"
307 permission="launchpad.AnyPerson"308 permission="launchpad.AnyPerson"
308 template="../templates/branchmergeproposal-vote.pt"/>309 template="../templates/branchmergeproposal-vote.pt"/>
309 <browser:url310 <lp:url
310 for="lp.code.interfaces.branchmergeproposal.IBranchMergeProposal"311 for="lp.code.interfaces.branchmergeproposal.IBranchMergeProposal"
311 path_expression="string:+merge/${id}"312 path_expression="string:+merge/${id}"
312 attribute_to_parent="parent"313 attribute_to_parent="parent"
@@ -337,7 +338,7 @@
337 class="lp.code.browser.branchsubscription.BranchSubscriptionEditView"338 class="lp.code.browser.branchsubscription.BranchSubscriptionEditView"
338 permission="launchpad.Edit"339 permission="launchpad.Edit"
339 template="../templates/branchsubscription-edit.pt"/>340 template="../templates/branchsubscription-edit.pt"/>
340 <browser:url341 <lp:url
341 for="lp.code.interfaces.branchsubscription.IBranchSubscription"342 for="lp.code.interfaces.branchsubscription.IBranchSubscription"
342 path_expression="string:+subscription/${person/name}"343 path_expression="string:+subscription/${person/name}"
343 attribute_to_parent="branch"344 attribute_to_parent="branch"
@@ -345,7 +346,7 @@
345 <browser:defaultView346 <browser:defaultView
346 for="lp.code.interfaces.branch.IBranch"347 for="lp.code.interfaces.branch.IBranch"
347 name="+index"/>348 name="+index"/>
348 <browser:url349 <lp:url
349 for="lp.code.interfaces.branch.IBranch"350 for="lp.code.interfaces.branch.IBranch"
350 urldata="lp.code.browser.branch.BranchURL"/>351 urldata="lp.code.browser.branch.BranchURL"/>
351 <browser:navigation352 <browser:navigation
@@ -551,7 +552,7 @@
551 BranchContextMenu552 BranchContextMenu
552 BranchEditMenu"553 BranchEditMenu"
553 module="lp.code.browser.branch"/>554 module="lp.code.browser.branch"/>
554 <browser:url555 <lp:url
555 for="lp.code.interfaces.codereviewcomment.ICodeReviewComment"556 for="lp.code.interfaces.codereviewcomment.ICodeReviewComment"
556 path_expression="string:comments/${id}"557 path_expression="string:comments/${id}"
557 attribute_to_parent="branch_merge_proposal"558 attribute_to_parent="branch_merge_proposal"
@@ -625,7 +626,7 @@
625 name="+macros"626 name="+macros"
626 permission="zope.Public"627 permission="zope.Public"
627 template="../templates/codeimport-macros.pt"/>628 template="../templates/codeimport-macros.pt"/>
628 <browser:url629 <lp:url
629 for="lp.code.interfaces.codeimport.ICodeImportSet"630 for="lp.code.interfaces.codeimport.ICodeImportSet"
630 path_expression="string:+code-imports"631 path_expression="string:+code-imports"
631 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot"632 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot"
@@ -651,7 +652,7 @@
651 name="+new-import"652 name="+new-import"
652 template="../templates/codeimport-new.pt"653 template="../templates/codeimport-new.pt"
653 permission="launchpad.AnyPerson"/>654 permission="launchpad.AnyPerson"/>
654 <browser:url655 <lp:url
655 for="lp.code.interfaces.codeimport.ICodeImport"656 for="lp.code.interfaces.codeimport.ICodeImport"
656 attribute_to_parent="target"657 attribute_to_parent="target"
657 path_expression="string:+code-import"658 path_expression="string:+code-import"
@@ -812,7 +813,7 @@
812 <browser:defaultView813 <browser:defaultView
813 for="lp.code.interfaces.gitrepository.IGitRepository"814 for="lp.code.interfaces.gitrepository.IGitRepository"
814 name="+index"/>815 name="+index"/>
815 <browser:url816 <lp:url
816 for="lp.code.interfaces.gitrepository.IGitRepository"817 for="lp.code.interfaces.gitrepository.IGitRepository"
817 urldata="lp.code.browser.gitrepository.GitRepositoryURL"/>818 urldata="lp.code.browser.gitrepository.GitRepositoryURL"/>
818 <browser:navigation819 <browser:navigation
@@ -969,13 +970,13 @@
969 factory="lp.code.browser.gitrepository.GitRepositoryBreadcrumb"970 factory="lp.code.browser.gitrepository.GitRepositoryBreadcrumb"
970 permission="zope.Public"/>971 permission="zope.Public"/>
971972
972 <browser:url973 <lp:url
973 for="lp.code.interfaces.revisionstatus.IRevisionStatusReport"974 for="lp.code.interfaces.revisionstatus.IRevisionStatusReport"
974 path_expression="string:+status/${id}"975 path_expression="string:+status/${id}"
975 attribute_to_parent="git_repository"976 attribute_to_parent="git_repository"
976 rootsite="code"/>977 rootsite="code"/>
977978
978 <browser:url979 <lp:url
979 for="lp.code.interfaces.revisionstatus.IRevisionStatusArtifact"980 for="lp.code.interfaces.revisionstatus.IRevisionStatusArtifact"
980 path_expression="string:+artifact/${id}"981 path_expression="string:+artifact/${id}"
981 attribute_to_parent="repository"982 attribute_to_parent="repository"
@@ -988,7 +989,7 @@
988 <browser:defaultView989 <browser:defaultView
989 for="lp.code.interfaces.gitref.IGitRef"990 for="lp.code.interfaces.gitref.IGitRef"
990 name="+index"/>991 name="+index"/>
991 <browser:url992 <lp:url
992 for="lp.code.interfaces.gitref.IGitRef"993 for="lp.code.interfaces.gitref.IGitRef"
993 path_expression="string:+ref/${url_quoted_name}"994 path_expression="string:+ref/${url_quoted_name}"
994 attribute_to_parent="repository"995 attribute_to_parent="repository"
@@ -1059,7 +1060,7 @@
1059 permission="launchpad.Edit"1060 permission="launchpad.Edit"
1060 name="+index"1061 name="+index"
1061 template="../templates/gitsubscription-edit.pt"/>1062 template="../templates/gitsubscription-edit.pt"/>
1062 <browser:url1063 <lp:url
1063 for="lp.code.interfaces.gitsubscription.IGitSubscription"1064 for="lp.code.interfaces.gitsubscription.IGitSubscription"
1064 path_expression="string:+subscription/${person/name}"1065 path_expression="string:+subscription/${person/name}"
1065 attribute_to_parent="repository"1066 attribute_to_parent="repository"
@@ -1158,7 +1159,7 @@
1158 layer="lp.code.publisher.CodeLayer"1159 layer="lp.code.publisher.CodeLayer"
1159 name="+branches"/>1160 name="+branches"/>
11601161
1161 <browser:url1162 <lp:url
1162 for="lp.code.interfaces.diff.IPreviewDiff"1163 for="lp.code.interfaces.diff.IPreviewDiff"
1163 path_expression="string:+preview-diff/${id}"1164 path_expression="string:+preview-diff/${id}"
1164 attribute_to_parent="branch_merge_proposal"1165 attribute_to_parent="branch_merge_proposal"
@@ -1285,12 +1286,12 @@
1285 name="fmt"1286 name="fmt"
1286 />1287 />
12871288
1288 <browser:url1289 <lp:url
1289 for="lp.code.interfaces.sourcepackagerecipe.ISourcePackageRecipe"1290 for="lp.code.interfaces.sourcepackagerecipe.ISourcePackageRecipe"
1290 attribute_to_parent="owner"1291 attribute_to_parent="owner"
1291 path_expression="string:+recipe/${name}"1292 path_expression="string:+recipe/${name}"
1292 rootsite="code" />1293 rootsite="code" />
1293 <browser:url1294 <lp:url
1294 for="lp.code.interfaces.sourcepackagerecipebuild.ISourcePackageRecipeBuild"1295 for="lp.code.interfaces.sourcepackagerecipebuild.ISourcePackageRecipeBuild"
1295 attribute_to_parent="archive"1296 attribute_to_parent="archive"
1296 path_expression="string:+recipebuild/${id}"1297 path_expression="string:+recipebuild/${id}"
@@ -1425,7 +1426,7 @@
1425 factory="lp.code.browser.sourcepackagerecipe.SourcePackageRecipeBreadcrumb"1426 factory="lp.code.browser.sourcepackagerecipe.SourcePackageRecipeBreadcrumb"
1426 permission="zope.Public"/>1427 permission="zope.Public"/>
14271428
1428 <browser:url1429 <lp:url
1429 for="lp.code.interfaces.cibuild.ICIBuild"1430 for="lp.code.interfaces.cibuild.ICIBuild"
1430 path_expression="string:+build/${id}"1431 path_expression="string:+build/${id}"
1431 attribute_to_parent="git_repository"/>1432 attribute_to_parent="git_repository"/>
diff --git a/lib/lp/oci/browser/configure.zcml b/lib/lp/oci/browser/configure.zcml
index 2140829..ce3c49a 100644
--- a/lib/lp/oci/browser/configure.zcml
+++ b/lib/lp/oci/browser/configure.zcml
@@ -6,9 +6,10 @@
6 xmlns="http://namespaces.zope.org/zope"6 xmlns="http://namespaces.zope.org/zope"
7 xmlns:browser="http://namespaces.zope.org/browser"7 xmlns:browser="http://namespaces.zope.org/browser"
8 xmlns:i18n="http://namespaces.zope.org/i18n"8 xmlns:i18n="http://namespaces.zope.org/i18n"
9 xmlns:lp="http://namespaces.canonical.com/lp"
9 i18n_domain="launchpad">10 i18n_domain="launchpad">
10 <facet facet="overview">11 <facet facet="overview">
11 <browser:url12 <lp:url
12 for="lp.oci.interfaces.ocirecipe.IOCIRecipe"13 for="lp.oci.interfaces.ocirecipe.IOCIRecipe"
13 path_expression="string:${oci_project/pillar/name}/+oci/${oci_project/name}/+recipe/${name}"14 path_expression="string:${oci_project/pillar/name}/+oci/${oci_project/name}/+recipe/${name}"
14 attribute_to_parent="owner" />15 attribute_to_parent="owner" />
@@ -90,11 +91,11 @@
90 factory="lp.oci.browser.ocirecipe.OCIRecipeBreadcrumb"91 factory="lp.oci.browser.ocirecipe.OCIRecipeBreadcrumb"
91 permission="zope.Public" />92 permission="zope.Public" />
9293
93 <browser:url94 <lp:url
94 for="lp.oci.interfaces.ocirecipe.IOCIRecipeBuildRequest"95 for="lp.oci.interfaces.ocirecipe.IOCIRecipeBuildRequest"
95 path_expression="string:+build-request/${id}"96 path_expression="string:+build-request/${id}"
96 attribute_to_parent="recipe" />97 attribute_to_parent="recipe" />
97 <browser:url98 <lp:url
98 for="lp.oci.interfaces.ocirecipebuild.IOCIRecipeBuild"99 for="lp.oci.interfaces.ocirecipebuild.IOCIRecipeBuild"
99 path_expression="string:+build/${id}"100 path_expression="string:+build/${id}"
100 attribute_to_parent="recipe" />101 attribute_to_parent="recipe" />
@@ -137,7 +138,7 @@
137 factory="lp.services.webapp.breadcrumb.TitleBreadcrumb"138 factory="lp.services.webapp.breadcrumb.TitleBreadcrumb"
138 permission="zope.Public" />139 permission="zope.Public" />
139140
140 <browser:url141 <lp:url
141 for="lp.oci.interfaces.ocipushrule.IOCIPushRule"142 for="lp.oci.interfaces.ocipushrule.IOCIPushRule"
142 path_expression="string:+push-rule/${id}"143 path_expression="string:+push-rule/${id}"
143 attribute_to_parent="recipe" />144 attribute_to_parent="recipe" />
@@ -175,7 +176,7 @@
175 permission="launchpad.AnyPerson"176 permission="launchpad.AnyPerson"
176 name="+addsubscriber"177 name="+addsubscriber"
177 template="../../app/templates/generic-edit.pt"/>178 template="../../app/templates/generic-edit.pt"/>
178 <browser:url179 <lp:url
179 for="lp.oci.interfaces.ocirecipesubscription.IOCIRecipeSubscription"180 for="lp.oci.interfaces.ocirecipesubscription.IOCIRecipeSubscription"
180 path_expression="string:+subscription/${person/name}"181 path_expression="string:+subscription/${person/name}"
181 attribute_to_parent="recipe"182 attribute_to_parent="recipe"
diff --git a/lib/lp/registry/browser/configure.zcml b/lib/lp/registry/browser/configure.zcml
index 22096c8..2297a7f 100644
--- a/lib/lp/registry/browser/configure.zcml
+++ b/lib/lp/registry/browser/configure.zcml
@@ -6,24 +6,25 @@
6 xmlns="http://namespaces.zope.org/zope"6 xmlns="http://namespaces.zope.org/zope"
7 xmlns:browser="http://namespaces.zope.org/browser"7 xmlns:browser="http://namespaces.zope.org/browser"
8 xmlns:i18n="http://namespaces.zope.org/i18n"8 xmlns:i18n="http://namespaces.zope.org/i18n"
9 xmlns:lp="http://namespaces.canonical.com/lp"
9 xmlns:xmlrpc="http://namespaces.zope.org/xmlrpc"10 xmlns:xmlrpc="http://namespaces.zope.org/xmlrpc"
10 i18n_domain="launchpad">11 i18n_domain="launchpad">
11 <browser:url12 <lp:url
12 for="lp.registry.interfaces.person.IPersonSet"13 for="lp.registry.interfaces.person.IPersonSet"
13 path_expression="string:people"14 path_expression="string:people"
14 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot"15 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot"
15 />16 />
16 <browser:url17 <lp:url
17 for="lp.registry.interfaces.distribution.IDistributionSet"18 for="lp.registry.interfaces.distribution.IDistributionSet"
18 path_expression="string:distros"19 path_expression="string:distros"
19 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot"20 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot"
20 />21 />
21 <browser:url22 <lp:url
22 for="lp.registry.interfaces.sourcepackagename.ISourcePackageNameSet"23 for="lp.registry.interfaces.sourcepackagename.ISourcePackageNameSet"
23 path_expression="string:sourcepackagenames"24 path_expression="string:sourcepackagenames"
24 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot"25 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot"
25 />26 />
26 <browser:url27 <lp:url
27 for="lp.registry.interfaces.projectgroup.IProjectGroupSet"28 for="lp.registry.interfaces.projectgroup.IProjectGroupSet"
28 path_expression="string:projectgroups"29 path_expression="string:projectgroups"
29 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot"30 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot"
@@ -32,12 +33,12 @@
32 module="lp.registry.feed.announcement"33 module="lp.registry.feed.announcement"
33 classes="LaunchpadAnnouncementsFeed TargetAnnouncementsFeed"34 classes="LaunchpadAnnouncementsFeed TargetAnnouncementsFeed"
34 />35 />
35 <browser:url36 <lp:url
36 for="lp.app.interfaces.services.IServiceFactory"37 for="lp.app.interfaces.services.IServiceFactory"
37 path_expression="string:+services"38 path_expression="string:+services"
38 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot"39 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot"
39 />40 />
40 <browser:url41 <lp:url
41 for="lp.app.interfaces.services.IService"42 for="lp.app.interfaces.services.IService"
42 path_expression="string:${name}"43 path_expression="string:${name}"
43 parent_utility="lp.app.interfaces.services.IServiceFactory"/>44 parent_utility="lp.app.interfaces.services.IServiceFactory"/>
@@ -63,7 +64,7 @@
63 permission="zope.Public"64 permission="zope.Public"
64 attribute="__call__"65 attribute="__call__"
65 />66 />
66 <browser:url67 <lp:url
67 for="lp.registry.interfaces.teammembership.ITeamMembership"68 for="lp.registry.interfaces.teammembership.ITeamMembership"
68 path_expression="string:+member/${person/name}"69 path_expression="string:+member/${person/name}"
69 rootsite="mainsite"70 rootsite="mainsite"
@@ -97,7 +98,7 @@
97 classes="98 classes="
98 DistroSeriesNavigation"99 DistroSeriesNavigation"
99 />100 />
100 <browser:url101 <lp:url
101 for="lp.registry.interfaces.distroseries.IDistroSeries"102 for="lp.registry.interfaces.distroseries.IDistroSeries"
102 urldata="lp.registry.browser.distroseries.DistroSeriesURL"103 urldata="lp.registry.browser.distroseries.DistroSeriesURL"
103 />104 />
@@ -210,7 +211,7 @@
210 permission="zope.Public"211 permission="zope.Public"
211 template="../templates/distroseries-localdifferences.pt"212 template="../templates/distroseries-localdifferences.pt"
212 />213 />
213 <browser:url214 <lp:url
214 for="lp.registry.interfaces.distroseriesdifference.IDistroSeriesDifference"215 for="lp.registry.interfaces.distroseriesdifference.IDistroSeriesDifference"
215 path_expression="string:+source/${source_package_name/name}/+difference/${parent_series/parent/name}/${parent_series/name}"216 path_expression="string:+source/${source_package_name/name}/+difference/${parent_series/parent/name}/${parent_series/name}"
216 rootsite="mainsite"217 rootsite="mainsite"
@@ -231,7 +232,7 @@
231 module="lp.registry.browser.distroseriesdifference"232 module="lp.registry.browser.distroseriesdifference"
232 classes="DistroSeriesDifferenceNavigation"233 classes="DistroSeriesDifferenceNavigation"
233 />234 />
234 <browser:url235 <lp:url
235 for="..interfaces.distroseriesdifferencecomment.IDistroSeriesDifferenceComment"236 for="..interfaces.distroseriesdifferencecomment.IDistroSeriesDifferenceComment"
236 path_expression="string:comments/${id}"237 path_expression="string:comments/${id}"
237 attribute_to_parent="distro_series_difference"238 attribute_to_parent="distro_series_difference"
@@ -296,12 +297,12 @@
296 permission="launchpad.AnyPerson"297 permission="launchpad.AnyPerson"
297 template="../templates/signedcodeofconduct-add.pt"298 template="../templates/signedcodeofconduct-add.pt"
298 />299 />
299 <browser:url300 <lp:url
300 for="lp.registry.interfaces.codeofconduct.ICodeOfConductSet"301 for="lp.registry.interfaces.codeofconduct.ICodeOfConductSet"
301 path_expression="string:codeofconduct"302 path_expression="string:codeofconduct"
302 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot"303 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot"
303 />304 />
304 <browser:url305 <lp:url
305 for="lp.registry.interfaces.codeofconduct.ICodeOfConduct"306 for="lp.registry.interfaces.codeofconduct.ICodeOfConduct"
306 parent_utility="lp.registry.interfaces.codeofconduct.ICodeOfConductSet"307 parent_utility="lp.registry.interfaces.codeofconduct.ICodeOfConductSet"
307 path_expression="version"308 path_expression="version"
@@ -344,12 +345,12 @@
344 permission="launchpad.Admin"345 permission="launchpad.Admin"
345 template="../../app/templates/generic-edit.pt"346 template="../../app/templates/generic-edit.pt"
346 />347 />
347 <browser:url348 <lp:url
348 for="lp.registry.interfaces.codeofconduct.ISignedCodeOfConductSet"349 for="lp.registry.interfaces.codeofconduct.ISignedCodeOfConductSet"
349 path_expression="string:console"350 path_expression="string:console"
350 parent_utility="lp.registry.interfaces.codeofconduct.ICodeOfConductSet"351 parent_utility="lp.registry.interfaces.codeofconduct.ICodeOfConductSet"
351 />352 />
352 <browser:url353 <lp:url
353 for="lp.registry.interfaces.codeofconduct.ISignedCodeOfConduct"354 for="lp.registry.interfaces.codeofconduct.ISignedCodeOfConduct"
354 path_expression="string:${id}"355 path_expression="string:${id}"
355 parent_utility="lp.registry.interfaces.codeofconduct.ISignedCodeOfConductSet"356 parent_utility="lp.registry.interfaces.codeofconduct.ISignedCodeOfConductSet"
@@ -378,7 +379,7 @@
378 permission="launchpad.Admin"379 permission="launchpad.Admin"
379 template="../../app/templates/generic-edit.pt"380 template="../../app/templates/generic-edit.pt"
380 />381 />
381 <browser:url382 <lp:url
382 for="lp.registry.interfaces.irc.IIrcID"383 for="lp.registry.interfaces.irc.IIrcID"
383 path_expression="string:+ircnick/${id}"384 path_expression="string:+ircnick/${id}"
384 attribute_to_parent="person"385 attribute_to_parent="person"
@@ -495,7 +496,7 @@
495 classes="496 classes="
496 ProjectSetNavigation"497 ProjectSetNavigation"
497 />498 />
498 <browser:url499 <lp:url
499 for="lp.registry.interfaces.projectgroup.IProjectGroup"500 for="lp.registry.interfaces.projectgroup.IProjectGroup"
500 path_expression="name"501 path_expression="name"
501 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot"502 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot"
@@ -520,7 +521,7 @@
520 permission="launchpad.Moderate"521 permission="launchpad.Moderate"
521 template="../../app/templates/generic-edit.pt"522 template="../../app/templates/generic-edit.pt"
522 />523 />
523 <browser:url524 <lp:url
524 for="lp.registry.interfaces.projectgroup.IProjectGroupSeries"525 for="lp.registry.interfaces.projectgroup.IProjectGroupSeries"
525 path_expression="string:+series/${name}"526 path_expression="string:+series/${name}"
526 attribute_to_parent="projectgroup"527 attribute_to_parent="projectgroup"
@@ -549,7 +550,7 @@
549 for="lp.registry.interfaces.distributionsourcepackage.IDistributionSourcePackage"550 for="lp.registry.interfaces.distributionsourcepackage.IDistributionSourcePackage"
550 layer="lp.answers.publisher.AnswersLayer"551 layer="lp.answers.publisher.AnswersLayer"
551 />552 />
552 <browser:url553 <lp:url
553 for="lp.registry.interfaces.distributionsourcepackage.IDistributionSourcePackage"554 for="lp.registry.interfaces.distributionsourcepackage.IDistributionSourcePackage"
554 urldata="lp.registry.browser.distributionsourcepackage.DistributionSourcePackageURL"555 urldata="lp.registry.browser.distributionsourcepackage.DistributionSourcePackageURL"
555 />556 />
@@ -612,11 +613,11 @@
612 name="+index"613 name="+index"
613 for="lp.registry.interfaces.ociproject.IOCIProject"614 for="lp.registry.interfaces.ociproject.IOCIProject"
614 />615 />
615 <browser:url616 <lp:url
616 for="lp.registry.interfaces.ociproject.IOCIProject"617 for="lp.registry.interfaces.ociproject.IOCIProject"
617 urldata="lp.registry.browser.ociproject.OCIProjectURL"618 urldata="lp.registry.browser.ociproject.OCIProjectURL"
618 />619 />
619 <browser:url620 <lp:url
620 for="lp.registry.interfaces.ociprojectseries.IOCIProjectSeries"621 for="lp.registry.interfaces.ociprojectseries.IOCIProjectSeries"
621 path_expression="string:+series/${name}"622 path_expression="string:+series/${name}"
622 attribute_to_parent="oci_project"623 attribute_to_parent="oci_project"
@@ -652,18 +653,18 @@
652 provides="zope.traversing.interfaces.IPathAdapter"653 provides="zope.traversing.interfaces.IPathAdapter"
653 for="lp.registry.interfaces.ociproject.IOCIProject"654 for="lp.registry.interfaces.ociproject.IOCIProject"
654 />655 />
655 <browser:url656 <lp:url
656 for="lp.registry.interfaces.commercialsubscription.ICommercialSubscription"657 for="lp.registry.interfaces.commercialsubscription.ICommercialSubscription"
657 path_expression="string:+commercialsubscription/${id}"658 path_expression="string:+commercialsubscription/${id}"
658 attribute_to_parent="pillar"659 attribute_to_parent="pillar"
659 />660 />
660 <browser:url661 <lp:url
661 for="lp.registry.interfaces.jabber.IJabberID"662 for="lp.registry.interfaces.jabber.IJabberID"
662 path_expression="string:+jabberid/${jabberid}"663 path_expression="string:+jabberid/${jabberid}"
663 attribute_to_parent="person"664 attribute_to_parent="person"
664 rootsite="api"665 rootsite="api"
665 />666 />
666 <browser:url667 <lp:url
667 for="lp.registry.interfaces.pillar.IPillarNameSet"668 for="lp.registry.interfaces.pillar.IPillarNameSet"
668 path_expression="string:pillars"669 path_expression="string:pillars"
669 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot"670 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot"
@@ -688,7 +689,7 @@
688 permission="zope.Public"689 permission="zope.Public"
689 template="../templates/pillar-involvement-portlet.pt"690 template="../templates/pillar-involvement-portlet.pt"
690 />691 />
691 <browser:url692 <lp:url
692 for="lp.registry.interfaces.karma.IKarmaAction"693 for="lp.registry.interfaces.karma.IKarmaAction"
693 path_expression="name"694 path_expression="name"
694 parent_utility="lp.registry.interfaces.karma.IKarmaActionSet"695 parent_utility="lp.registry.interfaces.karma.IKarmaActionSet"
@@ -704,7 +705,7 @@
704 permission="launchpad.Admin"705 permission="launchpad.Admin"
705 template="../../app/templates/generic-edit.pt"706 template="../../app/templates/generic-edit.pt"
706 />707 />
707 <browser:url708 <lp:url
708 for="lp.registry.interfaces.karma.IKarmaActionSet"709 for="lp.registry.interfaces.karma.IKarmaActionSet"
709 path_expression="string:karmaaction"710 path_expression="string:karmaaction"
710 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot"711 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot"
@@ -760,12 +761,12 @@
760 classes="761 classes="
761 PollNavigation"762 PollNavigation"
762 />763 />
763 <browser:url764 <lp:url
764 for="lp.registry.interfaces.poll.IPoll"765 for="lp.registry.interfaces.poll.IPoll"
765 path_expression="string:+poll/${name}"766 path_expression="string:+poll/${name}"
766 attribute_to_parent="team"767 attribute_to_parent="team"
767 />768 />
768 <browser:url769 <lp:url
769 for="lp.registry.interfaces.poll.IPollSet"770 for="lp.registry.interfaces.poll.IPollSet"
770 path_expression="string:+polls"771 path_expression="string:+polls"
771 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot"772 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot"
@@ -816,7 +817,7 @@
816 name="+edit"817 name="+edit"
817 for="lp.registry.interfaces.poll.IPollOption"818 for="lp.registry.interfaces.poll.IPollOption"
818 />819 />
819 <browser:url820 <lp:url
820 for="lp.registry.interfaces.poll.IPollOption"821 for="lp.registry.interfaces.poll.IPollOption"
821 path_expression="string:+option/${id}"822 path_expression="string:+option/${id}"
822 attribute_to_parent="poll"823 attribute_to_parent="poll"
@@ -828,7 +829,7 @@
828 permission="launchpad.Edit"829 permission="launchpad.Edit"
829 template="../templates/polloption-edit.pt"830 template="../templates/polloption-edit.pt"
830 />831 />
831 <browser:url832 <lp:url
832 for="lp.registry.interfaces.announcement.IAnnouncement"833 for="lp.registry.interfaces.announcement.IAnnouncement"
833 path_expression="string:+announcement/${id}"834 path_expression="string:+announcement/${id}"
834 attribute_to_parent="target"835 attribute_to_parent="target"
@@ -899,7 +900,7 @@
899 permission="launchpad.Edit"900 permission="launchpad.Edit"
900 template="../templates/announcement-add.pt"901 template="../templates/announcement-add.pt"
901 />902 />
902 <browser:url903 <lp:url
903 for="lp.registry.interfaces.announcement.IAnnouncementSet"904 for="lp.registry.interfaces.announcement.IAnnouncementSet"
904 path_expression="string:+announcements"905 path_expression="string:+announcements"
905 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot"906 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot"
@@ -969,7 +970,7 @@
969 TeamOverviewNavigationMenu970 TeamOverviewNavigationMenu
970 "971 "
971 />972 />
972 <browser:url973 <lp:url
973 for="lp.registry.interfaces.person.IPerson"974 for="lp.registry.interfaces.person.IPerson"
974 path_expression="string:~${name}"975 path_expression="string:~${name}"
975 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot"976 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot"
@@ -1532,13 +1533,13 @@
1532 name="+index"1533 name="+index"
1533 for="lp.registry.interfaces.milestone.IMilestoneData"1534 for="lp.registry.interfaces.milestone.IMilestoneData"
1534 />1535 />
1535 <browser:url1536 <lp:url
1536 for="lp.registry.interfaces.milestone.IMilestoneData"1537 for="lp.registry.interfaces.milestone.IMilestoneData"
1537 path_expression="string:+milestone/${name}"1538 path_expression="string:+milestone/${name}"
1538 rootsite="mainsite"1539 rootsite="mainsite"
1539 attribute_to_parent="target"1540 attribute_to_parent="target"
1540 />1541 />
1541 <browser:url1542 <lp:url
1542 for="lp.registry.interfaces.milestonetag.IProjectGroupMilestoneTag"1543 for="lp.registry.interfaces.milestonetag.IProjectGroupMilestoneTag"
1543 path_expression="string:+tags/${name}"1544 path_expression="string:+tags/${name}"
1544 rootsite="mainsite"1545 rootsite="mainsite"
@@ -1643,7 +1644,7 @@
1643 permission="launchpad.View"1644 permission="launchpad.View"
1644 template="../templates/message-moderation.pt"1645 template="../templates/message-moderation.pt"
1645 />1646 />
1646 <browser:url1647 <lp:url
1647 for="lp.registry.interfaces.wikiname.IWikiName"1648 for="lp.registry.interfaces.wikiname.IWikiName"
1648 path_expression="string:+wikiname/${id}"1649 path_expression="string:+wikiname/${id}"
1649 attribute_to_parent="person"1650 attribute_to_parent="person"
@@ -1667,7 +1668,7 @@
1667 module="lp.registry.browser.product"1668 module="lp.registry.browser.product"
1668 classes="ProductNavigation"1669 classes="ProductNavigation"
1669 />1670 />
1670 <browser:url1671 <lp:url
1671 for="lp.registry.interfaces.product.IProduct"1672 for="lp.registry.interfaces.product.IProduct"
1672 path_expression="name"1673 path_expression="name"
1673 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot"1674 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot"
@@ -1721,7 +1722,7 @@
1721 for="lp.registry.interfaces.pillar.IPillarPerson"1722 for="lp.registry.interfaces.pillar.IPillarPerson"
1722 permission="zope.Public"1723 permission="zope.Public"
1723 />1724 />
1724 <browser:url1725 <lp:url
1725 for="lp.registry.interfaces.pillar.IPillarPerson"1726 for="lp.registry.interfaces.pillar.IPillarPerson"
1726 path_expression="string:+sharing/${person/name}"1727 path_expression="string:+sharing/${person/name}"
1727 rootsite="mainsite"1728 rootsite="mainsite"
@@ -1837,12 +1838,12 @@
1837 permission="launchpad.Edit"1838 permission="launchpad.Edit"
1838 template="../../app/templates/generic-edit.pt"1839 template="../../app/templates/generic-edit.pt"
1839 />1840 />
1840 <browser:url1841 <lp:url
1841 for="lp.registry.interfaces.nameblocklist.INameBlocklistSet"1842 for="lp.registry.interfaces.nameblocklist.INameBlocklistSet"
1842 path_expression="string:+nameblocklist"1843 path_expression="string:+nameblocklist"
1843 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot"1844 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot"
1844 />1845 />
1845 <browser:url1846 <lp:url
1846 for="lp.registry.interfaces.nameblocklist.INameBlocklist"1847 for="lp.registry.interfaces.nameblocklist.INameBlocklist"
1847 path_expression="string:${id}"1848 path_expression="string:${id}"
1848 parent_utility="lp.registry.interfaces.nameblocklist.INameBlocklistSet"1849 parent_utility="lp.registry.interfaces.nameblocklist.INameBlocklistSet"
@@ -1896,7 +1897,7 @@
1896 ProductSetNavigation1897 ProductSetNavigation
1897 "1898 "
1898 />1899 />
1899 <browser:url1900 <lp:url
1900 for="lp.registry.interfaces.product.IProductSet"1901 for="lp.registry.interfaces.product.IProductSet"
1901 path_expression="string:projects"1902 path_expression="string:projects"
1902 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot"1903 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot"
@@ -1953,7 +1954,7 @@
1953 classes="1954 classes="
1954 ProductSeriesNavigation"1955 ProductSeriesNavigation"
1955 />1956 />
1956 <browser:url1957 <lp:url
1957 for="lp.registry.interfaces.productseries.IProductSeries"1958 for="lp.registry.interfaces.productseries.IProductSeries"
1958 path_expression="name"1959 path_expression="name"
1959 attribute_to_parent="product"1960 attribute_to_parent="product"
@@ -1962,10 +1963,10 @@
1962 ITimelinProductSeries. It has been configured to return the1963 ITimelinProductSeries. It has been configured to return the
1963 same url as IProductSeries. This won't cause a problem when1964 same url as IProductSeries. This won't cause a problem when
1964 navigating to the url, since ProductNavigation.traverse() just1965 navigating to the url, since ProductNavigation.traverse() just
1965 returns an IProductSeries object, and browser:url only affects1966 returns an IProductSeries object, and lp:url only affects
1966 canonical_url().1967 canonical_url().
1967 -->1968 -->
1968 <browser:url1969 <lp:url
1969 for="lp.registry.interfaces.productseries.ITimelineProductSeries"1970 for="lp.registry.interfaces.productseries.ITimelineProductSeries"
1970 path_expression="name"1971 path_expression="name"
1971 attribute_to_parent="product"1972 attribute_to_parent="product"
@@ -2093,7 +2094,7 @@
2093 class="lp.answers.browser.questiontarget.AskAQuestionButtonPortlet"2094 class="lp.answers.browser.questiontarget.AskAQuestionButtonPortlet"
2094 permission="zope.Public"2095 permission="zope.Public"
2095 />2096 />
2096 <browser:url2097 <lp:url
2097 for="lp.registry.interfaces.productseries.IProductSeriesSet"2098 for="lp.registry.interfaces.productseries.IProductSeriesSet"
2098 path_expression="string:series"2099 path_expression="string:series"
2099 parent_utility="lp.code.interfaces.codehosting.IBazaarApplication"2100 parent_utility="lp.code.interfaces.codehosting.IBazaarApplication"
@@ -2356,7 +2357,7 @@
2356 classes="2357 classes="
2357 DistributionSetNavigation"2358 DistributionSetNavigation"
2358 />2359 />
2359 <browser:url2360 <lp:url
2360 for="lp.registry.interfaces.distribution.IDistribution"2361 for="lp.registry.interfaces.distribution.IDistribution"
2361 path_expression="name"2362 path_expression="name"
2362 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot"2363 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot"
@@ -2404,7 +2405,7 @@
2404 classes="2405 classes="
2405 SourcePackageNavigation"2406 SourcePackageNavigation"
2406 />2407 />
2407 <browser:url2408 <lp:url
2408 for="lp.registry.interfaces.sourcepackage.ISourcePackage"2409 for="lp.registry.interfaces.sourcepackage.ISourcePackage"
2409 path_expression="string:+source/${name}"2410 path_expression="string:+source/${name}"
2410 attribute_to_parent="distroseries"2411 attribute_to_parent="distroseries"
@@ -2460,12 +2461,12 @@
2460 for="lp.registry.interfaces.productrelease.IProductRelease"2461 for="lp.registry.interfaces.productrelease.IProductRelease"
2461 permission="launchpad.View"2462 permission="launchpad.View"
2462 />2463 />
2463 <browser:url2464 <lp:url
2464 for="lp.registry.interfaces.productrelease.IProductRelease"2465 for="lp.registry.interfaces.productrelease.IProductRelease"
2465 path_expression="version"2466 path_expression="version"
2466 attribute_to_parent="productseries"2467 attribute_to_parent="productseries"
2467 />2468 />
2468 <browser:url2469 <lp:url
2469 for="lp.registry.interfaces.productrelease.IProductReleaseFile"2470 for="lp.registry.interfaces.productrelease.IProductReleaseFile"
2470 path_expression="string:+file/${libraryfile/filename}"2471 path_expression="string:+file/${libraryfile/filename}"
2471 rootsite="api"2472 rootsite="api"
@@ -2534,7 +2535,7 @@
2534 name="+index"2535 name="+index"
2535 for="lp.registry.interfaces.distributionmirror.IDistributionMirror"2536 for="lp.registry.interfaces.distributionmirror.IDistributionMirror"
2536 />2537 />
2537 <browser:url2538 <lp:url
2538 for="lp.registry.interfaces.distributionmirror.IDistributionMirror"2539 for="lp.registry.interfaces.distributionmirror.IDistributionMirror"
2539 path_expression="string:+mirror/${name}"2540 path_expression="string:+mirror/${name}"
2540 attribute_to_parent="distribution"2541 attribute_to_parent="distribution"
@@ -2631,7 +2632,7 @@
2631 permission="launchpad.AnyPerson"2632 permission="launchpad.AnyPerson"
2632 template="../templates/sourcepackage-remove-packaging.pt"2633 template="../templates/sourcepackage-remove-packaging.pt"
2633 />2634 />
2634 <browser:url2635 <lp:url
2635 for="lp.registry.interfaces.persondistributionsourcepackage.IPersonDistributionSourcePackage"2636 for="lp.registry.interfaces.persondistributionsourcepackage.IPersonDistributionSourcePackage"
2636 path_expression="string:${distro_source_package/distribution/name}/+source/${distro_source_package/sourcepackagename/name}"2637 path_expression="string:${distro_source_package/distribution/name}/+source/${distro_source_package/sourcepackagename/name}"
2637 attribute_to_parent="person"2638 attribute_to_parent="person"
@@ -2646,7 +2647,7 @@
2646 classes="2647 classes="
2647 PersonDistributionSourcePackageFacets"2648 PersonDistributionSourcePackageFacets"
2648 />2649 />
2649 <browser:url2650 <lp:url
2650 for="lp.registry.interfaces.personociproject.IPersonOCIProject"2651 for="lp.registry.interfaces.personociproject.IPersonOCIProject"
2651 path_expression="string:${oci_project/pillar/name}/+oci/${oci_project/name}"2652 path_expression="string:${oci_project/pillar/name}/+oci/${oci_project/name}"
2652 attribute_to_parent="person"2653 attribute_to_parent="person"
@@ -2655,7 +2656,7 @@
2655 module="lp.registry.browser.personociproject"2656 module="lp.registry.browser.personociproject"
2656 classes="PersonOCIProjectNavigation"2657 classes="PersonOCIProjectNavigation"
2657 />2658 />
2658 <browser:url2659 <lp:url
2659 for="lp.registry.interfaces.personproduct.IPersonProduct"2660 for="lp.registry.interfaces.personproduct.IPersonProduct"
2660 path_expression="product/name"2661 path_expression="product/name"
2661 attribute_to_parent="person"2662 attribute_to_parent="person"
@@ -2670,13 +2671,13 @@
2670 classes="2671 classes="
2671 PersonProductFacets"2672 PersonProductFacets"
2672 />2673 />
2673 <browser:url2674 <lp:url
2674 for="lp.registry.interfaces.ssh.ISSHKey"2675 for="lp.registry.interfaces.ssh.ISSHKey"
2675 path_expression="string:+ssh-keys/${id}"2676 path_expression="string:+ssh-keys/${id}"
2676 rootsite="api"2677 rootsite="api"
2677 attribute_to_parent="person"2678 attribute_to_parent="person"
2678 />2679 />
2679 <browser:url2680 <lp:url
2680 for="lp.registry.interfaces.gpg.IGPGKey"2681 for="lp.registry.interfaces.gpg.IGPGKey"
2681 path_expression="string:+gpg-keys/${fingerprint}"2682 path_expression="string:+gpg-keys/${fingerprint}"
2682 rootsite="api"2683 rootsite="api"
diff --git a/lib/lp/services/auth/configure.zcml b/lib/lp/services/auth/configure.zcml
index 984737e..6ae2d20 100644
--- a/lib/lp/services/auth/configure.zcml
+++ b/lib/lp/services/auth/configure.zcml
@@ -28,7 +28,7 @@
28 <allow interface="lp.services.auth.interfaces.IAccessTokenSet" />28 <allow interface="lp.services.auth.interfaces.IAccessTokenSet" />
29 </lp:securedutility>29 </lp:securedutility>
3030
31 <browser:url31 <lp:url
32 for="lp.services.auth.interfaces.IAccessToken"32 for="lp.services.auth.interfaces.IAccessToken"
33 path_expression="string:+access-token/${id}"33 path_expression="string:+access-token/${id}"
34 attribute_to_parent="target" />34 attribute_to_parent="target" />
diff --git a/lib/lp/services/features/browser/configure.zcml b/lib/lp/services/features/browser/configure.zcml
index 344dbf8..9346db5 100644
--- a/lib/lp/services/features/browser/configure.zcml
+++ b/lib/lp/services/features/browser/configure.zcml
@@ -6,10 +6,11 @@
6 xmlns="http://namespaces.zope.org/zope"6 xmlns="http://namespaces.zope.org/zope"
7 xmlns:browser="http://namespaces.zope.org/browser"7 xmlns:browser="http://namespaces.zope.org/browser"
8 xmlns:i18n="http://namespaces.zope.org/i18n"8 xmlns:i18n="http://namespaces.zope.org/i18n"
9 xmlns:lp="http://namespaces.canonical.com/lp"
9 xmlns:xmlrpc="http://namespaces.zope.org/xmlrpc"10 xmlns:xmlrpc="http://namespaces.zope.org/xmlrpc"
10 i18n_domain="launchpad">11 i18n_domain="launchpad">
1112
12 <browser:url13 <lp:url
13 for="lp.services.features.interfaces.IFeatureRules"14 for="lp.services.features.interfaces.IFeatureRules"
14 path_expression="string:+feature-rules"15 path_expression="string:+feature-rules"
15 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot"/>16 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot"/>
diff --git a/lib/lp/services/identity/configure.zcml b/lib/lp/services/identity/configure.zcml
index c04e72d..690b52f 100644
--- a/lib/lp/services/identity/configure.zcml
+++ b/lib/lp/services/identity/configure.zcml
@@ -40,7 +40,7 @@
40 interface="lp.services.identity.interfaces.emailaddress.IEmailAddressSet"/>40 interface="lp.services.identity.interfaces.emailaddress.IEmailAddressSet"/>
41 </lp:securedutility>41 </lp:securedutility>
4242
43 <browser:url43 <lp:url
44 for="lp.services.identity.interfaces.emailaddress.IEmailAddress"44 for="lp.services.identity.interfaces.emailaddress.IEmailAddress"
45 path_expression="string:+email/${email}"45 path_expression="string:+email/${email}"
46 rootsite="api"46 rootsite="api"
diff --git a/lib/lp/services/messages/browser/configure.zcml b/lib/lp/services/messages/browser/configure.zcml
index 0413ba9..a86cecf 100644
--- a/lib/lp/services/messages/browser/configure.zcml
+++ b/lib/lp/services/messages/browser/configure.zcml
@@ -1,9 +1,9 @@
1<configure1<configure
2 xmlns="http://namespaces.zope.org/zope"2 xmlns="http://namespaces.zope.org/zope"
3 xmlns:browser="http://namespaces.zope.org/browser"
4 xmlns:i18n="http://namespaces.zope.org/i18n"3 xmlns:i18n="http://namespaces.zope.org/i18n"
4 xmlns:lp="http://namespaces.canonical.com/lp"
5 i18n_domain="launchpad">5 i18n_domain="launchpad">
6 <browser:url6 <lp:url
7 for="lp.services.messages.interfaces.messagerevision.IMessageRevision"7 for="lp.services.messages.interfaces.messagerevision.IMessageRevision"
8 path_expression="string:revisions/${revision}"8 path_expression="string:revisions/${revision}"
9 attribute_to_parent="message_implementation" />9 attribute_to_parent="message_implementation" />
diff --git a/lib/lp/services/statistics/browser/configure.zcml b/lib/lp/services/statistics/browser/configure.zcml
index d30cc51..04ab11e 100644
--- a/lib/lp/services/statistics/browser/configure.zcml
+++ b/lib/lp/services/statistics/browser/configure.zcml
@@ -2,9 +2,10 @@
2 xmlns="http://namespaces.zope.org/zope"2 xmlns="http://namespaces.zope.org/zope"
3 xmlns:browser="http://namespaces.zope.org/browser"3 xmlns:browser="http://namespaces.zope.org/browser"
4 xmlns:i18n="http://namespaces.zope.org/i18n"4 xmlns:i18n="http://namespaces.zope.org/i18n"
5 xmlns:lp="http://namespaces.canonical.com/lp"
5 xmlns:xmlrpc="http://namespaces.zope.org/xmlrpc"6 xmlns:xmlrpc="http://namespaces.zope.org/xmlrpc"
6 i18n_domain="launchpad">7 i18n_domain="launchpad">
7 <browser:url8 <lp:url
8 for="lp.services.statistics.interfaces.statistic.ILaunchpadStatisticSet"9 for="lp.services.statistics.interfaces.statistic.ILaunchpadStatisticSet"
9 path_expression="string:+statistics"10 path_expression="string:+statistics"
10 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot"/>11 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot"/>
@@ -20,4 +21,4 @@
20 name="+index"21 name="+index"
21 template="../templates/launchpadstatisticset-index.pt"/>22 template="../templates/launchpadstatisticset-index.pt"/>
22 </browser:pages>23 </browser:pages>
23</configure>
24\ No newline at end of file24\ No newline at end of file
25</configure>
diff --git a/lib/lp/services/temporaryblobstorage/configure.zcml b/lib/lp/services/temporaryblobstorage/configure.zcml
index e696b52..598ebfa 100644
--- a/lib/lp/services/temporaryblobstorage/configure.zcml
+++ b/lib/lp/services/temporaryblobstorage/configure.zcml
@@ -43,12 +43,12 @@
43 classes="TemporaryBlobStorageNavigation"43 classes="TemporaryBlobStorageNavigation"
44 />44 />
4545
46 <browser:url46 <lp:url
47 for="lp.services.temporaryblobstorage.interfaces.ITemporaryBlobStorage"47 for="lp.services.temporaryblobstorage.interfaces.ITemporaryBlobStorage"
48 urldata="lp.services.temporaryblobstorage.browser.TemporaryBlobStorageURL"48 urldata="lp.services.temporaryblobstorage.browser.TemporaryBlobStorageURL"
49 parent_utility="lp.services.webservice.interfaces.IWebServiceApplication"/>49 parent_utility="lp.services.webservice.interfaces.IWebServiceApplication"/>
5050
51 <browser:url51 <lp:url
52 for="lp.services.temporaryblobstorage.interfaces.ITemporaryStorageManager"52 for="lp.services.temporaryblobstorage.interfaces.ITemporaryStorageManager"
53 path_expression="string:temporary-blobs"53 path_expression="string:temporary-blobs"
54 parent_utility="lp.services.webservice.interfaces.IWebServiceApplication"/>54 parent_utility="lp.services.webservice.interfaces.IWebServiceApplication"/>
diff --git a/lib/lp/services/verification/browser/configure.zcml b/lib/lp/services/verification/browser/configure.zcml
index 856da04..a3a0765 100644
--- a/lib/lp/services/verification/browser/configure.zcml
+++ b/lib/lp/services/verification/browser/configure.zcml
@@ -2,9 +2,9 @@
2 xmlns="http://namespaces.zope.org/zope"2 xmlns="http://namespaces.zope.org/zope"
3 xmlns:browser="http://namespaces.zope.org/browser"3 xmlns:browser="http://namespaces.zope.org/browser"
4 xmlns:i18n="http://namespaces.zope.org/i18n"4 xmlns:i18n="http://namespaces.zope.org/i18n"
5 xmlns:xmlrpc="http://namespaces.zope.org/xmlrpc"5 xmlns:lp="http://namespaces.canonical.com/lp"
6 i18n_domain="launchpad">6 i18n_domain="launchpad">
7 <browser:url7 <lp:url
8 for="lp.services.verification.interfaces.logintoken.ILoginTokenSet"8 for="lp.services.verification.interfaces.logintoken.ILoginTokenSet"
9 path_expression="string:token"9 path_expression="string:token"
10 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot"10 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot"
@@ -14,7 +14,7 @@
14 <browser:defaultView14 <browser:defaultView
15 for="lp.services.verification.interfaces.logintoken.ILoginToken"15 for="lp.services.verification.interfaces.logintoken.ILoginToken"
16 name="+index"/>16 name="+index"/>
17 <browser:url17 <lp:url
18 for="lp.services.verification.interfaces.logintoken.ILoginToken"18 for="lp.services.verification.interfaces.logintoken.ILoginToken"
19 path_expression="token"19 path_expression="token"
20 parent_utility="lp.services.verification.interfaces.logintoken.ILoginTokenSet"/>20 parent_utility="lp.services.verification.interfaces.logintoken.ILoginTokenSet"/>
diff --git a/lib/lp/services/webapp/doc/canonical_url.rst b/lib/lp/services/webapp/doc/canonical_url.rst
index 32123e4..f2825cc 100644
--- a/lib/lp/services/webapp/doc/canonical_url.rst
+++ b/lib/lp/services/webapp/doc/canonical_url.rst
@@ -3,10 +3,10 @@ Canonical URLs
33
4https://launchpad.canonical.com/CanonicalUrls4https://launchpad.canonical.com/CanonicalUrls
55
6The browser:url ZCML directive6The lp:url ZCML directive
7------------------------------7-------------------------
88
9The browser:url directive registers an ICanonicalUrlData adapter.9The lp:url directive registers an ICanonicalUrlData adapter.
1010
11In this test, we'll use a URL hierarchy /countries/England/+towns/London11In this test, we'll use a URL hierarchy /countries/England/+towns/London
1212
@@ -31,7 +31,7 @@ will put in a temporary module.
31 ...31 ...
3232
33 >>> class ITown(Interface):33 >>> class ITown(Interface):
34 ... """Dummy interface for use in browser:url tests."""34 ... """Dummy interface for use in lp:url tests."""
35 ...35 ...
36 ... __module__ = module.__name__36 ... __module__ = module.__name__
37 ... country = Attribute("the country the town is in")37 ... country = Attribute("the country the town is in")
@@ -118,16 +118,16 @@ Next, we check there are no ICanonicalUrlData adapters for these objects.
118 ... assert ICanonicalUrlData(obj, None) is None118 ... assert ICanonicalUrlData(obj, None) is None
119 ...119 ...
120120
121Configure a browser:url for ITown. Our first attempt fails because we121Configure a lp:url for ITown. Our first attempt fails because we
122mistyped 'countryOopsTypo', and there is no such name in ITown.122mistyped 'countryOopsTypo', and there is no such name in ITown.
123123
124 >>> from zope.configuration import xmlconfig124 >>> from zope.configuration import xmlconfig
125 >>> zcmlcontext = xmlconfig.string(125 >>> zcmlcontext = xmlconfig.string(
126 ... """126 ... """
127 ... <configure xmlns:browser="http://namespaces.zope.org/browser">127 ... <configure xmlns:lp="http://namespaces.canonical.com/lp">
128 ... <include package="zope.component" file="meta.zcml" />128 ... <include package="zope.component" file="meta.zcml" />
129 ... <include package="lp.services.webapp" file="meta.zcml" />129 ... <include package="lp.services.webapp" file="meta.zcml" />
130 ... <browser:url130 ... <lp:url
131 ... for="{module_name}.ITown"131 ... for="{module_name}.ITown"
132 ... path_expression="string:+towns/${{name}}"132 ... path_expression="string:+towns/${{name}}"
133 ... attribute_to_parent="countryOopsTypo"133 ... attribute_to_parent="countryOopsTypo"
@@ -144,9 +144,9 @@ mistyped 'countryOopsTypo', and there is no such name in ITown.
144144
145 >>> zcmlcontext = xmlconfig.string(145 >>> zcmlcontext = xmlconfig.string(
146 ... """146 ... """
147 ... <configure xmlns:browser="http://namespaces.zope.org/browser">147 ... <configure xmlns:lp="http://namespaces.canonical.com/lp">
148 ... <include package="lp.services.webapp" file="meta.zcml" />148 ... <include package="lp.services.webapp" file="meta.zcml" />
149 ... <browser:url149 ... <lp:url
150 ... for="{module_name}.ITown"150 ... for="{module_name}.ITown"
151 ... path_expression="string:+towns/${{name}}"151 ... path_expression="string:+towns/${{name}}"
152 ... attribute_to_parent="country"152 ... attribute_to_parent="country"
@@ -179,7 +179,7 @@ at it from zcml. I'll put it in our temporary module.
179 ... """179 ... """
180 ... <configure180 ... <configure
181 ... xmlns="http://namespaces.zope.org/zope"181 ... xmlns="http://namespaces.zope.org/zope"
182 ... xmlns:browser="http://namespaces.zope.org/browser">182 ... xmlns:lp="http://namespaces.canonical.com/lp">
183 ... <include package="zope.component" file="meta.zcml" />183 ... <include package="zope.component" file="meta.zcml" />
184 ... <include package="lp.services.webapp" file="meta.zcml" />184 ... <include package="lp.services.webapp" file="meta.zcml" />
185 ... <configure package="zope.security">185 ... <configure package="zope.security">
@@ -189,7 +189,7 @@ at it from zcml. I'll put it in our temporary module.
189 ... provides="{module_name}.ICountrySet"189 ... provides="{module_name}.ICountrySet"
190 ... component="{module_name}.countryset_instance"190 ... component="{module_name}.countryset_instance"
191 ... />191 ... />
192 ... <browser:url192 ... <lp:url
193 ... for="{module_name}.ICountry"193 ... for="{module_name}.ICountry"
194 ... path_expression="name"194 ... path_expression="name"
195 ... parent_utility="{module_name}.ICountrySet"195 ... parent_utility="{module_name}.ICountrySet"
@@ -211,7 +211,7 @@ Now, there is an ICanonicalUrlData registered for ICountry.
211 >>> country_urldata.inside is countryset_instance211 >>> country_urldata.inside is countryset_instance
212 True212 True
213213
214We need to specify a browser:url for ICountrySet. We'll use a variation on214We need to specify an lp:url for ICountrySet. We'll use a variation on
215the zcml that allows us to directly set an ICanonicalUrlData adapter to use.215the zcml that allows us to directly set an ICanonicalUrlData adapter to use.
216The adapter will make its parent the ILaunchpadRoot utility. This is not the216The adapter will make its parent the ILaunchpadRoot utility. This is not the
217normal way to do this. Normally, we'd just say217normal way to do this. Normally, we'd just say
@@ -243,9 +243,9 @@ in our temporary module.
243243
244 >>> zcmlcontext = xmlconfig.string(244 >>> zcmlcontext = xmlconfig.string(
245 ... """245 ... """
246 ... <configure xmlns:browser="http://namespaces.zope.org/browser">246 ... <configure xmlns:lp="http://namespaces.canonical.com/lp">
247 ... <include package="lp.services.webapp" file="meta.zcml" />247 ... <include package="lp.services.webapp" file="meta.zcml" />
248 ... <browser:url248 ... <lp:url
249 ... for="{module_name}.ICountrySet"249 ... for="{module_name}.ICountrySet"
250 ... urldata="{module_name}.CountrySetUrl"250 ... urldata="{module_name}.CountrySetUrl"
251 ... />251 ... />
@@ -485,14 +485,14 @@ And if the configuration does provide a rootsite:
485 ... """485 ... """
486 ... <configure486 ... <configure
487 ... xmlns="http://namespaces.zope.org/zope"487 ... xmlns="http://namespaces.zope.org/zope"
488 ... xmlns:browser="http://namespaces.zope.org/browser">488 ... xmlns:lp="http://namespaces.canonical.com/lp">
489 ... <include package="zope.component" file="meta.zcml" />489 ... <include package="zope.component" file="meta.zcml" />
490 ... <include package="lp.services.webapp" file="meta.zcml" />490 ... <include package="lp.services.webapp" file="meta.zcml" />
491 ... <utility491 ... <utility
492 ... provides="{module_name}.ICountrySet"492 ... provides="{module_name}.ICountrySet"
493 ... component="{module_name}.countryset_instance"493 ... component="{module_name}.countryset_instance"
494 ... />494 ... />
495 ... <browser:url495 ... <lp:url
496 ... for="{module_name}.ICountry"496 ... for="{module_name}.ICountry"
497 ... path_expression="name"497 ... path_expression="name"
498 ... parent_utility="{module_name}.ICountrySet"498 ... parent_utility="{module_name}.ICountrySet"
diff --git a/lib/lp/services/webapp/doc/zcmldirectives.rst b/lib/lp/services/webapp/doc/zcmldirectives.rst
index 49e5434..ec7708e 100644
--- a/lib/lp/services/webapp/doc/zcmldirectives.rst
+++ b/lib/lp/services/webapp/doc/zcmldirectives.rst
@@ -6,7 +6,7 @@ We have a bunch of custom zcml directives in Launchpad.
6Canonical URLs6Canonical URLs
7--------------7--------------
88
9See canonical_url.rst for information and tests of the browser:url directive.9See canonical_url.rst for information and tests of the lp:url directive.
1010
1111
12A zcml context for zcml directive unittests12A zcml context for zcml directive unittests
diff --git a/lib/lp/services/webapp/meta.zcml b/lib/lp/services/webapp/meta.zcml
index 04d8934..8d59765 100644
--- a/lib/lp/services/webapp/meta.zcml
+++ b/lib/lp/services/webapp/meta.zcml
@@ -5,7 +5,7 @@
5<configure xmlns="http://namespaces.zope.org/meta">5<configure xmlns="http://namespaces.zope.org/meta">
66
7 <directive7 <directive
8 namespace="http://namespaces.zope.org/browser"8 namespace="http://namespaces.canonical.com/lp"
9 name="url"9 name="url"
10 schema="lp.services.webapp.metazcml.IURLDirective"10 schema="lp.services.webapp.metazcml.IURLDirective"
11 handler="lp.services.webapp.metazcml.url"11 handler="lp.services.webapp.metazcml.url"
diff --git a/lib/lp/services/webapp/metazcml.py b/lib/lp/services/webapp/metazcml.py
index 6f34f26..5576f9f 100644
--- a/lib/lp/services/webapp/metazcml.py
+++ b/lib/lp/services/webapp/metazcml.py
@@ -403,7 +403,7 @@ def url(
403 parent_utility=None,403 parent_utility=None,
404 rootsite=None,404 rootsite=None,
405):405):
406 """browser:url directive handler."""406 """lp:url directive handler."""
407 if not attribute_to_parent and not parent_utility and not urldata:407 if not attribute_to_parent and not parent_utility and not urldata:
408 raise TypeError(408 raise TypeError(
409 "Must provide attribute_to_parent, urldata or parent_utility."409 "Must provide attribute_to_parent, urldata or parent_utility."
diff --git a/lib/lp/services/webhooks/configure.zcml b/lib/lp/services/webhooks/configure.zcml
index d35fe99..f93d21c 100644
--- a/lib/lp/services/webhooks/configure.zcml
+++ b/lib/lp/services/webhooks/configure.zcml
@@ -70,7 +70,7 @@
70 factory="lp.services.webhooks.payload.WebhookAbsoluteURL"70 factory="lp.services.webhooks.payload.WebhookAbsoluteURL"
71 />71 />
7272
73 <browser:url73 <lp:url
74 for="lp.services.webhooks.interfaces.IWebhook"74 for="lp.services.webhooks.interfaces.IWebhook"
75 path_expression="string:+webhook/${id}"75 path_expression="string:+webhook/${id}"
76 attribute_to_parent="target"76 attribute_to_parent="target"
@@ -78,7 +78,7 @@
78 <browser:navigation78 <browser:navigation
79 module="lp.services.webhooks.browser" classes="WebhookNavigation" />79 module="lp.services.webhooks.browser" classes="WebhookNavigation" />
8080
81 <browser:url81 <lp:url
82 for="lp.services.webhooks.interfaces.IWebhookDeliveryJob"82 for="lp.services.webhooks.interfaces.IWebhookDeliveryJob"
83 path_expression="string:+delivery/${job_id}"83 path_expression="string:+delivery/${job_id}"
84 attribute_to_parent="webhook"84 attribute_to_parent="webhook"
diff --git a/lib/lp/services/worlddata/browser/configure.zcml b/lib/lp/services/worlddata/browser/configure.zcml
index 2e94fa3..9315d35 100644
--- a/lib/lp/services/worlddata/browser/configure.zcml
+++ b/lib/lp/services/worlddata/browser/configure.zcml
@@ -6,16 +6,17 @@
6 xmlns="http://namespaces.zope.org/zope"6 xmlns="http://namespaces.zope.org/zope"
7 xmlns:browser="http://namespaces.zope.org/browser"7 xmlns:browser="http://namespaces.zope.org/browser"
8 xmlns:i18n="http://namespaces.zope.org/i18n"8 xmlns:i18n="http://namespaces.zope.org/i18n"
9 xmlns:lp="http://namespaces.canonical.com/lp"
9 xmlns:xmlrpc="http://namespaces.zope.org/xmlrpc"10 xmlns:xmlrpc="http://namespaces.zope.org/xmlrpc"
10 i18n_domain="launchpad">11 i18n_domain="launchpad">
1112
12 <browser:url13 <lp:url
13 for="lp.services.worlddata.interfaces.country.ICountry"14 for="lp.services.worlddata.interfaces.country.ICountry"
14 path_expression="iso3166code2"15 path_expression="iso3166code2"
15 parent_utility="lp.services.worlddata.interfaces.country.ICountrySet"16 parent_utility="lp.services.worlddata.interfaces.country.ICountrySet"
16 rootsite="mainsite" />17 rootsite="mainsite" />
1718
18 <browser:url19 <lp:url
19 for="lp.services.worlddata.interfaces.country.ICountrySet"20 for="lp.services.worlddata.interfaces.country.ICountrySet"
20 path_expression="string:+countries"21 path_expression="string:+countries"
21 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot"22 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot"
diff --git a/lib/lp/snappy/browser/configure.zcml b/lib/lp/snappy/browser/configure.zcml
index 21d849f..f2d8fa3 100644
--- a/lib/lp/snappy/browser/configure.zcml
+++ b/lib/lp/snappy/browser/configure.zcml
@@ -6,10 +6,10 @@
6 xmlns="http://namespaces.zope.org/zope"6 xmlns="http://namespaces.zope.org/zope"
7 xmlns:browser="http://namespaces.zope.org/browser"7 xmlns:browser="http://namespaces.zope.org/browser"
8 xmlns:i18n="http://namespaces.zope.org/i18n"8 xmlns:i18n="http://namespaces.zope.org/i18n"
9 xmlns:xmlrpc="http://namespaces.zope.org/xmlrpc"9 xmlns:lp="http://namespaces.canonical.com/lp"
10 i18n_domain="launchpad">10 i18n_domain="launchpad">
11 <facet facet="overview">11 <facet facet="overview">
12 <browser:url12 <lp:url
13 for="lp.snappy.interfaces.snap.ISnap"13 for="lp.snappy.interfaces.snap.ISnap"
14 urldata="lp.snappy.browser.snap.SnapURL" />14 urldata="lp.snappy.browser.snap.SnapURL" />
15 <browser:defaultView15 <browser:defaultView
@@ -68,7 +68,7 @@
68 permission="launchpad.AnyPerson"68 permission="launchpad.AnyPerson"
69 name="+addsubscriber"69 name="+addsubscriber"
70 template="../../app/templates/generic-edit.pt"/>70 template="../../app/templates/generic-edit.pt"/>
71 <browser:url71 <lp:url
72 for="lp.snappy.interfaces.snapsubscription.ISnapSubscription"72 for="lp.snappy.interfaces.snapsubscription.ISnapSubscription"
73 path_expression="string:+subscription/${person/name}"73 path_expression="string:+subscription/${person/name}"
74 attribute_to_parent="snap"74 attribute_to_parent="snap"
@@ -127,15 +127,15 @@
127 for="lp.snappy.interfaces.snap.ISnap"127 for="lp.snappy.interfaces.snap.ISnap"
128 factory="lp.snappy.browser.snap.SnapBreadcrumb"128 factory="lp.snappy.browser.snap.SnapBreadcrumb"
129 permission="zope.Public" />129 permission="zope.Public" />
130 <browser:url130 <lp:url
131 for="lp.snappy.interfaces.snap.ISnapSet"131 for="lp.snappy.interfaces.snap.ISnapSet"
132 path_expression="string:+snaps"132 path_expression="string:+snaps"
133 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot" />133 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot" />
134 <browser:url134 <lp:url
135 for="lp.snappy.interfaces.snap.ISnapBuildRequest"135 for="lp.snappy.interfaces.snap.ISnapBuildRequest"
136 path_expression="string:+build-request/${id}"136 path_expression="string:+build-request/${id}"
137 attribute_to_parent="snap" />137 attribute_to_parent="snap" />
138 <browser:url138 <lp:url
139 for="lp.snappy.interfaces.snapbuild.ISnapBuild"139 for="lp.snappy.interfaces.snapbuild.ISnapBuild"
140 path_expression="string:+build/${id}"140 path_expression="string:+build/${id}"
141 attribute_to_parent="snap" />141 attribute_to_parent="snap" />
@@ -177,22 +177,22 @@
177 for="lp.snappy.interfaces.snapbuild.ISnapBuild"177 for="lp.snappy.interfaces.snapbuild.ISnapBuild"
178 factory="lp.services.webapp.breadcrumb.TitleBreadcrumb"178 factory="lp.services.webapp.breadcrumb.TitleBreadcrumb"
179 permission="zope.Public" />179 permission="zope.Public" />
180 <browser:url180 <lp:url
181 for="lp.snappy.interfaces.snappyseries.ISnappySeries"181 for="lp.snappy.interfaces.snappyseries.ISnappySeries"
182 path_expression="name"182 path_expression="name"
183 parent_utility="lp.snappy.interfaces.snappyseries.ISnappySeriesSet" />183 parent_utility="lp.snappy.interfaces.snappyseries.ISnappySeriesSet" />
184 <browser:url184 <lp:url
185 for="lp.snappy.interfaces.snappyseries.ISnappySeriesSet"185 for="lp.snappy.interfaces.snappyseries.ISnappySeriesSet"
186 path_expression="string:+snappy-series"186 path_expression="string:+snappy-series"
187 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot" />187 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot" />
188 <browser:navigation188 <browser:navigation
189 module="lp.snappy.browser.snappyseries"189 module="lp.snappy.browser.snappyseries"
190 classes="SnappySeriesSetNavigation" />190 classes="SnappySeriesSetNavigation" />
191 <browser:url191 <lp:url
192 for="lp.snappy.interfaces.snapbase.ISnapBase"192 for="lp.snappy.interfaces.snapbase.ISnapBase"
193 path_expression="name"193 path_expression="name"
194 parent_utility="lp.snappy.interfaces.snapbase.ISnapBaseSet" />194 parent_utility="lp.snappy.interfaces.snapbase.ISnapBaseSet" />
195 <browser:url195 <lp:url
196 for="lp.snappy.interfaces.snapbase.ISnapBaseSet"196 for="lp.snappy.interfaces.snapbase.ISnapBaseSet"
197 path_expression="string:+snap-bases"197 path_expression="string:+snap-bases"
198 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot" />198 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot" />
diff --git a/lib/lp/soyuz/browser/configure.zcml b/lib/lp/soyuz/browser/configure.zcml
index ea111dd..fa27b2a 100644
--- a/lib/lp/soyuz/browser/configure.zcml
+++ b/lib/lp/soyuz/browser/configure.zcml
@@ -6,9 +6,9 @@
6 xmlns="http://namespaces.zope.org/zope"6 xmlns="http://namespaces.zope.org/zope"
7 xmlns:browser="http://namespaces.zope.org/browser"7 xmlns:browser="http://namespaces.zope.org/browser"
8 xmlns:i18n="http://namespaces.zope.org/i18n"8 xmlns:i18n="http://namespaces.zope.org/i18n"
9 xmlns:xmlrpc="http://namespaces.zope.org/xmlrpc"9 xmlns:lp="http://namespaces.canonical.com/lp"
10 i18n_domain="launchpad">10 i18n_domain="launchpad">
11 <browser:url11 <lp:url
12 for="lp.soyuz.interfaces.binarypackagename.IBinaryPackageNameSet"12 for="lp.soyuz.interfaces.binarypackagename.IBinaryPackageNameSet"
13 path_expression="string:binarypackagenames"13 path_expression="string:binarypackagenames"
14 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot"14 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot"
@@ -29,7 +29,7 @@
29 name="+record-details"29 name="+record-details"
30 template="../templates/packagepublishing-details.pt"/>30 template="../templates/packagepublishing-details.pt"/>
31 </browser:pages>31 </browser:pages>
32 <browser:url32 <lp:url
33 for="lp.soyuz.interfaces.publishing.IBinaryPackagePublishingHistory"33 for="lp.soyuz.interfaces.publishing.IBinaryPackagePublishingHistory"
34 path_expression="string:+binarypub"34 path_expression="string:+binarypub"
35 attribute_to_parent="archive"35 attribute_to_parent="archive"
@@ -125,7 +125,7 @@
125 name="+listing-archive-detailed-selectable"125 name="+listing-archive-detailed-selectable"
126 template="../templates/sourcepackagepublishinghistory-listing-archive-detailed.pt"/>126 template="../templates/sourcepackagepublishinghistory-listing-archive-detailed.pt"/>
127 </browser:pages>127 </browser:pages>
128 <browser:url128 <lp:url
129 for="lp.soyuz.interfaces.publishing.ISourcePackagePublishingHistory"129 for="lp.soyuz.interfaces.publishing.ISourcePackagePublishingHistory"
130 path_expression="string:+sourcepub"130 path_expression="string:+sourcepub"
131 attribute_to_parent="archive"131 attribute_to_parent="archive"
@@ -136,7 +136,7 @@
136 <browser:defaultView136 <browser:defaultView
137 for="lp.soyuz.interfaces.distroarchseriesbinarypackagerelease.IDistroArchSeriesBinaryPackageRelease"137 for="lp.soyuz.interfaces.distroarchseriesbinarypackagerelease.IDistroArchSeriesBinaryPackageRelease"
138 name="+index"/>138 name="+index"/>
139 <browser:url139 <lp:url
140 for="lp.soyuz.interfaces.distroarchseriesbinarypackagerelease.IDistroArchSeriesBinaryPackageRelease"140 for="lp.soyuz.interfaces.distroarchseriesbinarypackagerelease.IDistroArchSeriesBinaryPackageRelease"
141 path_expression="version"141 path_expression="version"
142 attribute_to_parent="distroarchseriesbinarypackage"/>142 attribute_to_parent="distroarchseriesbinarypackage"/>
@@ -158,11 +158,11 @@
158 name="+portlet-details"158 name="+portlet-details"
159 template="../templates/distroarchseriesbinarypackagerelease-portlet-details.pt"/>159 template="../templates/distroarchseriesbinarypackagerelease-portlet-details.pt"/>
160 </browser:pages>160 </browser:pages>
161 <browser:url161 <lp:url
162 for="lp.soyuz.interfaces.distroarchseriesfilter.IDistroArchSeriesFilter"162 for="lp.soyuz.interfaces.distroarchseriesfilter.IDistroArchSeriesFilter"
163 path_expression="string:+source-filter"163 path_expression="string:+source-filter"
164 attribute_to_parent="distroarchseries"/>164 attribute_to_parent="distroarchseries"/>
165 <browser:url165 <lp:url
166 for="lp.soyuz.interfaces.archive.IArchiveSet"166 for="lp.soyuz.interfaces.archive.IArchiveSet"
167 path_expression="string:archives"167 path_expression="string:archives"
168 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot"168 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot"
@@ -173,12 +173,12 @@
173 <browser:navigation173 <browser:navigation
174 module="lp.soyuz.browser.archive"174 module="lp.soyuz.browser.archive"
175 classes="ArchiveNavigation" />175 classes="ArchiveNavigation" />
176 <browser:url176 <lp:url
177 for="lp.soyuz.interfaces.archive.IPPA"177 for="lp.soyuz.interfaces.archive.IPPA"
178 path_expression="string:+archive"178 path_expression="string:+archive"
179 attribute_to_parent="owner"179 attribute_to_parent="owner"
180 urldata="lp.soyuz.browser.archive.PPAURL"/>180 urldata="lp.soyuz.browser.archive.PPAURL"/>
181 <browser:url181 <lp:url
182 for="lp.soyuz.interfaces.archive.IDistributionArchive"182 for="lp.soyuz.interfaces.archive.IDistributionArchive"
183 path_expression="string:+archive"183 path_expression="string:+archive"
184 attribute_to_parent="distribution"184 attribute_to_parent="distribution"
@@ -278,12 +278,12 @@
278 ArchiveIndexActionsMenu278 ArchiveIndexActionsMenu
279 ArchivePackagesActionMenu"279 ArchivePackagesActionMenu"
280 module="lp.soyuz.browser.archive"/>280 module="lp.soyuz.browser.archive"/>
281 <browser:url281 <lp:url
282 for="lp.soyuz.interfaces.archivepermission.IArchiveUploader"282 for="lp.soyuz.interfaces.archivepermission.IArchiveUploader"
283 path_expression="string:+upload"283 path_expression="string:+upload"
284 attribute_to_parent="archive"284 attribute_to_parent="archive"
285 urldata="lp.soyuz.browser.archivepermission.ArchivePermissionURL"/>285 urldata="lp.soyuz.browser.archivepermission.ArchivePermissionURL"/>
286 <browser:url286 <lp:url
287 for="lp.soyuz.interfaces.archivepermission.IArchiveQueueAdmin"287 for="lp.soyuz.interfaces.archivepermission.IArchiveQueueAdmin"
288 path_expression="string:+queue-admin"288 path_expression="string:+queue-admin"
289 attribute_to_parent="archive"289 attribute_to_parent="archive"
@@ -291,7 +291,7 @@
291 <browser:defaultView291 <browser:defaultView
292 for="lp.soyuz.interfaces.binarypackagebuild.IBinaryPackageBuild"292 for="lp.soyuz.interfaces.binarypackagebuild.IBinaryPackageBuild"
293 name="+index"/>293 name="+index"/>
294 <browser:url294 <lp:url
295 for="lp.soyuz.interfaces.binarypackagebuild.IBinaryPackageBuild"295 for="lp.soyuz.interfaces.binarypackagebuild.IBinaryPackageBuild"
296 urldata="lp.soyuz.browser.build.BuildUrl"/>296 urldata="lp.soyuz.browser.build.BuildUrl"/>
297 <browser:navigation297 <browser:navigation
@@ -337,7 +337,7 @@
337 <browser:defaultView337 <browser:defaultView
338 for="lp.soyuz.interfaces.distroarchseriesbinarypackage.IDistroArchSeriesBinaryPackage"338 for="lp.soyuz.interfaces.distroarchseriesbinarypackage.IDistroArchSeriesBinaryPackage"
339 name="+index"/>339 name="+index"/>
340 <browser:url340 <lp:url
341 for="lp.soyuz.interfaces.distroarchseriesbinarypackage.IDistroArchSeriesBinaryPackage"341 for="lp.soyuz.interfaces.distroarchseriesbinarypackage.IDistroArchSeriesBinaryPackage"
342 path_expression="name"342 path_expression="name"
343 attribute_to_parent="distroarchseries"/>343 attribute_to_parent="distroarchseries"/>
@@ -362,11 +362,11 @@
362 name="+portlet-releases"362 name="+portlet-releases"
363 template="../templates/distroarchseriesbinarypackage-portlet-releases.pt"/>363 template="../templates/distroarchseriesbinarypackage-portlet-releases.pt"/>
364 </browser:pages>364 </browser:pages>
365 <browser:url365 <lp:url
366 for="lp.soyuz.interfaces.archivesubscriber.IArchiveSubscriber"366 for="lp.soyuz.interfaces.archivesubscriber.IArchiveSubscriber"
367 path_expression="string:+subscriptions/${subscriber/name}"367 path_expression="string:+subscriptions/${subscriber/name}"
368 attribute_to_parent="archive"/>368 attribute_to_parent="archive"/>
369 <browser:url369 <lp:url
370 for="lp.soyuz.interfaces.archivesubscriber.IPersonalArchiveSubscription"370 for="lp.soyuz.interfaces.archivesubscriber.IPersonalArchiveSubscription"
371 path_expression="string:+archivesubscriptions/${archive/id}"371 path_expression="string:+archivesubscriptions/${archive/id}"
372 attribute_to_parent="subscriber"/>372 attribute_to_parent="subscriber"/>
@@ -394,7 +394,7 @@
394 <browser:defaultView394 <browser:defaultView
395 for="lp.soyuz.interfaces.distributionsourcepackagerelease.IDistributionSourcePackageRelease"395 for="lp.soyuz.interfaces.distributionsourcepackagerelease.IDistributionSourcePackageRelease"
396 name="+index"/>396 name="+index"/>
397 <browser:url397 <lp:url
398 for="lp.soyuz.interfaces.distributionsourcepackagerelease.IDistributionSourcePackageRelease"398 for="lp.soyuz.interfaces.distributionsourcepackagerelease.IDistributionSourcePackageRelease"
399 path_expression="version"399 path_expression="version"
400 attribute_to_parent="sourcepackage"/>400 attribute_to_parent="sourcepackage"/>
@@ -425,7 +425,7 @@
425 <browser:defaultView425 <browser:defaultView
426 for="lp.soyuz.interfaces.distroseriesbinarypackage.IDistroSeriesBinaryPackage"426 for="lp.soyuz.interfaces.distroseriesbinarypackage.IDistroSeriesBinaryPackage"
427 name="+index"/>427 name="+index"/>
428 <browser:url428 <lp:url
429 for="lp.soyuz.interfaces.distroseriesbinarypackage.IDistroSeriesBinaryPackage"429 for="lp.soyuz.interfaces.distroseriesbinarypackage.IDistroSeriesBinaryPackage"
430 path_expression="string:+package/${name}"430 path_expression="string:+package/${name}"
431 attribute_to_parent="distroseries"/>431 attribute_to_parent="distroseries"/>
@@ -458,7 +458,7 @@
458 module="lp.soyuz.browser.distroarchseries"458 module="lp.soyuz.browser.distroarchseries"
459 classes="459 classes="
460 DistroArchSeriesActionMenu"/>460 DistroArchSeriesActionMenu"/>
461 <browser:url461 <lp:url
462 for="lp.soyuz.interfaces.distroarchseries.IDistroArchSeries"462 for="lp.soyuz.interfaces.distroarchseries.IDistroArchSeries"
463 path_expression="architecturetag"463 path_expression="architecturetag"
464 attribute_to_parent="distroseries"/>464 attribute_to_parent="distroseries"/>
@@ -645,7 +645,7 @@
645 template="../templates/distroseries-portlet-latestuploads.pt"/>645 template="../templates/distroseries-portlet-latestuploads.pt"/>
646 </browser:pages>646 </browser:pages>
647647
648 <browser:url648 <lp:url
649 for="lp.soyuz.interfaces.packageset.IPackagesetSet"649 for="lp.soyuz.interfaces.packageset.IPackagesetSet"
650 path_expression="string:package-sets"650 path_expression="string:package-sets"
651 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot"651 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot"
@@ -654,17 +654,17 @@
654 module="lp.soyuz.browser.packageset"654 module="lp.soyuz.browser.packageset"
655 classes="PackagesetSetNavigation"655 classes="PackagesetSetNavigation"
656 />656 />
657 <browser:url657 <lp:url
658 for="lp.soyuz.interfaces.packageset.IPackageset"658 for="lp.soyuz.interfaces.packageset.IPackageset"
659 path_expression="string:${distroseries/distribution/name}/${distroseries/name}/${name}"659 path_expression="string:${distroseries/distribution/name}/${distroseries/name}/${name}"
660 parent_utility="lp.soyuz.interfaces.packageset.IPackagesetSet"660 parent_utility="lp.soyuz.interfaces.packageset.IPackagesetSet"
661 />661 />
662 <browser:url662 <lp:url
663 for="lp.soyuz.interfaces.queue.IPackageUpload"663 for="lp.soyuz.interfaces.queue.IPackageUpload"
664 path_expression="string:+upload/${id}"664 path_expression="string:+upload/${id}"
665 attribute_to_parent="distroseries"665 attribute_to_parent="distroseries"
666 />666 />
667 <browser:url667 <lp:url
668 for="lp.soyuz.interfaces.queue.IPackageUploadLog"668 for="lp.soyuz.interfaces.queue.IPackageUploadLog"
669 path_expression="string:+log/${id}"669 path_expression="string:+log/${id}"
670 attribute_to_parent="package_upload"670 attribute_to_parent="package_upload"
@@ -673,12 +673,12 @@
673 module="lp.soyuz.browser.queue"673 module="lp.soyuz.browser.queue"
674 classes="PackageUploadNavigation"674 classes="PackageUploadNavigation"
675 />675 />
676 <browser:url676 <lp:url
677 for="lp.soyuz.interfaces.archivedependency.IArchiveDependency"677 for="lp.soyuz.interfaces.archivedependency.IArchiveDependency"
678 path_expression="string:+dependency/${dependency/id}"678 path_expression="string:+dependency/${dependency/id}"
679 attribute_to_parent="parent"679 attribute_to_parent="parent"
680 />680 />
681 <browser:url681 <lp:url
682 for="lp.soyuz.interfaces.binarypackagerelease.IBinaryPackageReleaseDownloadCount"682 for="lp.soyuz.interfaces.binarypackagerelease.IBinaryPackageReleaseDownloadCount"
683 path_expression="string:+binaryhits/${binary_package_release/name}/${binary_package_release/version}/${binary_package_release/build/distro_arch_series/architecturetag}/${day}/${country_code}"683 path_expression="string:+binaryhits/${binary_package_release/name}/${binary_package_release/version}/${binary_package_release/build/distro_arch_series/architecturetag}/${day}/${country_code}"
684 attribute_to_parent="archive"684 attribute_to_parent="archive"
@@ -692,7 +692,7 @@
692 template="../templates/packagerelationship-list.pt"692 template="../templates/packagerelationship-list.pt"
693 />693 />
694 </browser:pages>694 </browser:pages>
695 <browser:url695 <lp:url
696 for="lp.soyuz.interfaces.livefs.ILiveFS"696 for="lp.soyuz.interfaces.livefs.ILiveFS"
697 path_expression="string:+livefs/${distro_series/distribution/name}/${distro_series/name}/${name}"697 path_expression="string:+livefs/${distro_series/distribution/name}/${distro_series/name}/${name}"
698 attribute_to_parent="owner"698 attribute_to_parent="owner"
@@ -747,12 +747,12 @@
747 factory="lp.soyuz.browser.livefs.LiveFSBreadcrumb"747 factory="lp.soyuz.browser.livefs.LiveFSBreadcrumb"
748 permission="zope.Public"748 permission="zope.Public"
749 />749 />
750 <browser:url750 <lp:url
751 for="lp.soyuz.interfaces.livefs.ILiveFSSet"751 for="lp.soyuz.interfaces.livefs.ILiveFSSet"
752 path_expression="string:livefses"752 path_expression="string:livefses"
753 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot"753 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot"
754 />754 />
755 <browser:url755 <lp:url
756 for="lp.soyuz.interfaces.livefsbuild.ILiveFSBuild"756 for="lp.soyuz.interfaces.livefsbuild.ILiveFSBuild"
757 path_expression="string:+build/${id}"757 path_expression="string:+build/${id}"
758 attribute_to_parent="livefs"758 attribute_to_parent="livefs"
diff --git a/lib/lp/soyuz/model/archive.py b/lib/lp/soyuz/model/archive.py
index 3eb9387..32b23dd 100644
--- a/lib/lp/soyuz/model/archive.py
+++ b/lib/lp/soyuz/model/archive.py
@@ -364,7 +364,7 @@ class Archive(SQLBase):
364 SQLBase._init(self, *args, **kw)364 SQLBase._init(self, *args, **kw)
365365
366 # Provide the additional marker interface depending on what type366 # Provide the additional marker interface depending on what type
367 # of archive this is. See also the browser:url declarations in367 # of archive this is. See also the lp:url declarations in
368 # zcml/archive.zcml.368 # zcml/archive.zcml.
369 if self.is_ppa:369 if self.is_ppa:
370 alsoProvides(self, IPPA)370 alsoProvides(self, IPPA)
diff --git a/lib/lp/soyuz/model/archivepermission.py b/lib/lp/soyuz/model/archivepermission.py
index 86ca48c..6697808 100644
--- a/lib/lp/soyuz/model/archivepermission.py
+++ b/lib/lp/soyuz/model/archivepermission.py
@@ -118,7 +118,7 @@ class ArchivePermission(StormBase):
118118
119 def __storm_loaded__(self):119 def __storm_loaded__(self):
120 # Provide the additional marker interface depending on what type120 # Provide the additional marker interface depending on what type
121 # of archive this is. See also the browser:url declarations in121 # of archive this is. See also the lp:url declarations in
122 # zcml/archivepermission.zcml.122 # zcml/archivepermission.zcml.
123 if self.permission == ArchivePermissionType.UPLOAD:123 if self.permission == ArchivePermissionType.UPLOAD:
124 alsoProvides(self, IArchiveUploader)124 alsoProvides(self, IArchiveUploader)
diff --git a/lib/lp/testopenid/browser/configure.zcml b/lib/lp/testopenid/browser/configure.zcml
index 79f46c9..a1cc217 100644
--- a/lib/lp/testopenid/browser/configure.zcml
+++ b/lib/lp/testopenid/browser/configure.zcml
@@ -5,6 +5,7 @@
5<configure5<configure
6 xmlns="http://namespaces.zope.org/zope"6 xmlns="http://namespaces.zope.org/zope"
7 xmlns:browser="http://namespaces.zope.org/browser"7 xmlns:browser="http://namespaces.zope.org/browser"
8 xmlns:lp="http://namespaces.canonical.com/lp"
8 xmlns:i18n="http://namespaces.zope.org/i18n"9 xmlns:i18n="http://namespaces.zope.org/i18n"
9 i18n_domain="launchpad">10 i18n_domain="launchpad">
1011
@@ -43,7 +44,7 @@
43 name="+auth"44 name="+auth"
44 />45 />
4546
46 <browser:url47 <lp:url
47 for="..interfaces.server.ITestOpenIDPersistentIdentity"48 for="..interfaces.server.ITestOpenIDPersistentIdentity"
48 path_expression="string:${openid_identifier}"49 path_expression="string:${openid_identifier}"
49 parent_utility="..interfaces.server.ITestOpenIDApplication"50 parent_utility="..interfaces.server.ITestOpenIDApplication"
diff --git a/lib/lp/translations/browser/configure.zcml b/lib/lp/translations/browser/configure.zcml
index 61fcbc1..a96acd0 100644
--- a/lib/lp/translations/browser/configure.zcml
+++ b/lib/lp/translations/browser/configure.zcml
@@ -6,10 +6,10 @@
6 xmlns="http://namespaces.zope.org/zope"6 xmlns="http://namespaces.zope.org/zope"
7 xmlns:browser="http://namespaces.zope.org/browser"7 xmlns:browser="http://namespaces.zope.org/browser"
8 xmlns:i18n="http://namespaces.zope.org/i18n"8 xmlns:i18n="http://namespaces.zope.org/i18n"
9 xmlns:xmlrpc="http://namespaces.zope.org/xmlrpc"9 xmlns:lp="http://namespaces.canonical.com/lp"
10 i18n_domain="launchpad">10 i18n_domain="launchpad">
11<facet facet="translations">11<facet facet="translations">
12 <browser:url12 <lp:url
13 for="lp.translations.interfaces.translations.IRosettaApplication"13 for="lp.translations.interfaces.translations.IRosettaApplication"
14 path_expression="string:translations"14 path_expression="string:translations"
15 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot"/>15 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot"/>
@@ -68,7 +68,7 @@
68 <browser:defaultView68 <browser:defaultView
69 for="lp.translations.interfaces.translator.ITranslator"69 for="lp.translations.interfaces.translator.ITranslator"
70 name="+admin"/>70 name="+admin"/>
71 <browser:url71 <lp:url
72 for="lp.translations.interfaces.translator.ITranslator"72 for="lp.translations.interfaces.translator.ITranslator"
73 path_expression="string:${language/code}"73 path_expression="string:${language/code}"
74 attribute_to_parent="translationgroup"74 attribute_to_parent="translationgroup"
@@ -99,7 +99,7 @@
99 <browser:defaultView99 <browser:defaultView
100 for="lp.translations.interfaces.translationimportqueue.ITranslationImportQueueEntry"100 for="lp.translations.interfaces.translationimportqueue.ITranslationImportQueueEntry"
101 name="+index"/>101 name="+index"/>
102 <browser:url102 <lp:url
103 for="lp.translations.interfaces.translationimportqueue.ITranslationImportQueueEntry"103 for="lp.translations.interfaces.translationimportqueue.ITranslationImportQueueEntry"
104 path_expression="string:${id}"104 path_expression="string:${id}"
105 parent_utility="lp.translations.interfaces.translationimportqueue.ITranslationImportQueue"/>105 parent_utility="lp.translations.interfaces.translationimportqueue.ITranslationImportQueue"/>
@@ -115,7 +115,7 @@
115 name="+portlet-details"115 name="+portlet-details"
116 class="lp.translations.browser.translationimportqueue.TranslationImportQueueEntryView"116 class="lp.translations.browser.translationimportqueue.TranslationImportQueueEntryView"
117 template="../templates/translationimportqueueentry-portlet-details.pt"/>117 template="../templates/translationimportqueueentry-portlet-details.pt"/>
118 <browser:url118 <lp:url
119 for="lp.translations.interfaces.translationimportqueue.ITranslationImportQueue"119 for="lp.translations.interfaces.translationimportqueue.ITranslationImportQueue"
120 path_expression="string:+imports"120 path_expression="string:+imports"
121 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot"/>121 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot"/>
@@ -128,7 +128,7 @@
128 class="lp.translations.browser.translationimportqueue.TranslationImportQueueView"128 class="lp.translations.browser.translationimportqueue.TranslationImportQueueView"
129 permission="zope.Public"129 permission="zope.Public"
130 template="../templates/translationimportqueue-index.pt"/>130 template="../templates/translationimportqueue-index.pt"/>
131 <browser:url131 <lp:url
132 for="lp.translations.interfaces.distroserieslanguage.IDistroSeriesLanguage"132 for="lp.translations.interfaces.distroserieslanguage.IDistroSeriesLanguage"
133 path_expression="string:+lang/${language/code}"133 path_expression="string:+lang/${language/code}"
134 attribute_to_parent="distroseries"134 attribute_to_parent="distroseries"
@@ -156,7 +156,7 @@
156 module="lp.translations.browser.pofile"156 module="lp.translations.browser.pofile"
157 classes="157 classes="
158 POFileNavigation"/>158 POFileNavigation"/>
159 <browser:url159 <lp:url
160 for="lp.translations.interfaces.pofile.IPOFile"160 for="lp.translations.interfaces.pofile.IPOFile"
161 path_expression="language/code"161 path_expression="language/code"
162 attribute_to_parent="potemplate"162 attribute_to_parent="potemplate"
@@ -215,7 +215,7 @@
215 permission="zope.Public"215 permission="zope.Public"
216 template="../templates/pofile-filter.pt"216 template="../templates/pofile-filter.pt"
217 class="lp.translations.browser.pofile.POFileFilteredView"/>217 class="lp.translations.browser.pofile.POFileFilteredView"/>
218 <browser:url218 <lp:url
219 for="lp.translations.interfaces.productserieslanguage.IProductSeriesLanguage"219 for="lp.translations.interfaces.productserieslanguage.IProductSeriesLanguage"
220 path_expression="string:+lang/${language/code}"220 path_expression="string:+lang/${language/code}"
221 attribute_to_parent="parent"221 attribute_to_parent="parent"
@@ -252,7 +252,7 @@
252 classes="252 classes="
253 LanguageSetContextMenu253 LanguageSetContextMenu
254 LanguageNavigationMenu"/>254 LanguageNavigationMenu"/>
255 <browser:url255 <lp:url
256 for="lp.services.worlddata.interfaces.language.ILanguage"256 for="lp.services.worlddata.interfaces.language.ILanguage"
257 path_expression="code"257 path_expression="code"
258 parent_utility="lp.services.worlddata.interfaces.language.ILanguageSet"258 parent_utility="lp.services.worlddata.interfaces.language.ILanguageSet"
@@ -283,7 +283,7 @@
283 <browser:defaultView283 <browser:defaultView
284 for="lp.services.worlddata.interfaces.language.ILanguageSet"284 for="lp.services.worlddata.interfaces.language.ILanguageSet"
285 name="+index"/>285 name="+index"/>
286 <browser:url286 <lp:url
287 for="lp.services.worlddata.interfaces.language.ILanguageSet"287 for="lp.services.worlddata.interfaces.language.ILanguageSet"
288 path_expression="string:+languages"288 path_expression="string:+languages"
289 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot"289 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot"
@@ -362,10 +362,10 @@
362 <browser:menus362 <browser:menus
363 module="lp.translations.browser.potemplate"363 module="lp.translations.browser.potemplate"
364 classes="POTemplateMenu"/>364 classes="POTemplateMenu"/>
365 <browser:url365 <lp:url
366 for="lp.translations.interfaces.potemplate.IPOTemplateSubset"366 for="lp.translations.interfaces.potemplate.IPOTemplateSubset"
367 urldata="lp.translations.browser.potemplate.POTemplateSubsetURL"/>367 urldata="lp.translations.browser.potemplate.POTemplateSubsetURL"/>
368 <browser:url368 <lp:url
369 for="lp.translations.interfaces.potemplate.IPOTemplate"369 for="lp.translations.interfaces.potemplate.IPOTemplate"
370 urldata="lp.translations.browser.potemplate.POTemplateURL"/>370 urldata="lp.translations.browser.potemplate.POTemplateURL"/>
371 <browser:defaultView371 <browser:defaultView
@@ -385,7 +385,7 @@
385 <browser:defaultView385 <browser:defaultView
386 for="lp.translations.interfaces.translationgroup.ITranslationGroup"386 for="lp.translations.interfaces.translationgroup.ITranslationGroup"
387 name="+index"/>387 name="+index"/>
388 <browser:url388 <lp:url
389 for="lp.translations.interfaces.translationgroup.ITranslationGroup"389 for="lp.translations.interfaces.translationgroup.ITranslationGroup"
390 path_expression="name"390 path_expression="name"
391 rootsite="translations"391 rootsite="translations"
@@ -427,7 +427,7 @@
427 permission="launchpad.Edit"427 permission="launchpad.Edit"
428 name="+object-reassignment"428 name="+object-reassignment"
429 template="../../app/templates/object-reassignment.pt"/>429 template="../../app/templates/object-reassignment.pt"/>
430 <browser:url430 <lp:url
431 for="lp.translations.interfaces.translationgroup.ITranslationGroupSet"431 for="lp.translations.interfaces.translationgroup.ITranslationGroupSet"
432 path_expression="string:+groups"432 path_expression="string:+groups"
433 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot"433 parent_utility="lp.services.webapp.interfaces.ILaunchpadRoot"
@@ -447,7 +447,7 @@
447 permission="zope.Public"447 permission="zope.Public"
448 template="../templates/translationgroups-index.pt"448 template="../templates/translationgroups-index.pt"
449 name="+index"/>449 name="+index"/>
450 <browser:url450 <lp:url
451 for="lp.translations.interfaces.translationmessage.ITranslationMessage"451 for="lp.translations.interfaces.translationmessage.ITranslationMessage"
452 path_expression="string:${sequence}"452 path_expression="string:${sequence}"
453 attribute_to_parent="browser_pofile"453 attribute_to_parent="browser_pofile"
@@ -845,7 +845,7 @@
845 <browser:defaultView845 <browser:defaultView
846 for="lp.translations.interfaces.customlanguagecode.ICustomLanguageCode"846 for="lp.translations.interfaces.customlanguagecode.ICustomLanguageCode"
847 name="+index"/>847 name="+index"/>
848 <browser:url848 <lp:url
849 for="lp.translations.interfaces.customlanguagecode.ICustomLanguageCode"849 for="lp.translations.interfaces.customlanguagecode.ICustomLanguageCode"
850 path_expression="string:+customcode/${language_code}"850 path_expression="string:+customcode/${language_code}"
851 attribute_to_parent="translation_target"851 attribute_to_parent="translation_target"
@@ -884,7 +884,7 @@
884 <browser:defaultView884 <browser:defaultView
885 for="lp.translations.interfaces.translationtemplatesbuild.ITranslationTemplatesBuild"885 for="lp.translations.interfaces.translationtemplatesbuild.ITranslationTemplatesBuild"
886 name="+index"/>886 name="+index"/>
887 <browser:url887 <lp:url
888 for="lp.translations.interfaces.translationtemplatesbuild.ITranslationTemplatesBuild"888 for="lp.translations.interfaces.translationtemplatesbuild.ITranslationTemplatesBuild"
889 path_expression="string:+translation-templates-build/${id}"889 path_expression="string:+translation-templates-build/${id}"
890 attribute_to_parent="branch"/>890 attribute_to_parent="branch"/>

Subscribers

People subscribed via source and target branches

to status/vote changes: