Merge ~cjwatson/launchpad:oci-project-admin-ui into launchpad:master

Proposed by Colin Watson
Status: Merged
Approved by: Colin Watson
Approved revision: ac596fa21c0a4746e2f305fbadfd4bf50092bd90
Merge reported by: Otto Co-Pilot
Merged at revision: not available
Proposed branch: ~cjwatson/launchpad:oci-project-admin-ui
Merge into: launchpad:master
Diff against target: 185 lines (+97/-1)
5 files modified
lib/lp/registry/browser/configure.zcml (+7/-0)
lib/lp/registry/browser/distribution.py (+35/-1)
lib/lp/registry/browser/tests/distribution-views.txt (+49/-0)
lib/lp/registry/configure.zcml (+1/-0)
lib/lp/registry/templates/distribution-details.pt (+5/-0)
Reviewer Review Type Date Requested Status
Thiago F. Pappacena (community) Approve
Review via email: mp+382606@code.launchpad.net

Commit message

Add UI for editing Distribution.oci_project_admin

To post a comment you must log in.
Revision history for this message
Thiago F. Pappacena (pappacena) wrote :

LGTM

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/lib/lp/registry/browser/configure.zcml b/lib/lp/registry/browser/configure.zcml
2index a397a9b..2fdc177 100644
3--- a/lib/lp/registry/browser/configure.zcml
4+++ b/lib/lp/registry/browser/configure.zcml
5@@ -2258,6 +2258,13 @@
6 template="../../app/templates/generic-edit.pt"
7 />
8 <browser:page
9+ name="+select-oci-project-admins"
10+ for="lp.registry.interfaces.distribution.IDistribution"
11+ class="lp.registry.browser.distribution.DistributionChangeOCIProjectAdminView"
12+ permission="launchpad.Edit"
13+ template="../../app/templates/generic-edit.pt"
14+ />
15+ <browser:page
16 name="+pubconf"
17 for="lp.registry.interfaces.distribution.IDistribution"
18 class="lp.registry.browser.distribution.DistributionPublisherConfigView"
19diff --git a/lib/lp/registry/browser/distribution.py b/lib/lp/registry/browser/distribution.py
20index 5d13b7a..4b3b18c 100644
21--- a/lib/lp/registry/browser/distribution.py
22+++ b/lib/lp/registry/browser/distribution.py
23@@ -1,4 +1,4 @@
24-# Copyright 2009-2019 Canonical Ltd. This software is licensed under the
25+# Copyright 2009-2020 Canonical Ltd. This software is licensed under the
26 # GNU Affero General Public License version 3 (see the file LICENSE).
27
28 """Browser views for distributions."""
29@@ -13,6 +13,7 @@ __all__ = [
30 'DistributionArchivesView',
31 'DistributionChangeMembersView',
32 'DistributionChangeMirrorAdminView',
33+ 'DistributionChangeOCIProjectAdminView',
34 'DistributionCountryArchiveMirrorsView',
35 'DistributionDisabledMirrorsView',
36 'DistributionEditView',
37@@ -328,6 +329,7 @@ class DistributionOverviewMenu(ApplicationMenu, DistributionLinksMixin):
38 'search',
39 'members',
40 'mirror_admin',
41+ 'oci_project_admin',
42 'reassign',
43 'addseries',
44 'series',
45@@ -416,6 +418,11 @@ class DistributionOverviewMenu(ApplicationMenu, DistributionLinksMixin):
46 enabled = self.context.supports_mirrors
47 return Link('+selectmirroradmins', text, enabled=enabled, icon='edit')
48
49+ @enabled_with_permission('launchpad.Edit')
50+ def oci_project_admin(self):
51+ text = 'Change OCI project admins'
52+ return Link('+select-oci-project-admins', text, icon='edit')
53+
54 def search(self):
55 text = 'Search packages'
56 return Link('+search', text, icon='search')
57@@ -684,6 +691,21 @@ class DistributionView(PillarViewMixin, HasAnnouncementsView, FeedsMixin):
58 edit_view='+selectmirroradmins', null_display_value=empty_value,
59 step_title='Select a new mirror administrator')
60
61+ @property
62+ def oci_project_admin_widget(self):
63+ if canWrite(self.context, 'oci_project_admin'):
64+ empty_value = ' Specify an OCI project administrator'
65+ else:
66+ empty_value = 'None'
67+ return InlinePersonEditPickerWidget(
68+ self.context, IDistribution['oci_project_admin'],
69+ format_link(
70+ self.context.oci_project_admin, empty_value=empty_value),
71+ header='Change the OCI project administrator',
72+ edit_view='+select-oci-project-admins',
73+ null_display_value=empty_value,
74+ step_title='Select a new OCI project administrator')
75+
76 def linkedMilestonesForSeries(self, series):
77 """Return a string of linkified milestones in the series."""
78 # Listify to remove repeated queries.
79@@ -1056,6 +1078,18 @@ class DistributionChangeMirrorAdminView(RegistryEditFormView):
80 return "Change the %s mirror administrator" % self.context.displayname
81
82
83+class DistributionChangeOCIProjectAdminView(RegistryEditFormView):
84+ """A view to change the OCI project administrator."""
85+ schema = IDistribution
86+ field_names = ['oci_project_admin']
87+
88+ @property
89+ def label(self):
90+ """See `LaunchpadFormView`."""
91+ return "Change the %s OCI project administrator" % (
92+ self.context.displayname)
93+
94+
95 class DistributionChangeMembersView(RegistryEditFormView):
96 """A view to change the members team."""
97 schema = IDistribution
98diff --git a/lib/lp/registry/browser/tests/distribution-views.txt b/lib/lp/registry/browser/tests/distribution-views.txt
99index 5fdb281..810f118 100644
100--- a/lib/lp/registry/browser/tests/distribution-views.txt
101+++ b/lib/lp/registry/browser/tests/distribution-views.txt
102@@ -210,6 +210,55 @@ Only admins and owners can access the view.
103 False
104
105
106+Changing a distribution OCI project administrator
107+-------------------------------------------------
108+
109+The +select-oci-project-admins view allows the owner or admin to change the
110+OCI project administrator.
111+
112+ >>> login("admin@canonical.com")
113+ >>> view = create_view(distribution, '+select-oci-project-admins')
114+ >>> print(view.label)
115+ Change the YoUbuntu OCI project administrator
116+
117+ >>> print(view.page_title)
118+ Change the YoUbuntu OCI project administrator
119+
120+ >>> print(view.cancel_url)
121+ http://launchpad.test/youbuntu
122+
123+The view accepts the oci_project_admin field.
124+
125+ >>> print(distribution.oci_project_admin)
126+ None
127+
128+ >>> view.field_names
129+ ['oci_project_admin']
130+
131+ >>> form = {
132+ ... 'field.oci_project_admin': 'no-priv',
133+ ... 'field.actions.change': 'Change',
134+ ... }
135+ >>> view = create_initialized_view(
136+ ... distribution, '+select-oci-project-admins', form=form)
137+ >>> view.errors
138+ []
139+ >>> print(view.next_url)
140+ http://launchpad.test/youbuntu
141+
142+ >>> print(distribution.oci_project_admin.name)
143+ no-priv
144+
145+Only admins and owners can access the view.
146+
147+ >>> check_permission('launchpad.Edit', view)
148+ True
149+
150+ >>> login('no-priv@canonical.com')
151+ >>> check_permission('launchpad.Edit', view)
152+ False
153+
154+
155 Changing a distribution members team
156 ------------------------------------
157
158diff --git a/lib/lp/registry/configure.zcml b/lib/lp/registry/configure.zcml
159index f3bcd9f..1c73f4b 100644
160--- a/lib/lp/registry/configure.zcml
161+++ b/lib/lp/registry/configure.zcml
162@@ -1831,6 +1831,7 @@
163 members
164 mirror_admin
165 mugshot
166+ oci_project_admin
167 official_answers
168 official_blueprints
169 official_malone
170diff --git a/lib/lp/registry/templates/distribution-details.pt b/lib/lp/registry/templates/distribution-details.pt
171index 955e52c..1d2b0cf 100644
172--- a/lib/lp/registry/templates/distribution-details.pt
173+++ b/lib/lp/registry/templates/distribution-details.pt
174@@ -26,6 +26,11 @@
175 <dt>Mirror admins:</dt>
176 <dd tal:content="structure view/mirror_admin_widget" />
177 </dl>
178+
179+ <dl id="oci-project-admins">
180+ <dt>OCI project admins:</dt>
181+ <dd tal:content="structure view/oci_project_admin_widget" />
182+ </dl>
183 </div>
184
185 <dl id="uploaders" style="clear:left">

Subscribers

People subscribed via source and target branches

to status/vote changes: