1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
|
===================
Blueprints Overview
===================
Launchpad makes it easy for users to see the blueprints filed against any
product or distribution. There's a page where users can find the latest
blueprints, and also other pages where users can browse through complete
lists of blueprints for a given product or distribution.
A number of tests in this need a product with blueprints enabled, so we'll
enable them on firefox.
>>> from zope.component import getUtility
>>> from lp.app.enums import ServiceUsage
>>> from lp.registry.interfaces.product import IProductSet
>>> login('admin@canonical.com')
>>> firefox = getUtility(IProductSet).getByName('firefox')
>>> firefox.blueprints_usage = ServiceUsage.LAUNCHPAD
>>> transaction.commit()
>>> logout()
Viewing lists of blueprints
===========================
Launchpad provides a dedicated page where users can browse through all the
available blueprints for any product or distribution. Users can reach this
page from any context by following the "Blueprints" tab.
Viewing blueprints targeted to a product
----------------------------------------
Let's use the Mozilla Firefox product as an example. Users can see the list
of blueprints attached to Mozilla Firefox by following the "Blueprints" tab:
>>> user_browser.open('http://launchpad.dev/firefox')
>>> user_browser.getLink('Blueprints').click()
>>> main = find_main_content(user_browser.contents)
>>> print extract_text(main).encode('ascii', 'backslashreplace')
Blueprints for Mozilla Firefox...
Priority...Blueprint...Design ...Delivery ...
High ...svg-support ...Approved...Beta Available...
Viewing blueprints targeted to a product series
-----------------------------------------------
It's possible to narrow down the list of blueprints to show only those
targeted to a given product series. Let's pick the Mozilla Firefox 1.0
series as an example. To begin with, there are no blueprints listed on
the blueprints page for 1.0:
>>> user_browser.open('http://launchpad.dev/firefox/1.0')
>>> user_browser.getLink('Blueprints').click()
>>> main = find_main_content(user_browser.contents)
>>> print extract_text(main).encode('ascii', 'backslashreplace')
Blueprints for 1.0
...
Launchpad lets projects track the features they intend to implement...
Let's target an existing Mozilla Firefox blueprint to the 1.0 series:
>>> browser = admin_browser
>>> browser.open('http://launchpad.dev/firefox/+specs')
>>> browser.getLink('svg-support').click()
>>> print browser.title
Support Native SVG Objects...
>>> browser.getLink('Propose as goal').click()
>>> main = find_main_content(browser.contents)
>>> print extract_text(main).encode('ascii', 'backslashreplace')
Target to a product series
Mozilla Firefox
...
Support Native SVG Objects
...
>>> series = browser.getControl('Series Goal')
>>> series.displayValue = ['firefox 1.0']
>>> browser.getControl('Continue').click()
>>> main = find_main_content(browser.contents)
>>> print extract_text(find_tag_by_id(main, 'series-goal'))
Series goal: Accepted for 1.0...
We'll also target the blueprint to a milestone. First we'll create a milestone:
>>> browser.open('http://launchpad.dev/firefox/1.0')
>>> browser.getLink('Create milestone').click()
>>> browser.getControl('Name').value = '1.0.9'
>>> browser.getControl('Date Targeted').value = '2050-05-05'
>>> browser.getControl('Summary').value = 'First ever milestone!'
>>> browser.getControl('Register Milestone').click()
Now we'll target our chosen blueprint to the new milestone:
>>> browser.open('http://launchpad.dev/firefox/+specs')
>>> browser.getLink('svg-support').click()
>>> browser.getLink('Target milestone').click()
>>> main = find_main_content(browser.contents)
>>> print extract_text(main).encode('ascii', 'backslashreplace')
Target to a milestone
...
Support Native SVG Objects
Select the milestone of Mozilla Firefox in which you would like
this feature to be implemented...
>>> milestones = browser.getControl('Milestone')
>>> milestones.displayValue = ['Mozilla Firefox 1.0.9']
>>> browser.getControl('Change').click()
>>> main = find_main_content(browser.contents)
>>> print extract_text(find_tag_by_id(main, 'milestone-target'))
Milestone target:...1.0.9...
Now the blueprint listing for the 1.0 series includes an entry for our chosen
blueprint. It also lists the milestone to which the blueprint is targeted:
>>> user_browser.open('http://launchpad.dev/firefox/1.0')
>>> user_browser.getLink('Blueprints').click()
>>> main = find_main_content(user_browser.contents)
>>> print extract_text(main).encode('ascii', 'backslashreplace')
Blueprints for 1.0...
Priority...Blueprint...Design ...Delivery...Assignee...Milestone...
High ...svg-support ...Approved...Beta ...Carlos ...1.0.9 ...
It's possible to navigate to the milestone directly:
>>> user_browser.getLink('1.0.9').click()
>>> print user_browser.title
1.0.9 : Mozilla Firefox
Viewing blueprints targeted to a distribution
---------------------------------------------
Let's use the Ubuntu distribution as an example. Users can see the list of
blueprints attached to Ubuntu Linux by following the "Blueprints" tab:
>>> user_browser.open('http://launchpad.dev/ubuntu')
>>> user_browser.getLink('Blueprints').click()
>>> main = find_main_content(user_browser.contents)
>>> print extract_text(main).encode('ascii', 'backslashreplace')
Blueprints for Ubuntu...
Priority ...Blueprint ...Design ...Delivery...
Undefined...media-integrity-check...Discussion...Unknown
Viewing blueprints targeted to a distribution series
----------------------------------------------------
As before, it's possible to narrow down the list of blueprints to show only
those targeted to a given distribution series. Let's pick the Grumpy Groundhog
series as an example. To begin with, there are no blueprints listed on the
blueprints page for Grumpy:
>>> user_browser.open('http://launchpad.dev/ubuntu/grumpy')
>>> user_browser.getLink('Blueprints').click()
>>> main = find_main_content(user_browser.contents)
>>> print extract_text(main).encode('ascii', 'backslashreplace')
Blueprints for Grumpy
...
Launchpad lets projects track the features they intend to implement...
Let's target an existing Ubuntu blueprint to the Grumpy series:
>>> browser = admin_browser
>>> browser.open('http://launchpad.dev/ubuntu/+specs')
>>> browser.getLink('media-integrity-check').click()
>>> main = find_main_content(browser.contents)
>>> print browser.title
CD Media Integrity Check...
>>> browser.getLink('Propose as goal').click()
>>> main = find_main_content(browser.contents)
>>> print extract_text(main).encode('ascii', 'backslashreplace')
Target to a distribution series
Ubuntu
...
CD Media Integrity Check
...
>>> series = browser.getControl('Series Goal')
>>> series.displayValue = ['ubuntu grumpy']
>>> browser.getControl('Continue').click()
>>> main = find_main_content(browser.contents)
>>> print extract_text(find_tag_by_id(browser.contents, 'series-goal'))
Series goal: Accepted for grumpy...
We'll also target the blueprint to a milestone. First we'll create a milestone:
>>> browser.open('http://launchpad.dev/ubuntu/grumpy/')
>>> browser.getLink('Create milestone').click()
>>> browser.getControl('Name').value = 'drift-1'
>>> browser.getControl('Date Targeted').value = '2050-05-05'
>>> browser.getControl('Summary').value = 'First drift of groundhogs!'
>>> browser.getControl('Register Milestone').click()
Now we'll target our chosen blueprint to the new milestone:
>>> browser.open('http://launchpad.dev/ubuntu/+specs')
>>> browser.getLink('media-integrity-check').click()
>>> browser.getLink('Target milestone').click()
>>> print extract_text(find_main_content(browser.contents))
Target to a milestone
...
CD Media Integrity Check
Select the milestone of Ubuntu in which you would like this feature
to be implemented...
>>> milestones = browser.getControl('Milestone')
>>> milestones.displayValue = ['Ubuntu drift-1']
>>> browser.getControl('Change').click()
>>> print extract_text(
... find_tag_by_id(browser.contents, 'milestone-target'))
Milestone target: drift-1
Finally, the blueprint listing for Grumpy includes an entry for our chosen
blueprint. It also lists the milestone to which the blueprint is targeted:
>>> user_browser.open('http://launchpad.dev/ubuntu/grumpy')
>>> user_browser.getLink('Blueprints').click()
>>> main = find_main_content(user_browser.contents)
>>> print extract_text(main).encode('ascii', 'backslashreplace')
Blueprints for Grumpy...
Priority ...Blueprint ...Design ...Delivery...Milestone...
Undefined...media-integrity-check...Discussion...Unknown ...drift-1 ...
It's possible to navigate to the milestone directly:
>>> user_browser.getLink('drift-1').click()
>>> print user_browser.title
drift-1 : Ubuntu
|