Merge ~cjwatson/launchpad:lazr.restful-0.23.0 into launchpad:master

Proposed by Colin Watson
Status: Merged
Approved by: Colin Watson
Approved revision: 51351dd06e4aaca0e6332311de783deed686f420
Merge reported by: Otto Co-Pilot
Merged at revision: not available
Proposed branch: ~cjwatson/launchpad:lazr.restful-0.23.0
Merge into: launchpad:master
Diff against target: 3415 lines (+1030/-1030)
26 files modified
constraints.txt (+1/-1)
lib/lp/answers/stories/webservice.txt (+24/-24)
lib/lp/bugs/stories/webservice/xx-bug-tracker.txt (+24/-24)
lib/lp/bugs/stories/webservice/xx-bug.txt (+260/-260)
lib/lp/code/stories/webservice/xx-branch-links.txt (+5/-5)
lib/lp/code/stories/webservice/xx-branch.txt (+24/-24)
lib/lp/code/stories/webservice/xx-branchmergeproposal.txt (+81/-81)
lib/lp/code/stories/webservice/xx-branchsubscription.txt (+18/-18)
lib/lp/registry/stories/webservice/xx-distribution-mirror.txt (+49/-49)
lib/lp/registry/stories/webservice/xx-distribution.txt (+40/-40)
lib/lp/registry/stories/webservice/xx-distroseries.txt (+22/-22)
lib/lp/registry/stories/webservice/xx-person.txt (+107/-107)
lib/lp/registry/stories/webservice/xx-project-registry.txt (+88/-88)
lib/lp/registry/stories/webservice/xx-source-package.txt (+6/-6)
lib/lp/registry/stories/webservice/xx-structuralsubscription.txt (+24/-24)
lib/lp/services/worlddata/stories/webservice/xx-country.txt (+6/-6)
lib/lp/soyuz/stories/webservice/xx-archive-commercial.txt (+14/-14)
lib/lp/soyuz/stories/webservice/xx-archive.txt (+91/-91)
lib/lp/soyuz/stories/webservice/xx-binary-package-publishing.txt (+28/-28)
lib/lp/soyuz/stories/webservice/xx-builds.txt (+50/-50)
lib/lp/soyuz/stories/webservice/xx-distroarchseries.txt (+22/-22)
lib/lp/soyuz/stories/webservice/xx-hasbuildrecords.txt (+2/-2)
lib/lp/soyuz/stories/webservice/xx-packageset.txt (+10/-10)
lib/lp/soyuz/stories/webservice/xx-packageupload.txt (+9/-9)
lib/lp/soyuz/stories/webservice/xx-source-package-publishing.txt (+15/-15)
lib/lp/translations/stories/webservice/xx-potemplate.txt (+10/-10)
Reviewer Review Type Date Requested Status
Ioana Lasc (community) Approve
Review via email: mp+391449@code.launchpad.net

Commit message

Upgrade to lazr.restful 0.23.0

Description of the change

A number of pagetests need to change to account for the pretty-printing changes in https://code.launchpad.net/~cjwatson/lazr.restful/py3-pretty-print-helpers/+merge/390200, but all these changes are just dropping the "u" prefix from string literals.

Dependencies MP: https://code.launchpad.net/~cjwatson/lp-source-dependencies/+git/lp-source-dependencies/+merge/391446

To post a comment you must log in.
Revision history for this message
Ioana Lasc (ilasc) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/constraints.txt b/constraints.txt
2index 0bebad0..e567e25 100644
3--- a/constraints.txt
4+++ b/constraints.txt
5@@ -228,7 +228,7 @@ lazr.delegates==2.0.4
6 lazr.enum==1.2
7 lazr.jobrunner==0.16
8 lazr.lifecycle==1.2
9-lazr.restful==0.22.2
10+lazr.restful==0.23.0
11 lazr.restfulclient==0.14.3
12 lazr.sshserver==0.1.10
13 lazr.uri==1.0.5
14diff --git a/lib/lp/answers/stories/webservice.txt b/lib/lp/answers/stories/webservice.txt
15index 84fb53a..852e915 100644
16--- a/lib/lp/answers/stories/webservice.txt
17+++ b/lib/lp/answers/stories/webservice.txt
18@@ -201,23 +201,23 @@ a link to retrieve the question's messages.
19 answer_link: None
20 answerer_link: None
21 assignee_link: None
22- date_created: u'20...+00:00'
23+ date_created: '20...+00:00'
24 date_due: None
25- date_last_query: u'20...+00:00'
26- date_last_response: u'20...+00:00'
27+ date_last_query: '20...+00:00'
28+ date_last_response: '20...+00:00'
29 date_solved: None
30- description: u'description...'
31+ description: 'description...'
32 id: ...
33- language_link: u'http://api.launchpad.test/devel/+languages/en'
34+ language_link: 'http://api.launchpad.test/devel/+languages/en'
35 messages_collection_link:
36- u'http://api.launchpad.test/devel/my-project/+question/.../messages'
37- owner_link: u'http://api.launchpad.test/devel/~asker'
38- resource_type_link: u'http://api.launchpad.test/devel/#question'
39- self_link: u'http://api.launchpad.test/devel/my-project/+question/...'
40- status: u'Answered'
41- target_link: u'http://api.launchpad.test/devel/my-project'
42- title: u'Q 1 great'
43- web_link: u'http://answers.launchpad.test/my-project/+question/...'
44+ 'http://api.launchpad.test/devel/my-project/+question/.../messages'
45+ owner_link: 'http://api.launchpad.test/devel/~asker'
46+ resource_type_link: 'http://api.launchpad.test/devel/#question'
47+ self_link: 'http://api.launchpad.test/devel/my-project/+question/...'
48+ status: 'Answered'
49+ target_link: 'http://api.launchpad.test/devel/my-project'
50+ title: 'Q 1 great'
51+ web_link: 'http://answers.launchpad.test/my-project/+question/...'
52
53
54 Question messages
55@@ -230,19 +230,19 @@ that indicate how the message changed the question.
56 ... question_1['messages_collection_link'],
57 ... api_version='devel').jsonBody()
58 >>> pprint_entry(messages['entries'][0])
59- action: u'Answer'
60- bug_attachments_collection_link: u'...'
61- content: u'This is the answer'
62- date_created: u'20...+00:00'
63+ action: 'Answer'
64+ bug_attachments_collection_link: '...'
65+ content: 'This is the answer'
66+ date_created: '20...+00:00'
67 index: 1
68- new_status: u'Answered'
69- owner_link: u'http://api.launchpad.test/devel/~contact'
70+ new_status: 'Answered'
71+ owner_link: 'http://api.launchpad.test/devel/~contact'
72 parent_link: None
73- question_link: u'http://api.launchpad.test/devel/my-project/+question/...'
74- resource_type_link: u'http://api.launchpad.test/devel/#question_message'
75+ question_link: 'http://api.launchpad.test/devel/my-project/+question/...'
76+ resource_type_link: 'http://api.launchpad.test/devel/#question_message'
77 self_link:
78- u'http://api.launchpad.test/devel/my-project/+question/.../messages/1'
79- subject: u'Re: Q 1 great'
80+ 'http://api.launchpad.test/devel/my-project/+question/.../messages/1'
81+ subject: 'Re: Q 1 great'
82 visible: True
83 web_link:
84- u'http://answers.launchpad.test/my-project/+question/.../messages/1'
85+ 'http://answers.launchpad.test/my-project/+question/.../messages/1'
86diff --git a/lib/lp/bugs/stories/webservice/xx-bug-tracker.txt b/lib/lp/bugs/stories/webservice/xx-bug-tracker.txt
87index 0983392..5914d8b 100644
88--- a/lib/lp/bugs/stories/webservice/xx-bug-tracker.txt
89+++ b/lib/lp/bugs/stories/webservice/xx-bug-tracker.txt
90@@ -10,25 +10,25 @@ any user can access.
91 >>> bug_tracker_collection = anon_webservice.get(
92 ... '/bugs/bugtrackers').jsonBody()
93 >>> pprint_collection(bug_tracker_collection)
94- next_collection_link: u'http://.../bugs/bugtrackers?ws.size=5&memo=5&ws.start=5'
95- resource_type_link: u'http://.../#bug_trackers'
96+ next_collection_link: 'http://.../bugs/bugtrackers?ws.size=5&memo=5&ws.start=5'
97+ resource_type_link: 'http://.../#bug_trackers'
98 start: 0
99 total_size: 8
100 ---
101 active: True
102- base_url: u'https://bugzilla.mozilla.org/'
103+ base_url: 'https://bugzilla.mozilla.org/'
104 base_url_aliases: []
105- bug_tracker_type: u'Bugzilla'
106- contact_details: u'Carrier pigeon only'
107+ bug_tracker_type: 'Bugzilla'
108+ contact_details: 'Carrier pigeon only'
109 has_lp_plugin: None
110- name: u'mozilla.org'
111- registrant_link: u'http://.../~name12'
112- resource_type_link: u'http://.../#bug_tracker'
113- self_link: u'http://.../bugs/bugtrackers/mozilla.org'
114- summary: u'The Mozilla.org bug tracker is the grand-daddy of ...'
115- title: u'The Mozilla.org Bug Tracker'
116- watches_collection_link: u'http:.../bugs/bugtrackers/mozilla.org/watches'
117- web_link: u'http://bugs.launchpad.test/bugs/bugtrackers/mozilla.org'
118+ name: 'mozilla.org'
119+ registrant_link: 'http://.../~name12'
120+ resource_type_link: 'http://.../#bug_tracker'
121+ self_link: 'http://.../bugs/bugtrackers/mozilla.org'
122+ summary: 'The Mozilla.org bug tracker is the grand-daddy of ...'
123+ title: 'The Mozilla.org Bug Tracker'
124+ watches_collection_link: 'http:.../bugs/bugtrackers/mozilla.org/watches'
125+ web_link: 'http://bugs.launchpad.test/bugs/bugtrackers/mozilla.org'
126 --- ...
127
128 A bug tracker can be retrieved using the bug tracker collection's
129@@ -64,16 +64,16 @@ logged in user can call to create a bug tracker.
130 >>> bug_tracker = webservice.get('/bugs/bugtrackers/wombat').jsonBody()
131 >>> pprint_entry(bug_tracker)
132 active: True
133- base_url: u'http://wombat.zz/'
134+ base_url: 'http://wombat.zz/'
135 base_url_aliases: []
136- bug_tracker_type: u'Bugzilla'
137- contact_details: u'big-nose@wombat.zz'
138+ bug_tracker_type: 'Bugzilla'
139+ contact_details: 'big-nose@wombat.zz'
140 has_lp_plugin: False
141- name: u'wombat'
142- registrant_link: u'http://.../~salgado'
143- resource_type_link: u'http://.../#bug_tracker'
144- self_link: u'http://.../bugs/bugtrackers/wombat'
145- summary: u'Wombat summary'
146- title: u'Wombat title'
147- watches_collection_link: u'http://.../bugs/bugtrackers/wombat/watches'
148- web_link: u'http://bugs.launchpad.test/bugs/bugtrackers/wombat'
149+ name: 'wombat'
150+ registrant_link: 'http://.../~salgado'
151+ resource_type_link: 'http://.../#bug_tracker'
152+ self_link: 'http://.../bugs/bugtrackers/wombat'
153+ summary: 'Wombat summary'
154+ title: 'Wombat title'
155+ watches_collection_link: 'http://.../bugs/bugtrackers/wombat/watches'
156+ web_link: 'http://bugs.launchpad.test/bugs/bugtrackers/wombat'
157diff --git a/lib/lp/bugs/stories/webservice/xx-bug.txt b/lib/lp/bugs/stories/webservice/xx-bug.txt
158index a8f5d44..66250c7 100644
159--- a/lib/lp/bugs/stories/webservice/xx-bug.txt
160+++ b/lib/lp/bugs/stories/webservice/xx-bug.txt
161@@ -14,44 +14,44 @@ Bugs are indexed by number beneath the top-level collection.
162 ... pprint_collection, pprint_entry)
163 >>> bug_one = webservice.get("/bugs/1").jsonBody()
164 >>> pprint_entry(bug_one)
165- activity_collection_link: u'http://.../bugs/1/activity'
166- attachments_collection_link: u'http://.../bugs/1/attachments'
167- bug_tasks_collection_link: u'http://.../bugs/1/bug_tasks'
168- bug_watches_collection_link: u'http://.../bugs/1/bug_watches'
169+ activity_collection_link: 'http://.../bugs/1/activity'
170+ attachments_collection_link: 'http://.../bugs/1/attachments'
171+ bug_tasks_collection_link: 'http://.../bugs/1/bug_tasks'
172+ bug_watches_collection_link: 'http://.../bugs/1/bug_watches'
173 can_expire: False
174- cves_collection_link: u'http://.../bugs/1/cves'
175- date_created: u'2004-01-01T20:58:04.553583+00:00'
176+ cves_collection_link: 'http://.../bugs/1/cves'
177+ date_created: '2004-01-01T20:58:04.553583+00:00'
178 date_last_message: None
179- date_last_updated: u'2006-05-19T06:37:40.344941+00:00'
180+ date_last_updated: '2006-05-19T06:37:40.344941+00:00'
181 date_made_private: None
182- description: u'Firefox needs to support embedded SVG...'
183+ description: 'Firefox needs to support embedded SVG...'
184 duplicate_of_link: None
185- duplicates_collection_link: u'http://.../bugs/1/duplicates'
186+ duplicates_collection_link: 'http://.../bugs/1/duplicates'
187 heat: 0
188 id: 1
189- information_type: u'Public'
190+ information_type: 'Public'
191 latest_patch_uploaded: None
192- linked_branches_collection_link: u'http://.../bugs/1/linked_branches'
193+ linked_branches_collection_link: 'http://.../bugs/1/linked_branches'
194 message_count: 2
195- messages_collection_link: u'http://.../bugs/1/messages'
196+ messages_collection_link: 'http://.../bugs/1/messages'
197 name: None
198 number_of_duplicates: 0
199 other_users_affected_count_with_dupes: 0
200- owner_link: u'http://.../~name12'
201+ owner_link: 'http://.../~name12'
202 private: False
203- resource_type_link: u'http://.../#bug'
204+ resource_type_link: 'http://.../#bug'
205 security_related: False
206- self_link: u'http://.../bugs/1'
207- subscriptions_collection_link: u'http://.../bugs/1/subscriptions'
208+ self_link: 'http://.../bugs/1'
209+ subscriptions_collection_link: 'http://.../bugs/1/subscriptions'
210 tags: []
211- title: u'Firefox does not support SVG'
212- users_affected_collection_link: u'http://.../bugs/1/users_affected'
213+ title: 'Firefox does not support SVG'
214+ users_affected_collection_link: 'http://.../bugs/1/users_affected'
215 users_affected_count: 0
216 users_affected_count_with_dupes: 0
217- users_affected_with_dupes_collection_link: u'http://.../bugs/1/users_affected_with_dupes'
218- users_unaffected_collection_link: u'http://.../bugs/1/users_unaffected'
219+ users_affected_with_dupes_collection_link: 'http://.../bugs/1/users_affected_with_dupes'
220+ users_unaffected_collection_link: 'http://.../bugs/1/users_unaffected'
221 users_unaffected_count: 0
222- web_link: u'http://bugs.../bugs/1'
223+ web_link: 'http://bugs.../bugs/1'
224 who_made_private_link: None
225
226 Bugs have relationships to other bugs, like "duplicate_of".
227@@ -231,15 +231,15 @@ Each bug has a collection of messages.
228 >>> messages = webservice.get("/bugs/5/messages").jsonBody()['entries']
229 >>> pprint_entry(messages[0])
230 bug_attachments_collection_link:
231- u'http://.../firefox/+bug/5/comments/0/bug_attachments'
232- content: u'All ways of downloading firefox should provide...'
233- date_created: u'2005-01-14T17:27:03.702622+00:00'
234- owner_link: u'http://.../~name12'
235+ 'http://.../firefox/+bug/5/comments/0/bug_attachments'
236+ content: 'All ways of downloading firefox should provide...'
237+ date_created: '2005-01-14T17:27:03.702622+00:00'
238+ owner_link: 'http://.../~name12'
239 parent_link: None
240- resource_type_link: u'http://.../#message'
241- self_link: u'http://.../firefox/+bug/5/comments/0'
242- subject: u'Firefox install instructions should be complete'
243- web_link: u'http://bugs.../firefox/+bug/5/comments/0'
244+ resource_type_link: 'http://.../#message'
245+ self_link: 'http://.../firefox/+bug/5/comments/0'
246+ subject: 'Firefox install instructions should be complete'
247+ web_link: 'http://bugs.../firefox/+bug/5/comments/0'
248
249 The messages are stored beneath the bug-specific collection. Their
250 URLs are based on their position with respect to the
251@@ -279,12 +279,12 @@ We can add a new message to a bug by calling the newMessage method.
252
253 >>> pprint_entry(webservice.get("/firefox/+bug/5/comments/1").jsonBody())
254 bug_attachments_collection_link: ...
255- content: u'This is a new message added through the webservice API.'
256+ content: 'This is a new message added through the webservice API.'
257 ...
258- resource_type_link: u'http://api.launchpad.test/beta/#message'
259- self_link: u'http://api.launchpad.test/beta/firefox/+bug/5/comments/1'
260- subject: u'A new message'
261- web_link: u'...'
262+ resource_type_link: 'http://api.launchpad.test/beta/#message'
263+ self_link: 'http://api.launchpad.test/beta/firefox/+bug/5/comments/1'
264+ subject: 'A new message'
265+ web_link: '...'
266
267 We don't have to submit a subject when we add a new message.
268
269@@ -299,11 +299,11 @@ We don't have to submit a subject when we add a new message.
270
271 >>> pprint_entry(webservice.get("/firefox/+bug/5/comments/2").jsonBody())
272 bug_attachments_collection_link: ...
273- content: u'This is a new message with no subject.'
274+ content: 'This is a new message with no subject.'
275 ...
276- self_link: u'http://api.launchpad.test/beta/firefox/+bug/5/comments/2'
277- subject: u'Re: Firefox install instructions should be complete'
278- web_link: u'...'
279+ self_link: 'http://api.launchpad.test/beta/firefox/+bug/5/comments/2'
280+ subject: 'Re: Firefox install instructions should be complete'
281+ web_link: '...'
282
283
284 Bug tasks
285@@ -320,14 +320,14 @@ data in a bug task is derived from the bug.
286
287 >>> pprint_entry(bug_one_bugtasks[0])
288 assignee_link: None
289- bug_link: u'http://.../bugs/1'
290- bug_target_display_name: u'mozilla-firefox (Debian)'
291- bug_target_name: u'mozilla-firefox (Debian)'
292- bug_watch_link: u'http://.../bugs/1/+watch/8'
293- date_assigned: u'2005-01-04T11:07:20.584746+00:00'
294+ bug_link: 'http://.../bugs/1'
295+ bug_target_display_name: 'mozilla-firefox (Debian)'
296+ bug_target_name: 'mozilla-firefox (Debian)'
297+ bug_watch_link: 'http://.../bugs/1/+watch/8'
298+ date_assigned: '2005-01-04T11:07:20.584746+00:00'
299 date_closed: None
300 date_confirmed: None
301- date_created: u'2004-01-04T03:49:22.790240+00:00'
302+ date_created: '2004-01-04T03:49:22.790240+00:00'
303 date_fix_committed: None
304 date_fix_released: None
305 date_in_progress: None
306@@ -335,18 +335,18 @@ data in a bug task is derived from the bug.
307 date_left_closed: None
308 date_left_new: None
309 date_triaged: None
310- importance: u'Low'
311+ importance: 'Low'
312 is_complete: False
313 milestone_link: None
314- owner_link: u'http://.../~name12'
315+ owner_link: 'http://.../~name12'
316 related_tasks_collection_link:
317- u'http://api.../debian/+source/mozilla-firefox/+bug/1/related_tasks'
318- resource_type_link: u'http://.../#bug_task'
319- self_link: u'http://api.../debian/+source/mozilla-firefox/+bug/1'
320- status: u'Confirmed'
321- target_link: u'http://api.../debian/+source/mozilla-firefox'
322- title: u'Bug #1 in mozilla-firefox (Debian): "Firefox does not support SVG"'
323- web_link: u'http://bugs.../debian/+source/mozilla-firefox/+bug/1'
324+ 'http://api.../debian/+source/mozilla-firefox/+bug/1/related_tasks'
325+ resource_type_link: 'http://.../#bug_task'
326+ self_link: 'http://api.../debian/+source/mozilla-firefox/+bug/1'
327+ status: 'Confirmed'
328+ target_link: 'http://api.../debian/+source/mozilla-firefox'
329+ title: 'Bug #1 in mozilla-firefox (Debian): "Firefox does not support SVG"'
330+ web_link: 'http://bugs.../debian/+source/mozilla-firefox/+bug/1'
331
332 The collection of bug tasks is not exposed as a resource:
333
334@@ -651,17 +651,17 @@ But John, an unprivileged user, wants it fixed in Fooix 0.1.1.
335 start: 0
336 total_size: 1
337 ---
338- bug_link: u'http://.../bugs/...'
339- date_created: u'...'
340+ bug_link: 'http://.../bugs/...'
341+ date_created: '...'
342 date_decided: None
343 decider_link: None
344 distroseries_link: None
345- owner_link: u'http://.../~john'
346- productseries_link: u'http://.../fooix/0.1'
347- resource_type_link: u'http://.../#bug_nomination'
348- self_link: u'http://.../bugs/.../nominations/...'
349- status: u'Nominated'
350- target_link: u'http://.../fooix/0.1'
351+ owner_link: 'http://.../~john'
352+ productseries_link: 'http://.../fooix/0.1'
353+ resource_type_link: 'http://.../#bug_nomination'
354+ self_link: 'http://.../bugs/.../nominations/...'
355+ status: 'Nominated'
356+ target_link: 'http://.../fooix/0.1'
357 ---
358
359
360@@ -706,17 +706,17 @@ John is disappointed to see that the nomination was declined.
361 start: 0
362 total_size: 1
363 ---
364- bug_link: u'http://.../bugs/...'
365- date_created: u'...'
366- date_decided: u'...'
367- decider_link: u'http://.../~eric'
368+ bug_link: 'http://.../bugs/...'
369+ date_created: '...'
370+ date_decided: '...'
371+ decider_link: 'http://.../~eric'
372 distroseries_link: None
373- owner_link: u'http://.../~john'
374- productseries_link: u'http://.../fooix/0.1'
375- resource_type_link: u'http://.../#bug_nomination'
376- self_link: u'http://.../bugs/.../nominations/...'
377- status: u'Declined'
378- target_link: u'http://.../fooix/0.1'
379+ owner_link: 'http://.../~john'
380+ productseries_link: 'http://.../fooix/0.1'
381+ resource_type_link: 'http://.../#bug_nomination'
382+ self_link: 'http://.../bugs/.../nominations/...'
383+ status: 'Declined'
384+ target_link: 'http://.../fooix/0.1'
385 ---
386
387 Eric changes his mind, and approves the nomination.
388@@ -732,17 +732,17 @@ This marks the nomination as Approved, and creates a new task.
389 start: 0
390 total_size: 1
391 ---
392- bug_link: u'http://.../bugs/...'
393- date_created: u'...'
394- date_decided: u'...'
395- decider_link: u'http://.../~eric'
396+ bug_link: 'http://.../bugs/...'
397+ date_created: '...'
398+ date_decided: '...'
399+ decider_link: 'http://.../~eric'
400 distroseries_link: None
401- owner_link: u'http://.../~john'
402- productseries_link: u'http://.../fooix/0.1'
403- resource_type_link: u'http://.../#bug_nomination'
404- self_link: u'http://.../bugs/.../nominations/...'
405- status: u'Approved'
406- target_link: u'http://.../fooix/0.1'
407+ owner_link: 'http://.../~john'
408+ productseries_link: 'http://.../fooix/0.1'
409+ resource_type_link: 'http://.../#bug_nomination'
410+ self_link: 'http://.../bugs/.../nominations/...'
411+ status: 'Approved'
412+ target_link: 'http://.../fooix/0.1'
413 ---
414
415 >>> login('foo.bar@canonical.com')
416@@ -814,19 +814,19 @@ We can get the collection of subscriptions to a bug.
417 >>> for entry in subscription_entries:
418 ... pprint_entry(entry)
419 ... print()
420- bug_link: u'http://.../bugs/1'
421- date_created: u'2006-10-16T18:31:43.156104+00:00'
422- person_link: u'http://.../~name12'
423- resource_type_link: u'http://.../#bug_subscription'
424- self_link: u'http://.../bugs/1/+subscription/name12'
425- subscribed_by_link: u'http://.../~janitor'
426+ bug_link: 'http://.../bugs/1'
427+ date_created: '2006-10-16T18:31:43.156104+00:00'
428+ person_link: 'http://.../~name12'
429+ resource_type_link: 'http://.../#bug_subscription'
430+ self_link: 'http://.../bugs/1/+subscription/name12'
431+ subscribed_by_link: 'http://.../~janitor'
432 <BLANKLINE>
433- bug_link: u'http://.../bugs/1'
434- date_created: u'2006-10-16T18:31:43.154816+00:00'
435- person_link: u'http://.../~stevea'
436- resource_type_link: u'http://.../#bug_subscription'
437- self_link: u'http://.../bugs/1/+subscription/stevea'
438- subscribed_by_link: u'http://.../~janitor'
439+ bug_link: 'http://.../bugs/1'
440+ date_created: '2006-10-16T18:31:43.154816+00:00'
441+ person_link: 'http://.../~stevea'
442+ resource_type_link: 'http://.../#bug_subscription'
443+ self_link: 'http://.../bugs/1/+subscription/stevea'
444+ subscribed_by_link: 'http://.../~janitor'
445 <BLANKLINE>
446
447 Each subscription can be accessed individually.
448@@ -834,12 +834,12 @@ Each subscription can be accessed individually.
449 >>> subscription = webservice.get(
450 ... subscription_entries[1]['self_link']).jsonBody()
451 >>> pprint_entry(subscription)
452- bug_link: u'http://.../bugs/1'
453- date_created: u'2006-10-16T18:31:43.154816+00:00'
454- person_link: u'http://.../~stevea'
455- resource_type_link: u'http://.../#bug_subscription'
456- self_link: u'http://.../bugs/1/+subscription/stevea'
457- subscribed_by_link: u'http://.../~janitor'
458+ bug_link: 'http://.../bugs/1'
459+ date_created: '2006-10-16T18:31:43.154816+00:00'
460+ person_link: 'http://.../~stevea'
461+ resource_type_link: 'http://.../#bug_subscription'
462+ self_link: 'http://.../bugs/1/+subscription/stevea'
463+ subscribed_by_link: 'http://.../~janitor'
464
465 Subscriptions can also be accessed anonymously.
466
467@@ -854,7 +854,7 @@ We can also create new subscriptions.
468 ... person=webservice.getAbsoluteUrl('/~cprov')).jsonBody()
469 >>> pprint_entry(new_subscription)
470 bug_link: ...
471- self_link: u'http://.../bugs/1/+subscription/cprov'
472+ self_link: 'http://.../bugs/1/+subscription/cprov'
473 ...
474
475 An individual can only unsubscribe themselves. If the person argument is
476@@ -874,13 +874,13 @@ BugNotificationLevel.
477 ... person=webservice.getAbsoluteUrl('/~salgado'),
478 ... level=u"Details", api_version="devel").jsonBody()
479 >>> pprint_entry(new_subscription)
480- bug_link: u'.../bugs/1'
481- bug_notification_level: u'Details'
482- date_created: u'...'
483- person_link: u'...'
484- resource_type_link: u'...'
485- self_link: u'...'
486- subscribed_by_link: u'...'
487+ bug_link: '.../bugs/1'
488+ bug_notification_level: 'Details'
489+ date_created: '...'
490+ person_link: '...'
491+ resource_type_link: '...'
492+ self_link: '...'
493+ subscribed_by_link: '...'
494
495 They can also update the subscription's bug_notification_level directly.
496
497@@ -889,8 +889,8 @@ They can also update the subscription's bug_notification_level directly.
498 ... webservice.patch(
499 ... new_subscription['self_link'], 'application/json',
500 ... dumps(patch), api_version="devel").jsonBody())
501- bug_link: u'.../bugs/1'
502- bug_notification_level: u'Lifecycle'...
503+ bug_link: '.../bugs/1'
504+ bug_notification_level: 'Lifecycle'...
505
506 If one person tries to unsubscribe another individual, the web
507 service will return an unauthorized error.
508@@ -1046,23 +1046,23 @@ report described by the bugwatch.
509 ... if bug_watch['remote_bug'] == u'2000']
510
511 >>> pprint_entry(bug_watch_2000)
512- bug_link: u'http://.../bugs/1'
513- bug_tasks_collection_link: u'http://.../bugs/1/+watch/2/bug_tasks'
514- bug_tracker_link: u'http://.../bugs/bugtrackers/mozilla.org'
515- date_created: u'2004-10-04T01:00:00+00:00'
516- date_last_changed: u'2004-10-04T01:00:00+00:00'
517- date_last_checked: u'2004-10-04T01:00:00+00:00'
518+ bug_link: 'http://.../bugs/1'
519+ bug_tasks_collection_link: 'http://.../bugs/1/+watch/2/bug_tasks'
520+ bug_tracker_link: 'http://.../bugs/bugtrackers/mozilla.org'
521+ date_created: '2004-10-04T01:00:00+00:00'
522+ date_last_changed: '2004-10-04T01:00:00+00:00'
523+ date_last_checked: '2004-10-04T01:00:00+00:00'
524 date_next_checked: None
525 last_error_type: None
526- owner_link: u'http://.../~mark'
527- remote_bug: u'2000'
528- remote_importance: u''
529- remote_status: u''
530- resource_type_link: u'http://.../#bug_watch'
531- self_link: u'http://.../bugs/1/+watch/2'
532- title: u'The Mozilla.org Bug Tracker #2000'
533- url: u'https://bugzilla.mozilla.org/show_bug.cgi?id=2000'
534- web_link: u'http://bugs.../bugs/1/+watch/2'
535+ owner_link: 'http://.../~mark'
536+ remote_bug: '2000'
537+ remote_importance: ''
538+ remote_status: ''
539+ resource_type_link: 'http://.../#bug_watch'
540+ self_link: 'http://.../bugs/1/+watch/2'
541+ title: 'The Mozilla.org Bug Tracker #2000'
542+ url: 'https://bugzilla.mozilla.org/show_bug.cgi?id=2000'
543+ web_link: 'http://bugs.../bugs/1/+watch/2'
544
545 >>> bug_watch = webservice.get(bug_watch_2000['self_link']).jsonBody()
546 >>> bug_watch == bug_watch_2000
547@@ -1118,23 +1118,23 @@ Following the redirect, we can see the new bug watch:
548 >>> new_bug_watch_path = response.getHeader('Location')
549 >>> new_bug_watch = webservice.get(new_bug_watch_path).jsonBody()
550 >>> pprint_entry(new_bug_watch)
551- bug_link: u'http://.../bugs/1'
552- bug_tasks_collection_link: u'http://.../bugs/1/+watch/.../bug_tasks'
553- bug_tracker_link: u'http://.../bugs/bugtrackers/mozilla.org'
554- date_created: u'...'
555+ bug_link: 'http://.../bugs/1'
556+ bug_tasks_collection_link: 'http://.../bugs/1/+watch/.../bug_tasks'
557+ bug_tracker_link: 'http://.../bugs/bugtrackers/mozilla.org'
558+ date_created: '...'
559 date_last_changed: None
560 date_last_checked: None
561 date_next_checked: None
562 last_error_type: None
563- owner_link: u'http://.../~salgado'
564- remote_bug: u'9876'
565+ owner_link: 'http://.../~salgado'
566+ remote_bug: '9876'
567 remote_importance: None
568 remote_status: None
569- resource_type_link: u'http://.../#bug_watch'
570- self_link: u'http://.../bugs/1/+watch/...'
571- title: u'The Mozilla.org Bug Tracker #9876'
572- url: u'https://bugzilla.mozilla.org/show_bug.cgi?id=9876'
573- web_link: u'http://bugs.../bugs/1/+watch/...'
574+ resource_type_link: 'http://.../#bug_watch'
575+ self_link: 'http://.../bugs/1/+watch/...'
576+ title: 'The Mozilla.org Bug Tracker #9876'
577+ url: 'https://bugzilla.mozilla.org/show_bug.cgi?id=9876'
578+ web_link: 'http://bugs.../bugs/1/+watch/...'
579
580 Bug Trackers
581 ------------
582@@ -1143,19 +1143,19 @@ Bug Trackers
583
584 >>> pprint_entry(bug_tracker)
585 active: True
586- base_url: u'https://bugzilla.mozilla.org/'
587+ base_url: 'https://bugzilla.mozilla.org/'
588 base_url_aliases: []
589- bug_tracker_type: u'Bugzilla'
590- contact_details: u'Carrier pigeon only'
591+ bug_tracker_type: 'Bugzilla'
592+ contact_details: 'Carrier pigeon only'
593 has_lp_plugin: None
594- name: u'mozilla.org'
595- registrant_link: u'http://.../~name12'
596- resource_type_link: u'http://.../#bug_tracker'
597- self_link: u'http://.../bugs/bugtrackers/mozilla.org'
598- summary: u'The Mozilla.org bug tracker is the grand-daddy of bugzillas...'
599- title: u'The Mozilla.org Bug Tracker'
600- watches_collection_link: u'http://.../bugs/bugtrackers/mozilla.org/watches'
601- web_link: u'http://bugs.../bugs/bugtrackers/mozilla.org'
602+ name: 'mozilla.org'
603+ registrant_link: 'http://.../~name12'
604+ resource_type_link: 'http://.../#bug_tracker'
605+ self_link: 'http://.../bugs/bugtrackers/mozilla.org'
606+ summary: 'The Mozilla.org bug tracker is the grand-daddy of bugzillas...'
607+ title: 'The Mozilla.org Bug Tracker'
608+ watches_collection_link: 'http://.../bugs/bugtrackers/mozilla.org/watches'
609+ web_link: 'http://bugs.../bugs/bugtrackers/mozilla.org'
610
611 We can change various aspects of bug trackers.
612
613@@ -1197,19 +1197,19 @@ renamed bug tracker.
614 >>> bug_tracker = webservice.get(bug_tracker_path).jsonBody()
615 >>> pprint_entry(bug_tracker)
616 active: True
617- base_url: u'http://bugs.example.com/'
618+ base_url: 'http://bugs.example.com/'
619 base_url_aliases: [u'http://bugs.example.com/bugs/', u'http://www.example.com/bugtracker/']
620- bug_tracker_type: u'Bugzilla'
621- contact_details: u'bob@example.com'
622+ bug_tracker_type: 'Bugzilla'
623+ contact_details: 'bob@example.com'
624 has_lp_plugin: None
625- name: u'bob'
626- registrant_link: u'http://.../~name12'
627- resource_type_link: u'http://.../#bug_tracker'
628- self_link: u'http://.../bugs/bugtrackers/bob'
629- summary: u'Where Bob files his bugs.'
630- title: u"Bob's Tracker"
631- watches_collection_link: u'http://.../bugs/bugtrackers/bob/watches'
632- web_link: u'http://bugs.../bugs/bugtrackers/bob'
633+ name: 'bob'
634+ registrant_link: 'http://.../~name12'
635+ resource_type_link: 'http://.../#bug_tracker'
636+ self_link: 'http://.../bugs/bugtrackers/bob'
637+ summary: 'Where Bob files his bugs.'
638+ title: "Bob's Tracker"
639+ watches_collection_link: 'http://.../bugs/bugtrackers/bob/watches'
640+ web_link: 'http://bugs.../bugs/bugtrackers/bob'
641
642 Non-admins can't disable a bugtracker through the API.
643
644@@ -1237,7 +1237,7 @@ Bug 1 has no attachments:
645 >>> attachments = webservice.get(
646 ... bug_one['attachments_collection_link']).jsonBody()
647 >>> pprint_collection(attachments)
648- resource_type_link: u'http://.../#bug_attachment-page-resource'
649+ resource_type_link: 'http://.../#bug_attachment-page-resource'
650 start: 0
651 total_size: 0
652 ---
653@@ -1260,32 +1260,32 @@ Now, bug 1 has one attachment:
654 >>> attachments = webservice.get(
655 ... bug_one['attachments_collection_link']).jsonBody()
656 >>> pprint_collection(attachments)
657- resource_type_link: u'http://.../#bug_attachment-page-resource'
658+ resource_type_link: 'http://.../#bug_attachment-page-resource'
659 start: 0
660 total_size: 1
661 ---
662- bug_link: u'http://.../bugs/1'
663- data_link: u'http://.../bugs/1/+attachment/.../data'
664- message_link: u'http://.../firefox/+bug/1/comments/2'
665- resource_type_link: u'http://.../#bug_attachment'
666- self_link: u'http://.../bugs/1/+attachment/...'
667- title: u'numbers.txt'
668- type: u'Unspecified'
669- web_link: u'http://bugs.../bugs/1/+attachment/...'
670+ bug_link: 'http://.../bugs/1'
671+ data_link: 'http://.../bugs/1/+attachment/.../data'
672+ message_link: 'http://.../firefox/+bug/1/comments/2'
673+ resource_type_link: 'http://.../#bug_attachment'
674+ self_link: 'http://.../bugs/1/+attachment/...'
675+ title: 'numbers.txt'
676+ type: 'Unspecified'
677+ web_link: 'http://bugs.../bugs/1/+attachment/...'
678 ---
679
680 The attachment can be fetched directly:
681
682 >>> [attachment] = attachments['entries']
683 >>> pprint_entry(webservice.get(attachment['self_link']).jsonBody())
684- bug_link: u'http://.../bugs/1'
685- data_link: u'http://.../bugs/1/+attachment/.../data'
686- message_link: u'http://.../firefox/+bug/1/comments/2'
687- resource_type_link: u'http://.../#bug_attachment'
688- self_link: u'http://.../bugs/1/+attachment/...'
689- title: u'numbers.txt'
690- type: u'Unspecified'
691- web_link: u'http://bugs.../bugs/1/+attachment/...'
692+ bug_link: 'http://.../bugs/1'
693+ data_link: 'http://.../bugs/1/+attachment/.../data'
694+ message_link: 'http://.../firefox/+bug/1/comments/2'
695+ resource_type_link: 'http://.../#bug_attachment'
696+ self_link: 'http://.../bugs/1/+attachment/...'
697+ title: 'numbers.txt'
698+ type: 'Unspecified'
699+ web_link: 'http://bugs.../bugs/1/+attachment/...'
700
701 Fetching the data actually yields a redirect to the Librarian, which
702 we must follow to download the data.
703@@ -1322,15 +1322,15 @@ attachment. This is where our comment is recorded.
704
705 >>> message = webservice.get(attachment['message_link']).jsonBody()
706 >>> pprint_entry(message)
707- bug_attachments_collection_link: u'http://.../firefox/+bug/1/comments/2/bug_attachments'
708- content: u'The numbers you asked for.'
709- date_created: u'...'
710- owner_link: u'http://.../~salgado'
711+ bug_attachments_collection_link: 'http://.../firefox/+bug/1/comments/2/bug_attachments'
712+ content: 'The numbers you asked for.'
713+ date_created: '...'
714+ owner_link: 'http://.../~salgado'
715 parent_link: None
716- resource_type_link: u'http://.../#message'
717- self_link: u'http://.../firefox/+bug/1/comments/2'
718- subject: u'Re: Firefox does not support SVG'
719- web_link: u'http://bugs.../firefox/+bug/1/comments/2'
720+ resource_type_link: 'http://.../#message'
721+ self_link: 'http://.../firefox/+bug/1/comments/2'
722+ subject: 'Re: Firefox does not support SVG'
723+ web_link: 'http://bugs.../firefox/+bug/1/comments/2'
724
725 The message also links back to the attachments that were uploaded at
726 the same time.
727@@ -1338,7 +1338,7 @@ the same time.
728 >>> attachments = webservice.get(
729 ... message['bug_attachments_collection_link']).jsonBody()
730 >>> pprint_collection(attachments)
731- resource_type_link: u'http://.../#bug_attachment-page-resource'
732+ resource_type_link: 'http://.../#bug_attachment-page-resource'
733 start: 0
734 total_size: 1
735 ...
736@@ -1373,7 +1373,7 @@ But we can remove the attachment altogether.
737 >>> attachments = webservice.get(
738 ... bug_one['attachments_collection_link']).jsonBody()
739 >>> pprint_collection(attachments)
740- resource_type_link: u'http://api.launchpad.test/beta/#bug_attachment-page-resource'
741+ resource_type_link: 'http://api.launchpad.test/beta/#bug_attachment-page-resource'
742 start: 0
743 total_size: 0
744 ---
745@@ -1394,15 +1394,15 @@ bug tasks for the target.
746 total_size: 5
747 ---
748 ...
749- target_link: u'http://api.launchpad.test/beta/firefox'
750+ target_link: 'http://api.launchpad.test/beta/firefox'
751 ...
752- target_link: u'http://api.launchpad.test/beta/firefox'
753+ target_link: 'http://api.launchpad.test/beta/firefox'
754 ...
755- target_link: u'http://api.launchpad.test/beta/firefox'
756+ target_link: 'http://api.launchpad.test/beta/firefox'
757 ...
758- target_link: u'http://api.launchpad.test/beta/firefox'
759+ target_link: 'http://api.launchpad.test/beta/firefox'
760 ...
761- target_link: u'http://api.launchpad.test/beta/firefox'
762+ target_link: 'http://api.launchpad.test/beta/firefox'
763 ...
764
765 Some parameters accept lists of values, just like when searching from
766@@ -1416,15 +1416,15 @@ accept many values and return only tasks with these values.
767 total_size: 2
768 ---
769 ...
770- importance: u'Critical'
771+ importance: 'Critical'
772 ...
773- self_link: u'http://api.launchpad.test/beta/firefox/+bug/5'
774+ self_link: 'http://api.launchpad.test/beta/firefox/+bug/5'
775 ...
776 ---
777 ...
778- importance: u'Low'
779+ importance: 'Low'
780 ...
781- self_link: u'http://api.launchpad.test/beta/firefox/+bug/1'
782+ self_link: 'http://api.launchpad.test/beta/firefox/+bug/1'
783 ...
784
785 The tags parameter also accepts a list of values. By default, it
786@@ -1437,21 +1437,21 @@ searches for bugs with any of the given tags.
787 total_size: 3
788 ---
789 ...
790- bug_link: u'http://.../bugs/9'
791+ bug_link: 'http://.../bugs/9'
792 ...
793- self_link: u'http://.../ubuntu/+source/thunderbird/+bug/9'
794+ self_link: 'http://.../ubuntu/+source/thunderbird/+bug/9'
795 ...
796 ---
797 ...
798- bug_link: u'http://.../bugs/10'
799+ bug_link: 'http://.../bugs/10'
800 ...
801- self_link: u'http://.../ubuntu/+source/linux-source-2.6.15/+bug/10'
802+ self_link: 'http://.../ubuntu/+source/linux-source-2.6.15/+bug/10'
803 ...
804 ---
805 ...
806- bug_link: u'http://.../bugs/2'
807+ bug_link: 'http://.../bugs/2'
808 ...
809- self_link: u'http://.../ubuntu/+bug/2'
810+ self_link: 'http://.../ubuntu/+bug/2'
811 ...
812
813 It can be used for searching for bugs with all of the given tags by
814@@ -1587,11 +1587,11 @@ bugs:
815 total_size: 2
816 ---
817 ...
818- owner_link: u'http://api.launchpad.test/beta/~testuser1'
819+ owner_link: 'http://api.launchpad.test/beta/~testuser1'
820 ...
821 ---
822 ...
823- owner_link: u'http://api.launchpad.test/beta/~testuser1'
824+ owner_link: 'http://api.launchpad.test/beta/~testuser1'
825 ...
826
827 `testuser2` is subscribed to `testbug2`, so this bug is related to this
828@@ -1667,11 +1667,11 @@ It is possible to mark a bug as affecting the user using the web service.
829 >>> pprint_collection(webservice.get(webservice.get(
830 ... bug_one['self_link']).jsonBody()[
831 ... 'users_affected_collection_link']).jsonBody())
832- resource_type_link: u'http://api.launchpad.test/beta/#person-page-resource'
833+ resource_type_link: 'http://api.launchpad.test/beta/#person-page-resource'
834 start: 0
835 total_size: 1
836 ...
837- self_link: u'http://api.launchpad.test/beta/~salgado'
838+ self_link: 'http://api.launchpad.test/beta/~salgado'
839 ...
840
841 >>> webservice.named_post(
842@@ -1691,38 +1691,38 @@ The collection of all CVEs is available at the top level.
843
844 >>> cves = webservice.get("/bugs/cve").jsonBody()
845 >>> pprint_collection(cves)
846- next_collection_link: u'http://.../bugs/cve?ws.size=5&memo=5&ws.start=5'
847- resource_type_link: u'http://.../#cves'
848+ next_collection_link: 'http://.../bugs/cve?ws.size=5&memo=5&ws.start=5'
849+ resource_type_link: 'http://.../#cves'
850 start: 0
851 total_size: 10
852 ---
853- bugs_collection_link: u'http://.../bugs/cve/2005-2737/bugs'
854- date_created: u'2005-09-13T14:05:17.043865+00:00'
855- date_modified: u'2005-09-13T14:05:17.043865+00:00'
856- description: u'Cross-site scripting (XSS) vulnerability...'
857- display_name: u'CVE-2005-2737'
858- resource_type_link: u'http://.../#cve'
859- self_link: u'http://.../bugs/cve/2005-2737'
860- sequence: u'2005-2737'
861- status: u'Candidate'
862- title: u'CVE-2005-2737 (Candidate)'
863- url: u'https://cve.mitre.org/cgi-bin/cvename.cgi?name=2005-2737'
864- web_link: u'http://bugs.launchpad.test/bugs/cve/2005-2737'
865+ bugs_collection_link: 'http://.../bugs/cve/2005-2737/bugs'
866+ date_created: '2005-09-13T14:05:17.043865+00:00'
867+ date_modified: '2005-09-13T14:05:17.043865+00:00'
868+ description: 'Cross-site scripting (XSS) vulnerability...'
869+ display_name: 'CVE-2005-2737'
870+ resource_type_link: 'http://.../#cve'
871+ self_link: 'http://.../bugs/cve/2005-2737'
872+ sequence: '2005-2737'
873+ status: 'Candidate'
874+ title: 'CVE-2005-2737 (Candidate)'
875+ url: 'https://cve.mitre.org/cgi-bin/cvename.cgi?name=2005-2737'
876+ web_link: 'http://bugs.launchpad.test/bugs/cve/2005-2737'
877 ---
878 ...
879- self_link: u'http://.../bugs/cve/2005-2736'
880+ self_link: 'http://.../bugs/cve/2005-2736'
881 ...
882 ---
883 ...
884- self_link: u'http://.../bugs/cve/2005-2735'
885+ self_link: 'http://.../bugs/cve/2005-2735'
886 ...
887 ---
888 ...
889- self_link: u'http://.../bugs/cve/2005-2734'
890+ self_link: 'http://.../bugs/cve/2005-2734'
891 ...
892 ---
893 ...
894- self_link: u'http://.../bugs/cve/2005-2733'
895+ self_link: 'http://.../bugs/cve/2005-2733'
896 ...
897
898 And for every bug we can look at the CVEs linked to it.
899@@ -1730,22 +1730,22 @@ And for every bug we can look at the CVEs linked to it.
900 >>> bug_one_cves_url = bug_one['cves_collection_link']
901 >>> bug_one_cves = webservice.get(bug_one_cves_url).jsonBody()
902 >>> pprint_collection(bug_one_cves)
903- resource_type_link: u'http://.../#cve-page-resource'
904+ resource_type_link: 'http://.../#cve-page-resource'
905 start: 0
906 total_size: 1
907 ---
908- bugs_collection_link: u'http://.../bugs/cve/1999-8979/bugs'
909- date_created: u'2005-09-07T19:00:32.944561+00:00'
910- date_modified: u'2005-09-13T14:00:03.508959+00:00'
911- description: u'Firefox crashes all the time'
912- display_name: u'CVE-1999-8979'
913- resource_type_link: u'http://.../#cve'
914- self_link: u'http://.../bugs/cve/1999-8979'
915- sequence: u'1999-8979'
916- status: u'Entry'
917- title: u'CVE-1999-8979 (Entry)'
918- url: u'https://cve.mitre.org/cgi-bin/cvename.cgi?name=1999-8979'
919- web_link: u'http://bugs.launchpad.test/bugs/cve/1999-8979'
920+ bugs_collection_link: 'http://.../bugs/cve/1999-8979/bugs'
921+ date_created: '2005-09-07T19:00:32.944561+00:00'
922+ date_modified: '2005-09-13T14:00:03.508959+00:00'
923+ description: 'Firefox crashes all the time'
924+ display_name: 'CVE-1999-8979'
925+ resource_type_link: 'http://.../#cve'
926+ self_link: 'http://.../bugs/cve/1999-8979'
927+ sequence: '1999-8979'
928+ status: 'Entry'
929+ title: 'CVE-1999-8979 (Entry)'
930+ url: 'https://cve.mitre.org/cgi-bin/cvename.cgi?name=1999-8979'
931+ web_link: 'http://bugs.launchpad.test/bugs/cve/1999-8979'
932 ---
933
934 For every CVE we can also look at the bugs linked to it.
935@@ -1764,7 +1764,7 @@ Unlink CVEs from that bug.
936 ... cve='http://api.launchpad.test/beta/bugs/cve/1999-8979'))
937 HTTP/1.1 200 Ok...
938 >>> pprint_collection(webservice.get(bug_one_cves_url).jsonBody())
939- resource_type_link: u'http://.../#cve-page-resource'
940+ resource_type_link: 'http://.../#cve-page-resource'
941 start: 0
942 total_size: 0
943 ---
944@@ -1776,19 +1776,19 @@ And link new CVEs to the bug.
945 ... cve='http://api.launchpad.test/beta/bugs/cve/2005-2733'))
946 HTTP/1.1 200 Ok...
947 >>> pprint_collection(webservice.get(bug_one_cves_url).jsonBody())
948- resource_type_link: u'http://.../#cve-page-resource'
949+ resource_type_link: 'http://.../#cve-page-resource'
950 start: 0
951 total_size: 1
952 ---
953 ...
954- self_link: u'http://.../bugs/cve/2005-2733'
955+ self_link: 'http://.../bugs/cve/2005-2733'
956 ...
957
958 Add a new task to the bug.
959
960 >>> bugtasks_url = bug_one['bug_tasks_collection_link']
961 >>> pprint_collection(webservice.get(bugtasks_url).jsonBody())
962- resource_type_link: u'http://.../#bug_task-page-resource'
963+ resource_type_link: 'http://.../#bug_task-page-resource'
964 start: 0
965 total_size: 3
966 ...
967@@ -1801,7 +1801,7 @@ Add a new task to the bug.
968
969 >>> bugtasks_url = bug_one['bug_tasks_collection_link']
970 >>> pprint_collection(webservice.get(bugtasks_url).jsonBody())
971- resource_type_link: u'http://.../#bug_task-page-resource'
972+ resource_type_link: 'http://.../#bug_task-page-resource'
973 start: 0
974 total_size: 4
975 ...
976@@ -1816,19 +1816,19 @@ For every bug we can look at the branches linked to it.
977 >>> bug_four_branches_url = bug_four['linked_branches_collection_link']
978 >>> bug_four_branches = webservice.get(bug_four_branches_url).jsonBody()
979 >>> pprint_collection(bug_four_branches)
980- resource_type_link: u'http://.../#bug_branch-page-resource'
981+ resource_type_link: 'http://.../#bug_branch-page-resource'
982 start: 0
983 total_size: 2
984 ---
985- branch_link: u'http://.../~mark/firefox/release-0.9.2'
986- bug_link: u'http://.../bugs/4'
987- resource_type_link: u'http://.../#bug_branch'
988- self_link: u'http://.../~mark/firefox/release-0.9.2/+bug/4'
989+ branch_link: 'http://.../~mark/firefox/release-0.9.2'
990+ bug_link: 'http://.../bugs/4'
991+ resource_type_link: 'http://.../#bug_branch'
992+ self_link: 'http://.../~mark/firefox/release-0.9.2/+bug/4'
993 ---
994- branch_link: u'http://.../~name12/firefox/main'
995- bug_link: u'http://.../bugs/4'
996- resource_type_link: u'http://.../beta/#bug_branch'
997- self_link: u'http://.../~name12/firefox/main/+bug/4'
998+ branch_link: 'http://.../~name12/firefox/main'
999+ bug_link: 'http://.../bugs/4'
1000+ resource_type_link: 'http://.../beta/#bug_branch'
1001+ self_link: 'http://.../~name12/firefox/main/+bug/4'
1002 ---
1003
1004 For every branch we can also look at the bugs linked to it.
1005@@ -1892,23 +1892,23 @@ Each bug has a collection of activities that have taken place with it.
1006 >>> activity = anon_webservice.get(
1007 ... bug_one['activity_collection_link']).jsonBody()
1008 >>> pprint_collection(activity)
1009- next_collection_link: u'http://.../bugs/1/activity?ws.size=5&memo=5&ws.start=5'
1010- resource_type_link: u'http://.../#bug_activity-page-resource'
1011+ next_collection_link: 'http://.../bugs/1/activity?ws.size=5&memo=5&ws.start=5'
1012+ resource_type_link: 'http://.../#bug_activity-page-resource'
1013 start: 0
1014 total_size: 24
1015 ...
1016- message: u"Decided problem wasn't silly after all"
1017+ message: "Decided problem wasn't silly after all"
1018 ...
1019
1020 >>> bug_nine_activity = webservice.get(
1021 ... "/bugs/9/activity").jsonBody()
1022 >>> pprint_entry(bug_nine_activity['entries'][1])
1023- bug_link: u'http://.../bugs/9'
1024- datechanged: u'2006-02-23T16:42:40.288553+00:00'
1025+ bug_link: 'http://.../bugs/9'
1026+ datechanged: '2006-02-23T16:42:40.288553+00:00'
1027 message: None
1028- newvalue: u'Confirmed'
1029- oldvalue: u'Unconfirmed'
1030- person_link: u'http://.../~name12'
1031- resource_type_link: u'http://.../#bug_activity'
1032- self_link: u'http://.../bugs/9/activity'
1033- whatchanged: u'thunderbird: status'
1034+ newvalue: 'Confirmed'
1035+ oldvalue: 'Unconfirmed'
1036+ person_link: 'http://.../~name12'
1037+ resource_type_link: 'http://.../#bug_activity'
1038+ self_link: 'http://.../bugs/9/activity'
1039+ whatchanged: 'thunderbird: status'
1040diff --git a/lib/lp/code/stories/webservice/xx-branch-links.txt b/lib/lp/code/stories/webservice/xx-branch-links.txt
1041index abbd9a0..81a5a15 100644
1042--- a/lib/lp/code/stories/webservice/xx-branch-links.txt
1043+++ b/lib/lp/code/stories/webservice/xx-branch-links.txt
1044@@ -59,11 +59,11 @@ A spec can be linked to a branch through the API.
1045 ... robots['spec_links_collection_link']).jsonBody()
1046 >>> spec_link = spec_links['entries'][0]
1047 >>> pprint_entry(spec_link)
1048- branch_link: u'http://.../~prime/cybertron/robots'
1049- registrant_link: u'http://.../~salgado'
1050- resource_type_link: u'http://.../#specification_branch'
1051- self_link: u'http://.../product-name.../+spec/name.../+branch/prime/cybertron/robots'
1052- specification_link: u'http://.../product-name.../+spec/name...'
1053+ branch_link: 'http://.../~prime/cybertron/robots'
1054+ registrant_link: 'http://.../~salgado'
1055+ resource_type_link: 'http://.../#specification_branch'
1056+ self_link: 'http://.../product-name.../+spec/name.../+branch/prime/cybertron/robots'
1057+ specification_link: 'http://.../product-name.../+spec/name...'
1058
1059
1060 If it turns out that the branch has no connection with the spec, it can be
1061diff --git a/lib/lp/code/stories/webservice/xx-branch.txt b/lib/lp/code/stories/webservice/xx-branch.txt
1062index 18c3ea0..299b9ad 100644
1063--- a/lib/lp/code/stories/webservice/xx-branch.txt
1064+++ b/lib/lp/code/stories/webservice/xx-branch.txt
1065@@ -106,45 +106,45 @@ time goes on.
1066 >>> from lazr.restful.testing.webservice import pprint_entry
1067 >>> pprint_entry(fooix_trunk)
1068 branch_format: None
1069- branch_type: u'Hosted'
1070- bzr_identity: u'lp://dev/~eric/fooix/trunk'
1071+ branch_type: 'Hosted'
1072+ bzr_identity: 'lp://dev/~eric/fooix/trunk'
1073 code_import_link: None
1074 control_format: None
1075- date_created: u'2009-01-01T00:00:00+00:00'
1076- date_last_modified: u'2009-01-01T00:00:00+00:00'
1077- dependent_branches_collection_link: u'.../~eric/fooix/trunk/dependent_branches'
1078+ date_created: '2009-01-01T00:00:00+00:00'
1079+ date_last_modified: '2009-01-01T00:00:00+00:00'
1080+ dependent_branches_collection_link: '.../~eric/fooix/trunk/dependent_branches'
1081 description: None
1082- display_name: u'lp://dev/~eric/fooix/trunk'
1083+ display_name: 'lp://dev/~eric/fooix/trunk'
1084 explicitly_private: False
1085- information_type: u'Public'
1086- landing_candidates_collection_link: u'.../~eric/fooix/trunk/landing_candidates'
1087- landing_targets_collection_link: u'.../~eric/fooix/trunk/landing_targets'
1088+ information_type: 'Public'
1089+ landing_candidates_collection_link: '.../~eric/fooix/trunk/landing_candidates'
1090+ landing_targets_collection_link: '.../~eric/fooix/trunk/landing_targets'
1091 last_mirror_attempt: None
1092 last_mirrored: None
1093 last_scanned: None
1094 last_scanned_id: None
1095- lifecycle_status: u'Development'
1096- linked_bugs_collection_link: u'http://.../~eric/fooix/trunk/linked_bugs'
1097+ lifecycle_status: 'Development'
1098+ linked_bugs_collection_link: 'http://.../~eric/fooix/trunk/linked_bugs'
1099 mirror_status_message: None
1100- name: u'trunk'
1101- owner_link: u'.../~eric'
1102+ name: 'trunk'
1103+ owner_link: '.../~eric'
1104 private: False
1105- project_link: u'.../fooix'
1106- recipes_collection_link: u'http://.../~eric/fooix/trunk/recipes'
1107- registrant_link: u'.../~eric'
1108+ project_link: '.../fooix'
1109+ recipes_collection_link: 'http://.../~eric/fooix/trunk/recipes'
1110+ registrant_link: '.../~eric'
1111 repository_format: None
1112- resource_type_link: u'.../#branch'
1113+ resource_type_link: '.../#branch'
1114 reviewer_link: None
1115 revision_count: 0
1116- self_link: u'.../~eric/fooix/trunk'
1117+ self_link: '.../~eric/fooix/trunk'
1118 sourcepackage_link: None
1119- spec_links_collection_link: u'.../~eric/fooix/trunk/spec_links'
1120- subscribers_collection_link: u'http://.../~eric/fooix/trunk/subscribers'
1121- subscriptions_collection_link: u'http://.../~eric/fooix/trunk/subscriptions'
1122- unique_name: u'~eric/fooix/trunk'
1123+ spec_links_collection_link: '.../~eric/fooix/trunk/spec_links'
1124+ subscribers_collection_link: 'http://.../~eric/fooix/trunk/subscribers'
1125+ subscriptions_collection_link: 'http://.../~eric/fooix/trunk/subscriptions'
1126+ unique_name: '~eric/fooix/trunk'
1127 url: None
1128- web_link: u'http://code.../~eric/fooix/trunk'
1129- webhooks_collection_link: u'http://.../~eric/fooix/trunk/webhooks'
1130+ web_link: 'http://code.../~eric/fooix/trunk'
1131+ webhooks_collection_link: 'http://.../~eric/fooix/trunk/webhooks'
1132 whiteboard: None
1133
1134 There is a branch merge proposal with Fooix trunk as the target branch, so it
1135diff --git a/lib/lp/code/stories/webservice/xx-branchmergeproposal.txt b/lib/lp/code/stories/webservice/xx-branchmergeproposal.txt
1136index 98483a4..32f0373 100644
1137--- a/lib/lp/code/stories/webservice/xx-branchmergeproposal.txt
1138+++ b/lib/lp/code/stories/webservice/xx-branchmergeproposal.txt
1139@@ -44,44 +44,44 @@ Branch merge proposals can be created through the API.
1140 >>> bmp_url = bmp_result.getHeader('Location')
1141 >>> bmp = registrant_webservice.get(bmp_url).jsonBody()
1142 >>> pprint_entry(bmp)
1143- address: u'mp+...@code.launchpad.test'
1144+ address: 'mp+...@code.launchpad.test'
1145 all_comments_collection_link:
1146- u'http://api.launchpad.test/devel/~.../+merge/.../all_comments'
1147+ 'http://api.launchpad.test/devel/~.../+merge/.../all_comments'
1148 bugs_collection_link:
1149- u'http://api.launchpad.test/devel/~.../+merge/.../bugs'
1150- commit_message: u'It was merged!\n'
1151- date_created: u'...'
1152+ 'http://api.launchpad.test/devel/~.../+merge/.../bugs'
1153+ commit_message: 'It was merged!\n'
1154+ date_created: '...'
1155 date_merged: None
1156- date_review_requested: u'...'
1157+ date_review_requested: '...'
1158 date_reviewed: None
1159- description: u'Merge\nit!'
1160+ description: 'Merge\nit!'
1161 merge_reporter_link: None
1162 merged_revision_id: None
1163 merged_revno: None
1164- prerequisite_branch_link: u'http://api.launchpad.test/devel/~...'
1165+ prerequisite_branch_link: 'http://api.launchpad.test/devel/~...'
1166 prerequisite_git_path: None
1167 prerequisite_git_repository_link: None
1168 preview_diff_link: None
1169- preview_diffs_collection_link: u'http://.../preview_diffs'
1170+ preview_diffs_collection_link: 'http://.../preview_diffs'
1171 private: False
1172- queue_status: u'Needs review'
1173- registrant_link: u'http://api.launchpad.test/devel/~person-name...'
1174+ queue_status: 'Needs review'
1175+ registrant_link: 'http://api.launchpad.test/devel/~person-name...'
1176 resource_type_link:
1177- u'http://api.launchpad.test/devel/#branch_merge_proposal'
1178+ 'http://api.launchpad.test/devel/#branch_merge_proposal'
1179 reviewed_revid: None
1180 reviewer_link: None
1181- self_link: u'http://api.launchpad.test/devel/~.../+merge/...'
1182- source_branch_link: u'http://api.launchpad.test/devel/~...'
1183+ self_link: 'http://api.launchpad.test/devel/~.../+merge/...'
1184+ source_branch_link: 'http://api.launchpad.test/devel/~...'
1185 source_git_path: None
1186 source_git_repository_link: None
1187 superseded_by_link: None
1188 supersedes_link: None
1189- target_branch_link: u'http://api.launchpad.test/devel/~...'
1190+ target_branch_link: 'http://api.launchpad.test/devel/~...'
1191 target_git_path: None
1192 target_git_repository_link: None
1193 votes_collection_link:
1194- u'http://api.launchpad.test/devel/~.../+merge/.../votes'
1195- web_link: u'http://code.../~.../+merge/...'
1196+ 'http://api.launchpad.test/devel/~.../+merge/.../votes'
1197+ web_link: 'http://code.../~.../+merge/...'
1198
1199 If we try and create the merge proposal again, we should get a ValueError.
1200
1201@@ -101,15 +101,15 @@ Our review request is listed in the votes collection.
1202 >>> votes = webservice.get(
1203 ... bmp['votes_collection_link']).jsonBody()
1204 >>> pprint_entry(votes['entries'][0])
1205- branch_merge_proposal_link: u'http://api.launchpad.test/devel/~.../+merge/...'
1206+ branch_merge_proposal_link: 'http://api.launchpad.test/devel/~.../+merge/...'
1207 comment_link: None
1208- date_created: u'...'
1209+ date_created: '...'
1210 is_pending: True
1211- registrant_link: u'http://api.launchpad.test/devel/~person-name...'
1212- resource_type_link: u'http://api.launchpad.test/devel/#code_review_vote_reference'
1213- review_type: u'green'
1214- reviewer_link: u'http://api.launchpad.test/devel/~person-name...'
1215- self_link: u'http://api.launchpad.test/devel/~...'
1216+ registrant_link: 'http://api.launchpad.test/devel/~person-name...'
1217+ resource_type_link: 'http://api.launchpad.test/devel/#code_review_vote_reference'
1218+ review_type: 'green'
1219+ reviewer_link: 'http://api.launchpad.test/devel/~person-name...'
1220+ self_link: 'http://api.launchpad.test/devel/~...'
1221
1222 == Get an existing merge proposal ==
1223
1224@@ -149,10 +149,10 @@ We use the webservice as an unrelated, unprivileged user.
1225
1226 >>> merge_proposal = webservice.get(proposal_url).jsonBody()
1227 >>> pprint_entry(merge_proposal)
1228- address: u'mp+...@code.launchpad.test'
1229+ address: 'mp+...@code.launchpad.test'
1230 all_comments_collection_link:
1231- u'http://.../~source/fooix/fix-it/+merge/.../all_comments'
1232- bugs_collection_link: u'http://.../~source/fooix/fix-it/+merge/.../bugs'
1233+ 'http://.../~source/fooix/fix-it/+merge/.../all_comments'
1234+ bugs_collection_link: 'http://.../~source/fooix/fix-it/+merge/.../bugs'
1235 commit_message: None
1236 date_created: ...
1237 date_merged: None
1238@@ -166,24 +166,24 @@ We use the webservice as an unrelated, unprivileged user.
1239 prerequisite_git_path: None
1240 prerequisite_git_repository_link: None
1241 preview_diff_link: None
1242- preview_diffs_collection_link: u'http://.../preview_diffs'
1243+ preview_diffs_collection_link: 'http://.../preview_diffs'
1244 private: False
1245- queue_status: u'Work in progress'
1246- registrant_link: u'http://.../~person-name...'
1247- resource_type_link: u'http://.../#branch_merge_proposal'
1248+ queue_status: 'Work in progress'
1249+ registrant_link: 'http://.../~person-name...'
1250+ resource_type_link: 'http://.../#branch_merge_proposal'
1251 reviewed_revid: None
1252 reviewer_link: None
1253- self_link: u'http://.../~source/fooix/fix-it/+merge/...'
1254- source_branch_link: u'http://.../~source/fooix/fix-it'
1255+ self_link: 'http://.../~source/fooix/fix-it/+merge/...'
1256+ source_branch_link: 'http://.../~source/fooix/fix-it'
1257 source_git_path: None
1258 source_git_repository_link: None
1259 superseded_by_link: None
1260 supersedes_link: None
1261- target_branch_link: u'http://.../~target/fooix/trunk'
1262+ target_branch_link: 'http://.../~target/fooix/trunk'
1263 target_git_path: None
1264 target_git_repository_link: None
1265- votes_collection_link: u'http://.../~source/fooix/fix-it/+merge/.../votes'
1266- web_link: u'http://code.../~source/fooix/fix-it/+merge/...'
1267+ votes_collection_link: 'http://.../~source/fooix/fix-it/+merge/.../votes'
1268+ web_link: 'http://code.../~source/fooix/fix-it/+merge/...'
1269
1270
1271 == Read the comments ==
1272@@ -195,36 +195,36 @@ The comments on a branch merge proposal are exposed through the API.
1273 >>> print(len(all_comments['entries']))
1274 2
1275 >>> pprint_entry(all_comments['entries'][0])
1276- as_quoted_email: u'> This is great work'
1277- author_link: u'http://api.launchpad.test/devel/~...'
1278- branch_merge_proposal_link: u'http://.../~source/fooix/fix-it/+merge/...'
1279- date_created: u'...'
1280+ as_quoted_email: '> This is great work'
1281+ author_link: 'http://api.launchpad.test/devel/~...'
1282+ branch_merge_proposal_link: 'http://.../~source/fooix/fix-it/+merge/...'
1283+ date_created: '...'
1284 id: ...
1285- message_body: u'This is great work'
1286- resource_type_link: u'http://.../#code_review_comment'
1287- self_link: u'http://.../~source/fooix/fix-it/+merge/.../comments/...'
1288- title: u'Comment on proposed merge of lp://dev/~source/fooix/fix-it into lp://dev/~target/fooix/trunk'
1289- vote: u'Approve'
1290- vote_tag: u'code'
1291- web_link: u'http://code.../~source/fooix/fix-it/+merge/.../comments/...'
1292+ message_body: 'This is great work'
1293+ resource_type_link: 'http://.../#code_review_comment'
1294+ self_link: 'http://.../~source/fooix/fix-it/+merge/.../comments/...'
1295+ title: 'Comment on proposed merge of lp://dev/~source/fooix/fix-it into lp://dev/~target/fooix/trunk'
1296+ vote: 'Approve'
1297+ vote_tag: 'code'
1298+ web_link: 'http://code.../~source/fooix/fix-it/+merge/.../comments/...'
1299
1300 >>> comment_2_id = all_comments['entries'][1]['id']
1301 >>> comment_2 = webservice.named_get(
1302 ... merge_proposal['self_link'], 'getComment',
1303 ... id=comment_2_id).jsonBody()
1304 >>> pprint_entry(comment_2)
1305- as_quoted_email: u'> This is mediocre work.'
1306- author_link: u'http://api.launchpad.test/devel/~...'
1307- branch_merge_proposal_link: u'http://.../~source/fooix/fix-it/+merge/...'
1308- date_created: u'...'
1309+ as_quoted_email: '> This is mediocre work.'
1310+ author_link: 'http://api.launchpad.test/devel/~...'
1311+ branch_merge_proposal_link: 'http://.../~source/fooix/fix-it/+merge/...'
1312+ date_created: '...'
1313 id: ...
1314- message_body: u'This is mediocre work.'
1315- resource_type_link: u'http://.../#code_review_comment'
1316- self_link: u'http://.../~source/fooix/fix-it/+merge/.../comments/...'
1317+ message_body: 'This is mediocre work.'
1318+ resource_type_link: 'http://.../#code_review_comment'
1319+ self_link: 'http://.../~source/fooix/fix-it/+merge/.../comments/...'
1320 title: ...
1321- vote: u'Abstain'
1322+ vote: 'Abstain'
1323 vote_tag: None
1324- web_link: u'http://code.../~source/fooix/fix-it/+merge/.../comments/...'
1325+ web_link: 'http://code.../~source/fooix/fix-it/+merge/.../comments/...'
1326
1327
1328 == Check the votes ==
1329@@ -236,15 +236,15 @@ The votes on a branch merge proposal can be checked through the API.
1330 >>> print(len(votes))
1331 2
1332 >>> pprint_entry(votes[0])
1333- branch_merge_proposal_link: u'http://.../~source/fooix/fix-it/+merge/...'
1334- comment_link: u'http://.../~source/fooix/fix-it/+merge/.../comments/...'
1335- date_created: u'...'
1336+ branch_merge_proposal_link: 'http://.../~source/fooix/fix-it/+merge/...'
1337+ comment_link: 'http://.../~source/fooix/fix-it/+merge/.../comments/...'
1338+ date_created: '...'
1339 is_pending: False
1340- registrant_link: u'http://.../~person-name...'
1341- resource_type_link: u'http://.../#code_review_vote_reference'
1342- review_type: u'code'
1343- reviewer_link: u'http://.../~person-name...'
1344- self_link: u'http://.../~source/fooix/fix-it/+merge/.../+review/...'
1345+ registrant_link: 'http://.../~person-name...'
1346+ resource_type_link: 'http://.../#code_review_vote_reference'
1347+ review_type: 'code'
1348+ reviewer_link: 'http://.../~person-name...'
1349+ self_link: 'http://.../~source/fooix/fix-it/+merge/.../+review/...'
1350
1351
1352 == Performing a Review ==
1353@@ -264,15 +264,15 @@ A review can be requested of the person 'target'.
1354 HTTP/1.1 200 Ok ...
1355 >>> reviewer_entry = reviewer.jsonBody()
1356 >>> pprint_entry(reviewer_entry)
1357- branch_merge_proposal_link: u'http://.../~source/fooix/fix-it/+merge/...'
1358+ branch_merge_proposal_link: 'http://.../~source/fooix/fix-it/+merge/...'
1359 comment_link: None
1360- date_created: u'...'
1361+ date_created: '...'
1362 is_pending: True
1363- registrant_link: u'http://.../~target'
1364- resource_type_link: u'http://.../#code_review_vote_reference'
1365- review_type: u'code'
1366- reviewer_link: u'http://.../~target'
1367- self_link: u'http://.../~source/fooix/fix-it/+merge/.../+review/...'
1368+ registrant_link: 'http://.../~target'
1369+ resource_type_link: 'http://.../#code_review_vote_reference'
1370+ review_type: 'code'
1371+ reviewer_link: 'http://.../~target'
1372+ self_link: 'http://.../~source/fooix/fix-it/+merge/.../+review/...'
1373
1374 >>> vote = reviewer_webservice.get(reviewer_entry['self_link'])
1375 >>> print(vote)
1376@@ -287,18 +287,18 @@ Now the code review should be made.
1377 >>> comment_link = comment_result.getHeader('Location')
1378 >>> comment = reviewer_webservice.get(comment_link).jsonBody()
1379 >>> pprint_entry(comment)
1380- as_quoted_email: u'> This is great work'
1381- author_link: u'http://api.launchpad.test/devel/~...'
1382- branch_merge_proposal_link: u'http://.../~source/fooix/fix-it/+merge/...'
1383- date_created: u'...'
1384+ as_quoted_email: '> This is great work'
1385+ author_link: 'http://api.launchpad.test/devel/~...'
1386+ branch_merge_proposal_link: 'http://.../~source/fooix/fix-it/+merge/...'
1387+ date_created: '...'
1388 id: ...
1389- message_body: u'This is great work'
1390- resource_type_link: u'http://.../#code_review_comment'
1391- self_link: u'http://.../~source/fooix/fix-it/+merge/.../comments/...'
1392+ message_body: 'This is great work'
1393+ resource_type_link: 'http://.../#code_review_comment'
1394+ self_link: 'http://.../~source/fooix/fix-it/+merge/.../comments/...'
1395 title: ...
1396- vote: u'Approve'
1397- vote_tag: u'code'
1398- web_link: u'http://code.../~source/fooix/fix-it/+merge/.../comments/...'
1399+ vote: 'Approve'
1400+ vote_tag: 'code'
1401+ web_link: 'http://code.../~source/fooix/fix-it/+merge/.../comments/...'
1402
1403 In fact, now that the votes indicate approval, we might as well set the merge
1404 proposal status to "Approved" as well.
1405diff --git a/lib/lp/code/stories/webservice/xx-branchsubscription.txt b/lib/lp/code/stories/webservice/xx-branchsubscription.txt
1406index 1db3ba0..314a183 100644
1407--- a/lib/lp/code/stories/webservice/xx-branchsubscription.txt
1408+++ b/lib/lp/code/stories/webservice/xx-branchsubscription.txt
1409@@ -31,15 +31,15 @@ A user can subscribe to a branch through the API.
1410
1411 >>> from lazr.restful.testing.webservice import pprint_entry
1412 >>> pprint_entry(subscription.jsonBody())
1413- branch_link: u'http://.../~farmer-bob/farm/corn'
1414- max_diff_lines: u"Don't send diffs"
1415- notification_level: u'Branch attribute notifications only'
1416- person_link: u'http://.../~farmer-joe'
1417- resource_type_link: u'http://.../#branch_subscription'
1418- review_level: u'No email'
1419- self_link: u'http://.../~farmer-bob/farm/corn/+subscription/farmer-joe'
1420- subscribed_by_link: u'http://.../~salgado'
1421- web_link: u'http://code.../~farmer-bob/farm/corn/+subscription/farmer-joe'
1422+ branch_link: 'http://.../~farmer-bob/farm/corn'
1423+ max_diff_lines: "Don't send diffs"
1424+ notification_level: 'Branch attribute notifications only'
1425+ person_link: 'http://.../~farmer-joe'
1426+ resource_type_link: 'http://.../#branch_subscription'
1427+ review_level: 'No email'
1428+ self_link: 'http://.../~farmer-bob/farm/corn/+subscription/farmer-joe'
1429+ subscribed_by_link: 'http://.../~salgado'
1430+ web_link: 'http://code.../~farmer-bob/farm/corn/+subscription/farmer-joe'
1431
1432 >>> def print_subscriber_count(branch):
1433 ... subscribers = webservice.get(
1434@@ -86,15 +86,15 @@ was originally subscribed.
1435 ... code_review_level=u'Status changes only')
1436
1437 >>> pprint_entry(subscription.jsonBody())
1438- branch_link: u'http://.../~farmer-bob/farm/corn'
1439- max_diff_lines: u'Send entire diff'
1440- notification_level: u'No email'
1441- person_link: u'http://.../~farmer-joe'
1442- resource_type_link: u'http://.../#branch_subscription'
1443- review_level: u'Status changes only'
1444- self_link: u'http://.../~farmer-bob/farm/corn/+subscription/farmer-joe'
1445- subscribed_by_link: u'http://.../~salgado'
1446- web_link: u'http://code.../~farmer-bob/farm/corn/+subscription/farmer-joe'
1447+ branch_link: 'http://.../~farmer-bob/farm/corn'
1448+ max_diff_lines: 'Send entire diff'
1449+ notification_level: 'No email'
1450+ person_link: 'http://.../~farmer-joe'
1451+ resource_type_link: 'http://.../#branch_subscription'
1452+ review_level: 'Status changes only'
1453+ self_link: 'http://.../~farmer-bob/farm/corn/+subscription/farmer-joe'
1454+ subscribed_by_link: 'http://.../~salgado'
1455+ web_link: 'http://code.../~farmer-bob/farm/corn/+subscription/farmer-joe'
1456
1457
1458 We print the count, and even though subscribe was called again, there's still
1459diff --git a/lib/lp/registry/stories/webservice/xx-distribution-mirror.txt b/lib/lp/registry/stories/webservice/xx-distribution-mirror.txt
1460index 3e49ebe..2737490 100644
1461--- a/lib/lp/registry/stories/webservice/xx-distribution-mirror.txt
1462+++ b/lib/lp/registry/stories/webservice/xx-distribution-mirror.txt
1463@@ -12,28 +12,28 @@ mirrors:
1464 ... ubuntu['self_link'], 'getMirrorByName',
1465 ... name='canonical-archive').jsonBody()
1466 >>> pprint_entry(canonical_archive)
1467- content: u'Archive'
1468+ content: 'Archive'
1469 country_dns_mirror: False
1470- country_link: u'http://.../+countries/GB'
1471- date_created: u'2006-10-16T18:31:43.434567+00:00'
1472+ country_link: 'http://.../+countries/GB'
1473+ date_created: '2006-10-16T18:31:43.434567+00:00'
1474 date_reviewed: None
1475 description: None
1476 displayname: None
1477- distribution_link: u'http://.../ubuntu'
1478+ distribution_link: 'http://.../ubuntu'
1479 enabled: True
1480 ftp_base_url: None
1481- http_base_url: u'http://archive.ubuntu.com/ubuntu/'
1482+ http_base_url: 'http://archive.ubuntu.com/ubuntu/'
1483 https_base_url: None
1484- name: u'canonical-archive'
1485+ name: 'canonical-archive'
1486 official_candidate: True
1487- owner_link: u'http://.../~mark'
1488- resource_type_link: u'http://.../#distribution_mirror'
1489+ owner_link: 'http://.../~mark'
1490+ resource_type_link: 'http://.../#distribution_mirror'
1491 reviewer_link: None
1492 rsync_base_url: None
1493- self_link: u'http://.../ubuntu/+mirror/canonical-archive'
1494- speed: u'100 Mbps'
1495- status: u'Official'
1496- web_link: u'http://launchpad.../ubuntu/+mirror/canonical-archive'
1497+ self_link: 'http://.../ubuntu/+mirror/canonical-archive'
1498+ speed: '100 Mbps'
1499+ status: 'Official'
1500+ web_link: 'http://launchpad.../ubuntu/+mirror/canonical-archive'
1501 whiteboard: None
1502
1503 And CD image mirrors:
1504@@ -42,28 +42,28 @@ And CD image mirrors:
1505 >>> canonical_releases = ubuntu_cd_mirrors['entries'][0]
1506 >>> canonical_releases_json = webservice.get(canonical_releases['self_link']).jsonBody()
1507 >>> pprint_entry(canonical_releases_json)
1508- content: u'CD Image'
1509+ content: 'CD Image'
1510 country_dns_mirror: False
1511- country_link: u'http://.../+countries/GB'
1512- date_created: u'2006-10-16T18:31:43.434567+00:00'
1513+ country_link: 'http://.../+countries/GB'
1514+ date_created: '2006-10-16T18:31:43.434567+00:00'
1515 date_reviewed: None
1516 description: None
1517 displayname: None
1518- distribution_link: u'http://.../ubuntu'
1519+ distribution_link: 'http://.../ubuntu'
1520 enabled: True
1521 ftp_base_url: None
1522- http_base_url: u'http://releases.ubuntu.com/'
1523+ http_base_url: 'http://releases.ubuntu.com/'
1524 https_base_url: None
1525- name: u'canonical-releases'
1526+ name: 'canonical-releases'
1527 official_candidate: True
1528- owner_link: u'http://.../~mark'
1529- resource_type_link: u'http://.../#distribution_mirror'
1530+ owner_link: 'http://.../~mark'
1531+ resource_type_link: 'http://.../#distribution_mirror'
1532 reviewer_link: None
1533 rsync_base_url: None
1534- self_link: u'http://.../ubuntu/+mirror/canonical-releases'
1535- speed: u'100 Mbps'
1536- status: u'Official'
1537- web_link: u'http://launchpad.../ubuntu/+mirror/canonical-releases'
1538+ self_link: 'http://.../ubuntu/+mirror/canonical-releases'
1539+ speed: '100 Mbps'
1540+ status: 'Official'
1541+ web_link: 'http://launchpad.../ubuntu/+mirror/canonical-releases'
1542 whiteboard: None
1543
1544 = Security checks =
1545@@ -136,28 +136,28 @@ Mirror listing admins may see all:
1546 >>> response = karl_webservice.get(
1547 ... archive_404_mirror['self_link']).jsonBody()
1548 >>> pprint_entry(response)
1549- content: u'Archive'
1550+ content: 'Archive'
1551 country_dns_mirror: False
1552- country_link: u'http://.../+countries/FR'
1553- date_created: u'2006-10-16T18:31:43.438573+00:00'
1554+ country_link: 'http://.../+countries/FR'
1555+ date_created: '2006-10-16T18:31:43.438573+00:00'
1556 date_reviewed: None
1557 description: None
1558 displayname: None
1559- distribution_link: u'http://.../ubuntu'
1560+ distribution_link: 'http://.../ubuntu'
1561 enabled: True
1562 ftp_base_url: None
1563- http_base_url: u'http://localhost:11375/archive-mirror/'
1564+ http_base_url: 'http://localhost:11375/archive-mirror/'
1565 https_base_url: None
1566- name: u'archive-404-mirror'
1567+ name: 'archive-404-mirror'
1568 official_candidate: True
1569- owner_link: u'http://.../~name12'
1570- resource_type_link: u'http://.../#distribution_mirror'
1571+ owner_link: 'http://.../~name12'
1572+ resource_type_link: 'http://.../#distribution_mirror'
1573 reviewer_link: None
1574 rsync_base_url: None
1575- self_link: u'http://.../ubuntu/+mirror/archive-404-mirror'
1576- speed: u'512 Kbps'
1577- status: u'Official'
1578- web_link: u'http://launchpad.../ubuntu/+mirror/archive-404-mirror'
1579+ self_link: 'http://.../ubuntu/+mirror/archive-404-mirror'
1580+ speed: '512 Kbps'
1581+ status: 'Official'
1582+ web_link: 'http://launchpad.../ubuntu/+mirror/archive-404-mirror'
1583 whiteboard: None
1584
1585 Now trying to set the owner using Sample Person's webservice is not authorized.
1586@@ -219,29 +219,29 @@ While others can be set with the appropriate authorization:
1587 >>> response = karl_webservice.patch(
1588 ... canonical_releases['self_link'], 'application/json', dumps(patch)).jsonBody()
1589 >>> pprint_entry(response)
1590- content: u'CD Image'
1591+ content: 'CD Image'
1592 country_dns_mirror: False
1593- country_link: u'http://.../+countries/GL'
1594- date_created: u'2006-10-16T18:31:43.434567+00:00'
1595+ country_link: 'http://.../+countries/GL'
1596+ date_created: '2006-10-16T18:31:43.434567+00:00'
1597 date_reviewed: None
1598 description: None
1599 displayname: None
1600- distribution_link: u'http://.../ubuntu'
1601+ distribution_link: 'http://.../ubuntu'
1602 enabled: True
1603 ftp_base_url: None
1604- http_base_url: u'http://releases.ubuntu.com/'
1605+ http_base_url: 'http://releases.ubuntu.com/'
1606 https_base_url: None
1607- name: u'canonical-releases'
1608+ name: 'canonical-releases'
1609 official_candidate: True
1610- owner_link: u'http://.../~mark'
1611- resource_type_link: u'http://.../#distribution_mirror'
1612+ owner_link: 'http://.../~mark'
1613+ resource_type_link: 'http://.../#distribution_mirror'
1614 reviewer_link: None
1615 rsync_base_url: None
1616- self_link: u'http://.../ubuntu/+mirror/canonical-releases'
1617- speed: u'100 Mbps'
1618- status: u'Unofficial'
1619- web_link: u'http://launchpad.../ubuntu/+mirror/canonical-releases'
1620- whiteboard: u'This mirror is too shiny to be true'
1621+ self_link: 'http://.../ubuntu/+mirror/canonical-releases'
1622+ speed: '100 Mbps'
1623+ status: 'Unofficial'
1624+ web_link: 'http://launchpad.../ubuntu/+mirror/canonical-releases'
1625+ whiteboard: 'This mirror is too shiny to be true'
1626
1627 = Distribution Mirror Custom Operations =
1628
1629diff --git a/lib/lp/registry/stories/webservice/xx-distribution.txt b/lib/lp/registry/stories/webservice/xx-distribution.txt
1630index f99a1a9..3463c08 100644
1631--- a/lib/lp/registry/stories/webservice/xx-distribution.txt
1632+++ b/lib/lp/registry/stories/webservice/xx-distribution.txt
1633@@ -20,30 +20,30 @@ And for every distribution we publish most of its attributes.
1634 >>> ubuntu = webservice.get(distro['self_link']).jsonBody()
1635 >>> pprint_entry(ubuntu)
1636 active: True
1637- active_milestones_collection_link: u'http://.../ubuntu/active_milestones'
1638- all_milestones_collection_link: u'http://.../ubuntu/all_milestones'
1639- archive_mirrors_collection_link: u'http://.../ubuntu/archive_mirrors'
1640- archives_collection_link: u'http://.../ubuntu/archives'
1641+ active_milestones_collection_link: 'http://.../ubuntu/active_milestones'
1642+ all_milestones_collection_link: 'http://.../ubuntu/all_milestones'
1643+ archive_mirrors_collection_link: 'http://.../ubuntu/archive_mirrors'
1644+ archives_collection_link: 'http://.../ubuntu/archives'
1645 bug_reported_acknowledgement: None
1646 bug_reporting_guidelines: None
1647 bug_supervisor_link: None
1648- cdimage_mirrors_collection_link: u'http://.../ubuntu/cdimage_mirrors'
1649- current_series_link: u'http://.../ubuntu/hoary'
1650- date_created: u'2006-10-16T18:31:43.415195+00:00'
1651- derivatives_collection_link: u'http://.../ubuntu/derivatives'
1652- description: u'Ubuntu is a new approach...'
1653+ cdimage_mirrors_collection_link: 'http://.../ubuntu/cdimage_mirrors'
1654+ current_series_link: 'http://.../ubuntu/hoary'
1655+ date_created: '2006-10-16T18:31:43.415195+00:00'
1656+ derivatives_collection_link: 'http://.../ubuntu/derivatives'
1657+ description: 'Ubuntu is a new approach...'
1658 development_series_alias: None
1659- display_name: u'Ubuntu'
1660- domain_name: u'ubuntulinux.org'
1661+ display_name: 'Ubuntu'
1662+ domain_name: 'ubuntulinux.org'
1663 driver_link: None
1664 homepage_content: None
1665- icon_link: u'http://.../ubuntu/icon'
1666- logo_link: u'http://.../ubuntu/logo'
1667- main_archive_link: u'http://.../ubuntu/+archive/primary'
1668- members_link: u'http://.../~ubuntu-team'
1669- mirror_admin_link: u'http://.../~ubuntu-mirror-admins'
1670- mugshot_link: u'http://.../ubuntu/mugshot'
1671- name: u'ubuntu'
1672+ icon_link: 'http://.../ubuntu/icon'
1673+ logo_link: 'http://.../ubuntu/logo'
1674+ main_archive_link: 'http://.../ubuntu/+archive/primary'
1675+ members_link: 'http://.../~ubuntu-team'
1676+ mirror_admin_link: 'http://.../~ubuntu-mirror-admins'
1677+ mugshot_link: 'http://.../ubuntu/mugshot'
1678+ name: 'ubuntu'
1679 oci_project_admin_link: None
1680 official_answers: True
1681 official_blueprints: True
1682@@ -51,18 +51,18 @@ And for every distribution we publish most of its attributes.
1683 official_bugs: True
1684 official_codehosting: False
1685 official_packages: True
1686- owner_link: u'http://.../~ubuntu-team'
1687+ owner_link: 'http://.../~ubuntu-team'
1688 redirect_release_uploads: False
1689- registrant_link: u'http://.../~registry'
1690- resource_type_link: u'http://.../#distribution'
1691- self_link: u'http://.../ubuntu'
1692- series_collection_link: u'http://.../ubuntu/series'
1693- summary: u'Ubuntu is a new approach to Linux Distribution...'
1694+ registrant_link: 'http://.../~registry'
1695+ resource_type_link: 'http://.../#distribution'
1696+ self_link: 'http://.../ubuntu'
1697+ series_collection_link: 'http://.../ubuntu/series'
1698+ summary: 'Ubuntu is a new approach to Linux Distribution...'
1699 supports_mirrors: True
1700 supports_ppas: True
1701- title: u'Ubuntu'
1702+ title: 'Ubuntu'
1703 vcs: None
1704- web_link: u'http://launchpad.../ubuntu'
1705+ web_link: 'http://launchpad.../ubuntu'
1706
1707
1708 Distribution Custom Operations
1709@@ -149,28 +149,28 @@ packages matching (substring) the given text.
1710 ... ubuntu['self_link'], 'getMirrorByName',
1711 ... name='canonical-releases').jsonBody()
1712 >>> pprint_entry(canonical_releases)
1713- content: u'CD Image'
1714+ content: 'CD Image'
1715 country_dns_mirror: False
1716- country_link: u'http://.../+countries/GB'
1717- date_created: u'2006-10-16T18:31:43.434567+00:00'
1718+ country_link: 'http://.../+countries/GB'
1719+ date_created: '2006-10-16T18:31:43.434567+00:00'
1720 date_reviewed: None
1721 description: None
1722 displayname: None
1723- distribution_link: u'http://.../ubuntu'
1724+ distribution_link: 'http://.../ubuntu'
1725 enabled: True
1726 ftp_base_url: None
1727- http_base_url: u'http://releases.ubuntu.com/'
1728+ http_base_url: 'http://releases.ubuntu.com/'
1729 https_base_url: None
1730- name: u'canonical-releases'
1731+ name: 'canonical-releases'
1732 official_candidate: True
1733- owner_link: u'http://.../~mark'
1734- resource_type_link: u'http://.../#distribution_mirror'
1735+ owner_link: 'http://.../~mark'
1736+ resource_type_link: 'http://.../#distribution_mirror'
1737 reviewer_link: None
1738 rsync_base_url: None
1739- self_link: u'http://.../ubuntu/+mirror/canonical-releases'
1740- speed: u'100 Mbps'
1741- status: u'Official'
1742- web_link: u'http://launchpad.../ubuntu/+mirror/canonical-releases'
1743+ self_link: 'http://.../ubuntu/+mirror/canonical-releases'
1744+ speed: '100 Mbps'
1745+ status: 'Official'
1746+ web_link: 'http://launchpad.../ubuntu/+mirror/canonical-releases'
1747 whiteboard: None
1748
1749 "getCountryMirror" returns the country DNS mirror for a given country;
1750@@ -220,9 +220,9 @@ Mark new mirror as official and a country mirror.
1751 ... country=antarctica['self_link'],
1752 ... mirror_type="Archive").jsonBody()
1753 >>> pprint_entry(antarctica_country_mirror_archive)
1754- content: u'Archive'
1755+ content: 'Archive'
1756 country_dns_mirror: True
1757- country_link: u'http://.../+countries/AQ'
1758+ country_link: 'http://.../+countries/AQ'
1759 ...
1760
1761 >>> uk = webservice.get("/+countries/GB").jsonBody()
1762diff --git a/lib/lp/registry/stories/webservice/xx-distroseries.txt b/lib/lp/registry/stories/webservice/xx-distroseries.txt
1763index bc01416..0cff63d 100644
1764--- a/lib/lp/registry/stories/webservice/xx-distroseries.txt
1765+++ b/lib/lp/registry/stories/webservice/xx-distroseries.txt
1766@@ -59,43 +59,43 @@ For distroseries we publish a subset of its attributes.
1767 >>> pprint_entry(current_series)
1768 active: True
1769 active_milestones_collection_link:
1770- u'http://.../ubuntu/hoary/active_milestones'
1771+ 'http://.../ubuntu/hoary/active_milestones'
1772 advertise_by_hash: False
1773- all_milestones_collection_link: u'http://.../ubuntu/hoary/all_milestones'
1774- architectures_collection_link: u'http://.../ubuntu/hoary/architectures'
1775+ all_milestones_collection_link: 'http://.../ubuntu/hoary/all_milestones'
1776+ architectures_collection_link: 'http://.../ubuntu/hoary/architectures'
1777 bug_reported_acknowledgement: None
1778 bug_reporting_guidelines: None
1779- changeslist: u'hoary-changes@ubuntu.com'
1780+ changeslist: 'hoary-changes@ubuntu.com'
1781 component_names: [u'main', u'restricted']
1782- date_created: u'2006-10-16T18:31:43.483559+00:00'
1783+ date_created: '2006-10-16T18:31:43.483559+00:00'
1784 datereleased: None
1785- description: u'Hoary is the ...
1786- displayname: u'Hoary'
1787- distribution_link: u'http://.../ubuntu'
1788+ description: 'Hoary is the ...
1789+ displayname: 'Hoary'
1790+ distribution_link: 'http://.../ubuntu'
1791 driver_link: None
1792- drivers_collection_link: u'http://.../ubuntu/hoary/drivers'
1793- fullseriesname: u'Ubuntu Hoary'
1794+ drivers_collection_link: 'http://.../ubuntu/hoary/drivers'
1795+ fullseriesname: 'Ubuntu Hoary'
1796 include_long_descriptions: True
1797 index_compressors: [u'gzip', u'bzip2']
1798 language_pack_full_export_requested: False
1799- main_archive_link: u'http://.../ubuntu/+archive/primary'
1800- name: u'hoary'
1801- nominatedarchindep_link: u'http://.../ubuntu/hoary/i386'
1802+ main_archive_link: 'http://.../ubuntu/+archive/primary'
1803+ name: 'hoary'
1804+ nominatedarchindep_link: 'http://.../ubuntu/hoary/i386'
1805 official_bug_tags: []
1806- owner_link: u'http://.../~ubuntu-team'
1807- parent_series_link: u'http://.../ubuntu/warty'
1808+ owner_link: 'http://.../~ubuntu-team'
1809+ parent_series_link: 'http://.../ubuntu/warty'
1810 publish_by_hash: False
1811- registrant_link: u'http://.../~mark'
1812+ registrant_link: 'http://.../~mark'
1813 resource_type_link: ...
1814- self_link: u'http://.../ubuntu/hoary'
1815- status: u'Active Development'
1816+ self_link: 'http://.../ubuntu/hoary'
1817+ status: 'Active Development'
1818 suite_names:
1819 [u'Release', u'Security', u'Updates', u'Proposed', u'Backports']
1820- summary: u'Hoary is the ...
1821+ summary: 'Hoary is the ...
1822 supported: False
1823- title: u'The Hoary Hedgehog Release'
1824- version: u'5.04'
1825- web_link: u'http://launchpad.../ubuntu/hoary'
1826+ title: 'The Hoary Hedgehog Release'
1827+ version: '5.04'
1828+ web_link: 'http://launchpad.../ubuntu/hoary'
1829
1830
1831 Getting the previous series
1832diff --git a/lib/lp/registry/stories/webservice/xx-person.txt b/lib/lp/registry/stories/webservice/xx-person.txt
1833index a70885a..58a700e 100644
1834--- a/lib/lp/registry/stories/webservice/xx-person.txt
1835+++ b/lib/lp/registry/stories/webservice/xx-person.txt
1836@@ -9,121 +9,121 @@ for teams (as they're defined in the ITeam interface).
1837 >>> from lazr.restful.testing.webservice import pprint_entry
1838 >>> salgado = webservice.get("/~salgado").jsonBody()
1839 >>> pprint_entry(salgado)
1840- admins_collection_link: u'http://.../~salgado/admins'
1841+ admins_collection_link: 'http://.../~salgado/admins'
1842 archive_link: None
1843 confirmed_email_addresses_collection_link:
1844- u'http://.../~salgado/confirmed_email_addresses'
1845- date_created: u'2005-06-06T08:59:51.596025+00:00'
1846+ 'http://.../~salgado/confirmed_email_addresses'
1847+ date_created: '2005-06-06T08:59:51.596025+00:00'
1848 deactivated_members_collection_link:
1849- u'http://.../~salgado/deactivated_members'
1850+ 'http://.../~salgado/deactivated_members'
1851 description: None
1852- display_name: u'Guilherme Salgado'
1853- expired_members_collection_link: u'http://.../~salgado/expired_members'
1854- gpg_keys_collection_link: u'http://.../~salgado/gpg_keys'
1855+ display_name: 'Guilherme Salgado'
1856+ expired_members_collection_link: 'http://.../~salgado/expired_members'
1857+ gpg_keys_collection_link: 'http://.../~salgado/gpg_keys'
1858 hide_email_addresses: False
1859 homepage_content: None
1860- invited_members_collection_link: u'http://.../~salgado/invited_members'
1861- irc_nicknames_collection_link: u'http://.../~salgado/irc_nicknames'
1862+ invited_members_collection_link: 'http://.../~salgado/invited_members'
1863+ irc_nicknames_collection_link: 'http://.../~salgado/irc_nicknames'
1864 is_probationary: True
1865 is_team: False
1866 is_ubuntu_coc_signer: False
1867 is_valid: True
1868- jabber_ids_collection_link: u'http://.../~salgado/jabber_ids'
1869+ jabber_ids_collection_link: 'http://.../~salgado/jabber_ids'
1870 karma: 0
1871- languages_collection_link: u'http://.../~salgado/languages'
1872+ languages_collection_link: 'http://.../~salgado/languages'
1873 latitude: None
1874- logo_link: u'http://.../~salgado/logo'
1875+ logo_link: 'http://.../~salgado/logo'
1876 longitude: None
1877- mailing_list_auto_subscribe_policy: u'Ask me when I join a team'
1878- members_collection_link: u'http://.../~salgado/members'
1879- members_details_collection_link: u'http://.../~salgado/members_details'
1880+ mailing_list_auto_subscribe_policy: 'Ask me when I join a team'
1881+ members_collection_link: 'http://.../~salgado/members'
1882+ members_details_collection_link: 'http://.../~salgado/members_details'
1883 memberships_details_collection_link:
1884- u'http://.../~salgado/memberships_details'
1885- mugshot_link: u'http://.../~salgado/mugshot'
1886- name: u'salgado'
1887+ 'http://.../~salgado/memberships_details'
1888+ mugshot_link: 'http://.../~salgado/mugshot'
1889+ name: 'salgado'
1890 open_membership_invitations_collection_link:
1891- u'http://.../~salgado/open_membership_invitations'
1892- participants_collection_link: u'http://.../~salgado/participants'
1893- ppas_collection_link: u'http://.../~salgado/ppas'
1894+ 'http://.../~salgado/open_membership_invitations'
1895+ participants_collection_link: 'http://.../~salgado/participants'
1896+ ppas_collection_link: 'http://.../~salgado/ppas'
1897 preferred_email_address_link:
1898- u'http://.../~salgado/+email/guilherme.salgado@canonical.com'
1899+ 'http://.../~salgado/+email/guilherme.salgado@canonical.com'
1900 private: False
1901- proposed_members_collection_link: u'http://.../~salgado/proposed_members'
1902- recipes_collection_link: u'http://.../~salgado/recipes'
1903- resource_type_link: u'http://.../#person'
1904- self_link: u'http://.../~salgado'
1905- sshkeys_collection_link: u'http://.../~salgado/sshkeys'
1906- sub_teams_collection_link: u'http://.../~salgado/sub_teams'
1907- super_teams_collection_link: u'http://.../~salgado/super_teams'
1908+ proposed_members_collection_link: 'http://.../~salgado/proposed_members'
1909+ recipes_collection_link: 'http://.../~salgado/recipes'
1910+ resource_type_link: 'http://.../#person'
1911+ self_link: 'http://.../~salgado'
1912+ sshkeys_collection_link: 'http://.../~salgado/sshkeys'
1913+ sub_teams_collection_link: 'http://.../~salgado/sub_teams'
1914+ super_teams_collection_link: 'http://.../~salgado/super_teams'
1915 team_owner_link: None
1916- time_zone: u'UTC'
1917- visibility: u'Public'
1918- web_link: u'http://launchpad.../~salgado'
1919- wiki_names_collection_link: u'http://.../~salgado/wiki_names'
1920+ time_zone: 'UTC'
1921+ visibility: 'Public'
1922+ web_link: 'http://launchpad.../~salgado'
1923+ wiki_names_collection_link: 'http://.../~salgado/wiki_names'
1924
1925 >>> ubuntu_team = webservice.get("/~ubuntu-team").jsonBody()
1926 >>> pprint_entry(ubuntu_team)
1927- admins_collection_link: u'http://.../~ubuntu-team/admins'
1928+ admins_collection_link: 'http://.../~ubuntu-team/admins'
1929 archive_link: None
1930 confirmed_email_addresses_collection_link:
1931- u'http://.../~ubuntu-team/confirmed_email_addresses'
1932- date_created: u'2005-06-06T08:59:51.605760+00:00'
1933+ 'http://.../~ubuntu-team/confirmed_email_addresses'
1934+ date_created: '2005-06-06T08:59:51.605760+00:00'
1935 deactivated_members_collection_link:
1936- u'http://.../~ubuntu-team/deactivated_members'
1937+ 'http://.../~ubuntu-team/deactivated_members'
1938 default_membership_period: None
1939 default_renewal_period: None
1940- description: u'This Team is responsible for the Ubuntu Distribution'
1941- display_name: u'Ubuntu Team'
1942+ description: 'This Team is responsible for the Ubuntu Distribution'
1943+ display_name: 'Ubuntu Team'
1944 expired_members_collection_link:
1945- u'http://.../~ubuntu-team/expired_members'
1946- gpg_keys_collection_link: u'http://.../~ubuntu-team/gpg_keys'
1947+ 'http://.../~ubuntu-team/expired_members'
1948+ gpg_keys_collection_link: 'http://.../~ubuntu-team/gpg_keys'
1949 hide_email_addresses: False
1950 homepage_content: None
1951 invited_members_collection_link:
1952- u'http://.../~ubuntu-team/invited_members'
1953- irc_nicknames_collection_link: u'http://.../~ubuntu-team/irc_nicknames'
1954+ 'http://.../~ubuntu-team/invited_members'
1955+ irc_nicknames_collection_link: 'http://.../~ubuntu-team/irc_nicknames'
1956 is_probationary: False
1957 is_team: True
1958 is_ubuntu_coc_signer: False
1959 is_valid: True
1960- jabber_ids_collection_link: u'http://.../~ubuntu-team/jabber_ids'
1961+ jabber_ids_collection_link: 'http://.../~ubuntu-team/jabber_ids'
1962 karma: 0
1963- languages_collection_link: u'http://.../~ubuntu-team/languages'
1964+ languages_collection_link: 'http://.../~ubuntu-team/languages'
1965 latitude: None
1966- logo_link: u'http://.../~ubuntu-team/logo'
1967+ logo_link: 'http://.../~ubuntu-team/logo'
1968 longitude: None
1969- mailing_list_auto_subscribe_policy: u'Ask me when I join a team'
1970- members_collection_link: u'http://.../~ubuntu-team/members'
1971+ mailing_list_auto_subscribe_policy: 'Ask me when I join a team'
1972+ members_collection_link: 'http://.../~ubuntu-team/members'
1973 members_details_collection_link:
1974- u'http://.../~ubuntu-team/members_details'
1975- membership_policy: u'Moderated Team'
1976+ 'http://.../~ubuntu-team/members_details'
1977+ membership_policy: 'Moderated Team'
1978 memberships_details_collection_link:
1979- u'http://.../~ubuntu-team/memberships_details'
1980- mugshot_link: u'http://.../~ubuntu-team/mugshot'
1981- name: u'ubuntu-team'
1982+ 'http://.../~ubuntu-team/memberships_details'
1983+ mugshot_link: 'http://.../~ubuntu-team/mugshot'
1984+ name: 'ubuntu-team'
1985 open_membership_invitations_collection_link:
1986- u'http://.../~ubuntu-team/open_membership_invitations'
1987- participants_collection_link: u'http://.../~ubuntu-team/participants'
1988- ppas_collection_link: u'http://.../~ubuntu-team/ppas'
1989+ 'http://.../~ubuntu-team/open_membership_invitations'
1990+ participants_collection_link: 'http://.../~ubuntu-team/participants'
1991+ ppas_collection_link: 'http://.../~ubuntu-team/ppas'
1992 preferred_email_address_link:
1993- u'http://.../~ubuntu-team/+email/support@ubuntu.com'
1994+ 'http://.../~ubuntu-team/+email/support@ubuntu.com'
1995 private: False
1996 proposed_members_collection_link:
1997- u'http://.../~ubuntu-team/proposed_members'
1998- recipes_collection_link: u'http://.../~ubuntu-team/recipes'
1999- renewal_policy: u'invite them to apply for renewal'
2000- resource_type_link: u'http://.../#team'
2001- self_link: u'http://.../~ubuntu-team'
2002- sshkeys_collection_link: u'http://.../~ubuntu-team/sshkeys'
2003- sub_teams_collection_link: u'http://.../~ubuntu-team/sub_teams'
2004- subscription_policy: u'Moderated Team'
2005- super_teams_collection_link: u'http://.../~ubuntu-team/super_teams'
2006- team_description: u'This Team is responsible for the Ubuntu Distribution'
2007- team_owner_link: u'http://.../~mark'
2008- time_zone: u'UTC'
2009- visibility: u'Public'
2010- web_link: u'http://launchpad.../~ubuntu-team'
2011- wiki_names_collection_link: u'http://.../~ubuntu-team/wiki_names'
2012+ 'http://.../~ubuntu-team/proposed_members'
2013+ recipes_collection_link: 'http://.../~ubuntu-team/recipes'
2014+ renewal_policy: 'invite them to apply for renewal'
2015+ resource_type_link: 'http://.../#team'
2016+ self_link: 'http://.../~ubuntu-team'
2017+ sshkeys_collection_link: 'http://.../~ubuntu-team/sshkeys'
2018+ sub_teams_collection_link: 'http://.../~ubuntu-team/sub_teams'
2019+ subscription_policy: 'Moderated Team'
2020+ super_teams_collection_link: 'http://.../~ubuntu-team/super_teams'
2021+ team_description: 'This Team is responsible for the Ubuntu Distribution'
2022+ team_owner_link: 'http://.../~mark'
2023+ time_zone: 'UTC'
2024+ visibility: 'Public'
2025+ web_link: 'http://launchpad.../~ubuntu-team'
2026+ wiki_names_collection_link: 'http://.../~ubuntu-team/wiki_names'
2027
2028 >>> sorted(set(ubuntu_team.keys()).difference(salgado.keys()))
2029 [u'default_membership_period', u'default_renewal_period',
2030@@ -162,10 +162,10 @@ representations too.
2031 >>> email = webservice.get(
2032 ... sample_person['preferred_email_address_link']).jsonBody()
2033 >>> pprint_entry(email)
2034- email: u'test@canonical.com'
2035- person_link: u'http://.../~name12'
2036- resource_type_link: u'http://.../#email_address'
2037- self_link: u'http://.../~name12/+email/test@canonical.com'
2038+ email: 'test@canonical.com'
2039+ person_link: 'http://.../~name12'
2040+ resource_type_link: 'http://.../#email_address'
2041+ self_link: 'http://.../~name12/+email/test@canonical.com'
2042
2043 One can only traverse to the email addresses of the person already
2044 traversed to, obviously.
2045@@ -219,11 +219,11 @@ show up:
2046 And then we can actually retrieve the key:
2047
2048 >>> pprint_entry(keys['entries'][0])
2049- comment: u'unique-...'
2050- keytext: u'...'
2051- keytype: u'RSA'
2052- resource_type_link: u'http://.../#ssh_key'
2053- self_link: u'http://.../~ssh-user/+ssh-keys/...'
2054+ comment: 'unique-...'
2055+ keytext: '...'
2056+ keytype: 'RSA'
2057+ resource_type_link: 'http://.../#ssh_key'
2058+ self_link: 'http://.../~ssh-user/+ssh-keys/...'
2059
2060 GPG keys
2061 ........
2062@@ -257,10 +257,10 @@ up:
2063 And then we can actually retrieve the key:
2064
2065 >>> pprint_entry(keys['entries'][0])
2066- fingerprint: u'...'
2067- keyid: u'...'
2068- resource_type_link: u'http://.../#gpg_key'
2069- self_link: u'http://.../~name12/+gpg-keys/...'
2070+ fingerprint: '...'
2071+ keyid: '...'
2072+ resource_type_link: 'http://.../#gpg_key'
2073+ self_link: 'http://.../~name12/+gpg-keys/...'
2074
2075
2076 Team memberships
2077@@ -480,12 +480,12 @@ representations too.
2078 >>> wiki_name = sorted(
2079 ... webservice.get(wikis_link).jsonBody()['entries'])[0]
2080 >>> pprint_entry(wiki_name)
2081- person_link: u'http://.../~salgado'
2082- resource_type_link: u'http://.../#wiki_name'
2083- self_link: u'http://.../~salgado/+wikiname/2'
2084- url: u'https://wiki.ubuntu.com/GuilhermeSalgado'
2085- wiki: u'https://wiki.ubuntu.com/'
2086- wikiname: u'GuilhermeSalgado'
2087+ person_link: 'http://.../~salgado'
2088+ resource_type_link: 'http://.../#wiki_name'
2089+ self_link: 'http://.../~salgado/+wikiname/2'
2090+ url: 'https://wiki.ubuntu.com/GuilhermeSalgado'
2091+ wiki: 'https://wiki.ubuntu.com/'
2092+ wikiname: 'GuilhermeSalgado'
2093
2094 One can only traverse to the WikiNames of the person already traversed
2095 to, obviously.
2096@@ -540,10 +540,10 @@ representations too.
2097 >>> jabber_id = sorted(
2098 ... webservice.get(jabber_ids_link).jsonBody()['entries'])[0]
2099 >>> pprint_entry(jabber_id)
2100- jabberid: u'markshuttleworth@jabber.org'
2101- person_link: u'http://.../~mark'
2102- resource_type_link: u'http://.../#jabber_id'
2103- self_link: u'http://.../~mark/+jabberid/markshuttleworth@jabber.org'
2104+ jabberid: 'markshuttleworth@jabber.org'
2105+ person_link: 'http://.../~mark'
2106+ resource_type_link: 'http://.../#jabber_id'
2107+ self_link: 'http://.../~mark/+jabberid/markshuttleworth@jabber.org'
2108
2109 One can only traverse to the Jabber IDs of the person already traversed
2110 to, obviously.
2111@@ -576,11 +576,11 @@ too.
2112
2113 >>> irc_id = sorted(webservice.get(irc_ids_link).jsonBody()['entries'])[0]
2114 >>> pprint_entry(irc_id)
2115- network: u'chat.freenode.net'
2116- nickname: u'mark'
2117- person_link: u'http://.../~mark'
2118- resource_type_link: u'http://.../#irc_id'
2119- self_link: u'http://.../~mark/+ircnick/1'
2120+ network: 'chat.freenode.net'
2121+ nickname: 'mark'
2122+ person_link: 'http://.../~mark'
2123+ resource_type_link: 'http://.../#irc_id'
2124+ self_link: 'http://.../~mark/+ircnick/1'
2125
2126 One can only traverse to the IRC IDs of the person already traversed
2127 to, obviously.
2128@@ -691,15 +691,15 @@ Subscribed packages can be listed with getBugSubscriberPackages:
2129 ---
2130 bug_reported_acknowledgement: None
2131 bug_reporting_guidelines: None
2132- display_name: u'...'
2133- distribution_link: u'...'
2134- name: u'fooix'
2135+ display_name: '...'
2136+ distribution_link: '...'
2137+ name: 'fooix'
2138 official_bug_tags: []
2139- resource_type_link: u'...'
2140- self_link: u'...'
2141- title: u'...'
2142+ resource_type_link: '...'
2143+ self_link: '...'
2144+ title: '...'
2145 upstream_product_link: None
2146- web_link: u'...'
2147+ web_link: '...'
2148 ---
2149
2150
2151diff --git a/lib/lp/registry/stories/webservice/xx-project-registry.txt b/lib/lp/registry/stories/webservice/xx-project-registry.txt
2152index 3694df6..cd6f1f5 100644
2153--- a/lib/lp/registry/stories/webservice/xx-project-registry.txt
2154+++ b/lib/lp/registry/stories/webservice/xx-project-registry.txt
2155@@ -64,33 +64,33 @@ host.
2156 >>> mozilla = webservice.get('/mozilla').jsonBody()
2157 >>> pprint_entry(mozilla)
2158 active: True
2159- active_milestones_collection_link: u'http://.../mozilla/active_milestones'
2160- all_milestones_collection_link: u'http://.../mozilla/all_milestones'
2161+ active_milestones_collection_link: 'http://.../mozilla/active_milestones'
2162+ all_milestones_collection_link: 'http://.../mozilla/all_milestones'
2163 bug_reported_acknowledgement: None
2164 bug_reporting_guidelines: None
2165 bug_tracker_link: None
2166- date_created: u'...'
2167- description: u'The Mozilla Project...'
2168- display_name: u'The Mozilla Project'
2169+ date_created: '...'
2170+ description: 'The Mozilla Project...'
2171+ display_name: 'The Mozilla Project'
2172 driver_link: None
2173 freshmeat_project: None
2174 homepage_content: None
2175- homepage_url: u'http://www.mozilla.org/'
2176- icon_link: u'http://.../mozilla/icon'
2177- logo_link: u'http://.../mozilla/logo'
2178- mugshot_link: u'http://.../mozilla/mugshot'
2179- name: u'mozilla'
2180+ homepage_url: 'http://www.mozilla.org/'
2181+ icon_link: 'http://.../mozilla/icon'
2182+ logo_link: 'http://.../mozilla/logo'
2183+ mugshot_link: 'http://.../mozilla/mugshot'
2184+ name: 'mozilla'
2185 official_bug_tags: []
2186- owner_link: u'http://.../~name12'
2187- projects_collection_link: u'http://.../mozilla/projects'
2188- registrant_link: u'http://.../~name12'
2189- resource_type_link: u'...'
2190+ owner_link: 'http://.../~name12'
2191+ projects_collection_link: 'http://.../mozilla/projects'
2192+ registrant_link: 'http://.../~name12'
2193+ resource_type_link: '...'
2194 reviewed: False
2195- self_link: u'http://.../mozilla'
2196+ self_link: 'http://.../mozilla'
2197 sourceforge_project: None
2198- summary: u'The Mozilla Project...'
2199- title: u'The Mozilla Project'
2200- web_link: u'http://launchpad.../mozilla'
2201+ summary: 'The Mozilla Project...'
2202+ title: 'The Mozilla Project'
2203+ web_link: 'http://launchpad.../mozilla'
2204 wiki_url: None
2205
2206 The milestones can be accessed through the
2207@@ -151,59 +151,59 @@ Projects are available at their canonical URL on the API virtual host.
2208 >>> firefox = webservice.get('/firefox').jsonBody()
2209 >>> pprint_entry(firefox)
2210 active: True
2211- active_milestones_collection_link: u'http://.../firefox/active_milestones'
2212- all_milestones_collection_link: u'http://.../firefox/all_milestones'
2213- brand_link: u'http://.../firefox/brand'
2214+ active_milestones_collection_link: 'http://.../firefox/active_milestones'
2215+ all_milestones_collection_link: 'http://.../firefox/all_milestones'
2216+ brand_link: 'http://.../firefox/brand'
2217 bug_reported_acknowledgement: None
2218 bug_reporting_guidelines: None
2219 bug_supervisor_link: None
2220 bug_tracker_link: None
2221 commercial_subscription_is_due: False
2222 commercial_subscription_link: None
2223- date_created: u'2004-09-24T20:58:02.185708+00:00'
2224+ date_created: '2004-09-24T20:58:02.185708+00:00'
2225 date_next_suggest_packaging: None
2226- description: u'The Mozilla Firefox web browser'
2227- development_focus_link: u'http://.../firefox/trunk'
2228- display_name: u'Mozilla Firefox'
2229+ description: 'The Mozilla Firefox web browser'
2230+ development_focus_link: 'http://.../firefox/trunk'
2231+ display_name: 'Mozilla Firefox'
2232 download_url: None
2233 driver_link: None
2234 freshmeat_project: None
2235 homepage_url: None
2236- icon_link: u'http://.../firefox/icon'
2237- information_type: u'Public'
2238+ icon_link: 'http://.../firefox/icon'
2239+ information_type: 'Public'
2240 is_permitted: True
2241 license_approved: False
2242 license_info: None
2243 licenses: [u'MIT / X / Expat Licence']
2244- logo_link: u'http://.../firefox/logo'
2245- name: u'firefox'
2246+ logo_link: 'http://.../firefox/logo'
2247+ name: 'firefox'
2248 official_answers: True
2249 official_blueprints: False
2250 official_bug_tags: []
2251 official_bugs: True
2252 official_codehosting: False
2253- owner_link: u'http://.../~name12'
2254+ owner_link: 'http://.../~name12'
2255 private: False
2256 private_bugs: False
2257 programming_language: None
2258- project_group_link: u'http://.../mozilla'
2259+ project_group_link: 'http://.../mozilla'
2260 project_reviewed: False
2261 qualifies_for_free_hosting: True
2262- recipes_collection_link: u'http://.../firefox/recipes'
2263- registrant_link: u'http://.../~name12'
2264- releases_collection_link: u'http://.../firefox/releases'
2265+ recipes_collection_link: 'http://.../firefox/recipes'
2266+ registrant_link: 'http://.../~name12'
2267+ releases_collection_link: 'http://.../firefox/releases'
2268 remote_product: None
2269- resource_type_link: u'http://.../#project'
2270+ resource_type_link: 'http://.../#project'
2271 reviewer_whiteboard: None
2272 screenshots_url: None
2273- self_link: u'http://.../firefox'
2274- series_collection_link: u'http://.../firefox/series'
2275+ self_link: 'http://.../firefox'
2276+ series_collection_link: 'http://.../firefox/series'
2277 sourceforge_project: None
2278- summary: u'The Mozilla Firefox web browser'
2279- title: u'Mozilla Firefox'
2280+ summary: 'The Mozilla Firefox web browser'
2281+ title: 'Mozilla Firefox'
2282 translation_focus_link: None
2283 vcs: None
2284- web_link: u'http://launchpad.../firefox'
2285+ web_link: 'http://launchpad.../firefox'
2286 wiki_url: None
2287
2288 In Launchpad project names may not have uppercase letters in their
2289@@ -665,9 +665,9 @@ functionality at an object called the pillar set.
2290
2291 >>> pillar_set = webservice.get("/pillars").jsonBody()
2292 >>> pprint_entry(pillar_set)
2293- featured_pillars_collection_link: u'http://.../pillars/featured_pillars'
2294- resource_type_link: u'...'
2295- self_link: u'...'
2296+ featured_pillars_collection_link: 'http://.../pillars/featured_pillars'
2297+ resource_type_link: '...'
2298+ self_link: '...'
2299
2300 The featured pillars are available as a separate collection. Because
2301 they're of different resource types, the best way to compare them is by
2302@@ -727,28 +727,28 @@ virtual host.
2303 >>> pprint_entry(babadoo_foobadoo)
2304 active: True
2305 active_milestones_collection_link:
2306- u'http://.../babadoo/foobadoo/active_milestones'
2307+ 'http://.../babadoo/foobadoo/active_milestones'
2308 all_milestones_collection_link:
2309- u'http://.../babadoo/foobadoo/all_milestones'
2310- branch_link: u'http://.../~babadoo-owner/babadoo/fooey'
2311+ 'http://.../babadoo/foobadoo/all_milestones'
2312+ branch_link: 'http://.../~babadoo-owner/babadoo/fooey'
2313 bug_reported_acknowledgement: None
2314 bug_reporting_guidelines: None
2315- date_created: u'...'
2316- display_name: u'foobadoo'
2317+ date_created: '...'
2318+ display_name: 'foobadoo'
2319 driver_link: None
2320- drivers_collection_link: u'http://.../babadoo/foobadoo/drivers'
2321- name: u'foobadoo'
2322+ drivers_collection_link: 'http://.../babadoo/foobadoo/drivers'
2323+ name: 'foobadoo'
2324 official_bug_tags: []
2325- owner_link: u'http://.../~babadoo-owner'
2326- project_link: u'http://.../babadoo'
2327+ owner_link: 'http://.../~babadoo-owner'
2328+ project_link: 'http://.../babadoo'
2329 release_finder_url_pattern: None
2330- releases_collection_link: u'http://.../babadoo/foobadoo/releases'
2331- resource_type_link: u'...'
2332- self_link: u'http://.../babadoo/foobadoo'
2333- status: u'Active Development'
2334- summary: u'Foobadoo support for Babadoo'
2335- title: u'Babadoo foobadoo series'
2336- web_link: u'http://launchpad.../babadoo/foobadoo'
2337+ releases_collection_link: 'http://.../babadoo/foobadoo/releases'
2338+ resource_type_link: '...'
2339+ self_link: 'http://.../babadoo/foobadoo'
2340+ status: 'Active Development'
2341+ summary: 'Foobadoo support for Babadoo'
2342+ title: 'Babadoo foobadoo series'
2343+ web_link: 'http://launchpad.../babadoo/foobadoo'
2344
2345 "get_timeline" returns a lightweight representation of the series'
2346 milestones and releases.
2347@@ -840,20 +840,20 @@ host.
2348
2349 >>> firefox_1_0_0 = webservice.get('/firefox/1.0/1.0.0').jsonBody()
2350 >>> pprint_entry(firefox_1_0_0)
2351- changelog: u''
2352- date_created: u'2005-06-06T08:59:51.930201+00:00'
2353- date_released: u'2004-06-28T00:00:00+00:00'
2354- display_name: u'Mozilla Firefox 1.0.0'
2355- files_collection_link: u'http://.../firefox/1.0/1.0.0/files'
2356- milestone_link: u'http://.../firefox/+milestone/1.0.0'
2357- owner_link: u'http://.../~name12'
2358- project_link: u'http://.../firefox'
2359- release_notes: u'...'
2360- resource_type_link: u'...'
2361- self_link: u'http://.../firefox/1.0/1.0.0'
2362- title: u'Mozilla Firefox 1.0.0 "First Stable Release"'
2363- version: u'1.0.0'
2364- web_link: u'http://launchpad.../firefox/1.0/1.0.0'
2365+ changelog: ''
2366+ date_created: '2005-06-06T08:59:51.930201+00:00'
2367+ date_released: '2004-06-28T00:00:00+00:00'
2368+ display_name: 'Mozilla Firefox 1.0.0'
2369+ files_collection_link: 'http://.../firefox/1.0/1.0.0/files'
2370+ milestone_link: 'http://.../firefox/+milestone/1.0.0'
2371+ owner_link: 'http://.../~name12'
2372+ project_link: 'http://.../firefox'
2373+ release_notes: '...'
2374+ resource_type_link: '...'
2375+ self_link: 'http://.../firefox/1.0/1.0.0'
2376+ title: 'Mozilla Firefox 1.0.0 "First Stable Release"'
2377+ version: '1.0.0'
2378+ web_link: 'http://launchpad.../firefox/1.0/1.0.0'
2379
2380 The createProductRelease method is called by sending
2381 "ws.op=createProductRelease" as a request variable along with the
2382@@ -920,18 +920,18 @@ virtual host.
2383 ... '/firefox/+milestone/1.0').jsonBody()
2384 >>> pprint_entry(firefox_milestone_1_0)
2385 code_name: None
2386- date_targeted: u'2056-10-16'
2387+ date_targeted: '2056-10-16'
2388 is_active: True
2389- name: u'1.0'
2390+ name: '1.0'
2391 official_bug_tags: []
2392 release_link: None
2393- resource_type_link: u'...'
2394- self_link: u'http://.../firefox/+milestone/1.0'
2395- series_target_link: u'http://.../firefox/trunk'
2396+ resource_type_link: '...'
2397+ self_link: 'http://.../firefox/+milestone/1.0'
2398+ series_target_link: 'http://.../firefox/trunk'
2399 summary: None
2400- target_link: u'http://.../firefox'
2401- title: u'Mozilla Firefox 1.0'
2402- web_link: u'http://launchpad.../firefox/+milestone/1.0'
2403+ target_link: 'http://.../firefox'
2404+ title: 'Mozilla Firefox 1.0'
2405+ web_link: 'http://launchpad.../firefox/+milestone/1.0'
2406
2407 The milestone entry has a link to its release if it has one.
2408
2409@@ -966,17 +966,17 @@ virtual host.
2410 >>> url = '/firefox/trunk/0.9.2/+file/firefox_0.9.2.orig.tar.gz'
2411 >>> result = webservice.get(url).jsonBody()
2412 >>> pprint_entry(result)
2413- date_uploaded: u'2005-06-06T08:59:51.926792+00:00'
2414+ date_uploaded: '2005-06-06T08:59:51.926792+00:00'
2415 description: None
2416 file_link:
2417- u'http://.../firefox/trunk/0.9.2/+file/firefox_0.9.2.orig.tar.gz/file'
2418- file_type: u'Code Release Tarball'
2419- project_release_link: u'http://.../firefox/trunk/0.9.2'
2420- resource_type_link: u'http://.../#project_release_file'
2421+ 'http://.../firefox/trunk/0.9.2/+file/firefox_0.9.2.orig.tar.gz/file'
2422+ file_type: 'Code Release Tarball'
2423+ project_release_link: 'http://.../firefox/trunk/0.9.2'
2424+ resource_type_link: 'http://.../#project_release_file'
2425 self_link:
2426- u'http://.../firefox/trunk/0.9.2/+file/firefox_0.9.2.orig.tar.gz'
2427+ 'http://.../firefox/trunk/0.9.2/+file/firefox_0.9.2.orig.tar.gz'
2428 signature_link:
2429- u'http://.../trunk/0.9.2/+file/firefox_0.9.2.orig.tar.gz/signature'
2430+ 'http://.../trunk/0.9.2/+file/firefox_0.9.2.orig.tar.gz/signature'
2431
2432 The actual file redirects to the librarian when accessed.
2433
2434diff --git a/lib/lp/registry/stories/webservice/xx-source-package.txt b/lib/lp/registry/stories/webservice/xx-source-package.txt
2435index b994be1..eb577dc 100644
2436--- a/lib/lp/registry/stories/webservice/xx-source-package.txt
2437+++ b/lib/lp/registry/stories/webservice/xx-source-package.txt
2438@@ -29,16 +29,16 @@ distribution series.
2439 >>> pprint_entry(evolution)
2440 bug_reported_acknowledgement: None
2441 bug_reporting_guidelines: None
2442- displayname: u'evolution in My-distro My-series'
2443- distribution_link: u'http://.../my-distro'
2444- distroseries_link: u'http://.../my-distro/my-series'
2445+ displayname: 'evolution in My-distro My-series'
2446+ distribution_link: 'http://.../my-distro'
2447+ distroseries_link: 'http://.../my-distro/my-series'
2448 latest_published_component_name: None
2449- name: u'evolution'
2450+ name: 'evolution'
2451 official_bug_tags: []
2452 productseries_link: None
2453 resource_type_link: ...
2454- self_link: u'http://api.../my-distro/my-series/+source/evolution'
2455- web_link: u'http://.../+source/evolution'
2456+ self_link: 'http://api.../my-distro/my-series/+source/evolution'
2457+ web_link: 'http://.../+source/evolution'
2458
2459
2460 Getting official branches
2461diff --git a/lib/lp/registry/stories/webservice/xx-structuralsubscription.txt b/lib/lp/registry/stories/webservice/xx-structuralsubscription.txt
2462index d740115..c072745 100644
2463--- a/lib/lp/registry/stories/webservice/xx-structuralsubscription.txt
2464+++ b/lib/lp/registry/stories/webservice/xx-structuralsubscription.txt
2465@@ -46,14 +46,14 @@ Now Eric subscribes to Fooix's bug notifications.
2466 start: 0
2467 total_size: 1
2468 ---
2469- bug_filters_collection_link: u'.../fooix/+subscription/eric/bug_filters'
2470- date_created: u'...'
2471- date_last_updated: u'...'
2472- resource_type_link: u'http://.../#structural_subscription'
2473- self_link: u'http://.../fooix/+subscription/eric'
2474- subscribed_by_link: u'http://.../~eric'
2475- subscriber_link: u'http://.../~eric'
2476- target_link: u'http://.../fooix'
2477+ bug_filters_collection_link: '.../fooix/+subscription/eric/bug_filters'
2478+ date_created: '...'
2479+ date_last_updated: '...'
2480+ resource_type_link: 'http://.../#structural_subscription'
2481+ self_link: 'http://.../fooix/+subscription/eric'
2482+ subscribed_by_link: 'http://.../~eric'
2483+ subscriber_link: 'http://.../~eric'
2484+ target_link: 'http://.../fooix'
2485 ---
2486
2487 He can examine his subscription directly.
2488@@ -61,14 +61,14 @@ He can examine his subscription directly.
2489 >>> pprint_entry(eric_webservice.named_get(
2490 ... '/fooix', 'getSubscription',
2491 ... person=webservice.getAbsoluteUrl('/~eric')).jsonBody())
2492- bug_filters_collection_link: u'.../fooix/+subscription/eric/bug_filters'
2493- date_created: u'...'
2494- date_last_updated: u'...'
2495- resource_type_link: u'http://.../#structural_subscription'
2496- self_link: u'http://.../fooix/+subscription/eric'
2497- subscribed_by_link: u'http://.../~eric'
2498- subscriber_link: u'http://.../~eric'
2499- target_link: u'http://.../fooix'
2500+ bug_filters_collection_link: '.../fooix/+subscription/eric/bug_filters'
2501+ date_created: '...'
2502+ date_last_updated: '...'
2503+ resource_type_link: 'http://.../#structural_subscription'
2504+ self_link: 'http://.../fooix/+subscription/eric'
2505+ subscribed_by_link: 'http://.../~eric'
2506+ subscriber_link: 'http://.../~eric'
2507+ target_link: 'http://.../fooix'
2508
2509 If the subscription doesn't exist, None will be returned.
2510
2511@@ -118,14 +118,14 @@ admin by virtue of his ownership.
2512 start: 0
2513 total_size: 1
2514 ---
2515- bug_filters_collection_link: u'.../fooix/+subscription/pythons/bug_filters'
2516- date_created: u'...'
2517- date_last_updated: u'...'
2518- resource_type_link: u'http://.../#structural_subscription'
2519- self_link: u'http://.../fooix/+subscription/pythons'
2520- subscribed_by_link: u'http://.../~michael'
2521- subscriber_link: u'http://.../~pythons'
2522- target_link: u'http://.../fooix'
2523+ bug_filters_collection_link: '.../fooix/+subscription/pythons/bug_filters'
2524+ date_created: '...'
2525+ date_last_updated: '...'
2526+ resource_type_link: 'http://.../#structural_subscription'
2527+ self_link: 'http://.../fooix/+subscription/pythons'
2528+ subscribed_by_link: 'http://.../~michael'
2529+ subscriber_link: 'http://.../~pythons'
2530+ target_link: 'http://.../fooix'
2531 ---
2532
2533 Eric can't unsubscribe the team either.
2534diff --git a/lib/lp/services/worlddata/stories/webservice/xx-country.txt b/lib/lp/services/worlddata/stories/webservice/xx-country.txt
2535index d2aba2d..30aeaa7 100644
2536--- a/lib/lp/services/worlddata/stories/webservice/xx-country.txt
2537+++ b/lib/lp/services/worlddata/stories/webservice/xx-country.txt
2538@@ -18,12 +18,12 @@ And for every country we publish most of its attributes.
2539 >>> andorra = webservice.get(country['self_link']).jsonBody()
2540 >>> pprint_entry(andorra)
2541 description: None
2542- iso3166code2: u'AD'
2543- iso3166code3: u'AND'
2544- name: u'Andorra'
2545- resource_type_link: u'http://.../#country'
2546- self_link: u'http://.../+countries/AD'
2547- title: u'Principality of Andorra'
2548+ iso3166code2: 'AD'
2549+ iso3166code3: 'AND'
2550+ name: 'Andorra'
2551+ resource_type_link: 'http://.../#country'
2552+ self_link: 'http://.../+countries/AD'
2553+ title: 'Principality of Andorra'
2554
2555 Make sure that invalid countries return 404s and not OOPSes.
2556
2557diff --git a/lib/lp/soyuz/stories/webservice/xx-archive-commercial.txt b/lib/lp/soyuz/stories/webservice/xx-archive-commercial.txt
2558index 005f8d6..f90ee45 100644
2559--- a/lib/lp/soyuz/stories/webservice/xx-archive-commercial.txt
2560+++ b/lib/lp/soyuz/stories/webservice/xx-archive-commercial.txt
2561@@ -136,16 +136,16 @@ It returns a collection of `ArchiveSubscriber` objects:
2562 start: 0
2563 total_size: 1
2564 ---
2565- archive_link: u'http://.../+archive/ubuntu/commercial'
2566+ archive_link: 'http://.../+archive/ubuntu/commercial'
2567 date_created: ...
2568 date_expires: None
2569 description: None
2570- registrant_link: u'http://.../~software-center-agent'
2571- resource_type_link: u'http://.../#archive_subscriber'
2572- self_link: u'http://.../+archive/ubuntu/commercial/+subscriptions/joe'
2573- status: u'Active'
2574- subscriber_link: u'http://.../~joe'
2575- web_link: u'http://.../+archive/ubuntu/commercial/+subscriptions/joe'
2576+ registrant_link: 'http://.../~software-center-agent'
2577+ resource_type_link: 'http://.../#archive_subscriber'
2578+ self_link: 'http://.../+archive/ubuntu/commercial/+subscriptions/joe'
2579+ status: 'Active'
2580+ subscriber_link: 'http://.../~joe'
2581+ web_link: 'http://.../+archive/ubuntu/commercial/+subscriptions/joe'
2582 ---
2583
2584 Additionally to the person itself, the subscriptions can be inspected
2585@@ -168,16 +168,16 @@ and it includes 'commercial-admins' users:
2586 start: 0
2587 total_size: 1
2588 ---
2589- archive_link: u'http://.../+archive/ubuntu/commercial'
2590+ archive_link: 'http://.../+archive/ubuntu/commercial'
2591 date_created: ...
2592 date_expires: None
2593 description: None
2594- registrant_link: u'http://.../~software-center-agent'
2595- resource_type_link: u'http://.../#archive_subscriber'
2596- self_link: u'http://.../+archive/ubuntu/commercial/+subscriptions/joe'
2597- status: u'Active'
2598- subscriber_link: u'http://.../~joe'
2599- web_link: u'http://.../+archive/ubuntu/commercial/+subscriptions/joe'
2600+ registrant_link: 'http://.../~software-center-agent'
2601+ resource_type_link: 'http://.../#archive_subscriber'
2602+ self_link: 'http://.../+archive/ubuntu/commercial/+subscriptions/joe'
2603+ status: 'Active'
2604+ subscriber_link: 'http://.../~joe'
2605+ web_link: 'http://.../+archive/ubuntu/commercial/+subscriptions/joe'
2606 ---
2607
2608 Subscription cancellation can be performed by invoking 'cancel' operation
2609diff --git a/lib/lp/soyuz/stories/webservice/xx-archive.txt b/lib/lp/soyuz/stories/webservice/xx-archive.txt
2610index 7acd47c..0b07995 100644
2611--- a/lib/lp/soyuz/stories/webservice/xx-archive.txt
2612+++ b/lib/lp/soyuz/stories/webservice/xx-archive.txt
2613@@ -18,22 +18,22 @@ We publish a subset of their attributes.
2614 >>> pprint_entry(cprov_archive)
2615 authorized_size: 1024
2616 dependencies_collection_link:
2617- u'http://.../~cprov/+archive/ubuntu/ppa/dependencies'
2618- description: u'packages to help my friends.'
2619- displayname: u'PPA for Celso Providelo'
2620- distribution_link: u'http://.../ubuntu'
2621+ 'http://.../~cprov/+archive/ubuntu/ppa/dependencies'
2622+ description: 'packages to help my friends.'
2623+ displayname: 'PPA for Celso Providelo'
2624+ distribution_link: 'http://.../ubuntu'
2625 external_dependencies: None
2626- name: u'ppa'
2627- owner_link: u'http://.../~cprov'
2628+ name: 'ppa'
2629+ owner_link: 'http://.../~cprov'
2630 private: False
2631- reference: u'~cprov/ubuntu/ppa'
2632+ reference: '~cprov/ubuntu/ppa'
2633 relative_build_score: 0
2634 require_virtualized: True
2635- resource_type_link: u'http://.../#archive'
2636- self_link: u'http://.../~cprov/+archive/ubuntu/ppa'
2637+ resource_type_link: 'http://.../#archive'
2638+ self_link: 'http://.../~cprov/+archive/ubuntu/ppa'
2639 signing_key_fingerprint: None
2640 suppress_subscription_notifications: False
2641- web_link: u'http://launchpad.../~cprov/+archive/ubuntu/ppa'
2642+ web_link: 'http://launchpad.../~cprov/+archive/ubuntu/ppa'
2643
2644 For "devel" additional attributes are available.
2645
2646@@ -42,27 +42,27 @@ For "devel" additional attributes are available.
2647 >>> pprint_entry(cprov_archive_devel)
2648 authorized_size: 1024
2649 build_debug_symbols: False
2650- dependencies_collection_link: u'http://.../~cprov/+archive/ubuntu/ppa/dependencies'
2651- description: u'packages to help my friends.'
2652- displayname: u'PPA for Celso Providelo'
2653- distribution_link: u'http://.../ubuntu'
2654- enabled_restricted_processors_collection_link: u'http://.../~cprov/+archive/ubuntu/ppa/enabled_restricted_processors'
2655+ dependencies_collection_link: 'http://.../~cprov/+archive/ubuntu/ppa/dependencies'
2656+ description: 'packages to help my friends.'
2657+ displayname: 'PPA for Celso Providelo'
2658+ distribution_link: 'http://.../ubuntu'
2659+ enabled_restricted_processors_collection_link: 'http://.../~cprov/+archive/ubuntu/ppa/enabled_restricted_processors'
2660 external_dependencies: None
2661- name: u'ppa'
2662- owner_link: u'http://.../~cprov'
2663+ name: 'ppa'
2664+ owner_link: 'http://.../~cprov'
2665 permit_obsolete_series_uploads: False
2666 private: False
2667- processors_collection_link: u'http://.../~cprov/+archive/ubuntu/ppa/processors'
2668+ processors_collection_link: 'http://.../~cprov/+archive/ubuntu/ppa/processors'
2669 publish_debug_symbols: False
2670- reference: u'~cprov/ubuntu/ppa'
2671+ reference: '~cprov/ubuntu/ppa'
2672 relative_build_score: 0
2673 require_virtualized: True
2674- resource_type_link: u'http://.../#archive'
2675- self_link: u'http://.../~cprov/+archive/ubuntu/ppa'
2676+ resource_type_link: 'http://.../#archive'
2677+ self_link: 'http://.../~cprov/+archive/ubuntu/ppa'
2678 signing_key_fingerprint: None
2679- status: u'Active'
2680+ status: 'Active'
2681 suppress_subscription_notifications: False
2682- web_link: u'http://launchpad.../~cprov/+archive/ubuntu/ppa'
2683+ web_link: 'http://launchpad.../~cprov/+archive/ubuntu/ppa'
2684
2685 While the Archive signing key is being generated its
2686 'signing_key_fingerprint' attribute is None.
2687@@ -122,22 +122,22 @@ The archive has the following attributes:
2688 >>> pprint_entry(ubuntu_main_archive)
2689 authorized_size: None
2690 dependencies_collection_link:
2691- u'http://.../ubuntutest/+archive/primary/dependencies'
2692+ 'http://.../ubuntutest/+archive/primary/dependencies'
2693 description: None
2694- displayname: u'Primary Archive for Ubuntu Test'
2695- distribution_link: u'http://.../ubuntutest'
2696+ displayname: 'Primary Archive for Ubuntu Test'
2697+ distribution_link: 'http://.../ubuntutest'
2698 external_dependencies: None
2699- name: u'primary'
2700- owner_link: u'http://.../~ubuntu-team'
2701+ name: 'primary'
2702+ owner_link: 'http://.../~ubuntu-team'
2703 private: False
2704- reference: u'ubuntutest'
2705+ reference: 'ubuntutest'
2706 relative_build_score: 0
2707 require_virtualized: False
2708- resource_type_link: u'http://.../#archive'
2709- self_link: u'http://.../ubuntutest/+archive/primary'
2710+ resource_type_link: 'http://.../#archive'
2711+ self_link: 'http://.../ubuntutest/+archive/primary'
2712 signing_key_fingerprint: None
2713 suppress_subscription_notifications: False
2714- web_link: u'http://launchpad.../ubuntutest/+archive/primary'
2715+ web_link: 'http://launchpad.../ubuntutest/+archive/primary'
2716
2717 A distribution can also provide a list of all its archives:
2718
2719@@ -175,14 +175,14 @@ This is a permission that allows a team to upload to a component:
2720 ... '?type=component&item=main')
2721 >>> ubuntu_main_permission = webservice.get(url).jsonBody()
2722 >>> pprint_entry(ubuntu_main_permission)
2723- archive_link: u'http://.../ubuntu/+archive/primary'
2724- component_name: u'main'
2725+ archive_link: 'http://.../ubuntu/+archive/primary'
2726+ component_name: 'main'
2727 date_created: ...
2728- permission: u'Archive Upload Rights'
2729- person_link: u'http://.../~ubuntu-team'
2730+ permission: 'Archive Upload Rights'
2731+ person_link: 'http://.../~ubuntu-team'
2732 pocket: None
2733 resource_type_link: ...
2734- self_link: u'http://.../ubuntu/+archive/primary/+upload/ubuntu-team?type=component&item=main'
2735+ self_link: 'http://.../ubuntu/+archive/primary/+upload/ubuntu-team?type=component&item=main'
2736 source_package_name: None
2737
2738 This is a permission that allows an individual to upload a source package.
2739@@ -191,16 +191,16 @@ This is a permission that allows an individual to upload a source package.
2740 ... '?type=packagename&item=mozilla-firefox')
2741 >>> carlos_mozilla_permission = webservice.get(url).jsonBody()
2742 >>> pprint_entry(carlos_mozilla_permission)
2743- archive_link: u'http://.../ubuntu/+archive/primary'
2744+ archive_link: 'http://.../ubuntu/+archive/primary'
2745 component_name: None
2746 date_created: ...
2747- permission: u'Archive Upload Rights'
2748- person_link: u'http://.../~carlos'
2749+ permission: 'Archive Upload Rights'
2750+ person_link: 'http://.../~carlos'
2751 pocket: None
2752 resource_type_link: ...
2753 self_link:
2754- u'http://.../ubuntu/+archive/primary/+upload/carlos?type=packagename&item=mozilla-firefox'
2755- source_package_name: u'mozilla-firefox'
2756+ 'http://.../ubuntu/+archive/primary/+upload/carlos?type=packagename&item=mozilla-firefox'
2757+ source_package_name: 'mozilla-firefox'
2758
2759 This is a queue admin right for ubuntu-team:
2760
2761@@ -208,15 +208,15 @@ This is a queue admin right for ubuntu-team:
2762 ... '?type=component&item=main')
2763 >>> ubuntu_main_permission = webservice.get(url).jsonBody()
2764 >>> pprint_entry(ubuntu_main_permission)
2765- archive_link: u'http://.../ubuntu/+archive/primary'
2766- component_name: u'main'
2767+ archive_link: 'http://.../ubuntu/+archive/primary'
2768+ component_name: 'main'
2769 date_created: ...
2770- permission: u'Queue Administration Rights'
2771- person_link: u'http://.../~ubuntu-team'
2772+ permission: 'Queue Administration Rights'
2773+ person_link: 'http://.../~ubuntu-team'
2774 pocket: None
2775 resource_type_link: ...
2776 self_link:
2777- u'http://.../ubuntu/+archive/primary/+queue-admin/ubuntu-team?type=component&item=main'
2778+ 'http://.../ubuntu/+archive/primary/+queue-admin/ubuntu-team?type=component&item=main'
2779 source_package_name: None
2780
2781 And one for an individual:
2782@@ -225,15 +225,15 @@ And one for an individual:
2783 ... '?type=component&item=universe')
2784 >>> name16_admin_permission = webservice.get(url).jsonBody()
2785 >>> pprint_entry(name16_admin_permission)
2786- archive_link: u'http://.../ubuntu/+archive/primary'
2787- component_name: u'universe'
2788+ archive_link: 'http://.../ubuntu/+archive/primary'
2789+ component_name: 'universe'
2790 date_created: ...
2791- permission: u'Queue Administration Rights'
2792- person_link: u'http://.../~name12'
2793+ permission: 'Queue Administration Rights'
2794+ person_link: 'http://.../~name12'
2795 pocket: None
2796 resource_type_link: ...
2797 self_link:
2798- u'http://.../ubuntu/+archive/primary/+queue-admin/name12?type=component&item=universe'
2799+ 'http://.../ubuntu/+archive/primary/+queue-admin/name12?type=component&item=universe'
2800 source_package_name: None
2801
2802
2803@@ -1191,44 +1191,44 @@ attributes are only exposed when the requestor has View permission in
2804 the IArchive context, in this case only Celso has it.
2805
2806 >>> pprint_entry(user_webservice.get("/~cprov/+archive/ubuntu/p3a").jsonBody())
2807- authorized_size: u'tag:launchpad.net:2008:redacted'
2808+ authorized_size: 'tag:launchpad.net:2008:redacted'
2809 dependencies_collection_link:
2810- u'http://.../~cprov/+archive/ubuntu/p3a/dependencies'
2811- description: u'tag:launchpad.net:2008:redacted'
2812- displayname: u'PPA named p3a for Celso Providelo'
2813- distribution_link: u'http://.../ubuntu'
2814- external_dependencies: u'tag:launchpad.net:2008:redacted'
2815- name: u'p3a'
2816- owner_link: u'http://.../~cprov'
2817+ 'http://.../~cprov/+archive/ubuntu/p3a/dependencies'
2818+ description: 'tag:launchpad.net:2008:redacted'
2819+ displayname: 'PPA named p3a for Celso Providelo'
2820+ distribution_link: 'http://.../ubuntu'
2821+ external_dependencies: 'tag:launchpad.net:2008:redacted'
2822+ name: 'p3a'
2823+ owner_link: 'http://.../~cprov'
2824 private: True
2825- reference: u'~cprov/ubuntu/p3a'
2826+ reference: '~cprov/ubuntu/p3a'
2827 relative_build_score: 0
2828- require_virtualized: u'tag:launchpad.net:2008:redacted'
2829- resource_type_link: u'http://.../#archive'
2830- self_link: u'http://.../~cprov/+archive/ubuntu/p3a'
2831- signing_key_fingerprint: u'tag:launchpad.net:2008:redacted'
2832+ require_virtualized: 'tag:launchpad.net:2008:redacted'
2833+ resource_type_link: 'http://.../#archive'
2834+ self_link: 'http://.../~cprov/+archive/ubuntu/p3a'
2835+ signing_key_fingerprint: 'tag:launchpad.net:2008:redacted'
2836 suppress_subscription_notifications: False
2837- web_link: u'http://launchpad.../~cprov/+archive/ubuntu/p3a'
2838+ web_link: 'http://launchpad.../~cprov/+archive/ubuntu/p3a'
2839
2840 >>> pprint_entry(cprov_webservice.get("/~cprov/+archive/ubuntu/p3a").jsonBody())
2841 authorized_size: 2048
2842 dependencies_collection_link:
2843- u'http://.../~cprov/+archive/ubuntu/p3a/dependencies'
2844- description: u'packages to help my friends.'
2845- displayname: u'PPA named p3a for Celso Providelo'
2846- distribution_link: u'http://.../ubuntu'
2847+ 'http://.../~cprov/+archive/ubuntu/p3a/dependencies'
2848+ description: 'packages to help my friends.'
2849+ displayname: 'PPA named p3a for Celso Providelo'
2850+ distribution_link: 'http://.../ubuntu'
2851 external_dependencies: None
2852- name: u'p3a'
2853- owner_link: u'http://.../~cprov'
2854+ name: 'p3a'
2855+ owner_link: 'http://.../~cprov'
2856 private: True
2857- reference: u'~cprov/ubuntu/p3a'
2858+ reference: '~cprov/ubuntu/p3a'
2859 relative_build_score: 0
2860 require_virtualized: True
2861- resource_type_link: u'http://.../#archive'
2862- self_link: u'http://.../~cprov/+archive/ubuntu/p3a'
2863- signing_key_fingerprint: u'ABCDEF0123456789ABCDDCBA0000111112345678'
2864+ resource_type_link: 'http://.../#archive'
2865+ self_link: 'http://.../~cprov/+archive/ubuntu/p3a'
2866+ signing_key_fingerprint: 'ABCDEF0123456789ABCDDCBA0000111112345678'
2867 suppress_subscription_notifications: False
2868- web_link: u'http://launchpad.../~cprov/+archive/ubuntu/p3a'
2869+ web_link: 'http://launchpad.../~cprov/+archive/ubuntu/p3a'
2870
2871 Creating subscriptions to a (private) archive
2872 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2873@@ -1277,16 +1277,16 @@ We publish a subset of the IArchiveSubscriber attributes.
2874 >>> new_subscription = cprov_webservice.get(
2875 ... response.getHeader('Location')).jsonBody()
2876 >>> pprint_entry(new_subscription)
2877- archive_link: u'http://api.launchpad.test/beta/~cprov/+archive/ubuntu/p3a'
2878+ archive_link: 'http://api.launchpad.test/beta/~cprov/+archive/ubuntu/p3a'
2879 date_created: ...
2880 date_expires: None
2881 description: None
2882- registrant_link: u'http://api.launchpad.test/beta/~cprov'
2883- resource_type_link: u'http://api.launchpad.test/beta/#archive_subscriber'
2884- self_link: u'http://api.../~cprov/+archive/ubuntu/p3a/+subscriptions/mark'
2885- status: u'Active'
2886- subscriber_link: u'http://api.launchpad.test/beta/~mark'
2887- web_link: u'http://launchpad.../~cprov/+archive/ubuntu/p3a/+subscriptions/mark'
2888+ registrant_link: 'http://api.launchpad.test/beta/~cprov'
2889+ resource_type_link: 'http://api.launchpad.test/beta/#archive_subscriber'
2890+ self_link: 'http://api.../~cprov/+archive/ubuntu/p3a/+subscriptions/mark'
2891+ status: 'Active'
2892+ subscriber_link: 'http://api.launchpad.test/beta/~mark'
2893+ web_link: 'http://launchpad.../~cprov/+archive/ubuntu/p3a/+subscriptions/mark'
2894
2895 Other webservice users cannot view the subscription.
2896
2897@@ -1448,14 +1448,14 @@ attributes.
2898 ... '/~cprov/+archive/ubuntu/ppa', 'getArchiveDependency',
2899 ... dependency=ubuntu['main_archive_link']).jsonBody()
2900 >>> pprint_entry(cprov_main_dependency)
2901- archive_link: u'http://.../~cprov/+archive/ubuntu/ppa'
2902- component_name: u'universe'
2903+ archive_link: 'http://.../~cprov/+archive/ubuntu/ppa'
2904+ component_name: 'universe'
2905 date_created: ...
2906- dependency_link: u'http://.../ubuntu/+archive/primary'
2907- pocket: u'Release'
2908- resource_type_link: u'http://.../#archive_dependency'
2909- self_link: u'http://.../~cprov/+archive/ubuntu/ppa/+dependency/1'
2910- title: u'Primary Archive for Ubuntu Linux - RELEASE (main, universe)'
2911+ dependency_link: 'http://.../ubuntu/+archive/primary'
2912+ pocket: 'Release'
2913+ resource_type_link: 'http://.../#archive_dependency'
2914+ self_link: 'http://.../~cprov/+archive/ubuntu/ppa/+dependency/1'
2915+ title: 'Primary Archive for Ubuntu Linux - RELEASE (main, universe)'
2916
2917 Asking for an archive on which there is no dependency returns None.
2918
2919diff --git a/lib/lp/soyuz/stories/webservice/xx-binary-package-publishing.txt b/lib/lp/soyuz/stories/webservice/xx-binary-package-publishing.txt
2920index 0d04c43..2b0fc7d 100644
2921--- a/lib/lp/soyuz/stories/webservice/xx-binary-package-publishing.txt
2922+++ b/lib/lp/soyuz/stories/webservice/xx-binary-package-publishing.txt
2923@@ -66,30 +66,30 @@ Each binary publication exposes a number of properties:
2924 >>> from lazr.restful.testing.webservice import pprint_entry
2925 >>> pprint_entry(pubs['entries'][0])
2926 architecture_specific: True
2927- archive_link: u'http://.../~cprov/+archive/ubuntu/ppa'
2928- binary_package_name: u'mozilla-firefox'
2929- binary_package_version: u'1.0'
2930- build_link: u'http://.../~cprov/+archive/ubuntu/ppa/+build/28'
2931- component_name: u'main'
2932+ archive_link: 'http://.../~cprov/+archive/ubuntu/ppa'
2933+ binary_package_name: 'mozilla-firefox'
2934+ binary_package_version: '1.0'
2935+ build_link: 'http://.../~cprov/+archive/ubuntu/ppa/+build/28'
2936+ component_name: 'main'
2937 copied_from_archive_link: None
2938 creator_link: None
2939- date_created: u'2007-08-10T13:00:00+00:00'
2940+ date_created: '2007-08-10T13:00:00+00:00'
2941 date_made_pending: None
2942- date_published: u'2007-08-10T13:00:01+00:00'
2943+ date_published: '2007-08-10T13:00:01+00:00'
2944 date_removed: None
2945 date_superseded: None
2946- display_name: u'mozilla-firefox 1.0 in warty hppa'
2947- distro_arch_series_link: u'http://.../ubuntu/warty/hppa'
2948+ display_name: 'mozilla-firefox 1.0 in warty hppa'
2949+ distro_arch_series_link: 'http://.../ubuntu/warty/hppa'
2950 phased_update_percentage: None
2951- pocket: u'Release'
2952- priority_name: u'IMPORTANT'
2953+ pocket: 'Release'
2954+ priority_name: 'IMPORTANT'
2955 removal_comment: None
2956 removed_by_link: None
2957- resource_type_link: u'http://.../#binary_package_publishing_history'
2958+ resource_type_link: 'http://.../#binary_package_publishing_history'
2959 scheduled_deletion_date: None
2960- section_name: u'base'
2961- self_link: u'http://.../~cprov/+archive/ubuntu/ppa/+binarypub/30'
2962- status: u'Published'
2963+ section_name: 'base'
2964+ self_link: 'http://.../~cprov/+archive/ubuntu/ppa/+binarypub/30'
2965+ status: 'Published'
2966
2967
2968 Security
2969@@ -186,14 +186,14 @@ Detailed download counts are also available from the getDownloadCounts method.
2970 A detailed count object can be retrieved by its URL.
2971
2972 >>> pprint_entry(webservice.get(counts[1]['self_link']).jsonBody())
2973- archive_link: u'http://.../~cprov/+archive/ubuntu/ppa'
2974- binary_package_name: u'mozilla-firefox'
2975- binary_package_version: u'1.0'
2976+ archive_link: 'http://.../~cprov/+archive/ubuntu/ppa'
2977+ binary_package_name: 'mozilla-firefox'
2978+ binary_package_version: '1.0'
2979 count: 10
2980- country_link: u'http://.../+countries/AU'
2981- day: u'2010-02-21'
2982- resource_type_link: u'http://.../#binary_package_release_download_count'
2983- self_link: u'http://.../~cprov/+archive/ubuntu/ppa/+binaryhits/mozilla-firefox/1.0/hppa/2010-02-21/AU'
2984+ country_link: 'http://.../+countries/AU'
2985+ day: '2010-02-21'
2986+ resource_type_link: 'http://.../#binary_package_release_download_count'
2987+ self_link: 'http://.../~cprov/+archive/ubuntu/ppa/+binaryhits/mozilla-firefox/1.0/hppa/2010-02-21/AU'
2988
2989 We can also filter by date.
2990
2991@@ -204,14 +204,14 @@ We can also filter by date.
2992 1
2993
2994 >>> pprint_entry(webservice.get(counts[0]['self_link']).jsonBody())
2995- archive_link: u'http://.../~cprov/+archive/ubuntu/ppa'
2996- binary_package_name: u'mozilla-firefox'
2997- binary_package_version: u'1.0'
2998+ archive_link: 'http://.../~cprov/+archive/ubuntu/ppa'
2999+ binary_package_name: 'mozilla-firefox'
3000+ binary_package_version: '1.0'
3001 count: 8
3002 country_link: None
3003- day: u'2010-02-23'
3004- resource_type_link: u'http://.../#binary_package_release_download_count'
3005- self_link: u'http://.../~cprov/+archive/ubuntu/ppa/+binaryhits/mozilla-firefox/1.0/hppa/2010-02-23/unknown'
3006+ day: '2010-02-23'
3007+ resource_type_link: 'http://.../#binary_package_release_download_count'
3008+ self_link: 'http://.../~cprov/+archive/ubuntu/ppa/+binaryhits/mozilla-firefox/1.0/hppa/2010-02-23/unknown'
3009
3010 But other URLs result in a 404.
3011
3012diff --git a/lib/lp/soyuz/stories/webservice/xx-builds.txt b/lib/lp/soyuz/stories/webservice/xx-builds.txt
3013index 78f3b97..b337f66 100644
3014--- a/lib/lp/soyuz/stories/webservice/xx-builds.txt
3015+++ b/lib/lp/soyuz/stories/webservice/xx-builds.txt
3016@@ -43,32 +43,32 @@ of properties:
3017
3018 >>> from lazr.restful.testing.webservice import pprint_entry
3019 >>> pprint_entry(builds['entries'][0])
3020- arch_tag: u'i386'
3021- archive_link: u'http://.../beta/~cprov/+archive/ubuntu/ppa'
3022- builder_link: u'http://.../beta/builders/bob'
3023+ arch_tag: 'i386'
3024+ archive_link: 'http://.../beta/~cprov/+archive/ubuntu/ppa'
3025+ builder_link: 'http://.../beta/builders/bob'
3026 can_be_cancelled: False
3027 can_be_rescored: False
3028 can_be_retried: True
3029 changesfile_url: None
3030 current_source_publication_link:
3031- u'http://.../beta/~cprov/+archive/ubuntu/ppa/+sourcepub/27'
3032- date_created: u'2007-07-08T00:00:00+00:00'
3033- date_finished: u'2007-07-08T00:00:01+00:00'
3034+ 'http://.../beta/~cprov/+archive/ubuntu/ppa/+sourcepub/27'
3035+ date_created: '2007-07-08T00:00:00+00:00'
3036+ date_finished: '2007-07-08T00:00:01+00:00'
3037 date_first_dispatched: None
3038 dependencies: None
3039- distribution_link: u'http://.../beta/ubuntu'
3040+ distribution_link: 'http://.../beta/ubuntu'
3041 log_url:
3042- u'http://.../~cprov/+archive/ubuntu/ppa/+build/26/+files/netapplet-1.0.0.tar.gz'
3043- pocket: u'Release'
3044- resource_type_link: u'http://api.launchpad.test/beta/#build'
3045+ 'http://.../~cprov/+archive/ubuntu/ppa/+build/26/+files/netapplet-1.0.0.tar.gz'
3046+ pocket: 'Release'
3047+ resource_type_link: 'http://api.launchpad.test/beta/#build'
3048 score: None
3049- self_link: u'http://api.launchpad.test/beta/~cprov/+archive/ubuntu/ppa/+build/26'
3050- source_package_name: u'cdrkit'
3051- source_package_version: u'1.0'
3052- status: u'Failed to build'
3053- title: u'i386 build of cdrkit 1.0 in ubuntu breezy-autotest RELEASE'
3054+ self_link: 'http://api.launchpad.test/beta/~cprov/+archive/ubuntu/ppa/+build/26'
3055+ source_package_name: 'cdrkit'
3056+ source_package_version: '1.0'
3057+ status: 'Failed to build'
3058+ title: 'i386 build of cdrkit 1.0 in ubuntu breezy-autotest RELEASE'
3059 upload_log_url: None
3060- web_link: u'http://launchpad.../~cprov/+archive/ubuntu/ppa/+build/26'
3061+ web_link: 'http://launchpad.../~cprov/+archive/ubuntu/ppa/+build/26'
3062
3063 Whereas the 1.0 webservice for builds maintains the old property names
3064 (without underscores):
3065@@ -76,67 +76,67 @@ Whereas the 1.0 webservice for builds maintains the old property names
3066 >>> builds_1_0 = webservice.named_get(
3067 ... source_pub['self_link'].replace('beta', '1.0'), 'getBuilds')
3068 >>> pprint_entry(builds_1_0.jsonBody()['entries'][0])
3069- arch_tag: u'i386'
3070- archive_link: u'http://.../~cprov/+archive/ubuntu/ppa'
3071+ arch_tag: 'i386'
3072+ archive_link: 'http://.../~cprov/+archive/ubuntu/ppa'
3073 build_log_url:
3074- u'http://.../~cprov/+archive/ubuntu/ppa/+build/26/+files/netapplet-1.0.0.tar.gz'
3075- builder_link: u'http://.../builders/bob'
3076- buildstate: u'Failed to build'
3077+ 'http://.../~cprov/+archive/ubuntu/ppa/+build/26/+files/netapplet-1.0.0.tar.gz'
3078+ builder_link: 'http://.../builders/bob'
3079+ buildstate: 'Failed to build'
3080 can_be_cancelled: False
3081 can_be_rescored: False
3082 can_be_retried: True
3083 changesfile_url: None
3084 current_source_publication_link:
3085- u'http://.../~cprov/+archive/ubuntu/ppa/+sourcepub/27'
3086+ 'http://.../~cprov/+archive/ubuntu/ppa/+sourcepub/27'
3087 date_first_dispatched: None
3088- datebuilt: u'2007-07-08T00:00:01+00:00'
3089- datecreated: u'2007-07-08T00:00:00+00:00'
3090+ datebuilt: '2007-07-08T00:00:01+00:00'
3091+ datecreated: '2007-07-08T00:00:00+00:00'
3092 dependencies: None
3093- distribution_link: u'http://.../ubuntu'
3094- pocket: u'Release'
3095- resource_type_link: u'http://.../#build'
3096+ distribution_link: 'http://.../ubuntu'
3097+ pocket: 'Release'
3098+ resource_type_link: 'http://.../#build'
3099 score: None
3100- self_link: u'http://.../~cprov/+archive/ubuntu/ppa/+build/26'
3101- source_package_name: u'cdrkit'
3102- source_package_version: u'1.0'
3103- title: u'i386 build of cdrkit 1.0 in ubuntu breezy-autotest RELEASE'
3104+ self_link: 'http://.../~cprov/+archive/ubuntu/ppa/+build/26'
3105+ source_package_name: 'cdrkit'
3106+ source_package_version: '1.0'
3107+ title: 'i386 build of cdrkit 1.0 in ubuntu breezy-autotest RELEASE'
3108 upload_log_url: None
3109- web_link: u'http://launchpad.../~cprov/+archive/ubuntu/ppa/+build/26'
3110+ web_link: 'http://launchpad.../~cprov/+archive/ubuntu/ppa/+build/26'
3111
3112 devel webservice also contains build date_started and duration.
3113
3114 >>> builds_devel = webservice.named_get(
3115 ... source_pub['self_link'].replace('beta', 'devel'), 'getBuilds')
3116 >>> pprint_entry(builds_devel.jsonBody()['entries'][0])
3117- arch_tag: u'i386'
3118- archive_link: u'http://.../~cprov/+archive/ubuntu/ppa'
3119+ arch_tag: 'i386'
3120+ archive_link: 'http://.../~cprov/+archive/ubuntu/ppa'
3121 build_log_url:
3122- u'http://.../~cprov/+archive/ubuntu/ppa/+build/26/+files/netapplet-1.0.0.tar.gz'
3123- builder_link: u'http://.../builders/bob'
3124- buildstate: u'Failed to build'
3125+ 'http://.../~cprov/+archive/ubuntu/ppa/+build/26/+files/netapplet-1.0.0.tar.gz'
3126+ builder_link: 'http://.../builders/bob'
3127+ buildstate: 'Failed to build'
3128 can_be_cancelled: False
3129 can_be_rescored: False
3130 can_be_retried: True
3131 changesfile_url: None
3132 current_source_publication_link:
3133- u'http://.../~cprov/+archive/ubuntu/ppa/+sourcepub/27'
3134+ 'http://.../~cprov/+archive/ubuntu/ppa/+sourcepub/27'
3135 date_first_dispatched: None
3136- date_started: u'2007-07-07T23:58:41+00:00'
3137- datebuilt: u'2007-07-08T00:00:01+00:00'
3138- datecreated: u'2007-07-08T00:00:00+00:00'
3139+ date_started: '2007-07-07T23:58:41+00:00'
3140+ datebuilt: '2007-07-08T00:00:01+00:00'
3141+ datecreated: '2007-07-08T00:00:00+00:00'
3142 dependencies: None
3143- distribution_link: u'http://.../ubuntu'
3144- duration: u'0:01:20'
3145+ distribution_link: 'http://.../ubuntu'
3146+ duration: '0:01:20'
3147 external_dependencies: None
3148- pocket: u'Release'
3149- resource_type_link: u'http://.../#build'
3150+ pocket: 'Release'
3151+ resource_type_link: 'http://.../#build'
3152 score: None
3153- self_link: u'http://.../~cprov/+archive/ubuntu/ppa/+build/26'
3154- source_package_name: u'cdrkit'
3155- source_package_version: u'1.0'
3156- title: u'i386 build of cdrkit 1.0 in ubuntu breezy-autotest RELEASE'
3157+ self_link: 'http://.../~cprov/+archive/ubuntu/ppa/+build/26'
3158+ source_package_name: 'cdrkit'
3159+ source_package_version: '1.0'
3160+ title: 'i386 build of cdrkit 1.0 in ubuntu breezy-autotest RELEASE'
3161 upload_log_url: None
3162- web_link: u'http://launchpad.../~cprov/+archive/ubuntu/ppa/+build/26'
3163+ web_link: 'http://launchpad.../~cprov/+archive/ubuntu/ppa/+build/26'
3164
3165
3166 For testing purposes we will set 'buildlog' and 'upload_log' to the
3167diff --git a/lib/lp/soyuz/stories/webservice/xx-distroarchseries.txt b/lib/lp/soyuz/stories/webservice/xx-distroarchseries.txt
3168index f094a17..a2a320b 100644
3169--- a/lib/lp/soyuz/stories/webservice/xx-distroarchseries.txt
3170+++ b/lib/lp/soyuz/stories/webservice/xx-distroarchseries.txt
3171@@ -34,21 +34,21 @@ For a distroarchseries we publish a subset of its attributes.
3172
3173 >>> from lazr.restful.testing.webservice import pprint_entry
3174 >>> pprint_entry(distroarchseries)
3175- architecture_tag: u'i386'
3176- chroot_url: u'http://.../.../filename...'
3177- display_name: u'Ubuntu Hoary i386'
3178- distroseries_link: u'http://.../ubuntu/hoary'
3179+ architecture_tag: 'i386'
3180+ chroot_url: 'http://.../.../filename...'
3181+ display_name: 'Ubuntu Hoary i386'
3182+ distroseries_link: 'http://.../ubuntu/hoary'
3183 is_nominated_arch_indep: True
3184- main_archive_link: u'http://.../ubuntu/+archive/primary'
3185+ main_archive_link: 'http://.../ubuntu/+archive/primary'
3186 official: True
3187- owner_link: u'http://.../~mark'
3188+ owner_link: 'http://.../~mark'
3189 package_count: 1
3190- processor_link: u'http://.../+processors/386'
3191- resource_type_link: u'http://.../#distro_arch_series'
3192- self_link: u'http://.../ubuntu/hoary/i386'
3193+ processor_link: 'http://.../+processors/386'
3194+ resource_type_link: 'http://.../#distro_arch_series'
3195+ self_link: 'http://.../ubuntu/hoary/i386'
3196 supports_virtualized: True
3197- title: u'The Hoary Hedgehog Release for i386 (386)'
3198- web_link: u'http://launchpad.../ubuntu/hoary/i386'
3199+ title: 'The Hoary Hedgehog Release for i386 (386)'
3200+ web_link: 'http://launchpad.../ubuntu/hoary/i386'
3201
3202 DistroArchSeries.enabled is published in the API devel version.
3203
3204@@ -56,19 +56,19 @@ DistroArchSeries.enabled is published in the API devel version.
3205 ... "/ubuntu/hoary/i386", api_version='devel').jsonBody()
3206
3207 >>> pprint_entry(distroarchseries)
3208- architecture_tag: u'i386'
3209- chroot_url: u'http://.../.../filename...'
3210- display_name: u'Ubuntu Hoary i386'
3211- distroseries_link: u'http://.../ubuntu/hoary'
3212+ architecture_tag: 'i386'
3213+ chroot_url: 'http://.../.../filename...'
3214+ display_name: 'Ubuntu Hoary i386'
3215+ distroseries_link: 'http://.../ubuntu/hoary'
3216 enabled: True
3217 is_nominated_arch_indep: True
3218- main_archive_link: u'http://.../ubuntu/+archive/primary'
3219+ main_archive_link: 'http://.../ubuntu/+archive/primary'
3220 official: True
3221- owner_link: u'http://.../~mark'
3222+ owner_link: 'http://.../~mark'
3223 package_count: 1
3224- processor_link: u'http://.../+processors/386'
3225- resource_type_link: u'http://.../#distro_arch_series'
3226- self_link: u'http://.../ubuntu/hoary/i386'
3227+ processor_link: 'http://.../+processors/386'
3228+ resource_type_link: 'http://.../#distro_arch_series'
3229+ self_link: 'http://.../ubuntu/hoary/i386'
3230 supports_virtualized: True
3231- title: u'The Hoary Hedgehog Release for i386 (386)'
3232- web_link: u'http://launchpad.../ubuntu/hoary/i386'
3233+ title: 'The Hoary Hedgehog Release for i386 (386)'
3234+ web_link: 'http://launchpad.../ubuntu/hoary/i386'
3235diff --git a/lib/lp/soyuz/stories/webservice/xx-hasbuildrecords.txt b/lib/lp/soyuz/stories/webservice/xx-hasbuildrecords.txt
3236index 228d20a..3246cca 100644
3237--- a/lib/lp/soyuz/stories/webservice/xx-hasbuildrecords.txt
3238+++ b/lib/lp/soyuz/stories/webservice/xx-hasbuildrecords.txt
3239@@ -44,9 +44,9 @@ An entry can be selected in the returned collection.
3240
3241 >>> from lazr.restful.testing.webservice import pprint_entry
3242 >>> pprint_entry(sorted(ppa_builds['entries'])[0])
3243- arch_tag: u'hppa'
3244+ arch_tag: 'hppa'
3245 ...
3246- title: u'hppa build of mozilla-firefox 0.9 in ubuntu warty RELEASE'
3247+ title: 'hppa build of mozilla-firefox 0.9 in ubuntu warty RELEASE'
3248 ...
3249
3250 Builds can be filtered by their 'build_state'.
3251diff --git a/lib/lp/soyuz/stories/webservice/xx-packageset.txt b/lib/lp/soyuz/stories/webservice/xx-packageset.txt
3252index 3f20395..5622b17 100644
3253--- a/lib/lp/soyuz/stories/webservice/xx-packageset.txt
3254+++ b/lib/lp/soyuz/stories/webservice/xx-packageset.txt
3255@@ -594,16 +594,16 @@ Let's see what we've got:
3256 >>> new_permission = webservice.get(
3257 ... response.getHeader('Location')).jsonBody()
3258 >>> pprint_entry(new_permission)
3259- archive_link: u'http://.../+archive/primary'
3260+ archive_link: 'http://.../+archive/primary'
3261 component_name: None
3262 date_created: ...
3263 explicit: False
3264- package_set_name: u'firefox'
3265- permission: u'Archive Upload Rights'
3266- person_link: u'http://.../~name12'
3267+ package_set_name: 'firefox'
3268+ permission: 'Archive Upload Rights'
3269+ person_link: 'http://.../~name12'
3270 pocket: None
3271 resource_type_link: ...
3272- self_link: u'http://.../+archive/primary/+upload/name12?type=packageset&item=firefox&series=hoary'
3273+ self_link: 'http://.../+archive/primary/+upload/name12?type=packageset&item=firefox&series=hoary'
3274 source_package_name: None
3275
3276 Grant upload privileges to 'name12' for package set 'mozilla' in the Ubuntu
3277@@ -915,11 +915,11 @@ The user 'cprov' has no upload permission for 'thunderbird' in 'hoary'.
3278 ... '?type=packageset&item=thunderbird&series=hoary')
3279 >>> permission = webservice.get(url).jsonBody()
3280 >>> pprint_entry(permission)
3281- archive_link: u'http://api.launchpad.test/beta/ubuntu/+archive/primary'
3282+ archive_link: 'http://api.launchpad.test/beta/ubuntu/+archive/primary'
3283 ...
3284- distro_series_name: u'hoary'
3285+ distro_series_name: 'hoary'
3286 ...
3287- package_set_name: u'thunderbird'
3288- permission: u'Archive Upload Rights'
3289- person_link: u'http://api.launchpad.test/beta/~cprov'
3290+ package_set_name: 'thunderbird'
3291+ permission: 'Archive Upload Rights'
3292+ person_link: 'http://api.launchpad.test/beta/~cprov'
3293 ...
3294diff --git a/lib/lp/soyuz/stories/webservice/xx-packageupload.txt b/lib/lp/soyuz/stories/webservice/xx-packageupload.txt
3295index f01a270..e88c342 100644
3296--- a/lib/lp/soyuz/stories/webservice/xx-packageupload.txt
3297+++ b/lib/lp/soyuz/stories/webservice/xx-packageupload.txt
3298@@ -18,19 +18,19 @@ Each record exposes a number of properties.
3299
3300 >>> from lazr.restful.testing.webservice import pprint_entry
3301 >>> pprint_entry(uploads['entries'][0])
3302- archive_link: u'http://.../ubuntu/+archive/primary'
3303+ archive_link: 'http://.../ubuntu/+archive/primary'
3304 copy_source_archive_link: None
3305 custom_file_urls: []
3306 date_created: ...
3307- display_arches: u'source'
3308- display_name: u'mozilla-firefox'
3309- display_version: u'0.9'
3310- distroseries_link: u'http://.../ubuntu/warty'
3311+ display_arches: 'source'
3312+ display_name: 'mozilla-firefox'
3313+ display_version: '0.9'
3314+ distroseries_link: 'http://.../ubuntu/warty'
3315 id: 11
3316- pocket: u'Release'
3317- resource_type_link: u'http://.../#package_upload'
3318- self_link: u'http://.../ubuntu/warty/+upload/11'
3319- status: u'Done'
3320+ pocket: 'Release'
3321+ resource_type_link: 'http://.../#package_upload'
3322+ self_link: 'http://.../ubuntu/warty/+upload/11'
3323+ status: 'Done'
3324
3325 getPackageUploads can filter on package names.
3326
3327diff --git a/lib/lp/soyuz/stories/webservice/xx-source-package-publishing.txt b/lib/lp/soyuz/stories/webservice/xx-source-package-publishing.txt
3328index b26e605..4a8e1eb 100644
3329--- a/lib/lp/soyuz/stories/webservice/xx-source-package-publishing.txt
3330+++ b/lib/lp/soyuz/stories/webservice/xx-source-package-publishing.txt
3331@@ -119,32 +119,32 @@ publication to play with first.
3332
3333 >>> from lazr.restful.testing.webservice import pprint_entry
3334 >>> pprint_entry(pubs['entries'][0])
3335- archive_link: u'http://.../~cprov/+archive/ubuntu/ppa'
3336- component_name: u'main'
3337+ archive_link: 'http://.../~cprov/+archive/ubuntu/ppa'
3338+ component_name: 'main'
3339 copied_from_archive_link: None
3340- creator_link: u'http://api.launchpad.test/beta/~name16'
3341+ creator_link: 'http://api.launchpad.test/beta/~name16'
3342 date_created: ...
3343 date_made_pending: None
3344 date_published: None
3345 date_removed: None
3346 date_superseded: None
3347- display_name: u'testwebservice 666 in breezy-autotest'
3348- distro_series_link: u'http://.../ubuntutest/breezy-autotest'
3349- package_creator_link: u'http://.../beta/~name16'
3350- package_maintainer_link: u'http://.../beta/~name16'
3351- package_signer_link: u'http://.../beta/~name16'
3352+ display_name: 'testwebservice 666 in breezy-autotest'
3353+ distro_series_link: 'http://.../ubuntutest/breezy-autotest'
3354+ package_creator_link: 'http://.../beta/~name16'
3355+ package_maintainer_link: 'http://.../beta/~name16'
3356+ package_signer_link: 'http://.../beta/~name16'
3357 packageupload_link: None
3358- pocket: u'Release'
3359+ pocket: 'Release'
3360 removal_comment: None
3361 removed_by_link: None
3362- resource_type_link: u'http://.../#source_package_publishing_history'
3363+ resource_type_link: 'http://.../#source_package_publishing_history'
3364 scheduled_deletion_date: None
3365- section_name: u'base'
3366- self_link: u'http://.../~cprov/+archive/ubuntu/ppa/+sourcepub/...'
3367- source_package_name: u'testwebservice'
3368- source_package_version: u'666'
3369+ section_name: 'base'
3370+ self_link: 'http://.../~cprov/+archive/ubuntu/ppa/+sourcepub/...'
3371+ source_package_name: 'testwebservice'
3372+ source_package_version: '666'
3373 sponsor_link: None
3374- status: u'Pending'
3375+ status: 'Pending'
3376
3377 >>> webservice.named_get(
3378 ... pubs['entries'][0]['self_link'], 'changesFileUrl').jsonBody()
3379diff --git a/lib/lp/translations/stories/webservice/xx-potemplate.txt b/lib/lp/translations/stories/webservice/xx-potemplate.txt
3380index 327a66a..032ab5b 100644
3381--- a/lib/lp/translations/stories/webservice/xx-potemplate.txt
3382+++ b/lib/lp/translations/stories/webservice/xx-potemplate.txt
3383@@ -12,23 +12,23 @@ Anonymous users have read access to PO templates attributes.
3384 ... '/ubuntu/hoary/+source/pmount/+pots/pmount').jsonBody()
3385 >>> pprint_entry(potemplate)
3386 active: True
3387- date_last_updated: u'2005-05-06T20:09:23.775993+00:00'
3388+ date_last_updated: '2005-05-06T20:09:23.775993+00:00'
3389 description: None
3390 exported_in_languagepacks: True
3391- format: u'PO format'
3392+ format: 'PO format'
3393 id: 2
3394 language_count: 9
3395 message_count: 63
3396- name: u'pmount'
3397- owner_link: u'http://.../~rosetta-admins'
3398- path: u'po/template.pot'
3399+ name: 'pmount'
3400+ owner_link: 'http://.../~rosetta-admins'
3401+ path: 'po/template.pot'
3402 priority: 0
3403- resource_type_link: u'http://.../#translation_template'
3404- self_link: u'http://.../ubuntu/hoary/+source/pmount/+pots/pmount'
3405- translation_domain: u'pmount'
3406+ resource_type_link: 'http://.../#translation_template'
3407+ self_link: 'http://.../ubuntu/hoary/+source/pmount/+pots/pmount'
3408+ translation_domain: 'pmount'
3409 translation_files_collection_link:
3410- u'http://.../pmount/+pots/pmount/translation_files'
3411- web_link: u'http://translati.../ubuntu/hoary/+source/pmount/+pots/pmount'
3412+ 'http://.../pmount/+pots/pmount/translation_files'
3413+ web_link: 'http://translati.../ubuntu/hoary/+source/pmount/+pots/pmount'
3414
3415 "translation_files" will list all POFiles associated with this template.
3416

Subscribers

People subscribed via source and target branches

to status/vote changes: