Merge lp:~cjwatson/launchpad/hardwaredb-tests-future-imports into lp:launchpad

Proposed by Colin Watson
Status: Merged
Merged at revision: 18933
Proposed branch: lp:~cjwatson/launchpad/hardwaredb-tests-future-imports
Merge into: lp:launchpad
Diff against target: 4805 lines (+815/-786)
13 files modified
lib/lp/hardwaredb/browser/tests/test_views.py (+4/-1)
lib/lp/hardwaredb/doc/hwdb-access.txt (+2/-2)
lib/lp/hardwaredb/doc/hwdb-device-tables.txt (+411/-407)
lib/lp/hardwaredb/doc/hwdb-submission.txt (+56/-54)
lib/lp/hardwaredb/doc/hwdb.txt (+51/-50)
lib/lp/hardwaredb/scripts/hwdbsubmissions.py (+14/-13)
lib/lp/hardwaredb/scripts/tests/test_hwdb_submission_parser.py (+38/-36)
lib/lp/hardwaredb/scripts/tests/test_hwdb_submission_processing.py (+14/-10)
lib/lp/hardwaredb/scripts/tests/test_hwdbsubmissions.py (+2/-0)
lib/lp/hardwaredb/stories/hwdb/xx-hwdb.txt (+22/-22)
lib/lp/hardwaredb/stories/webservice/xx-hwdb.txt (+175/-177)
lib/lp/hardwaredb/tests/test_doc.py (+8/-2)
lib/lp/hardwaredb/tests/test_hwdb_submission_validation.py (+18/-12)
To merge this branch: bzr merge lp:~cjwatson/launchpad/hardwaredb-tests-future-imports
Reviewer Review Type Date Requested Status
William Grant code Approve
Review via email: mp+366133@code.launchpad.net

Commit message

Convert lp.hardwaredb to Launchpad's preferred __future__ imports.

To post a comment you must log in.
Revision history for this message
William Grant (wgrant) :
review: Approve (code)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'lib/lp/hardwaredb/browser/tests/test_views.py'
2--- lib/lp/hardwaredb/browser/tests/test_views.py 2011-12-28 17:03:06 +0000
3+++ lib/lp/hardwaredb/browser/tests/test_views.py 2019-04-16 17:27:23 +0000
4@@ -5,6 +5,8 @@
5 Run the view tests.
6 """
7
8+from __future__ import absolute_import, print_function, unicode_literals
9+
10 import logging
11 import os
12 import unittest
13@@ -33,7 +35,8 @@
14 for filename in filenames:
15 path = filename
16 one_test = LayeredDocFileSuite(
17- path, setUp=setUp, tearDown=tearDown,
18+ path,
19+ setUp=lambda test: setUp(test, future=True), tearDown=tearDown,
20 layer=LaunchpadFunctionalLayer,
21 stdout_logging_level=logging.WARNING
22 )
23
24=== modified file 'lib/lp/hardwaredb/doc/hwdb-access.txt'
25--- lib/lp/hardwaredb/doc/hwdb-access.txt 2011-12-08 20:24:09 +0000
26+++ lib/lp/hardwaredb/doc/hwdb-access.txt 2019-04-16 17:27:23 +0000
27@@ -21,9 +21,9 @@
28 ... getattr(obj, attribute)
29 ... except Unauthorized:
30 ... has_access = False
31- ... print "Access for %s denied" % person_name_or_address
32+ ... print("Access for %s denied" % person_name_or_address)
33 ... if has_access:
34- ... print "Access for %s allowed" % person_name_or_address
35+ ... print("Access for %s allowed" % person_name_or_address)
36 ... logout()
37
38 >>> def check_authorized_only_for_hwdb_team(obj, attribute):
39
40=== modified file 'lib/lp/hardwaredb/doc/hwdb-device-tables.txt'
41--- lib/lp/hardwaredb/doc/hwdb-device-tables.txt 2016-01-26 15:47:37 +0000
42+++ lib/lp/hardwaredb/doc/hwdb-device-tables.txt 2019-04-16 17:27:23 +0000
43@@ -14,7 +14,7 @@
44 >>> from lp.hardwaredb.interfaces.hwdb import IHWVendorNameSet
45 >>> vendor_name_set = getUtility(IHWVendorNameSet)
46 >>> intel_name = vendor_name_set.create(name='Intel')
47- >>> print intel_name.name
48+ >>> print(intel_name.name)
49 Intel
50
51 Each name in the table must be unique. The attempt to create a second
52@@ -61,7 +61,7 @@
53 >>> a_umlaut_lower = u'\N{LATIN SMALL LETTER A WITH DIAERESIS}'
54 >>> a_umlaut_name = vendor_name_set.create(name=a_umlaut_upper)
55 >>> LaunchpadZopelessLayer.txn.commit()
56- >>> print repr(a_umlaut_name.name)
57+ >>> print(repr(a_umlaut_name.name))
58 u'\xc4'
59
60 >>> vendor_name_set.create(name=a_umlaut_lower)
61@@ -78,7 +78,7 @@
62 >>> cyrillic_de_upper = u'\N{CYRILLIC CAPITAL LETTER DE}'
63 >>> cyrillic_de_lower = u'\N{CYRILLIC SMALL LETTER DE}'
64 >>> cyrillic_de_name = vendor_name_set.create(name=cyrillic_de_upper)
65- >>> print repr(cyrillic_de_name.name)
66+ >>> print(repr(cyrillic_de_name.name))
67 u'\u0414'
68
69 >>> vendor_name_set.create(name=cyrillic_de_lower)
70@@ -95,7 +95,7 @@
71 >>> alpha_upper = u'\N{GREEK CAPITAL LETTER ALPHA}'
72 >>> alpha_lower = u'\N{GREEK SMALL LETTER ALPHA}'
73 >>> cyrillic_de_name = vendor_name_set.create(name=alpha_upper)
74- >>> print repr(cyrillic_de_name.name)
75+ >>> print(repr(cyrillic_de_name.name))
76 u'\u0391'
77
78 >>> vendor_name_set.create(name=alpha_lower)
79@@ -110,33 +110,33 @@
80 Existing IHWVendorName records are retrieved by IHWVendorName.getByName().
81
82 >>> intel_name = vendor_name_set.getByName('Intel')
83- >>> print intel_name.name
84+ >>> print(intel_name.name)
85 Intel
86
87 The capitalization of the name does not metter.
88
89 >>> intel_name = vendor_name_set.getByName('INTEL')
90- >>> print intel_name.name
91+ >>> print(intel_name.name)
92 Intel
93
94 >>> intel_name = vendor_name_set.getByName('intel')
95- >>> print intel_name.name
96+ >>> print(intel_name.name)
97 Intel
98
99 >>> umlaut_name = vendor_name_set.getByName(
100 ... u'\N{LATIN CAPITAL LETTER A WITH DIAERESIS}')
101- >>> print repr(umlaut_name.name)
102+ >>> print(repr(umlaut_name.name))
103 u'\xc4'
104
105 >>> umlaut_name = vendor_name_set.getByName(
106 ... u'\N{LATIN SMALL LETTER A WITH DIAERESIS}')
107- >>> print repr(umlaut_name.name)
108+ >>> print(repr(umlaut_name.name))
109 u'\xc4'
110
111 If no record matching the given name exists, IHWVendorName.getByName()
112 returns None.
113
114- >>> print vendor_name_set.getByName('Babbage Computers')
115+ >>> print(vendor_name_set.getByName('Babbage Computers'))
116 None
117
118
119@@ -153,9 +153,9 @@
120 >>> intel_pci_id = vendor_id_set.create(bus=HWBus.PCI,
121 ... vendor_id='0x8086',
122 ... vendor_name=intel_name)
123- >>> print intel_pci_id.bus.title, intel_pci_id.vendor_id_for_bus
124+ >>> print(intel_pci_id.bus.title, intel_pci_id.vendor_id_for_bus)
125 PCI 0x8086
126- >>> print intel_pci_id.vendor_name.name
127+ >>> print(intel_pci_id.vendor_name.name)
128 Intel
129
130 The tuple (bus, vendor id, vendor name) must be unique.
131@@ -187,31 +187,31 @@
132 >>> another_pci_vendor_id = vendor_id_set.create(bus=HWBus.PCI,
133 ... vendor_id='0x10ae',
134 ... vendor_name=intel_name)
135- >>> print another_pci_vendor_id.bus.title
136+ >>> print(another_pci_vendor_id.bus.title)
137 PCI
138- >>> print another_pci_vendor_id.vendor_id_for_bus
139+ >>> print(another_pci_vendor_id.vendor_id_for_bus)
140 0x10ae
141- >>> print another_pci_vendor_id.vendor_name.name
142+ >>> print(another_pci_vendor_id.vendor_name.name)
143 Intel
144
145 >>> another_pci_vendor_id = vendor_id_set.create(bus=HWBus.PCCARD,
146 ... vendor_id='0x10ae',
147 ... vendor_name=intel_name)
148- >>> print another_pci_vendor_id.bus.title
149+ >>> print(another_pci_vendor_id.bus.title)
150 PC Card (32 bit)
151- >>> print another_pci_vendor_id.vendor_id_for_bus
152+ >>> print(another_pci_vendor_id.vendor_id_for_bus)
153 0x10ae
154- >>> print another_pci_vendor_id.vendor_name.name
155+ >>> print(another_pci_vendor_id.vendor_name.name)
156 Intel
157
158 >>> another_usb_vendor_id = vendor_id_set.create(bus=HWBus.USB,
159 ... vendor_id='0x10ae',
160 ... vendor_name=intel_name)
161- >>> print another_usb_vendor_id.bus.title
162+ >>> print(another_usb_vendor_id.bus.title)
163 USB
164- >>> print another_usb_vendor_id.vendor_id_for_bus
165+ >>> print(another_usb_vendor_id.vendor_id_for_bus)
166 0x10ae
167- >>> print another_usb_vendor_id.vendor_name.name
168+ >>> print(another_usb_vendor_id.vendor_name.name)
169 Intel
170
171 A..F is rejected.
172@@ -221,7 +221,7 @@
173 ... vendor_name=intel_name)
174 Traceback (most recent call last):
175 ...
176- ParameterError: '0x10AE' is not a valid vendor ID for PCI
177+ ParameterError: u'0x10AE' is not a valid vendor ID for PCI
178 >>> from storm.tracer import debug; debug(True)
179 >>> store.flush()
180 >>> debug(False)
181@@ -231,14 +231,14 @@
182 ... vendor_name=intel_name)
183 Traceback (most recent call last):
184 ...
185- ParameterError: '0x10AE' is not a valid vendor ID for PC Card (32 bit)
186+ ParameterError: u'0x10AE' is not a valid vendor ID for PC Card (32 bit)
187
188 >>> vendor_id_set.create(bus=HWBus.USB,
189 ... vendor_id='0x10AE',
190 ... vendor_name=intel_name)
191 Traceback (most recent call last):
192 ...
193- ParameterError: '0x10AE' is not a valid vendor ID for USB
194+ ParameterError: u'0x10AE' is not a valid vendor ID for USB
195
196 The ID must have the prefix "0x".
197
198@@ -247,21 +247,21 @@
199 ... vendor_name=intel_name)
200 Traceback (most recent call last):
201 ...
202- ParameterError: '8086' is not a valid vendor ID for PCI
203+ ParameterError: u'8086' is not a valid vendor ID for PCI
204
205 >>> vendor_id_set.create(bus=HWBus.PCCARD,
206 ... vendor_id='8086',
207 ... vendor_name=intel_name)
208 Traceback (most recent call last):
209 ...
210- ParameterError: '8086' is not a valid vendor ID for PC Card (32 bit)
211+ ParameterError: u'8086' is not a valid vendor ID for PC Card (32 bit)
212
213 >>> vendor_id_set.create(bus=HWBus.USB,
214 ... vendor_id='8086',
215 ... vendor_name=intel_name)
216 Traceback (most recent call last):
217 ...
218- ParameterError: '8086' is not a valid vendor ID for USB
219+ ParameterError: u'8086' is not a valid vendor ID for USB
220
221 The number must have four digits.
222
223@@ -270,42 +270,42 @@
224 ... vendor_name=intel_name)
225 Traceback (most recent call last):
226 ...
227- ParameterError: '0x123' is not a valid vendor ID for PCI
228+ ParameterError: u'0x123' is not a valid vendor ID for PCI
229
230 >>> vendor_id_set.create(bus=HWBus.PCCARD,
231 ... vendor_id='0x123',
232 ... vendor_name=intel_name)
233 Traceback (most recent call last):
234 ...
235- ParameterError: '0x123' is not a valid vendor ID for PC Card (32 bit)
236+ ParameterError: u'0x123' is not a valid vendor ID for PC Card (32 bit)
237
238 >>> vendor_id_set.create(bus=HWBus.USB,
239 ... vendor_id='0x123',
240 ... vendor_name=intel_name)
241 Traceback (most recent call last):
242 ...
243- ParameterError: '0x123' is not a valid vendor ID for USB
244+ ParameterError: u'0x123' is not a valid vendor ID for USB
245
246 >>> vendor_id_set.create(bus=HWBus.PCI,
247 ... vendor_id='0x12345',
248 ... vendor_name=intel_name)
249 Traceback (most recent call last):
250 ...
251- ParameterError: '0x12345' is not a valid vendor ID for PCI
252+ ParameterError: u'0x12345' is not a valid vendor ID for PCI
253
254 >>> vendor_id_set.create(bus=HWBus.PCCARD,
255 ... vendor_id='0x12345',
256 ... vendor_name=intel_name)
257 Traceback (most recent call last):
258 ...
259- ParameterError: '0x12345' is not a valid vendor ID for PC Card (32 bit)
260+ ParameterError: u'0x12345' is not a valid vendor ID for PC Card (32 bit)
261
262 >>> vendor_id_set.create(bus=HWBus.USB,
263 ... vendor_id='0x12345',
264 ... vendor_name=intel_name)
265 Traceback (most recent call last):
266 ...
267- ParameterError: '0x12345' is not a valid vendor ID for USB
268+ ParameterError: u'0x12345' is not a valid vendor ID for USB
269
270 Only hex digits are allowed.
271
272@@ -314,21 +314,21 @@
273 ... vendor_name=intel_name)
274 Traceback (most recent call last):
275 ...
276- ParameterError: '0xblah' is not a valid vendor ID for PCI
277+ ParameterError: u'0xblah' is not a valid vendor ID for PCI
278
279 >>> vendor_id_set.create(bus=HWBus.PCCARD,
280 ... vendor_id='0xblah',
281 ... vendor_name=intel_name)
282 Traceback (most recent call last):
283 ...
284- ParameterError: '0xblah' is not a valid vendor ID for PC Card (32 bit)
285+ ParameterError: u'0xblah' is not a valid vendor ID for PC Card (32 bit)
286
287 >>> vendor_id_set.create(bus=HWBus.USB,
288 ... vendor_id='0xblah',
289 ... vendor_name=intel_name)
290 Traceback (most recent call last):
291 ...
292- ParameterError: '0xblah' is not a valid vendor ID for USB
293+ ParameterError: u'0xblah' is not a valid vendor ID for USB
294
295 IEEE1394 IDs are represented as strings with a six-digit hexadecimal
296 number, prefixed by '0x'; the digits a..f must be lower cases characters.
297@@ -337,11 +337,11 @@
298 >>> vendor_id_1394 = vendor_id_set.create(bus=HWBus.IEEE1394,
299 ... vendor_id='0x0010e0',
300 ... vendor_name=intel_name)
301- >>> print vendor_id_1394.bus.title
302+ >>> print(vendor_id_1394.bus.title)
303 IEEE1394
304- >>> print vendor_id_1394.vendor_id_for_bus
305+ >>> print(vendor_id_1394.vendor_id_for_bus)
306 0x0010e0
307- >>> print vendor_id_1394.vendor_name.name
308+ >>> print(vendor_id_1394.vendor_name.name)
309 Intel
310
311 A..F is rejected.
312@@ -351,7 +351,7 @@
313 ... vendor_name=intel_name)
314 Traceback (most recent call last):
315 ...
316- ParameterError: '0x0010E0' is not a valid vendor ID for IEEE1394
317+ ParameterError: u'0x0010E0' is not a valid vendor ID for IEEE1394
318
319 The ID must have the prefix "0x".
320
321@@ -360,7 +360,7 @@
322 ... vendor_name=intel_name)
323 Traceback (most recent call last):
324 ...
325- ParameterError: '0010E0' is not a valid vendor ID for IEEE1394
326+ ParameterError: u'0010E0' is not a valid vendor ID for IEEE1394
327
328 The number must have six digits.
329
330@@ -369,14 +369,14 @@
331 ... vendor_name=intel_name)
332 Traceback (most recent call last):
333 ...
334- ParameterError: '0x12345' is not a valid vendor ID for IEEE1394
335+ ParameterError: u'0x12345' is not a valid vendor ID for IEEE1394
336
337 >>> vendor_id_set.create(bus=HWBus.IEEE1394,
338 ... vendor_id='0x1234567',
339 ... vendor_name=intel_name)
340 Traceback (most recent call last):
341 ...
342- ParameterError: '0x1234567' is not a valid vendor ID for IEEE1394
343+ ParameterError: u'0x1234567' is not a valid vendor ID for IEEE1394
344
345 Only hex digits are allowed.
346
347@@ -385,18 +385,18 @@
348 ... vendor_name=intel_name)
349 Traceback (most recent call last):
350 ...
351- ParameterError: '0xfoobar' is not a valid vendor ID for IEEE1394
352+ ParameterError: u'0xfoobar' is not a valid vendor ID for IEEE1394
353
354 SCSI vendor IDs are ASCII strings with exactly eight characters.
355
356 >>> intel_scsi_id = vendor_id_set.create(bus=HWBus.SCSI,
357 ... vendor_id='INTEL ',
358 ... vendor_name=intel_name)
359- >>> print intel_scsi_id.bus.title
360+ >>> print(intel_scsi_id.bus.title)
361 SCSI
362 >>> intel_scsi_id.vendor_id_for_bus
363 u'INTEL '
364- >>> print intel_scsi_id.vendor_name.name
365+ >>> print(intel_scsi_id.vendor_name.name)
366 Intel
367
368 Strings with less than eight characters are not allowed as SCSI vendor IDs...
369@@ -406,7 +406,7 @@
370 ... vendor_name=intel_name)
371 Traceback (most recent call last):
372 ...
373- ParameterError: '1234567' is not a valid vendor ID for SCSI
374+ ParameterError: u'1234567' is not a valid vendor ID for SCSI
375
376 ...as well as strings with more than eight characters.
377
378@@ -415,15 +415,15 @@
379 ... vendor_name=intel_name)
380 Traceback (most recent call last):
381 ...
382- ParameterError: '123456789' is not a valid vendor ID for SCSI
383+ ParameterError: u'123456789' is not a valid vendor ID for SCSI
384
385 HWVendorIDSet.getByBusAndVendorID() is used to look up a HWVendorID record.
386
387 >>> vendor_id = vendor_id_set.getByBusAndVendorID(bus=HWBus.PCI,
388 ... vendor_id='0x8086')
389- >>> print vendor_id.bus.title
390+ >>> print(vendor_id.bus.title)
391 PCI
392- >>> print vendor_id.vendor_name.name
393+ >>> print(vendor_id.vendor_name.name)
394 Intel
395
396 If no record exists for the given bus and vendor ID,
397@@ -431,7 +431,7 @@
398
399 >>> vendor_id = vendor_id_set.getByBusAndVendorID(bus=HWBus.PCI,
400 ... vendor_id='0xffff')
401- >>> print vendor_id
402+ >>> print(vendor_id)
403 None
404
405 HWVendorIDSet.getByBusAndVendorID() performs the same validity tests of
406@@ -441,23 +441,23 @@
407 >>> vendor_id_set.getByBusAndVendorID(bus=HWBus.PCI, vendor_id='8086')
408 Traceback (most recent call last):
409 ...
410- ParameterError: '8086' is not a valid vendor ID for PCI
411+ ParameterError: u'8086' is not a valid vendor ID for PCI
412
413 HWVendorIDSet.get() returns the HWVendorID record with the given ID...
414
415 >>> vendor_id = vendor_id_set.get(1)
416- >>> print vendor_id.bus.name, vendor_id.vendor_id_for_bus
417+ >>> print(vendor_id.bus.name, vendor_id.vendor_id_for_bus)
418 SYSTEM MSI
419
420 ...or None, if no such record exists.
421
422- >>> print vendor_id_set.get(1000000)
423+ >>> print(vendor_id_set.get(1000000))
424 None
425
426 HWVendorIDSet.idsForBus() returns all known HWVendorIDs for a given bus.
427
428 >>> for vendor_id in vendor_id_set.idsForBus(HWBus.PCI):
429- ... print vendor_id.bus.name, vendor_id.vendor_id_for_bus
430+ ... print(vendor_id.bus.name, vendor_id.vendor_id_for_bus)
431 PCI 0x10ae
432 PCI 0x10de
433 PCI 0x8086
434@@ -491,33 +491,33 @@
435 access them, as well as the vendor name, either via the attribute
436 bus_vendor, which references HWVendorID...
437
438- >>> print usb_controller.bus_vendor.bus.title
439+ >>> print(usb_controller.bus_vendor.bus.title)
440 PCI
441- >>> print usb_controller.bus_vendor.vendor_id_for_bus
442+ >>> print(usb_controller.bus_vendor.vendor_id_for_bus)
443 0x8086
444- >>> print usb_controller.bus_vendor.vendor_name.name
445+ >>> print(usb_controller.bus_vendor.vendor_name.name)
446 Intel
447
448 ...or via the (read-only) HWDevice properties bus, vendor_id, vendor_name.
449
450- >>> print usb_controller.bus.title
451+ >>> print(usb_controller.bus.title)
452 PCI
453- >>> print usb_controller.vendor_id
454+ >>> print(usb_controller.vendor_id)
455 0x8086
456- >>> print usb_controller.vendor_name
457+ >>> print(usb_controller.vendor_name)
458 Intel
459
460 Other attributes stored in HWDevice are the product ID, the product name,
461 the product variant and submissions. submissions is a counter of the
462 number of submissions with this device.
463
464- >>> print usb_controller.bus_product_id
465+ >>> print(usb_controller.bus_product_id)
466 0x27cc
467- >>> print usb_controller.name
468+ >>> print(usb_controller.name)
469 82801GBM/GHM (ICH7 Family) USB2 EHCI Controller
470- >>> print usb_controller.variant
471+ >>> print(usb_controller.variant)
472 None
473- >>> print usb_controller.submissions
474+ >>> print(usb_controller.submissions)
475 0
476
477 Like vendor IDs, product IDs of some busses have certain constraints.
478@@ -533,21 +533,21 @@
479 ... vendor_id='0x8086',
480 ... product_id='0xabcd',
481 ... product_name='A PCI card')
482- >>> print another_pci_product.bus_product_id
483+ >>> print(another_pci_product.bus_product_id)
484 0xabcd
485
486 >>> another_pci_product = device_set.create(bus=HWBus.PCCARD,
487 ... vendor_id='0x8086',
488 ... product_id='0xabcd',
489 ... product_name='A PC Card')
490- >>> print another_pci_product.bus_product_id
491+ >>> print(another_pci_product.bus_product_id)
492 0xabcd
493
494 >>> another_usb_product = device_set.create(bus=HWBus.USB,
495 ... vendor_id='0x8086',
496 ... product_id='0xabcd',
497 ... product_name='A USB device')
498- >>> print another_usb_product.bus_product_id
499+ >>> print(another_usb_product.bus_product_id)
500 0xabcd
501
502 A..F is rejected.
503@@ -558,7 +558,7 @@
504 ... product_name='A PCI card')
505 Traceback (most recent call last):
506 ...
507- ParameterError: '0xABCD' is not a valid product ID for PCI
508+ ParameterError: u'0xABCD' is not a valid product ID for PCI
509
510 >>> device_set.create(bus=HWBus.PCCARD,
511 ... vendor_id='0x8086',
512@@ -566,7 +566,7 @@
513 ... product_name='A PC Card')
514 Traceback (most recent call last):
515 ...
516- ParameterError: '0xABCD' is not a valid product ID for PC Card (32 bit)
517+ ParameterError: u'0xABCD' is not a valid product ID for PC Card (32 bit)
518
519 >>> device_set.create(bus=HWBus.USB,
520 ... vendor_id='0x8086',
521@@ -574,7 +574,7 @@
522 ... product_name='A USB device')
523 Traceback (most recent call last):
524 ...
525- ParameterError: '0xABCD' is not a valid product ID for USB
526+ ParameterError: u'0xABCD' is not a valid product ID for USB
527
528 The ID must have the prefix "0x".
529
530@@ -584,7 +584,7 @@
531 ... product_name='A PCI card')
532 Traceback (most recent call last):
533 ...
534- ParameterError: '1234' is not a valid product ID for PCI
535+ ParameterError: u'1234' is not a valid product ID for PCI
536
537 >>> device_set.create(bus=HWBus.PCCARD,
538 ... vendor_id='0x8086',
539@@ -592,7 +592,7 @@
540 ... product_name='A PC Card')
541 Traceback (most recent call last):
542 ...
543- ParameterError: '1234' is not a valid product ID for PC Card (32 bit)
544+ ParameterError: u'1234' is not a valid product ID for PC Card (32 bit)
545
546 >>> device_set.create(bus=HWBus.USB,
547 ... vendor_id='0x8086',
548@@ -600,7 +600,7 @@
549 ... product_name='A USB device')
550 Traceback (most recent call last):
551 ...
552- ParameterError: '1234' is not a valid product ID for USB
553+ ParameterError: u'1234' is not a valid product ID for USB
554
555 The number must have four digits.
556
557@@ -610,7 +610,7 @@
558 ... product_name='A PCI card')
559 Traceback (most recent call last):
560 ...
561- ParameterError: '0x123' is not a valid product ID for PCI
562+ ParameterError: u'0x123' is not a valid product ID for PCI
563
564 >>> device_set.create(bus=HWBus.PCCARD,
565 ... vendor_id='0x8086',
566@@ -618,7 +618,7 @@
567 ... product_name='A PC Card')
568 Traceback (most recent call last):
569 ...
570- ParameterError: '0x123' is not a valid product ID for PC Card (32 bit)
571+ ParameterError: u'0x123' is not a valid product ID for PC Card (32 bit)
572
573 >>> device_set.create(bus=HWBus.USB,
574 ... vendor_id='0x8086',
575@@ -626,7 +626,7 @@
576 ... product_name='A USB device')
577 Traceback (most recent call last):
578 ...
579- ParameterError: '0x123' is not a valid product ID for USB
580+ ParameterError: u'0x123' is not a valid product ID for USB
581
582 >>> device_set.create(bus=HWBus.PCI,
583 ... vendor_id='0x8086',
584@@ -634,7 +634,7 @@
585 ... product_name='A PCI card')
586 Traceback (most recent call last):
587 ...
588- ParameterError: '0x12345' is not a valid product ID for PCI
589+ ParameterError: u'0x12345' is not a valid product ID for PCI
590
591 >>> device_set.create(bus=HWBus.PCCARD,
592 ... vendor_id='0x8086',
593@@ -642,7 +642,7 @@
594 ... product_name='A PC Card')
595 Traceback (most recent call last):
596 ...
597- ParameterError: '0x12345' is not a valid product ID for PC Card (32 bit)
598+ ParameterError: u'0x12345' is not a valid product ID for PC Card (32 bit)
599
600 >>> device_set.create(bus=HWBus.USB,
601 ... vendor_id='0x8086',
602@@ -650,7 +650,7 @@
603 ... product_name='A USB device')
604 Traceback (most recent call last):
605 ...
606- ParameterError: '0x12345' is not a valid product ID for USB
607+ ParameterError: u'0x12345' is not a valid product ID for USB
608
609 Only hex digits are allowed.
610
611@@ -660,7 +660,7 @@
612 ... product_name='A PCI card')
613 Traceback (most recent call last):
614 ...
615- ParameterError: '0xblah' is not a valid product ID for PCI
616+ ParameterError: u'0xblah' is not a valid product ID for PCI
617
618 >>> device_set.create(bus=HWBus.PCCARD,
619 ... vendor_id='0x8086',
620@@ -668,7 +668,7 @@
621 ... product_name='A PC Card')
622 Traceback (most recent call last):
623 ...
624- ParameterError: '0xblah' is not a valid product ID for PC Card (32 bit)
625+ ParameterError: u'0xblah' is not a valid product ID for PC Card (32 bit)
626
627 >>> device_set.create(bus=HWBus.USB,
628 ... vendor_id='0x8086',
629@@ -676,7 +676,7 @@
630 ... product_name='A USB device')
631 Traceback (most recent call last):
632 ...
633- ParameterError: '0xblah' is not a valid product ID for USB
634+ ParameterError: u'0xblah' is not a valid product ID for USB
635
636 SCSI product IDs are ASCII strings with 16 characters.
637
638@@ -695,7 +695,7 @@
639 ... product_name='A SCSI device')
640 Traceback (most recent call last):
641 ...
642- ParameterError: '123456789012345' is not a valid product ID for SCSI
643+ ParameterError: u'123456789012345' is not a valid product ID for SCSI
644
645 ...as well as strings with more than 16 characters.
646
647@@ -705,7 +705,7 @@
648 ... product_name='A SCSI device')
649 Traceback (most recent call last):
650 ...
651- ParameterError: '12345678901234567' is not a valid product ID for SCSI
652+ ParameterError: u'12345678901234567' is not a valid product ID for SCSI
653
654
655 Unknown Vendor IDs
656@@ -730,7 +730,7 @@
657 ... vendor_id='0x4321',
658 ... product_id='0x8765',
659 ... product_name='mind sensor')
660- >>> print new_vendor_device.bus_vendor.vendor_name.name
661+ >>> print(new_vendor_device.bus_vendor.vendor_name.name)
662 Unknown
663
664
665@@ -762,13 +762,13 @@
666 ... vendor_id='0x07b3',
667 ... product_id='0x0017',
668 ... product_name='some scanner')
669- >>> print some_plustek_scanner.bus_vendor.vendor_id_for_bus
670+ >>> print(some_plustek_scanner.bus_vendor.vendor_id_for_bus)
671 0x07b3
672- >>> print some_plustek_scanner.bus_vendor.vendor_name.name
673+ >>> print(some_plustek_scanner.bus_vendor.vendor_name.name)
674 Plustek
675- >>> print some_plustek_scanner.name
676+ >>> print(some_plustek_scanner.name)
677 some scanner
678- >>> print some_plustek_scanner.variant
679+ >>> print(some_plustek_scanner.variant)
680 None
681
682 Once we know that (bus, vendor ID, product ID) does not uniquely
683@@ -802,15 +802,15 @@
684 ... vendor_id=hal_vendor_name,
685 ... product_id=hal_product_name,
686 ... product_name=hal_product_name)
687- >>> print tuffbook_2600.bus_vendor.bus.title
688+ >>> print(tuffbook_2600.bus_vendor.bus.title)
689 System
690- >>> print tuffbook_2600.bus_vendor.vendor_id_for_bus
691- Tonka
692- >>> print tuffbook_2600.bus_vendor.vendor_name.name
693- Tonka
694- >>> print tuffbook_2600.bus_product_id
695+ >>> print(tuffbook_2600.bus_vendor.vendor_id_for_bus)
696+ Tonka
697+ >>> print(tuffbook_2600.bus_vendor.vendor_name.name)
698+ Tonka
699+ >>> print(tuffbook_2600.bus_product_id)
700 Tuffbook 2600
701- >>> print tuffbook_2600.name
702+ >>> print(tuffbook_2600.name)
703 Tuffbook 2600
704
705 The tuple (bus_vendor, bus_product_id, variant) must be unique.
706@@ -848,50 +848,50 @@
707 HWDeviceSet.getByDeviceID()
708
709 >>> device = device_set.getByDeviceID(HWBus.USB, '0x07b3', '0x0017')
710- >>> print device.bus_vendor.bus.title
711+ >>> print(device.bus_vendor.bus.title)
712 USB
713- >>> print device.bus_vendor.vendor_id_for_bus
714+ >>> print(device.bus_vendor.vendor_id_for_bus)
715 0x07b3
716- >>> print device.bus_product_id
717+ >>> print(device.bus_product_id)
718 0x0017
719- >>> print device.name
720+ >>> print(device.name)
721 some scanner
722
723 The call to HWDeviceSet.getByDeviceID() above did not specify a product
724 variant. In such a case, the record having variant==None is returned
725
726- >>> print device.variant
727+ >>> print(device.variant)
728 None
729
730 If a variant name is given, we get the HWDevice record of that variant.
731
732 >>> device = device_set.getByDeviceID(HWBus.USB, '0x07b3', '0x0017',
733 ... 'OpticPro UT16')
734- >>> print device.bus_vendor.bus.title
735+ >>> print(device.bus_vendor.bus.title)
736 USB
737- >>> print device.bus_vendor.vendor_id_for_bus
738+ >>> print(device.bus_vendor.vendor_id_for_bus)
739 0x07b3
740- >>> print device.bus_product_id
741+ >>> print(device.bus_product_id)
742 0x0017
743- >>> print device.name
744+ >>> print(device.name)
745 OpticPro UT16
746- >>> print device.variant
747+ >>> print(device.variant)
748 OpticPro UT16
749
750 If the given parameters do not match any existing record, None is
751 returned.
752
753- >>> print device_set.getByDeviceID(HWBus.PCI, '0x07b3', '0x0017',
754- ... 'OpticPro UT16')
755- None
756- >>> print device_set.getByDeviceID(HWBus.USB, '0xffff', '0x0017',
757- ... 'OpticPro UT16')
758- None
759- >>> print device_set.getByDeviceID(HWBus.PCI, '0x07b3', '0xffff',
760- ... 'OpticPro UT16')
761- None
762- >>> print device_set.getByDeviceID(HWBus.PCI, '0x07b3', '0x0017',
763- ... 'nonsense')
764+ >>> print(device_set.getByDeviceID(HWBus.PCI, '0x07b3', '0x0017',
765+ ... 'OpticPro UT16'))
766+ None
767+ >>> print(device_set.getByDeviceID(HWBus.USB, '0xffff', '0x0017',
768+ ... 'OpticPro UT16'))
769+ None
770+ >>> print(device_set.getByDeviceID(HWBus.PCI, '0x07b3', '0xffff',
771+ ... 'OpticPro UT16'))
772+ None
773+ >>> print(device_set.getByDeviceID(HWBus.PCI, '0x07b3', '0x0017',
774+ ... 'nonsense'))
775 None
776
777 The parameters vendor_id and product_id must be valid IDs for the
778@@ -900,12 +900,12 @@
779 >>> device_set.getByDeviceID(HWBus.USB, '07b3', '0x0017')
780 Traceback (most recent call last):
781 ...
782- ParameterError: '07b3' is not a valid vendor ID for USB
783+ ParameterError: u'07b3' is not a valid vendor ID for USB
784
785 >>> device_set.getByDeviceID(HWBus.USB, '0x07b3', '0017')
786 Traceback (most recent call last):
787 ...
788- ParameterError: '0017' is not a valid product ID for USB
789+ ParameterError: u'0017' is not a valid product ID for USB
790
791 HWDeviceSet.getOrCreate() returns an existing record matching the given
792 parameters or creates a new one, if no existing record matches.
793@@ -915,79 +915,79 @@
794 ... product_id='0x0017',
795 ... product_name='OpticPro UT16',
796 ... variant='OpticPro UT16')
797- >>> print device2.bus_vendor.bus.title
798+ >>> print(device2.bus_vendor.bus.title)
799 USB
800- >>> print device2.bus_vendor.vendor_id_for_bus
801+ >>> print(device2.bus_vendor.vendor_id_for_bus)
802 0x07b3
803- >>> print device2.bus_product_id
804+ >>> print(device2.bus_product_id)
805 0x0017
806- >>> print device2.name
807- OpticPro UT16
808- >>> print device2.variant
809- OpticPro UT16
810- >>> print device2.id == device.id
811+ >>> print(device2.name)
812+ OpticPro UT16
813+ >>> print(device2.variant)
814+ OpticPro UT16
815+ >>> print(device2.id == device.id)
816 True
817
818 >>> device3 = device_set.getByDeviceID(bus=HWBus.USB,
819 ... vendor_id='0x07b3',
820 ... product_id='0x0017',
821 ... variant='Some other scanner')
822- >>> print device3
823+ >>> print(device3)
824 None
825 >>> device3 = device_set.getOrCreate(bus=HWBus.USB,
826 ... vendor_id='0x07b3',
827 ... product_id='0x0017',
828 ... product_name='Some other scanner',
829 ... variant='Some other scanner')
830- >>> print device3.bus_vendor.bus.title
831+ >>> print(device3.bus_vendor.bus.title)
832 USB
833- >>> print device3.bus_vendor.vendor_id_for_bus
834+ >>> print(device3.bus_vendor.vendor_id_for_bus)
835 0x07b3
836- >>> print device3.bus_product_id
837+ >>> print(device3.bus_product_id)
838 0x0017
839- >>> print device3.name
840+ >>> print(device3.name)
841 Some other scanner
842- >>> print device3.variant
843+ >>> print(device3.variant)
844 Some other scanner
845
846 >>> device4 = device_set.getOrCreate(bus=HWBus.USB,
847 ... vendor_id='0x07b3',
848 ... product_id='0x0015',
849 ... product_name='OpticPro U24')
850- >>> print device4.bus_vendor.bus.title
851+ >>> print(device4.bus_vendor.bus.title)
852 USB
853- >>> print device4.bus_vendor.vendor_id_for_bus
854+ >>> print(device4.bus_vendor.vendor_id_for_bus)
855 0x07b3
856- >>> print device4.bus_product_id
857+ >>> print(device4.bus_product_id)
858 0x0015
859- >>> print device4.name
860+ >>> print(device4.name)
861 OpticPro U24
862- >>> print device4.variant
863+ >>> print(device4.variant)
864 None
865
866
867 HWDeviceSet.getByID() returns a HWDevice record with the given database ID.
868
869 >>> device = device_set.getByID(1)
870- >>> print device.id
871+ >>> print(device.id)
872 1
873- >>> print device.vendor_id
874+ >>> print(device.vendor_id)
875 MSI
876- >>> print device.bus_product_id
877+ >>> print(device.bus_product_id)
878 MS-7369
879
880 HWDeviceSet.getByID() returns None if no record with the passed ID exists.
881
882 >>> device = device_set.getByID(1000000)
883- >>> print device
884+ >>> print(device)
885 None
886
887 HWDeviceSet.search() returns all devices with a given bus and vendor ID.
888
889 >>> devices = device_set.search(bus=HWBus.USB, vendor_id='0x07b3')
890 >>> for device in devices:
891- ... print device.bus.title, device.vendor_id, device.bus_product_id,
892- ... print device.variant
893+ ... print(device.bus.title, device.vendor_id, device.bus_product_id,
894+ ... device.variant)
895 USB 0x07b3 0x0017 None
896 USB 0x07b3 0x0017 OpticPro UT12
897 USB 0x07b3 0x0017 OpticPro UT16
898@@ -999,8 +999,8 @@
899 >>> devices = device_set.search(
900 ... bus=HWBus.USB, vendor_id='0x07b3', product_id='0x0017')
901 >>> for device in devices:
902- ... print device.bus.title, device.vendor_id, device.bus_product_id,
903- ... print device.variant
904+ ... print(device.bus.title, device.vendor_id, device.bus_product_id,
905+ ... device.variant)
906 USB 0x07b3 0x0017 None
907 USB 0x07b3 0x0017 OpticPro UT12
908 USB 0x07b3 0x0017 OpticPro UT16
909@@ -1013,13 +1013,13 @@
910 ... bus=HWBus.USB, vendor_id='invalid', product_id='0x0017')
911 Traceback (most recent call last):
912 ...
913- ParameterError: 'invalid' is not a valid vendor ID for USB
914+ ParameterError: u'invalid' is not a valid vendor ID for USB
915
916 >>> devices = device_set.search(
917 ... bus=HWBus.USB, vendor_id='0x07b3', product_id='nonsense')
918 Traceback (most recent call last):
919 ...
920- ParameterError: 'nonsense' is not a valid product ID for USB
921+ ParameterError: u'nonsense' is not a valid product ID for USB
922
923 HWDevice.getSubmissions() returns submissions which contain this device.
924
925@@ -1036,7 +1036,7 @@
926 >>> sata_controller = device_set.getByDeviceID(
927 ... bus=HWBus.PCI, vendor_id='0x10de', product_id='0x045d')
928 >>> for submission in sata_controller.getSubmissions():
929- ... print submission.submission_key
930+ ... print(submission.submission_key)
931 sample-submission
932
933 We can limit the results to a specific driver. (See below for details about
934@@ -1047,13 +1047,13 @@
935 ... 'linux-image-2.6.24-19-generic', 'ahci')
936 >>> for submission in sata_controller.getSubmissions(
937 ... driver=ahci_driver):
938- ... print submission.submission_key
939+ ... print(submission.submission_key)
940 sample-submission
941
942 >>> usb_storage_driver = getUtility(IHWDriverSet).getByPackageAndName(
943 ... 'linux-image-2.6.24-19-generic', 'usb-storage')
944- >>> print list(sata_controller.getSubmissions(
945- ... driver=usb_storage_driver))
946+ >>> print(list(sata_controller.getSubmissions(
947+ ... driver=usb_storage_driver)))
948 []
949
950 We can limit the results to a specific distribution.
951@@ -1064,7 +1064,7 @@
952 >>> ubuntu = distribution_set.getByName('ubuntu')
953 >>> for submission in sata_controller.getSubmissions(
954 ... distribution=ubuntu):
955- ... print submission.submission_key
956+ ... print(submission.submission_key)
957 sample-submission
958
959 >>> debian = distribution_set.getByName('debian')
960@@ -1075,7 +1075,7 @@
961
962 >>> for submission in sata_controller.getSubmissions(
963 ... architecture='i386'):
964- ... print submission.submission_key
965+ ... print(submission.submission_key)
966 sample-submission
967
968 >>> sata_controller.getSubmissions(architecture='amd64').count()
969@@ -1085,7 +1085,7 @@
970
971 >>> for submission in sata_controller.getSubmissions(
972 ... distroseries=ubuntu['hoary']):
973- ... print submission.submission_key
974+ ... print(submission.submission_key)
975 sample-submission
976
977 >>> sata_controller.getSubmissions(distroseries=ubuntu['warty']).count()
978@@ -1095,7 +1095,7 @@
979
980 >>> for submission in sata_controller.getSubmissions(
981 ... distroseries=ubuntu['hoary'], architecture='i386'):
982- ... print submission.submission_key
983+ ... print(submission.submission_key)
984 sample-submission
985
986 >>> sata_controller.getSubmissions(
987@@ -1107,7 +1107,7 @@
988 >>> from lp.registry.interfaces.person import IPersonSet
989 >>> owner = getUtility(IPersonSet).getByName('name12')
990 >>> for submission in sata_controller.getSubmissions(owner=owner):
991- ... print submission.submission_key
992+ ... print(submission.submission_key)
993 sample-submission
994
995 >>> not_owner = getUtility(IPersonSet).getByName('name20')
996@@ -1122,7 +1122,7 @@
997 HWDeviceDriverLink (see below) with this device.
998
999 >>> for driver in sata_controller.drivers:
1000- ... print driver.package_name, driver.name
1001+ ... print(driver.package_name, driver.name)
1002 linux-image-2.6.24-19-generic ahci
1003
1004
1005@@ -1143,17 +1143,17 @@
1006 >>> variant = device_name_variant_set.create(device=optic_pro_ut16,
1007 ... vendor_name='Medion',
1008 ... product_name='MD 1234')
1009- >>> print variant.device.bus_vendor.vendor_name.name
1010+ >>> print(variant.device.bus_vendor.vendor_name.name)
1011 Plustek
1012- >>> print variant.vendor_name.name
1013+ >>> print(variant.vendor_name.name)
1014 Medion
1015- >>> print variant.product_name
1016+ >>> print(variant.product_name)
1017 MD 1234
1018
1019 We count the number of submissions which told us an alternative device
1020 name.
1021
1022- >>> print variant.submissions
1023+ >>> print(variant.submissions)
1024 0
1025
1026 The tuple (device, vendor_name, product_name) must be unique.
1027@@ -1191,11 +1191,11 @@
1028 >>> usb_driver = driver_set.create(package_name='linux-image-generic',
1029 ... name='usb',
1030 ... license=License.GNU_GPL_V2)
1031- >>> print usb_driver.name
1032+ >>> print(usb_driver.name)
1033 usb
1034- >>> print usb_driver.package_name
1035+ >>> print(usb_driver.package_name)
1036 linux-image-generic
1037- >>> print usb_driver.license.title
1038+ >>> print(usb_driver.license.title)
1039 GNU GPL v2
1040
1041 The submitted data does not need to contain package information for all
1042@@ -1206,21 +1206,21 @@
1043 >>> driver2 = driver_set.create(package_name=None,
1044 ... name='whatever',
1045 ... license=License.GNU_GPL_V2)
1046- >>> print driver2.name
1047+ >>> print(driver2.name)
1048 whatever
1049- >>> print repr(driver2.package_name)
1050+ >>> print(repr(driver2.package_name))
1051 u''
1052- >>> print driver2.license.title
1053+ >>> print(driver2.license.title)
1054 GNU GPL v2
1055
1056 >>> driver_blank_package_name = driver_set.create(package_name='',
1057 ... name='bar',
1058 ... license=License.GNU_GPL_V3)
1059- >>> print driver_blank_package_name.name
1060+ >>> print(driver_blank_package_name.name)
1061 bar
1062- >>> print repr(driver_blank_package_name.package_name)
1063+ >>> print(repr(driver_blank_package_name.package_name))
1064 u''
1065- >>> print driver_blank_package_name.license.title
1066+ >>> print(driver_blank_package_name.license.title)
1067 GNU GPL v3
1068
1069 Since we also do not always know the license of a driver, the license
1070@@ -1229,11 +1229,11 @@
1071 >>> driver3 = driver_set.create(package_name='',
1072 ... name='something_else',
1073 ... license=None)
1074- >>> print driver3.name
1075+ >>> print(driver3.name)
1076 something_else
1077- >>> print repr(driver3.package_name)
1078+ >>> print(repr(driver3.package_name))
1079 u''
1080- >>> print driver3.license
1081+ >>> print(driver3.license)
1082 None
1083
1084 The tuple (driver name, package name) must be unique.
1085@@ -1263,18 +1263,18 @@
1086 IHWDriverSet.getByPackageAndName().
1087
1088 >>> driver = driver_set.getByPackageAndName('linux-image-generic', 'usb')
1089- >>> print driver.package_name
1090+ >>> print(driver.package_name)
1091 linux-image-generic
1092- >>> print driver.name
1093+ >>> print(driver.name)
1094 usb
1095
1096 If we want to search for a driver without a known package, we can
1097 pass None as well as the empty string.
1098
1099 >>> driver = driver_set.getByPackageAndName('', 'whatever')
1100- >>> print repr(driver.package_name)
1101+ >>> print(repr(driver.package_name))
1102 u''
1103- >>> print driver.name
1104+ >>> print(driver.name)
1105 whatever
1106
1107 >>> driver2 = driver_set.getByPackageAndName(None, 'whatever')
1108@@ -1285,34 +1285,34 @@
1109 IHWDriverSet.getByPackageAndName() call, None is returned.
1110
1111 >>> driver = driver_set.getByPackageAndName('nonsense', 'more nonsense')
1112- >>> print driver
1113+ >>> print(driver)
1114 None
1115
1116 IHWDriverSet.getOrCreate() returns an existing record matching
1117 the given parameters or creates a new one, if no existing record matches.
1118
1119 >>> driver = driver_set.getOrCreate('linux-image-generic', 'usb')
1120- >>> print driver.package_name
1121+ >>> print(driver.package_name)
1122 linux-image-generic
1123- >>> print driver.name
1124+ >>> print(driver.name)
1125 usb
1126
1127 >>> driver = driver_set.getByPackageAndName('linux-image-generic', 'foo')
1128- >>> print driver
1129+ >>> print(driver)
1130 None
1131 >>> driver = driver_set.getOrCreate('linux-image-generic', 'foo')
1132- >>> print driver.name
1133+ >>> print(driver.name)
1134 foo
1135- >>> print driver.package_name
1136+ >>> print(driver.package_name)
1137 linux-image-generic
1138
1139 If we pass None as the value for package_name, we get records where
1140 package_name is None or the empty string.
1141
1142 >>> driver = driver_set.getOrCreate(None, 'whatever')
1143- >>> print repr(driver.package_name)
1144+ >>> print(repr(driver.package_name))
1145 u''
1146- >>> print driver.name
1147+ >>> print(driver.name)
1148 whatever
1149
1150 Older HWDriver records may store None as the package name. We can
1151@@ -1320,9 +1320,9 @@
1152
1153 >>> from lp.hardwaredb.model.hwdb import HWDriver
1154 >>> old_driver = HWDriver(package_name=None, name=u'foo', license=None)
1155- >>> print old_driver.name
1156+ >>> print(old_driver.name)
1157 foo
1158- >>> print old_driver.package_name
1159+ >>> print(old_driver.package_name)
1160 None
1161
1162 >>> driver = driver_set.getOrCreate(None, 'foo')
1163@@ -1340,20 +1340,20 @@
1164
1165 >>> drivers = driver_set.search(package_name='linux-image-generic')
1166 >>> for driver in drivers:
1167- ... print driver.package_name, driver.name
1168+ ... print(driver.package_name, driver.name)
1169 linux-image-generic usb
1170 linux-image-generic foo
1171
1172 >>> drivers = driver_set.search(name='usb')
1173 >>> for driver in drivers:
1174- ... print driver.package_name, driver.name
1175+ ... print(driver.package_name, driver.name)
1176 linux-image-2.6.24-19-generic usb
1177 linux-image-generic usb
1178
1179 >>> drivers = driver_set.search(
1180 ... package_name='linux-image-2.6.24-19-generic', name='ahci')
1181 >>> for driver in drivers:
1182- ... print driver.package_name, driver.name
1183+ ... print(driver.package_name, driver.name)
1184 linux-image-2.6.24-19-generic ahci
1185
1186 If package_name is an empty string, driver records are returned where
1187@@ -1363,7 +1363,7 @@
1188
1189 >>> drivers = driver_set.search(package_name='')
1190 >>> for driver in drivers:
1191- ... print repr(driver.package_name), driver.name
1192+ ... print(repr(driver.package_name), driver.name)
1193 u'' whatever
1194 u'' bar
1195 u'' something_else
1196@@ -1371,12 +1371,12 @@
1197
1198 >>> drivers = driver_set.search(package_name='', name='whatever')
1199 >>> for driver in drivers:
1200- ... print repr(driver.package_name), driver.name
1201+ ... print(repr(driver.package_name), driver.name)
1202 u'' whatever
1203
1204 >>> drivers = driver_set.search(package_name='', name='foo')
1205 >>> for driver in drivers:
1206- ... print repr(driver.package_name), driver.name
1207+ ... print(repr(driver.package_name), driver.name)
1208 None foo
1209
1210 If no parameters are specified, IHWDriverSet.search() returns all driver
1211@@ -1384,7 +1384,7 @@
1212
1213 >>> drivers = driver_set.search()
1214 >>> for driver in drivers:
1215- ... print repr(driver.package_name), driver.name
1216+ ... print(repr(driver.package_name), driver.name)
1217 u'linux-image-2.6.24-19-generic' ehci_hcd
1218 u'linux-image-2.6.24-19-generic' usb
1219 u'linux-image-2.6.24-19-generic' usb-storage
1220@@ -1402,17 +1402,17 @@
1221 HWDriverSet.getByID() returns a HWDriver record with the given database ID.
1222
1223 >>> driver = driver_set.getByID(1)
1224- >>> print driver.id
1225+ >>> print(driver.id)
1226 1
1227- >>> print driver.package_name
1228+ >>> print(driver.package_name)
1229 linux-image-2.6.24-19-generic
1230- >>> print driver.name
1231+ >>> print(driver.name)
1232 ehci_hcd
1233
1234 HWDriverSet.getByID() returns None if no record with the passed ID exists.
1235
1236 >>> driver = driver_set.getByID(1000000)
1237- >>> print driver
1238+ >>> print(driver)
1239 None
1240
1241 >>> transaction.abort()
1242@@ -1422,23 +1422,23 @@
1243
1244 >>> driver = driver_set.getByID(1)
1245 >>> for submission in driver.getSubmissions():
1246- ... print submission.submission_key
1247+ ... print(submission.submission_key)
1248 sample-submission
1249
1250 We can limit our search to submissions for a particular distribution.
1251
1252 >>> for submission in driver.getSubmissions(distribution=ubuntu):
1253- ... print submission.submission_key
1254+ ... print(submission.submission_key)
1255 sample-submission
1256
1257- >>> print driver.getSubmissions(distribution=debian).count()
1258+ >>> print(driver.getSubmissions(distribution=debian).count())
1259 0
1260
1261 We can limit the results to a specific distro series.
1262
1263 >>> for submission in driver.getSubmissions(
1264 ... distroseries=ubuntu['hoary']):
1265- ... print submission.submission_key
1266+ ... print(submission.submission_key)
1267 sample-submission
1268
1269 >>> driver.getSubmissions(distroseries=ubuntu['warty']).count()
1270@@ -1448,7 +1448,7 @@
1271
1272 >>> for submission in driver.getSubmissions(
1273 ... distroseries=ubuntu['hoary'], architecture='i386'):
1274- ... print submission.submission_key
1275+ ... print(submission.submission_key)
1276 sample-submission
1277
1278 >>> driver.getSubmissions(
1279@@ -1458,7 +1458,7 @@
1280 And We can search for submissions from a particular user.
1281
1282 >>> for submission in driver.getSubmissions(owner=owner):
1283- ... print submission.submission_key
1284+ ... print(submission.submission_key)
1285 sample-submission
1286
1287 >>> driver.getSubmissions(owner=not_owner).count()
1288@@ -1477,7 +1477,7 @@
1289
1290 >>> switch_dbuser('launchpad')
1291 >>> for driver_name in driver_set.all_driver_names():
1292- ... print driver_name.name
1293+ ... print(driver_name.name)
1294 ahci
1295 bar
1296 ehci_hcd
1297@@ -1498,7 +1498,7 @@
1298 >>> store.add(HWDriver(name='foo', package_name=None))
1299 <HWDriver at...
1300 >>> for package_name in driver_set.all_package_names():
1301- ... print package_name.package_name
1302+ ... print(package_name.package_name)
1303 <BLANKLINE>
1304 linux-image-2.6.24-19-generic
1305 linux-image-generic
1306@@ -1515,9 +1515,9 @@
1307 >>> device_driver_link_set = getUtility(IHWDeviceDriverLinkSet)
1308 >>> usb_controller_usb_link = device_driver_link_set.create(
1309 ... device=usb_controller, driver=usb_driver)
1310- >>> print usb_controller_usb_link.device.name
1311+ >>> print(usb_controller_usb_link.device.name)
1312 82801GBM/GHM (ICH7 Family) USB2 EHCI Controller
1313- >>> print usb_controller_usb_link.driver.name
1314+ >>> print(usb_controller_usb_link.driver.name)
1315 usb
1316
1317 A device may be linked to more than one driver. A USB2 host controller
1318@@ -1529,9 +1529,9 @@
1319 ... license=License.GNU_GPL_V2)
1320 >>> usb_controller_ehci_hcd_link = device_driver_link_set.create(
1321 ... device=usb_controller, driver=ehci_hcd_driver)
1322- >>> print usb_controller_ehci_hcd_link.device.name
1323+ >>> print(usb_controller_ehci_hcd_link.device.name)
1324 82801GBM/GHM (ICH7 Family) USB2 EHCI Controller
1325- >>> print usb_controller_ehci_hcd_link.driver.name
1326+ >>> print(usb_controller_ehci_hcd_link.driver.name)
1327 ehci_hcd
1328
1329 A scanner can be linked to the kernel driver for the physical interface
1330@@ -1539,9 +1539,9 @@
1331
1332 >>> scanner_usb_driver_link = device_driver_link_set.create(
1333 ... device=optic_pro_ut12, driver=usb_driver)
1334- >>> print scanner_usb_driver_link.device.name
1335+ >>> print(scanner_usb_driver_link.device.name)
1336 OpticPro UT12
1337- >>> print scanner_usb_driver_link.driver.name
1338+ >>> print(scanner_usb_driver_link.driver.name)
1339 usb
1340
1341 >>> sane_plustek_driver = driver_set.create(package_name='libsane',
1342@@ -1549,9 +1549,9 @@
1343 ... license=License.GNU_GPL_V2)
1344 >>> scanner_sane_plustek_link = device_driver_link_set.create(
1345 ... device=optic_pro_ut12, driver=sane_plustek_driver)
1346- >>> print scanner_sane_plustek_link.device.name
1347+ >>> print(scanner_sane_plustek_link.device.name)
1348 OpticPro UT12
1349- >>> print scanner_sane_plustek_link.driver.name
1350+ >>> print(scanner_sane_plustek_link.driver.name)
1351 plustek
1352
1353 Devices can have alternative drivers. Let's assume that Plustek
1354@@ -1565,9 +1565,9 @@
1355
1356 >>> link3 = device_driver_link_set.create(device=optic_pro_ut12,
1357 ... driver=closed_driver)
1358- >>> print link3.device.name
1359+ >>> print(link3.device.name)
1360 OpticPro UT12
1361- >>> print link3.driver.name
1362+ >>> print(link3.driver.name)
1363 ut12
1364
1365 We have two cases, where we do not (or can not) store driver information
1366@@ -1611,9 +1611,9 @@
1367
1368 >>> link = device_driver_link_set.getByDeviceAndDriver(optic_pro_ut12,
1369 ... closed_driver)
1370- >>> print link.device.name
1371+ >>> print(link.device.name)
1372 OpticPro UT12
1373- >>> print link.driver.name
1374+ >>> print(link.driver.name)
1375 ut12
1376
1377 If no record exists for the given tuple (device, driver),
1378@@ -1621,7 +1621,7 @@
1379
1380 >>> link = device_driver_link_set.getByDeviceAndDriver(optic_pro_ut12,
1381 ... ehci_hcd_driver)
1382- >>> print link
1383+ >>> print(link)
1384 None
1385
1386 HWDeviceDriverLinkSet.getOrCreate() returns an existing record matching
1387@@ -1629,20 +1629,20 @@
1388
1389 >>> link = device_driver_link_set.getOrCreate(optic_pro_ut12,
1390 ... closed_driver)
1391- >>> print link.device.name
1392+ >>> print(link.device.name)
1393 OpticPro UT12
1394- >>> print link.driver.name
1395+ >>> print(link.driver.name)
1396 ut12
1397- >>> print link.id == link3.id
1398+ >>> print(link.id == link3.id)
1399 True
1400 >>> link = device_driver_link_set.getByDeviceAndDriver(optic_pro_ut12,
1401 ... None)
1402- >>> print link
1403+ >>> print(link)
1404 None
1405 >>> link = device_driver_link_set.getOrCreate(optic_pro_ut12, None)
1406- >>> print link.device.name
1407+ >>> print(link.device.name)
1408 OpticPro UT12
1409- >>> print link.driver
1410+ >>> print(link.driver)
1411 None
1412
1413
1414@@ -1684,17 +1684,17 @@
1415
1416 >>> device_class_printer = optic_pro_ut12.getOrCreateDeviceClass(
1417 ... main_class=0x07, sub_class=0x01)
1418- >>> print device_class_printer.device.name
1419+ >>> print(device_class_printer.device.name)
1420 OpticPro UT12
1421- >>> print device_class_printer.main_class
1422+ >>> print(device_class_printer.main_class)
1423 7
1424- >>> print device_class_printer.sub_class
1425+ >>> print(device_class_printer.sub_class)
1426 1
1427
1428 IHWDdevice.classes contains the set of classes defined for this device.
1429
1430 >>> for device_class in optic_pro_ut12.classes:
1431- ... print device_class.main_class, device_class.sub_class
1432+ ... print(device_class.main_class, device_class.sub_class)
1433 7 1
1434 16 0
1435
1436@@ -1709,7 +1709,7 @@
1437 >>> switch_dbuser('launchpad')
1438 >>> optic_pro_ut12.removeDeviceClass(main_class=0x07, sub_class=0x01)
1439 >>> for device_class in optic_pro_ut12.classes:
1440- ... print device_class.main_class, device_class.sub_class
1441+ ... print(device_class.main_class, device_class.sub_class)
1442 16 0
1443
1444 >>> switch_dbuser('hwdb-submission-processor')
1445@@ -1739,17 +1739,17 @@
1446 >>> submitted_tuffbook_2600 = submission_device_set.create(
1447 ... device_driver_link=tuffbook_2600_device_driver_link,
1448 ... submission=sample_submission, parent=None, hal_device_id=1)
1449- >>> print submitted_tuffbook_2600.device_driver_link.device.name
1450- Tuffbook 2600
1451- >>> print submitted_tuffbook_2600.device.name
1452- Tuffbook 2600
1453- >>> print submitted_tuffbook_2600.driver
1454+ >>> print(submitted_tuffbook_2600.device_driver_link.device.name)
1455+ Tuffbook 2600
1456+ >>> print(submitted_tuffbook_2600.device.name)
1457+ Tuffbook 2600
1458+ >>> print(submitted_tuffbook_2600.driver)
1459 None
1460- >>> print submitted_tuffbook_2600.submission.submission_key
1461+ >>> print(submitted_tuffbook_2600.submission.submission_key)
1462 test_submission_id_1
1463- >>> print submitted_tuffbook_2600.parent
1464+ >>> print(submitted_tuffbook_2600.parent)
1465 None
1466- >>> print submitted_tuffbook_2600.hal_device_id
1467+ >>> print(submitted_tuffbook_2600.hal_device_id)
1468 1
1469
1470 ...while ordinary device entries have the attribute parent set. The
1471@@ -1772,15 +1772,15 @@
1472 ... submission=sample_submission,
1473 ... parent=submitted_usb_ehci_hcd_controller,
1474 ... hal_device_id=3)
1475- >>> print submitted_usb_controller.device_driver_link.device.name
1476- 82801GBM/GHM (ICH7 Family) USB2 EHCI Controller
1477- >>> print submitted_usb_controller.device_driver_link.driver.name
1478- usb
1479- >>> print submitted_usb_controller.device.name
1480- 82801GBM/GHM (ICH7 Family) USB2 EHCI Controller
1481- >>> print submitted_usb_controller.driver.name
1482- usb
1483- >>> print submitted_usb_controller.hal_device_id
1484+ >>> print(submitted_usb_controller.device_driver_link.device.name)
1485+ 82801GBM/GHM (ICH7 Family) USB2 EHCI Controller
1486+ >>> print(submitted_usb_controller.device_driver_link.driver.name)
1487+ usb
1488+ >>> print(submitted_usb_controller.device.name)
1489+ 82801GBM/GHM (ICH7 Family) USB2 EHCI Controller
1490+ >>> print(submitted_usb_controller.driver.name)
1491+ usb
1492+ >>> print(submitted_usb_controller.hal_device_id)
1493 3
1494
1495 The USB controller is connected to an (often internal) USB hub. We don't
1496@@ -1820,14 +1820,14 @@
1497 ... submission=sample_submission)
1498 >>> def print_device(submission_device, indent=0):
1499 ... if indent > 0:
1500- ... print '-' * indent + '>',
1501+ ... print('-' * indent + '>', end=' ')
1502 ... device = submission_device.device_driver_link.device
1503 ... driver = submission_device.device_driver_link.driver
1504- ... print device.bus_vendor.vendor_name.name, device.name,
1505+ ... print(device.bus_vendor.vendor_name.name, device.name, end=' ')
1506 ... if driver is not None:
1507- ... print driver.name
1508+ ... print(driver.name)
1509 ... else:
1510- ... print '(no driver)'
1511+ ... print('(no driver)')
1512 ... for sub_device in submitted_devices:
1513 ... if sub_device.parent == submission_device:
1514 ... print_device(sub_device, indent+1)
1515@@ -1851,7 +1851,7 @@
1516
1517 This method returns None if a nonexistent ID is passed.
1518
1519- >>> print submission_device_set.get(1000000)
1520+ >>> print(submission_device_set.get(1000000))
1521 None
1522
1523
1524@@ -1861,8 +1861,9 @@
1525 HWSubmissionDeviceSet.numDevicesInSubmissions() returns how often a
1526 device appears in HWDB submissions.
1527
1528- >>> print submission_device_set.numDevicesInSubmissions(
1529- ... bus=HWBus.IDE, vendor_id='SEAGATE', product_id='ST3250820NS ')
1530+ >>> print(submission_device_set.numDevicesInSubmissions(
1531+ ... bus=HWBus.IDE, vendor_id='SEAGATE',
1532+ ... product_id='ST3250820NS '))
1533 1
1534
1535 If a device appears more than once in a submission, it is counted as often
1536@@ -1883,8 +1884,9 @@
1537 The number returned for the query "count the number of Seagate
1538 ST3250820NS" disks increased.
1539
1540- >>> print submission_device_set.numDevicesInSubmissions(
1541- ... bus=HWBus.IDE, vendor_id='SEAGATE', product_id='ST3250820NS ')
1542+ >>> print(submission_device_set.numDevicesInSubmissions(
1543+ ... bus=HWBus.IDE, vendor_id='SEAGATE',
1544+ ... product_id='ST3250820NS '))
1545 2
1546
1547 Note that we did _not_ add a HWSubmissionDevice entry for the device
1548@@ -1892,9 +1894,9 @@
1549 disks driven by the sd driver, we'll get 1 as without the recently
1550 added device.
1551
1552- >>> print submission_device_set.numDevicesInSubmissions(
1553+ >>> print(submission_device_set.numDevicesInSubmissions(
1554 ... bus=HWBus.IDE, vendor_id='SEAGATE', product_id='ST3250820NS ',
1555- ... driver_name='sd')
1556+ ... driver_name='sd'))
1557 1
1558
1559 Let's now create another HWDB submission, and let's add
1560@@ -1923,46 +1925,47 @@
1561 The number of all ST3250820NS disks and of those disks driven by
1562 the sd driver has now increased by 1.
1563
1564- >>> print submission_device_set.numDevicesInSubmissions(
1565- ... bus=HWBus.IDE, vendor_id='SEAGATE', product_id='ST3250820NS ')
1566+ >>> print(submission_device_set.numDevicesInSubmissions(
1567+ ... bus=HWBus.IDE, vendor_id='SEAGATE',
1568+ ... product_id='ST3250820NS '))
1569 3
1570- >>> print submission_device_set.numDevicesInSubmissions(
1571+ >>> print(submission_device_set.numDevicesInSubmissions(
1572 ... bus=HWBus.IDE, vendor_id='SEAGATE', product_id='ST3250820NS ',
1573- ... driver_name='sd')
1574+ ... driver_name='sd'))
1575 2
1576
1577 We can optionally specify a driver's package name too.
1578
1579- >>> print submission_device_set.numDevicesInSubmissions(
1580+ >>> print(submission_device_set.numDevicesInSubmissions(
1581 ... bus=HWBus.IDE, vendor_id='SEAGATE', product_id='ST3250820NS ',
1582- ... driver_name='sd', package_name='linux-image-2.6.24-19-generic')
1583+ ... driver_name='sd', package_name='linux-image-2.6.24-19-generic'))
1584 1
1585- >>> print submission_device_set.numDevicesInSubmissions(
1586+ >>> print(submission_device_set.numDevicesInSubmissions(
1587 ... bus=HWBus.IDE, vendor_id='SEAGATE', product_id='ST3250820NS ',
1588- ... driver_name='sd', package_name='nonsense')
1589+ ... driver_name='sd', package_name='nonsense'))
1590 0
1591
1592 And we can query for devices having any driver from a given package too.
1593
1594- >>> print submission_device_set.numDevicesInSubmissions(
1595+ >>> print(submission_device_set.numDevicesInSubmissions(
1596 ... bus=HWBus.IDE, vendor_id='SEAGATE', product_id='ST3250820NS ',
1597- ... package_name='linux-image-2.6.24-19-generic')
1598+ ... package_name='linux-image-2.6.24-19-generic'))
1599 1
1600- >>> print submission_device_set.numDevicesInSubmissions(
1601+ >>> print(submission_device_set.numDevicesInSubmissions(
1602 ... bus=HWBus.IDE, vendor_id='SEAGATE', product_id='ST3250820NS ',
1603- ... package_name='nonsense')
1604+ ... package_name='nonsense'))
1605 0
1606
1607 We can also get the number of all devices controlled by a given driver.
1608
1609- >>> print submission_device_set.numDevicesInSubmissions(
1610- ... driver_name='sd')
1611+ >>> print(submission_device_set.numDevicesInSubmissions(
1612+ ... driver_name='sd'))
1613 6
1614
1615 We can limit this count to a given package.
1616
1617- >>> print submission_device_set.numDevicesInSubmissions(
1618- ... driver_name='sd', package_name='linux-image-2.6.24-19-generic')
1619+ >>> print(submission_device_set.numDevicesInSubmissions(
1620+ ... driver_name='sd', package_name='linux-image-2.6.24-19-generic'))
1621 5
1622
1623 While the parameters for a device or a driver are optional, specifying
1624@@ -1979,62 +1982,62 @@
1625 distribution.
1626
1627 >>> switch_dbuser('launchpad')
1628- >>> print submission_device_set.numDevicesInSubmissions(
1629+ >>> print(submission_device_set.numDevicesInSubmissions(
1630 ... bus=HWBus.IDE, vendor_id='SEAGATE', product_id='ST3250820NS ',
1631- ... distro_target=ubuntu)
1632+ ... distro_target=ubuntu))
1633 2
1634- >>> print submission_device_set.numDevicesInSubmissions(
1635+ >>> print(submission_device_set.numDevicesInSubmissions(
1636 ... bus=HWBus.IDE, vendor_id='SEAGATE', product_id='ST3250820NS ',
1637- ... distro_target=debian)
1638+ ... distro_target=debian))
1639 0
1640
1641 Similary, we can limit the count to devices mentioned in submissions
1642 made for a given distroseries.
1643
1644- >>> print submission_device_set.numDevicesInSubmissions(
1645+ >>> print(submission_device_set.numDevicesInSubmissions(
1646 ... bus=HWBus.IDE, vendor_id='SEAGATE', product_id='ST3250820NS ',
1647- ... distro_target=ubuntu['hoary'])
1648+ ... distro_target=ubuntu['hoary']))
1649 2
1650- >>> print submission_device_set.numDevicesInSubmissions(
1651+ >>> print(submission_device_set.numDevicesInSubmissions(
1652 ... bus=HWBus.IDE, vendor_id='SEAGATE', product_id='ST3250820NS ',
1653- ... distro_target=ubuntu['warty'])
1654+ ... distro_target=ubuntu['warty']))
1655 0
1656
1657 And we can also search for devices mentioned in submissions made on a
1658 given processor architecture.
1659
1660- >>> print submission_device_set.numDevicesInSubmissions(
1661+ >>> print(submission_device_set.numDevicesInSubmissions(
1662 ... bus=HWBus.IDE, vendor_id='SEAGATE', product_id='ST3250820NS ',
1663- ... distro_target=ubuntu['hoary']['i386'])
1664+ ... distro_target=ubuntu['hoary']['i386']))
1665 2
1666- >>> print submission_device_set.numDevicesInSubmissions(
1667+ >>> print(submission_device_set.numDevicesInSubmissions(
1668 ... bus=HWBus.IDE, vendor_id='SEAGATE', product_id='ST3250820NS ',
1669- ... distro_target=ubuntu['hoary']['hppa'])
1670+ ... distro_target=ubuntu['hoary']['hppa']))
1671 0
1672
1673 We can also query the number of devices controlled by a given driver
1674 for a distrotarget.
1675
1676- >>> print submission_device_set.numDevicesInSubmissions(
1677+ >>> print(submission_device_set.numDevicesInSubmissions(
1678 ... bus=HWBus.IDE, vendor_id='SEAGATE', product_id='ST3250820NS ',
1679- ... driver_name='sd', distro_target=ubuntu['hoary']['i386'])
1680+ ... driver_name='sd', distro_target=ubuntu['hoary']['i386']))
1681 1
1682- >>> print submission_device_set.numDevicesInSubmissions(
1683+ >>> print(submission_device_set.numDevicesInSubmissions(
1684 ... bus=HWBus.IDE, vendor_id='SEAGATE', product_id='ST3250820NS ',
1685- ... driver_name='nonsense', distro_target=ubuntu['hoary']['i386'])
1686+ ... driver_name='nonsense', distro_target=ubuntu['hoary']['i386']))
1687 0
1688
1689 And we can additionally specify a package name.
1690
1691- >>> print submission_device_set.numDevicesInSubmissions(
1692+ >>> print(submission_device_set.numDevicesInSubmissions(
1693 ... bus=HWBus.IDE, vendor_id='SEAGATE', product_id='ST3250820NS ',
1694 ... driver_name='sd', package_name='linux-image-2.6.24-19-generic',
1695- ... distro_target=ubuntu['hoary']['i386'])
1696+ ... distro_target=ubuntu['hoary']['i386']))
1697 1
1698- >>> print submission_device_set.numDevicesInSubmissions(
1699+ >>> print(submission_device_set.numDevicesInSubmissions(
1700 ... bus=HWBus.IDE, vendor_id='SEAGATE', product_id='ST3250820NS ',
1701 ... driver_name='sd', package_name='nonsense',
1702- ... distro_target=ubuntu['hoary']['i386'])
1703+ ... distro_target=ubuntu['hoary']['i386']))
1704 0
1705
1706 HWSubmissionSet.numSubmissionsWithDevice() returns all submissions
1707@@ -2050,106 +2053,107 @@
1708 >>> submission.status = HWSubmissionProcessingStatus.PROCESSED
1709
1710 >>> submission_set = getUtility(IHWSubmissionSet)
1711- >>> print submission_set.numSubmissionsWithDevice(
1712- ... bus=HWBus.IDE, vendor_id='SEAGATE', product_id='ST3250820NS ')
1713+ >>> print(submission_set.numSubmissionsWithDevice(
1714+ ... bus=HWBus.IDE, vendor_id='SEAGATE',
1715+ ... product_id='ST3250820NS '))
1716 (2L, 3L)
1717
1718 We can limit the results to a given driver...
1719
1720- >>> print submission_set.numSubmissionsWithDevice(
1721+ >>> print(submission_set.numSubmissionsWithDevice(
1722 ... bus=HWBus.IDE, vendor_id='SEAGATE', product_id='ST3250820NS ',
1723- ... driver_name='sd')
1724+ ... driver_name='sd'))
1725 (2L, 3L)
1726- >>> print submission_set.numSubmissionsWithDevice(
1727+ >>> print(submission_set.numSubmissionsWithDevice(
1728 ... bus=HWBus.IDE, vendor_id='SEAGATE', product_id='ST3250820NS ',
1729- ... driver_name='usb')
1730+ ... driver_name='usb'))
1731 (0L, 3L)
1732
1733 ...or we can ask for all submissions containing any device controlled
1734 by a given driver.
1735
1736- >>> print submission_set.numSubmissionsWithDevice(
1737- ... driver_name='sd')
1738+ >>> print(submission_set.numSubmissionsWithDevice(
1739+ ... driver_name='sd'))
1740 (2L, 3L)
1741
1742 While the parameters for a device or a driver are optional, specifying
1743 neither of them leads to an error.
1744
1745- >>> print submission_set.numSubmissionsWithDevice()
1746+ >>> print(submission_set.numSubmissionsWithDevice())
1747 Traceback (most recent call last):
1748 ...
1749 ParameterError: Specify (bus, vendor_id, product_id) or driver_name.
1750
1751 This count can be limited to a given package.
1752
1753- >>> print submission_set.numSubmissionsWithDevice(
1754- ... driver_name='sd', package_name='linux-image-2.6.24-19-generic')
1755+ >>> print(submission_set.numSubmissionsWithDevice(
1756+ ... driver_name='sd', package_name='linux-image-2.6.24-19-generic'))
1757 (1L, 3L)
1758
1759 We can also limit the count to a distibution...
1760
1761- >>> print submission_set.numSubmissionsWithDevice(
1762+ >>> print(submission_set.numSubmissionsWithDevice(
1763 ... bus=HWBus.IDE, vendor_id='SEAGATE', product_id='ST3250820NS ',
1764- ... distro_target=ubuntu)
1765+ ... distro_target=ubuntu))
1766 (1L, 2L)
1767- >>> print submission_set.numSubmissionsWithDevice(
1768+ >>> print(submission_set.numSubmissionsWithDevice(
1769 ... bus=HWBus.IDE, vendor_id='SEAGATE', product_id='ST3250820NS ',
1770- ... distro_target=debian)
1771+ ... distro_target=debian))
1772 (0L, 0L)
1773
1774 ...to a distroseries...
1775
1776- >>> print submission_set.numSubmissionsWithDevice(
1777+ >>> print(submission_set.numSubmissionsWithDevice(
1778 ... bus=HWBus.IDE, vendor_id='SEAGATE', product_id='ST3250820NS ',
1779- ... distro_target=ubuntu['hoary'])
1780+ ... distro_target=ubuntu['hoary']))
1781 (1L, 2L)
1782- >>> print submission_set.numSubmissionsWithDevice(
1783+ >>> print(submission_set.numSubmissionsWithDevice(
1784 ... bus=HWBus.IDE, vendor_id='SEAGATE', product_id='ST3250820NS ',
1785- ... distro_target=ubuntu['warty'])
1786+ ... distro_target=ubuntu['warty']))
1787 (0L, 0L)
1788
1789 ...or to a distroarchseries.
1790
1791- >>> print submission_set.numSubmissionsWithDevice(
1792+ >>> print(submission_set.numSubmissionsWithDevice(
1793 ... bus=HWBus.IDE, vendor_id='SEAGATE', product_id='ST3250820NS ',
1794- ... distro_target=ubuntu['hoary']['i386'])
1795+ ... distro_target=ubuntu['hoary']['i386']))
1796 (1L, 2L)
1797- >>> print submission_set.numSubmissionsWithDevice(
1798+ >>> print(submission_set.numSubmissionsWithDevice(
1799 ... bus=HWBus.IDE, vendor_id='SEAGATE', product_id='ST3250820NS ',
1800- ... distro_target=ubuntu['hoary']['hppa'])
1801+ ... distro_target=ubuntu['hoary']['hppa']))
1802 (0L, 0L)
1803
1804 We can specify a distro target as well as a driver or package name.
1805
1806- >>> print submission_set.numSubmissionsWithDevice(
1807+ >>> print(submission_set.numSubmissionsWithDevice(
1808 ... bus=HWBus.IDE, vendor_id='SEAGATE', product_id='ST3250820NS ',
1809- ... driver_name='sd', distro_target=ubuntu['hoary']['i386'])
1810+ ... driver_name='sd', distro_target=ubuntu['hoary']['i386']))
1811 (1L, 2L)
1812- >>> print submission_set.numSubmissionsWithDevice(
1813+ >>> print(submission_set.numSubmissionsWithDevice(
1814 ... bus=HWBus.IDE, vendor_id='SEAGATE', product_id='ST3250820NS ',
1815- ... driver_name='nosense', distro_target=ubuntu['hoary']['i386'])
1816+ ... driver_name='nosense', distro_target=ubuntu['hoary']['i386']))
1817 (0L, 2L)
1818
1819- >>> print submission_set.numSubmissionsWithDevice(
1820+ >>> print(submission_set.numSubmissionsWithDevice(
1821 ... bus=HWBus.IDE, vendor_id='SEAGATE', product_id='ST3250820NS ',
1822 ... package_name='linux-image-2.6.24-19-generic',
1823- ... distro_target=ubuntu['hoary']['i386'])
1824+ ... distro_target=ubuntu['hoary']['i386']))
1825 (1L, 2L)
1826- >>> print submission_set.numSubmissionsWithDevice(
1827+ >>> print(submission_set.numSubmissionsWithDevice(
1828 ... bus=HWBus.IDE, vendor_id='SEAGATE', product_id='ST3250820NS ',
1829- ... package_name='nonsense', distro_target=ubuntu['hoary']['i386'])
1830+ ... package_name='nonsense', distro_target=ubuntu['hoary']['i386']))
1831 (0L, 2L)
1832
1833- >>> print submission_set.numSubmissionsWithDevice(
1834+ >>> print(submission_set.numSubmissionsWithDevice(
1835 ... bus=HWBus.IDE, vendor_id='SEAGATE', product_id='ST3250820NS ',
1836 ... driver_name='sd', package_name='linux-image-2.6.24-19-generic',
1837- ... distro_target=ubuntu['hoary']['i386'])
1838+ ... distro_target=ubuntu['hoary']['i386']))
1839 (1L, 2L)
1840- >>> print submission_set.numSubmissionsWithDevice(
1841+ >>> print(submission_set.numSubmissionsWithDevice(
1842 ... bus=HWBus.IDE, vendor_id='SEAGATE', product_id='ST3250820NS ',
1843 ... driver_name='nonsense',
1844 ... package_name='linux-image-2.6.24-19-generic',
1845- ... distro_target=ubuntu['hoary']['i386'])
1846+ ... distro_target=ubuntu['hoary']['i386']))
1847 (0L, 2L)
1848
1849 HWSubmission.numDeviceOwners() returns the number of device owners.
1850@@ -2173,99 +2177,99 @@
1851
1852 We can limit the results to a given driver.
1853
1854- >>> print submission_set.numOwnersOfDevice(
1855+ >>> print(submission_set.numOwnersOfDevice(
1856 ... bus=HWBus.IDE, vendor_id='SEAGATE', product_id='ST3250820NS ',
1857- ... driver_name='sd')
1858+ ... driver_name='sd'))
1859 (2L, 3L)
1860- >>> print submission_set.numOwnersOfDevice(
1861+ >>> print(submission_set.numOwnersOfDevice(
1862 ... bus=HWBus.IDE, vendor_id='SEAGATE', product_id='ST3250820NS ',
1863- ... driver_name='usb')
1864+ ... driver_name='usb'))
1865 (0L, 3L)
1866
1867 We can also ask for submitters who use a given driver with any device.
1868
1869- >>> print submission_set.numOwnersOfDevice(
1870- ... driver_name='sd')
1871+ >>> print(submission_set.numOwnersOfDevice(
1872+ ... driver_name='sd'))
1873 (2L, 3L)
1874
1875 This count can be limited to a given package.
1876
1877- >>> print submission_set.numOwnersOfDevice(
1878- ... driver_name='sd', package_name='linux-image-2.6.24-19-generic')
1879+ >>> print(submission_set.numOwnersOfDevice(
1880+ ... driver_name='sd', package_name='linux-image-2.6.24-19-generic'))
1881 (1L, 3L)
1882
1883 While the parameters for a device or a driver are optional, specifying
1884 neither of them leads to an error.
1885
1886- >>> print submission_set.numOwnersOfDevice()
1887+ >>> print(submission_set.numOwnersOfDevice())
1888 Traceback (most recent call last):
1889 ...
1890 ParameterError: Specify (bus, vendor_id, product_id) or driver_name.
1891
1892 We can limit the count to a distibution...
1893
1894- >>> print submission_set.numOwnersOfDevice(
1895+ >>> print(submission_set.numOwnersOfDevice(
1896 ... bus=HWBus.IDE, vendor_id='SEAGATE', product_id='ST3250820NS ',
1897- ... distro_target=ubuntu)
1898+ ... distro_target=ubuntu))
1899 (1L, 2L)
1900- >>> print submission_set.numOwnersOfDevice(
1901+ >>> print(submission_set.numOwnersOfDevice(
1902 ... bus=HWBus.IDE, vendor_id='SEAGATE', product_id='ST3250820NS ',
1903- ... distro_target=debian)
1904+ ... distro_target=debian))
1905 (0L, 0L)
1906
1907 ...to a distroseries...
1908
1909- >>> print submission_set.numOwnersOfDevice(
1910+ >>> print(submission_set.numOwnersOfDevice(
1911 ... bus=HWBus.IDE, vendor_id='SEAGATE', product_id='ST3250820NS ',
1912- ... distro_target=ubuntu['hoary'])
1913+ ... distro_target=ubuntu['hoary']))
1914 (1L, 2L)
1915- >>> print submission_set.numOwnersOfDevice(
1916+ >>> print(submission_set.numOwnersOfDevice(
1917 ... bus=HWBus.IDE, vendor_id='SEAGATE', product_id='ST3250820NS ',
1918- ... distro_target=ubuntu['warty'])
1919+ ... distro_target=ubuntu['warty']))
1920 (0L, 0L)
1921
1922 ...or to a distroarchseries.
1923
1924- >>> print submission_set.numOwnersOfDevice(
1925+ >>> print(submission_set.numOwnersOfDevice(
1926 ... bus=HWBus.IDE, vendor_id='SEAGATE', product_id='ST3250820NS ',
1927- ... distro_target=ubuntu['hoary']['i386'])
1928+ ... distro_target=ubuntu['hoary']['i386']))
1929 (1L, 2L)
1930- >>> print submission_set.numOwnersOfDevice(
1931+ >>> print(submission_set.numOwnersOfDevice(
1932 ... bus=HWBus.IDE, vendor_id='SEAGATE', product_id='ST3250820NS ',
1933- ... distro_target=ubuntu['hoary']['hppa'])
1934+ ... distro_target=ubuntu['hoary']['hppa']))
1935 (0L, 0L)
1936
1937 We can specify a distro target as well as a driver or package name.
1938
1939- >>> print submission_set.numOwnersOfDevice(
1940+ >>> print(submission_set.numOwnersOfDevice(
1941 ... bus=HWBus.IDE, vendor_id='SEAGATE', product_id='ST3250820NS ',
1942- ... driver_name='sd', distro_target=ubuntu['hoary']['i386'])
1943+ ... driver_name='sd', distro_target=ubuntu['hoary']['i386']))
1944 (1L, 2L)
1945- >>> print submission_set.numOwnersOfDevice(
1946+ >>> print(submission_set.numOwnersOfDevice(
1947 ... bus=HWBus.IDE, vendor_id='SEAGATE', product_id='ST3250820NS ',
1948- ... driver_name='nosense', distro_target=ubuntu['hoary']['i386'])
1949+ ... driver_name='nosense', distro_target=ubuntu['hoary']['i386']))
1950 (0L, 2L)
1951
1952- >>> print submission_set.numOwnersOfDevice(
1953+ >>> print(submission_set.numOwnersOfDevice(
1954 ... bus=HWBus.IDE, vendor_id='SEAGATE', product_id='ST3250820NS ',
1955 ... package_name='linux-image-2.6.24-19-generic',
1956- ... distro_target=ubuntu['hoary']['i386'])
1957+ ... distro_target=ubuntu['hoary']['i386']))
1958 (1L, 2L)
1959- >>> print submission_set.numOwnersOfDevice(
1960+ >>> print(submission_set.numOwnersOfDevice(
1961 ... bus=HWBus.IDE, vendor_id='SEAGATE', product_id='ST3250820NS ',
1962- ... package_name='nonsense', distro_target=ubuntu['hoary']['i386'])
1963+ ... package_name='nonsense', distro_target=ubuntu['hoary']['i386']))
1964 (0L, 2L)
1965
1966- >>> print submission_set.numOwnersOfDevice(
1967+ >>> print(submission_set.numOwnersOfDevice(
1968 ... bus=HWBus.IDE, vendor_id='SEAGATE', product_id='ST3250820NS ',
1969 ... driver_name='sd', package_name='linux-image-2.6.24-19-generic',
1970- ... distro_target=ubuntu['hoary']['i386'])
1971+ ... distro_target=ubuntu['hoary']['i386']))
1972 (1L, 2L)
1973- >>> print submission_set.numOwnersOfDevice(
1974+ >>> print(submission_set.numOwnersOfDevice(
1975 ... bus=HWBus.IDE, vendor_id='SEAGATE', product_id='ST3250820NS ',
1976 ... driver_name='nonsense',
1977 ... package_name='linux-image-2.6.24-19-generic',
1978- ... distro_target=ubuntu['hoary']['i386'])
1979+ ... distro_target=ubuntu['hoary']['i386']))
1980 (0L, 2L)
1981
1982
1983@@ -2283,12 +2287,12 @@
1984 >>> from lp.bugs.interfaces.bug import IBugSet
1985 >>> bug_set = getUtility(IBugSet)
1986 >>> bug_one = bug_set.get(1)
1987- >>> print bug_one.owner.displayname
1988+ >>> print(bug_one.owner.displayname)
1989 Sample Person
1990 >>> for person in submission_set.deviceDriverOwnersAffectedByBugs(
1991 ... bus=HWBus.IDE, vendor_id='SEAGATE', product_id='ST3250820NS ',
1992 ... bug_ids=[1]):
1993- ... print person.displayname
1994+ ... print(person.displayname)
1995 Sample Person
1996
1997 If Foo Bar says that they are affected by this bug, they will be listed
1998@@ -2300,7 +2304,7 @@
1999 >>> for person in submission_set.deviceDriverOwnersAffectedByBugs(
2000 ... bus=HWBus.IDE, vendor_id='SEAGATE', product_id='ST3250820NS ',
2001 ... bug_ids=[1], affected_by_bug=True):
2002- ... print person.displayname
2003+ ... print(person.displayname)
2004 Foo Bar
2005 Sample Person
2006
2007@@ -2311,7 +2315,7 @@
2008 >>> for person in submission_set.deviceDriverOwnersAffectedByBugs(
2009 ... bus=HWBus.IDE, vendor_id='SEAGATE', product_id='ST3250820NS ',
2010 ... bug_ids=[1], affected_by_bug=True):
2011- ... print person.displayname
2012+ ... print(person.displayname)
2013 Sample Person
2014
2015 By setting the parameter subscribed_to_bug to True, we can also look
2016@@ -2322,7 +2326,7 @@
2017 >>> for person in submission_set.deviceDriverOwnersAffectedByBugs(
2018 ... bus=HWBus.IDE, vendor_id='SEAGATE', product_id='ST3250820NS ',
2019 ... bug_ids=[1], subscribed_to_bug=True):
2020- ... print person.displayname
2021+ ... print(person.displayname)
2022 Foo Bar
2023 Sample Person
2024
2025@@ -2330,7 +2334,7 @@
2026 >>> for person in submission_set.deviceDriverOwnersAffectedByBugs(
2027 ... bus=HWBus.IDE, vendor_id='SEAGATE', product_id='ST3250820NS ',
2028 ... bug_ids=[1], subscribed_to_bug=True):
2029- ... print person.displayname
2030+ ... print(person.displayname)
2031 Sample Person
2032
2033 We can specify more than one bug ID. If we specify bugs 1 and 3,
2034@@ -2338,12 +2342,12 @@
2035 Foo Bar.
2036
2037 >>> bug_three = bug_set.get(3)
2038- >>> print bug_three.owner.displayname
2039+ >>> print(bug_three.owner.displayname)
2040 Foo Bar
2041 >>> for person in submission_set.deviceDriverOwnersAffectedByBugs(
2042 ... bus=HWBus.IDE, vendor_id='SEAGATE', product_id='ST3250820NS ',
2043 ... bug_ids=[1, 3]):
2044- ... print person.displayname
2045+ ... print(person.displayname)
2046 Foo Bar
2047 Sample Person
2048
2049@@ -2359,25 +2363,25 @@
2050 ... BugTaskSearchParams(user=foo_bar, tag=any('pebcak')))
2051 >>> owners = set(bugtask.bug.owner for bugtask in bugtasks)
2052 >>> for owner in owners:
2053- ... print owner.displayname
2054+ ... print(owner.displayname)
2055 Sample Person
2056 >>> bugtasks = bugtask_set.search(
2057 ... BugTaskSearchParams(user=foo_bar, tag=any('crash')))
2058 >>> owners = set(bugtask.bug.owner for bugtask in bugtasks)
2059 >>> for owner in owners:
2060- ... print owner.displayname
2061+ ... print(owner.displayname)
2062 Foo Bar
2063
2064 >>> for person in submission_set.deviceDriverOwnersAffectedByBugs(
2065 ... bus=HWBus.IDE, vendor_id='SEAGATE', product_id='ST3250820NS ',
2066 ... bug_tags=['pebcak']):
2067- ... print person.displayname
2068+ ... print(person.displayname)
2069 Sample Person
2070
2071 >>> for person in submission_set.deviceDriverOwnersAffectedByBugs(
2072 ... bus=HWBus.IDE, vendor_id='SEAGATE', product_id='ST3250820NS ',
2073 ... bug_tags=['pebcak', 'crash']):
2074- ... print person.displayname
2075+ ... print(person.displayname)
2076 Foo Bar
2077 Sample Person
2078
2079@@ -2392,13 +2396,13 @@
2080 >>> for person in submission_set.deviceDriverOwnersAffectedByBugs(
2081 ... bus=HWBus.IDE, vendor_id='SEAGATE', product_id='ST3250820NS ',
2082 ... driver_name='sd', bug_tags=['pebcak', 'crash']):
2083- ... print person.displayname
2084+ ... print(person.displayname)
2085 Foo Bar
2086 Sample Person
2087
2088- >>> print submission_set.deviceDriverOwnersAffectedByBugs(
2089+ >>> print(submission_set.deviceDriverOwnersAffectedByBugs(
2090 ... bus=HWBus.IDE, vendor_id='SEAGATE', product_id='ST3250820NS ',
2091- ... driver_name='nonsense', bug_tags=['pebcak', 'crash']).count()
2092+ ... driver_name='nonsense', bug_tags=['pebcak', 'crash']).count())
2093 0
2094
2095 ...or a given package name by providing a package_name parameter.
2096@@ -2407,12 +2411,12 @@
2097 ... bus=HWBus.IDE, vendor_id='SEAGATE', product_id='ST3250820NS ',
2098 ... package_name='linux-image-2.6.24-19-generic',
2099 ... bug_tags=['pebcak', 'crash']):
2100- ... print person.displayname
2101+ ... print(person.displayname)
2102 Sample Person
2103
2104- >>> print submission_set.deviceDriverOwnersAffectedByBugs(
2105+ >>> print(submission_set.deviceDriverOwnersAffectedByBugs(
2106 ... bus=HWBus.IDE, vendor_id='SEAGATE', product_id='ST3250820NS ',
2107- ... package_name='nonsense', bug_tags=['pebcak', 'crash']).count()
2108+ ... package_name='nonsense', bug_tags=['pebcak', 'crash']).count())
2109 0
2110
2111 Owners of private submissions are only included if the optional parameter
2112@@ -2430,14 +2434,14 @@
2113 >>> for person in submission_set.deviceDriverOwnersAffectedByBugs(
2114 ... bus=HWBus.IDE, vendor_id='SEAGATE', product_id='ST3250820NS ',
2115 ... bug_ids=[1], subscribed_to_bug=True, user=no_priv):
2116- ... print person.displayname
2117+ ... print(person.displayname)
2118 No Privileges Person
2119 Sample Person
2120
2121 >>> for person in submission_set.deviceDriverOwnersAffectedByBugs(
2122 ... bus=HWBus.IDE, vendor_id='SEAGATE', product_id='ST3250820NS ',
2123 ... bug_ids=[1], subscribed_to_bug=True, user=foo_bar):
2124- ... print person.displayname
2125+ ... print(person.displayname)
2126 No Privileges Person
2127 Sample Person
2128
2129@@ -2446,13 +2450,13 @@
2130 >>> for person in submission_set.deviceDriverOwnersAffectedByBugs(
2131 ... bus=HWBus.IDE, vendor_id='SEAGATE', product_id='ST3250820NS ',
2132 ... bug_ids=[1], subscribed_to_bug=True, user=sample_person):
2133- ... print person.displayname
2134+ ... print(person.displayname)
2135 Sample Person
2136
2137 >>> for person in submission_set.deviceDriverOwnersAffectedByBugs(
2138 ... bus=HWBus.IDE, vendor_id='SEAGATE', product_id='ST3250820NS ',
2139 ... bug_ids=[1], subscribed_to_bug=True):
2140- ... print person.displayname
2141+ ... print(person.displayname)
2142 Sample Person
2143
2144
2145@@ -2464,7 +2468,7 @@
2146
2147 >>> for person in submission_set.deviceDriverOwnersAffectedByBugs(
2148 ... driver_name='sd', bug_ids=[1]):
2149- ... print person.displayname
2150+ ... print(person.displayname)
2151 Sample Person
2152
2153 If Foo Bar says that they are affected by this bug, they will be listed
2154@@ -2473,7 +2477,7 @@
2155 >>> bug_one.markUserAffected(foo_bar)
2156 >>> for person in submission_set.deviceDriverOwnersAffectedByBugs(
2157 ... driver_name='sd', bug_ids=[1], affected_by_bug=True):
2158- ... print person.displayname
2159+ ... print(person.displayname)
2160 Foo Bar
2161 Sample Person
2162
2163@@ -2484,7 +2488,7 @@
2164 <lp.bugs.model.bugsubscription.BugSubscription ...>
2165 >>> for person in submission_set.deviceDriverOwnersAffectedByBugs(
2166 ... driver_name='sd', bug_ids=[1], subscribed_to_bug=True):
2167- ... print person.displayname
2168+ ... print(person.displayname)
2169 Foo Bar
2170 Sample Person
2171
2172@@ -2495,7 +2499,7 @@
2173 >>> bug_one.unsubscribe(foo_bar, unsubscribed_by=foo_bar)
2174 >>> for person in submission_set.deviceDriverOwnersAffectedByBugs(
2175 ... driver_name='sd', bug_ids=[1, 3]):
2176- ... print person.displayname
2177+ ... print(person.displayname)
2178 Foo Bar
2179 Sample Person
2180
2181@@ -2504,12 +2508,12 @@
2182
2183 >>> for person in submission_set.deviceDriverOwnersAffectedByBugs(
2184 ... driver_name='sd', bug_tags=['pebcak']):
2185- ... print person.displayname
2186+ ... print(person.displayname)
2187 Sample Person
2188
2189 >>> for person in submission_set.deviceDriverOwnersAffectedByBugs(
2190 ... driver_name='sd', bug_tags=['pebcak', 'crash']):
2191- ... print person.displayname
2192+ ... print(person.displayname)
2193 Foo Bar
2194 Sample Person
2195
2196@@ -2521,14 +2525,14 @@
2197
2198 >>> for person in submission_set.deviceDriverOwnersAffectedByBugs(
2199 ... driver_name='sd', bug_ids=[2], bug_tags=['pebcak']):
2200- ... print person.displayname
2201+ ... print(person.displayname)
2202 Sample Person
2203
2204 Also, confirm that nothing is returned where there is no matching
2205 tag on a given bug id.
2206
2207- >>> print len(list(submission_set.deviceDriverOwnersAffectedByBugs(
2208- ... driver_name='sd', bug_ids=[3], bug_tags=['pebcak'])))
2209+ >>> print(len(list(submission_set.deviceDriverOwnersAffectedByBugs(
2210+ ... driver_name='sd', bug_ids=[3], bug_tags=['pebcak']))))
2211 0
2212
2213 If neither a device nor a driver name is specified,
2214@@ -2557,7 +2561,7 @@
2215
2216 >>> for entry in submission_set.hwInfoByBugRelatedUsers(
2217 ... bug_ids=[1]):
2218- ... print entry
2219+ ... print(entry)
2220 (u'name12', <DBItem HWBus.SYSTEM, (0) System>, u'MSI', u'MS-7369')
2221 (u'name12', <DBItem HWBus.SYSTEM, (0) System>, u'Tonka', u'Tuffbook 2600')
2222 (u'name12', <DBItem HWBus.PCI, (1) PCI>, u'0x10de', u'0x0455')
2223@@ -2574,7 +2578,7 @@
2224
2225 >>> for entry in submission_set.hwInfoByBugRelatedUsers(
2226 ... bug_ids=[1, 3]):
2227- ... print entry
2228+ ... print(entry)
2229 (u'name12', <DBItem HWBus.SYSTEM, (0) System>, u'MSI', u'MS-7369')
2230 (u'name12', <DBItem HWBus.SYSTEM, (0) System>, u'Tonka', u'Tuffbook 2600')
2231 (u'name12', <DBItem HWBus.PCI, (1) PCI>, u'0x10de', u'0x0455')
2232@@ -2592,7 +2596,7 @@
2233
2234 >>> for entry in submission_set.hwInfoByBugRelatedUsers(
2235 ... bug_tags=['pebcak']):
2236- ... print entry
2237+ ... print(entry)
2238 (u'name12', <DBItem HWBus.SYSTEM, (0) System>, u'MSI', u'MS-7369')
2239 (u'name12', <DBItem HWBus.SYSTEM, (0) System>, u'Tonka', u'Tuffbook 2600')
2240 (u'name12', <DBItem HWBus.PCI, (1) PCI>, u'0x10de', u'0x0455')
2241@@ -2607,7 +2611,7 @@
2242
2243 >>> for entry in submission_set.hwInfoByBugRelatedUsers(
2244 ... bug_tags=['pebcak', 'crash']):
2245- ... print entry
2246+ ... print(entry)
2247 (u'name12', <DBItem HWBus.SYSTEM, (0) System>, u'MSI', u'MS-7369')
2248 (u'name12', <DBItem HWBus.SYSTEM, (0) System>, u'Tonka', u'Tuffbook 2600')
2249 (u'name12', <DBItem HWBus.PCI, (1) PCI>, u'0x10de', u'0x0455')
2250@@ -2625,7 +2629,7 @@
2251
2252 >>> for entry in submission_set.hwInfoByBugRelatedUsers(
2253 ... bug_ids=[2], bug_tags=['pebcak']):
2254- ... print entry
2255+ ... print(entry)
2256 (u'name12', <DBItem HWBus.SYSTEM, (0) System>, u'MSI', u'MS-7369')
2257 (u'name12', <DBItem HWBus.SYSTEM, (0) System>, u'Tonka', u'Tuffbook 2600')
2258 (u'name12', <DBItem HWBus.PCI, (1) PCI>, u'0x10de', u'0x0455')
2259@@ -2641,8 +2645,8 @@
2260 Also, confirm that nothing is returned where there is no matching
2261 tag on a given bug id.
2262
2263- >>> print len(submission_set.hwInfoByBugRelatedUsers(
2264- ... bug_ids=[3], bug_tags=['pebcak']))
2265+ >>> print(len(submission_set.hwInfoByBugRelatedUsers(
2266+ ... bug_ids=[3], bug_tags=['pebcak'])))
2267 0
2268
2269 This method can also be used to list devices where the
2270@@ -2652,7 +2656,7 @@
2271
2272 >>> for entry in submission_set.hwInfoByBugRelatedUsers(
2273 ... bug_ids=[1], affected_by_bug=True):
2274- ... print entry
2275+ ... print(entry)
2276 (u'name12', <DBItem HWBus.SYSTEM, (0) System>, u'MSI', u'MS-7369')
2277 (u'name12', <DBItem HWBus.SYSTEM, (0) System>, u'Tonka', u'Tuffbook 2600')
2278 (u'name12', <DBItem HWBus.PCI, (1) PCI>, u'0x10de', u'0x0455')
2279@@ -2675,7 +2679,7 @@
2280
2281 >>> for entry in submission_set.hwInfoByBugRelatedUsers(
2282 ... bug_ids=[1], subscribed_to_bug=True):
2283- ... print entry
2284+ ... print(entry)
2285 (u'name12', <DBItem HWBus.SYSTEM, (0) System>, u'MSI', u'MS-7369')
2286 (u'name12', <DBItem HWBus.SYSTEM, (0) System>, u'Tonka', u'Tuffbook 2600')
2287 (u'name12', <DBItem HWBus.PCI, (1) PCI>, u'0x10de', u'0x0455')
2288@@ -2699,7 +2703,7 @@
2289
2290 >>> for entry in submission_set.hwInfoByBugRelatedUsers(
2291 ... bug_ids=[1], subscribed_to_bug=True, user=no_priv):
2292- ... print entry
2293+ ... print(entry)
2294 (u'name12', <DBItem HWBus.SYSTEM, (0) System>, u'MSI', u'MS-7369')
2295 (u'name12', <DBItem HWBus.SYSTEM, (0) System>, u'Tonka', u'Tuffbook 2600')
2296 (u'name12', <DBItem HWBus.PCI, (1) PCI>, u'0x10de', u'0x0455')
2297@@ -2717,7 +2721,7 @@
2298
2299 >>> for entry in submission_set.hwInfoByBugRelatedUsers(
2300 ... bug_ids=[1], subscribed_to_bug=True, user=foo_bar):
2301- ... print entry
2302+ ... print(entry)
2303 (u'name12', <DBItem HWBus.SYSTEM, (0) System>, u'MSI', u'MS-7369')
2304 (u'name12', <DBItem HWBus.SYSTEM, (0) System>, u'Tonka', u'Tuffbook 2600')
2305 (u'name12', <DBItem HWBus.PCI, (1) PCI>, u'0x10de', u'0x0455')
2306@@ -2736,7 +2740,7 @@
2307
2308 >>> for entry in submission_set.hwInfoByBugRelatedUsers(
2309 ... bug_ids=[1], subscribed_to_bug=True, user=sample_person):
2310- ... print entry
2311+ ... print(entry)
2312 (u'name12', <DBItem HWBus.SYSTEM, (0) System>, u'MSI', u'MS-7369')
2313 (u'name12', <DBItem HWBus.SYSTEM, (0) System>, u'Tonka', u'Tuffbook 2600')
2314 (u'name12', <DBItem HWBus.PCI, (1) PCI>, u'0x10de', u'0x0455')
2315
2316=== modified file 'lib/lp/hardwaredb/doc/hwdb-submission.txt'
2317--- lib/lp/hardwaredb/doc/hwdb-submission.txt 2012-11-22 00:15:23 +0000
2318+++ lib/lp/hardwaredb/doc/hwdb-submission.txt 2019-04-16 17:27:23 +0000
2319@@ -21,10 +21,10 @@
2320 * submission_data: An XML file containing the collected data. This file is
2321 simply stored as a Librarian file, and parsed later by a cron job.
2322
2323+ >>> import io
2324 >>> from zope.component import getUtility
2325- >>> from StringIO import StringIO
2326 >>> from lp.hardwaredb.interfaces.hwdb import IHWDBApplication
2327- >>> data = StringIO('some data.')
2328+ >>> data = io.BytesIO(b'some data.')
2329 >>> data.filename = 'hardware-info'
2330 >>> form={'field.date_created': u'2007-08-01',
2331 ... 'field.format': u'VERSION_1',
2332@@ -80,7 +80,7 @@
2333
2334 >>> submit_view = create_initialized_view(app, name='+submit', form=form)
2335 >>> for error in submit_view.errors:
2336- ... print error.doc()
2337+ ... print(error.doc())
2338 Submission key already exists.
2339
2340 If the field distribution contains a name which is not known in the
2341@@ -92,7 +92,7 @@
2342 >>> submit_view = create_initialized_view(
2343 ... app, name='+submit', form=invalid_form)
2344 >>> submission = submission_set.getBySubmissionKey(u'unique-id-2')
2345- >>> print submission.distroarchseries
2346+ >>> print(submission.distroarchseries)
2347 None
2348
2349 If distribution is known, but distroseries or architecture are unknown
2350@@ -103,7 +103,7 @@
2351 >>> invalid_form['field.distroseries'] = 'no release'
2352 >>> submit_view = create_initialized_view(
2353 ... app, name='+submit', form=invalid_form)
2354- >>> print submission_set.getBySubmissionKey(u'unique-id-3')
2355+ >>> print(submission_set.getBySubmissionKey(u'unique-id-3'))
2356 None
2357
2358 >>> form['field.submission_key'] = u'unique-id-4'
2359@@ -111,7 +111,7 @@
2360 >>> invalid_form['field.architecture'] = 'no architecture'
2361 >>> submit_view = create_initialized_view(
2362 ... app, name='+submit', form=invalid_form)
2363- >>> print submission_set.getBySubmissionKey(u'unique-id-4')
2364+ >>> print(submission_set.getBySubmissionKey(u'unique-id-4'))
2365 None
2366
2367 The `date_created` field must contain a valid date.
2368@@ -122,7 +122,7 @@
2369 >>> submit_view = create_initialized_view(
2370 ... app, name='+submit', form=invalid_form)
2371 >>> for error in submit_view.errors:
2372- ... print error.doc()
2373+ ... print(error.doc())
2374 Invalid datetime data
2375
2376 The `format` field must contain a value that matches the DBEnumeratedType
2377@@ -133,7 +133,7 @@
2378 >>> submit_view = create_initialized_view(
2379 ... app, name='+submit', form=invalid_form)
2380 >>> for error in submit_view.errors:
2381- ... print error.doc()
2382+ ... print(error.doc())
2383 Invalid value
2384
2385 The field `submission_key` may contain only ASCII data.
2386@@ -143,7 +143,7 @@
2387 >>> submit_view = create_initialized_view(
2388 ... app, name='+submit', form=invalid_form)
2389 >>> for error in submit_view.errors:
2390- ... print error.doc()
2391+ ... print(error.doc())
2392 Invalid textual data
2393
2394 The field `emailaddress` must contain a formally valid email address.
2395@@ -153,7 +153,7 @@
2396 >>> submit_view = create_initialized_view(
2397 ... app, name='+submit', form=invalid_form)
2398 >>> for error in submit_view.errors:
2399- ... print error.doc()
2400+ ... print(error.doc())
2401 Invalid email address
2402
2403 All fields are required. With normal form processing, it's impossible not to
2404@@ -171,10 +171,11 @@
2405 ... invalid_form[field] = u''
2406 ... submit_view = create_initialized_view(
2407 ... app, name='+submit', form=invalid_form)
2408- ... print field
2409+ ... print(field)
2410 ... for error in submit_view.errors:
2411 ... field_name = error.field_name
2412- ... print ' ', field_name, submit_view.getFieldError(field_name)
2413+ ... print(' ', field_name,
2414+ ... submit_view.getFieldError(field_name))
2415 field.date_created
2416 date_created Required input is missing.
2417 field.submission_key
2418@@ -203,7 +204,8 @@
2419 ... config.root,
2420 ... 'lib/lp/hardwaredb/scripts/tests/'
2421 ... 'simple_valid_hwdb_submission.xml')
2422- >>> valid_sample_data = StringIO(open(valid_sample_data_path).read())
2423+ >>> valid_sample_data = io.BytesIO(
2424+ ... open(valid_sample_data_path, 'rb').read())
2425 >>> valid_sample_data.filename = 'simple_valid_hwdb_submission.xml'
2426 >>> team_form['field.submission_data'] = valid_sample_data
2427 >>> submit_view = create_initialized_view(
2428@@ -233,18 +235,18 @@
2429 >>> new_submissions = submission_set.getByStatus(
2430 ... HWSubmissionProcessingStatus.SUBMITTED)
2431 >>> for submission in new_submissions:
2432- ... print submission.submission_key, submission.status.title
2433+ ... print(submission.submission_key, submission.status.title)
2434 test_submission_id_1 Submitted
2435 unique-id-1 Submitted
2436 unique-id-68 Submitted
2437 >>> processed_submissions = submission_set.getByStatus(
2438 ... HWSubmissionProcessingStatus.PROCESSED)
2439 >>> for submission in processed_submissions:
2440- ... print submission.submission_key, submission.status.title
2441+ ... print(submission.submission_key, submission.status.title)
2442 sample-submission Processed
2443 >>> invalid_submissions = submission_set.getByStatus(
2444 ... HWSubmissionProcessingStatus.INVALID)
2445- >>> print invalid_submissions.count()
2446+ >>> print(invalid_submissions.count())
2447 0
2448
2449 The script process-hwdb-submissions.py takes the optional parameter
2450@@ -269,14 +271,14 @@
2451 ... 'cronscripts/process-hwdb-submissions.py', ['-m1'])
2452 >>> returnvalue
2453 0
2454- >>> print err
2455+ >>> print(err)
2456 INFO Creating lockfile: /var/lock/launchpad-hwdbsubmissions.lock
2457 ERROR Parsing submission test_submission_id_1: syntax error:
2458 line 1, column 0
2459 INFO OOPS-...
2460 INFO Processed 0 valid and 1 invalid HWDB submissions
2461 <BLANKLINE>
2462- >>> print out
2463+ >>> print(out)
2464 <BLANKLINE>
2465
2466 Submission "test_submission_id_1" has now the state INVALID; the other
2467@@ -285,18 +287,18 @@
2468 >>> new_submissions = submission_set.getByStatus(
2469 ... HWSubmissionProcessingStatus.SUBMITTED)
2470 >>> for submission in new_submissions:
2471- ... print submission.submission_key, submission.status.title
2472+ ... print(submission.submission_key, submission.status.title)
2473 unique-id-1 Submitted
2474 unique-id-68 Submitted
2475 >>> processed_submissions = submission_set.getByStatus(
2476 ... HWSubmissionProcessingStatus.PROCESSED)
2477 >>> for submission in processed_submissions:
2478- ... print submission.submission_key, submission.status.title
2479+ ... print(submission.submission_key, submission.status.title)
2480 sample-submission Processed
2481 >>> invalid_submissions = submission_set.getByStatus(
2482 ... HWSubmissionProcessingStatus.INVALID)
2483 >>> for submission in invalid_submissions:
2484- ... print submission.submission_key, submission.status.title
2485+ ... print(submission.submission_key, submission.status.title)
2486 test_submission_id_1 Invalid submission
2487
2488 From the remaining two not yet processed submissions, one has invalid
2489@@ -306,13 +308,13 @@
2490 ... 'cronscripts/process-hwdb-submissions.py')
2491 >>> returnvalue
2492 0
2493- >>> print err
2494+ >>> print(err)
2495 INFO Creating lockfile: /var/lock/launchpad-hwdbsubmissions.lock
2496 ERROR Parsing submission unique-id-1: syntax error: line 1, column 0
2497 INFO OOPS-...
2498 INFO Processed 1 valid and 1 invalid HWDB submissions
2499 <BLANKLINE>
2500- >>> print out
2501+ >>> print(out)
2502 <BLANKLINE>
2503
2504 Now we have one valid, two invalid and no unprocessed submissions.
2505@@ -322,19 +324,19 @@
2506 >>> transaction.commit()
2507 >>> new_submissions = submission_set.getByStatus(
2508 ... HWSubmissionProcessingStatus.SUBMITTED)
2509- >>> print new_submissions.count()
2510+ >>> print(new_submissions.count())
2511 0
2512 >>> processed_submissions = submission_set.getByStatus(
2513 ... HWSubmissionProcessingStatus.PROCESSED)
2514 >>> for submission in processed_submissions:
2515- ... print submission.submission_key, submission.status.title
2516+ ... print(submission.submission_key, submission.status.title)
2517 sample-submission Processed
2518 unique-id-68 Processed
2519
2520 >>> invalid_submissions = submission_set.getByStatus(
2521 ... HWSubmissionProcessingStatus.INVALID)
2522 >>> for submission in invalid_submissions:
2523- ... print submission.submission_key, submission.status.title
2524+ ... print(submission.submission_key, submission.status.title)
2525 test_submission_id_1 Invalid submission
2526 unique-id-1 Invalid submission
2527
2528@@ -350,14 +352,14 @@
2529 Now we have 80 new submissions and three submissions that were processed
2530 in previous tests.
2531
2532- >>> print submission_set.getByStatus(
2533- ... HWSubmissionProcessingStatus.SUBMITTED).count()
2534+ >>> print(submission_set.getByStatus(
2535+ ... HWSubmissionProcessingStatus.SUBMITTED).count())
2536 80
2537- >>> print submission_set.getByStatus(
2538- ... HWSubmissionProcessingStatus.PROCESSED).count()
2539+ >>> print(submission_set.getByStatus(
2540+ ... HWSubmissionProcessingStatus.PROCESSED).count())
2541 2
2542- >>> print submission_set.getByStatus(
2543- ... HWSubmissionProcessingStatus.INVALID).count()
2544+ >>> print(submission_set.getByStatus(
2545+ ... HWSubmissionProcessingStatus.INVALID).count())
2546 2
2547 >>> transaction.commit()
2548
2549@@ -368,19 +370,19 @@
2550 ... 'cronscripts/process-hwdb-submissions.py', ['-m60'])
2551 >>> returnvalue
2552 0
2553- >>> print err
2554+ >>> print(err)
2555 INFO Creating lockfile: /var/lock/launchpad-hwdbsubmissions.lock
2556 INFO Processed 60 valid and 0 invalid HWDB submissions
2557- >>> print out
2558+ >>> print(out)
2559 <BLANKLINE>
2560- >>> print submission_set.getByStatus(
2561- ... HWSubmissionProcessingStatus.SUBMITTED).count()
2562+ >>> print(submission_set.getByStatus(
2563+ ... HWSubmissionProcessingStatus.SUBMITTED).count())
2564 20
2565- >>> print submission_set.getByStatus(
2566- ... HWSubmissionProcessingStatus.PROCESSED).count()
2567+ >>> print(submission_set.getByStatus(
2568+ ... HWSubmissionProcessingStatus.PROCESSED).count())
2569 62
2570- >>> print submission_set.getByStatus(
2571- ... HWSubmissionProcessingStatus.INVALID).count()
2572+ >>> print(submission_set.getByStatus(
2573+ ... HWSubmissionProcessingStatus.INVALID).count())
2574 2
2575
2576 Let's add more subscription so that we have more than max_chunk_size
2577@@ -391,31 +393,31 @@
2578 ... submit_view = create_initialized_view(
2579 ... app, name='+submit', form=form)
2580
2581- >>> print submission_set.getByStatus(
2582- ... HWSubmissionProcessingStatus.SUBMITTED).count()
2583+ >>> print(submission_set.getByStatus(
2584+ ... HWSubmissionProcessingStatus.SUBMITTED).count())
2585 100
2586- >>> print submission_set.getByStatus(
2587- ... HWSubmissionProcessingStatus.PROCESSED).count()
2588+ >>> print(submission_set.getByStatus(
2589+ ... HWSubmissionProcessingStatus.PROCESSED).count())
2590 62
2591- >>> print submission_set.getByStatus(
2592- ... HWSubmissionProcessingStatus.INVALID).count()
2593+ >>> print(submission_set.getByStatus(
2594+ ... HWSubmissionProcessingStatus.INVALID).count())
2595 2
2596 >>> transaction.commit()
2597 >>> returnvalue, out, err = run_script(
2598 ... 'cronscripts/process-hwdb-submissions.py')
2599 >>> returnvalue
2600 0
2601- >>> print err
2602+ >>> print(err)
2603 INFO Creating lockfile: /var/lock/launchpad-hwdbsubmissions.lock
2604 INFO Processed 100 valid and 0 invalid HWDB submissions
2605- >>> print out
2606+ >>> print(out)
2607 <BLANKLINE>
2608- >>> print submission_set.getByStatus(
2609- ... HWSubmissionProcessingStatus.SUBMITTED).count()
2610+ >>> print(submission_set.getByStatus(
2611+ ... HWSubmissionProcessingStatus.SUBMITTED).count())
2612 0
2613- >>> print submission_set.getByStatus(
2614- ... HWSubmissionProcessingStatus.PROCESSED).count()
2615+ >>> print(submission_set.getByStatus(
2616+ ... HWSubmissionProcessingStatus.PROCESSED).count())
2617 162
2618- >>> print submission_set.getByStatus(
2619- ... HWSubmissionProcessingStatus.INVALID).count()
2620+ >>> print(submission_set.getByStatus(
2621+ ... HWSubmissionProcessingStatus.INVALID).count())
2622 2
2623
2624=== modified file 'lib/lp/hardwaredb/doc/hwdb.txt'
2625--- lib/lp/hardwaredb/doc/hwdb.txt 2016-02-05 16:51:12 +0000
2626+++ lib/lp/hardwaredb/doc/hwdb.txt 2019-04-16 17:27:23 +0000
2627@@ -14,7 +14,7 @@
2628
2629 * reference to the librarian file.
2630
2631- >>> print sample_submission.raw_submission
2632+ >>> print(sample_submission.raw_submission)
2633 <...LibraryFileAlias instance at ...>
2634
2635 * date_created: Date and time of the submission (generated by the client).
2636@@ -24,52 +24,52 @@
2637 * Some machines have a broken CMOS battery and the user does not set
2638 date and time after every boot.
2639
2640- >>> print sample_submission.date_created
2641+ >>> print(sample_submission.date_created)
2642 2008-09-26 17:19:18+00:00
2643
2644 * date_submitted: Date and time of the submission (generated by the server).
2645
2646- >>> print sample_submission.date_submitted
2647+ >>> print(sample_submission.date_submitted)
2648 2008-09-30 08:19:00.222131+00:00
2649
2650 * format: The format version of the submitted data, as given by the HWDB
2651 client. See HWSubmissionFormat for valid values.
2652
2653- >>> print sample_submission.format.name
2654+ >>> print(sample_submission.format.name)
2655 VERSION_1
2656
2657 * status: The status of the submission. See HWSubmissionProcessingStatus for
2658 valid values.
2659
2660- >>> print sample_submission.status.name
2661+ >>> print(sample_submission.status.name)
2662 PROCESSED
2663
2664 * private: If True, the submitter allows public access to the data. If
2665 false, the data may be used only for statistical purposes.
2666
2667- >>> print sample_submission.private
2668+ >>> print(sample_submission.private)
2669 False
2670
2671 * contactable: If True, the submitter agrees to be contacted by upstream
2672 developers and package maintainers for tests etc.
2673
2674- >>> print sample_submission.contactable
2675+ >>> print(sample_submission.contactable)
2676 False
2677
2678 * submission_key: A unique submission ID.
2679
2680- >>> print sample_submission.submission_key
2681+ >>> print(sample_submission.submission_key)
2682 sample-submission
2683
2684 * raw_emailaddress: The email address of the submitter.
2685
2686- >>> print sample_submission.raw_emailaddress
2687+ >>> print(sample_submission.raw_emailaddress)
2688 test@canonical.com
2689
2690 * owner: A reference to the Person table. This value is null, if the email
2691 address does not belong (yet) to an entry in Person table.
2692
2693- >>> print sample_submission.owner.displayname
2694+ >>> print(sample_submission.owner.displayname)
2695 Sample Person
2696
2697 * distroarchseries: A reference to the distroarchseries of the submission.
2698@@ -77,20 +77,21 @@
2699 distroseries and architecture do not match an existing entry in the
2700 Distroarchrelease table.
2701
2702- >>> print sample_submission.distroarchseries.architecturetag
2703+ >>> print(sample_submission.distroarchseries.architecturetag)
2704 i386
2705
2706- >>> print sample_submission.distroarchseries.distroseries.name
2707+ >>> print(sample_submission.distroarchseries.distroseries.name)
2708 hoary
2709
2710- >>> print sample_submission.distroarchseries.distroseries.distribution.name
2711+ >>> print(
2712+ ... sample_submission.distroarchseries.distroseries.distribution.name)
2713 ubuntu
2714
2715 * system_fingerprint: A reference to an entry of the HWSystemFingerprint
2716 table. This table stores the system name as returned by HAL
2717 (system.vendor, system.product).
2718
2719- >>> print sample_submission.system_fingerprint.fingerprint
2720+ >>> print(sample_submission.system_fingerprint.fingerprint)
2721 MSI MS-7369
2722
2723 * devices: The set set of HWSubmissionDevice records which belong to
2724@@ -101,7 +102,7 @@
2725
2726 >>> login('foo.bar@canonical.com')
2727 >>> for submission_device in sample_submission.devices[:2]:
2728- ... print submission_device.device.name
2729+ ... print(submission_device.device.name)
2730 MCP65 USB Controller
2731 MCP65 SATA Controller
2732 >>> login(ANONYMOUS)
2733@@ -146,7 +147,7 @@
2734
2735 ...or None, if no entry exists.
2736
2737- >>> print hw_fingerprint_set.getByName(u'DEC PDP11')
2738+ >>> print(hw_fingerprint_set.getByName(u'DEC PDP11'))
2739 None
2740
2741 IHWSubmissionSet.createSubmission creates a new entry in the
2742@@ -207,7 +208,7 @@
2743 >>> from lp.registry.interfaces.person import IPersonSet
2744 >>> beeblebrox = getUtility(IPersonSet).getByEmail(
2745 ... 'beeblebrox@example.com')
2746- >>> print beeblebrox
2747+ >>> print(beeblebrox)
2748 None
2749
2750 >>> submission = hw_submission_set.createSubmission(
2751@@ -222,7 +223,7 @@
2752 ... filename=u'hwinfo.txt',
2753 ... filesize=len(submission_data),
2754 ... system_fingerprint=u'Acer 6789')
2755- >>> print submission.owner
2756+ >>> print(submission.owner)
2757 None
2758
2759 The submitted data can be retrieved via IHWSubmissionSet.getBySubmissionKey.
2760@@ -247,7 +248,7 @@
2761 ... filename=u'hwinfo.txt',
2762 ... filesize=len(submission_data),
2763 ... system_fingerprint=u'Dell Inspiron 1234')
2764- >>> print hw_submission_set.getBySubmissionKey(u'private-submission')
2765+ >>> print(hw_submission_set.getBySubmissionKey(u'private-submission'))
2766 None
2767 >>> sample_person = getUtility(IPersonSet).getByEmail('test@canonical.com')
2768 >>> sample_person.displayname
2769@@ -286,15 +287,15 @@
2770 >>> no_priv = getUtility(IPersonSet).getByEmail('no-priv@canonical.com')
2771 >>> no_priv.displayname
2772 u'No Privileges Person'
2773- >>> print hw_submission_set.getBySubmissionKey(u'private-submission',
2774- ... no_priv)
2775+ >>> print(hw_submission_set.getBySubmissionKey(u'private-submission',
2776+ ... no_priv))
2777 None
2778
2779 >>> login(ANONYMOUS)
2780
2781 If no submission exists for a given ID, None is returned.
2782
2783- >>> print hw_submission_set.getBySubmissionKey(u'unknown-ID')
2784+ >>> print(hw_submission_set.getBySubmissionKey(u'unknown-ID'))
2785 None
2786
2787 IHWSubmissionSet.getByFingerprintName returns all submissions for a
2788@@ -381,7 +382,7 @@
2789 >>> from lp.services.log.logger import DevNullLogger
2790 >>> HWSubmissionEmailLinker(log=DevNullLogger()).run()
2791 >>> submission = hw_submission_set.getBySubmissionKey(u'unique-id-2')
2792- >>> print submission.owner.displayname
2793+ >>> print(submission.owner.displayname)
2794 Beeblebrox
2795
2796 If somebody has a Launchpad account, but submits HWDB test data using
2797@@ -401,7 +402,7 @@
2798 ... filesize=len(submission_data),
2799 ... system_fingerprint=u'Acer 6789')
2800 >>> Store.of(submission).flush()
2801- >>> print submission.owner
2802+ >>> print(submission.owner)
2803 None
2804
2805 When they add this email address to their list of addresses in Launchpad,
2806@@ -415,7 +416,7 @@
2807 >>> transaction.commit()
2808 >>> HWSubmissionEmailLinker(log=DevNullLogger()).run()
2809 >>> submission = hw_submission_set.getBySubmissionKey(u'unique-id-2')
2810- >>> print submission.owner.displayname
2811+ >>> print(submission.owner.displayname)
2812 Beeblebrox
2813
2814 === Submission Records without an email address ===
2815@@ -436,9 +437,9 @@
2816 ... filesize=len(submission_data),
2817 ... system_fingerprint=u'Dell Inspiron 1234')
2818 >>> Store.of(submission_no_owner).flush()
2819- >>> print submission_no_owner.raw_emailaddress
2820+ >>> print(submission_no_owner.raw_emailaddress)
2821 None
2822- >>> print submission_no_owner.owner
2823+ >>> print(submission_no_owner.owner)
2824 None
2825
2826 == Retrieving Submissions by Status ==
2827@@ -451,12 +452,12 @@
2828 ... HWSubmissionProcessingStatus)
2829 >>> def print_submissions(submissions):
2830 ... for submission in submissions:
2831- ... print submission.submission_key, submission.private,
2832+ ... print(submission.submission_key, submission.private, end=' ')
2833 ... if submission.owner is not None:
2834- ... print submission.owner.displayname,
2835+ ... print(submission.owner.displayname, end=' ')
2836 ... else:
2837- ... print '(no owner)',
2838- ... print submission.status.name
2839+ ... print('(no owner)', end=' ')
2840+ ... print(submission.status.name)
2841 >>> new_submissions = hw_submission_set.getByStatus(
2842 ... HWSubmissionProcessingStatus.SUBMITTED)
2843 >>> print_submissions(new_submissions)
2844@@ -546,7 +547,7 @@
2845 >>> submission_bug = submission_bug_set.create(
2846 ... submission_no_owner, bug_one)
2847 >>> transaction.commit()
2848- >>> print submission_bug.submission.submission_key
2849+ >>> print(submission_bug.submission.submission_key)
2850 unique-id-5
2851 >>> submission_bug.bug.id
2852 1
2853@@ -563,7 +564,7 @@
2854 a given bug.
2855
2856 >>> for submission in submission_bug_set.submissionsForBug(bug_one):
2857- ... print submission.submission_key
2858+ ... print(submission.submission_key)
2859 unique-id-5
2860
2861 Private submissions are only returned if the current user is an admin
2862@@ -575,13 +576,13 @@
2863 <HWSubmissionBug at...
2864 >>> for submission in submission_bug_set.submissionsForBug(
2865 ... bug_one, user=sample_person):
2866- ... print submission.submission_key
2867+ ... print(submission.submission_key)
2868 private-submission
2869 unique-id-5
2870
2871 >>> for submission in submission_bug_set.submissionsForBug(
2872 ... bug_one, user=foobar):
2873- ... print submission.submission_key
2874+ ... print(submission.submission_key)
2875 private-submission
2876 unique-id-5
2877
2878@@ -589,14 +590,14 @@
2879
2880 >>> for submission in submission_bug_set.submissionsForBug(
2881 ... bug_one, user=no_priv):
2882- ... print submission.submission_key
2883+ ... print(submission.submission_key)
2884 unique-id-5
2885
2886 ...as well as anonymous users.
2887
2888 >>> for submission in submission_bug_set.submissionsForBug(
2889 ... bug_one):
2890- ... print submission.submission_key
2891+ ... print(submission.submission_key)
2892 unique-id-5
2893
2894 Existing links can also be removed.
2895@@ -607,7 +608,7 @@
2896
2897 >>> for submission in submission_bug_set.submissionsForBug(
2898 ... bug_one, user=foobar):
2899- ... print submission.submission_key
2900+ ... print(submission.submission_key)
2901 private-submission
2902
2903
2904@@ -621,7 +622,7 @@
2905 submissions are returned.
2906
2907 >>> for submission in hw_submission_set.search():
2908- ... print submission.submission_key
2909+ ... print(submission.submission_key)
2910 test_submission_id_1
2911 sample-submission
2912 unique-id-1
2913@@ -633,7 +634,7 @@
2914 are returned too.
2915
2916 >>> for submission in hw_submission_set.search(user=sample_person):
2917- ... print submission.submission_key
2918+ ... print(submission.submission_key)
2919 test_submission_id_1
2920 sample-submission
2921 unique-id-1
2922@@ -645,7 +646,7 @@
2923 Admins have access to all submissions.
2924
2925 >>> for submission in hw_submission_set.search(user=foobar):
2926- ... print submission.submission_key
2927+ ... print(submission.submission_key)
2928 test_submission_id_1
2929 sample-submission
2930 unique-id-1
2931@@ -662,21 +663,21 @@
2932 >>> distribution_set = getUtility(IDistributionSet)
2933 >>> ubuntu = distribution_set.getByName('ubuntu')
2934 >>> for submission in hw_submission_set.search(distribution=ubuntu):
2935- ... print submission.submission_key
2936+ ... print(submission.submission_key)
2937 sample-submission
2938
2939 >>> debian = distribution_set.getByName('debian')
2940- >>> print hw_submission_set.search(distribution=debian).count()
2941+ >>> print(hw_submission_set.search(distribution=debian).count())
2942 0
2943
2944 If an architecture is specified, only those submissions that were made
2945 for that architecture are returned.
2946
2947 >>> for submission in hw_submission_set.search(architecture='i386'):
2948- ... print submission.submission_key
2949+ ... print(submission.submission_key)
2950 sample-submission
2951
2952- >>> print hw_submission_set.search(architecture='amd64').count()
2953+ >>> print(hw_submission_set.search(architecture='amd64').count())
2954 0
2955
2956
2957@@ -688,7 +689,7 @@
2958 >>> msi_mainboard = device_set.getByDeviceID(
2959 ... HWBus.SYSTEM, 'MSI', 'MS-7369')
2960 >>> for submission in hw_submission_set.search(device=msi_mainboard):
2961- ... print submission.submission_key
2962+ ... print(submission.submission_key)
2963 sample-submission
2964
2965 If a driver is specified, only those submissions for that driver
2966@@ -699,7 +700,7 @@
2967 >>> ehci_driver = driver_set.getByPackageAndName(
2968 ... 'linux-image-2.6.24-19-generic', 'ehci_hcd')
2969 >>> for submission in hw_submission_set.search(driver=ehci_driver):
2970- ... print submission.submission_key
2971+ ... print(submission.submission_key)
2972 sample-submission
2973
2974 If a distroseries is specified, only submissions for that distroseries
2975@@ -712,7 +713,7 @@
2976 >>> warty_arch_series = factory.makeDistroArchSeries(distroseries=warty)
2977 >>> submission = factory.makeHWSubmission(distroarchseries=warty_arch_series)
2978 >>> for submission in hw_submission_set.search(distroseries=warty):
2979- ... print submission.distroarchseries.distroseries.name
2980+ ... print(submission.distroarchseries.distroseries.name)
2981 warty
2982
2983 It is also possible to search for a distroseries and architecture.
2984@@ -724,9 +725,9 @@
2985 ... processor=amd64)
2986 >>> submission = factory.makeHWSubmission(distroarchseries=warty_amd64)
2987 >>> for submission in hw_submission_set.search(distroseries=warty, architecture='amd64'):
2988- ... print '%s %s ' % (
2989+ ... print('%s %s ' % (
2990 ... submission.distroarchseries.distroseries.name,
2991- ... submission.distroarchseries.architecturetag)
2992+ ... submission.distroarchseries.architecturetag))
2993 warty amd64
2994
2995 And we can also search for submissions from a particular user.
2996
2997=== modified file 'lib/lp/hardwaredb/scripts/hwdbsubmissions.py'
2998--- lib/lp/hardwaredb/scripts/hwdbsubmissions.py 2018-02-02 10:06:24 +0000
2999+++ lib/lp/hardwaredb/scripts/hwdbsubmissions.py 2019-04-16 17:27:23 +0000
3000@@ -16,11 +16,11 @@
3001 ]
3002
3003 import bz2
3004-from cStringIO import StringIO
3005 from datetime import (
3006 datetime,
3007 timedelta,
3008 )
3009+import io
3010 from logging import getLogger
3011 import os
3012 import re
3013@@ -73,14 +73,15 @@
3014 """,
3015 re.VERBOSE)
3016
3017-_broken_comment_nodes_re = re.compile('(<comment>.*?</comment>)', re.DOTALL)
3018+_broken_comment_nodes_re = re.compile(br'(<comment>.*?</comment>)', re.DOTALL)
3019 _missing_udev_node_data = re.compile(
3020- '<info command="udevadm info --export-db">(.*?)</info>', re.DOTALL)
3021+ br'<info command="udevadm info --export-db">(.*?)</info>', re.DOTALL)
3022 _missing_dmi_node_data = re.compile(
3023- r'<info command="grep -r \. /sys/class/dmi/id/ 2&gt;/dev/null">(.*?)'
3024- '</info>', re.DOTALL)
3025-_udev_node_exists = re.compile('<hardware>.*?<udev>.*?</hardware>', re.DOTALL)
3026-_dmi_node_exists = re.compile('<hardware>.*?<dmi>.*?</hardware>', re.DOTALL)
3027+ br'<info command="grep -r \. /sys/class/dmi/id/ 2&gt;/dev/null">(.*?)'
3028+ br'</info>', re.DOTALL)
3029+_udev_node_exists = re.compile(
3030+ br'<hardware>.*?<udev>.*?</hardware>', re.DOTALL)
3031+_dmi_node_exists = re.compile(br'<hardware>.*?<dmi>.*?</hardware>', re.DOTALL)
3032
3033 ROOT_UDI = '/org/freedesktop/Hal/devices/computer'
3034 UDEV_ROOT_PATH = '/devices/LNXSYSTM:00'
3035@@ -176,7 +177,7 @@
3036 # A considerable number of reports for Lucid has ESC characters
3037 # in comment nodes. We don't need the comment nodes at all, so
3038 # we can simply empty them.
3039- submission = _broken_comment_nodes_re.sub('<comment/>', submission)
3040+ submission = _broken_comment_nodes_re.sub(b'<comment/>', submission)
3041
3042 # Submissions from Natty don't have the nodes <dmi> and <udev>
3043 # as children of the <hardware> node. Fortunately, they provide
3044@@ -197,14 +198,14 @@
3045 mo = _missing_udev_node_data.search(submission)
3046 if mo is not None:
3047 missing_data = mo.group(1)
3048- missing_data = '<udev>%s</udev>\n</hardware>' % missing_data
3049- submission = submission.replace('</hardware>', missing_data)
3050+ missing_data = b'<udev>%s</udev>\n</hardware>' % missing_data
3051+ submission = submission.replace(b'</hardware>', missing_data)
3052 if _dmi_node_exists.search(submission) is None:
3053 mo = _missing_dmi_node_data.search(submission)
3054 if mo is not None:
3055 missing_data = mo.group(1)
3056- missing_data = '<dmi>%s</dmi>\n</hardware>' % missing_data
3057- submission = submission.replace('</hardware>', missing_data)
3058+ missing_data = b'<dmi>%s</dmi>\n</hardware>' % missing_data
3059+ submission = submission.replace(b'</hardware>', missing_data)
3060 return submission
3061
3062 def _getValidatedEtree(self, submission, submission_key):
3063@@ -215,7 +216,7 @@
3064 """
3065 submission = self.fixFrequentErrors(submission)
3066 try:
3067- tree = etree.parse(StringIO(submission), parser=self.doc_parser)
3068+ tree = etree.parse(io.BytesIO(submission), parser=self.doc_parser)
3069 except SyntaxError as error_value:
3070 self._logError(error_value, submission_key)
3071 return None
3072
3073=== modified file 'lib/lp/hardwaredb/scripts/tests/test_hwdb_submission_parser.py'
3074--- lib/lp/hardwaredb/scripts/tests/test_hwdb_submission_parser.py 2012-01-01 02:58:52 +0000
3075+++ lib/lp/hardwaredb/scripts/tests/test_hwdb_submission_parser.py 2019-04-16 17:27:23 +0000
3076@@ -3,8 +3,10 @@
3077
3078 """Tests of the HWDB submissions parser."""
3079
3080-from cStringIO import StringIO
3081+from __future__ import absolute_import, print_function, unicode_literals
3082+
3083 from datetime import datetime
3084+import io
3085 import logging
3086 import os
3087 from textwrap import dedent
3088@@ -343,18 +345,18 @@
3089
3090 def testStringPropertyEncoding(self):
3091 """Different encodings are properly handled."""
3092- xml_template = '''<?xml version="1.0" encoding="%s"?>
3093- <property type="str" name="foo">%s</property>'''
3094+ xml_template = u'''<?xml version="1.0" encoding="%s"?>
3095+ <property type="str" name="foo">%s</property>'''
3096 umlaut = u'\xe4'
3097 parser = SubmissionParser()
3098 for encoding in ('utf-8', 'iso-8859-1'):
3099- xml = xml_template % (encoding, umlaut.encode(encoding))
3100- tree = etree.parse(StringIO(xml))
3101+ xml = (xml_template % (encoding, umlaut)).encode(encoding)
3102+ tree = etree.parse(io.BytesIO(xml))
3103 node = tree.getroot()
3104 result = parser._parseProperty(node)
3105 self.assertEqual(result, ('foo', (umlaut, 'str')),
3106 'Invalid parsing result for string encoding %s, '
3107- 'expected am umlaut (\xe4), got %s'
3108+ 'expected an umlaut (\xe4), got %s'
3109 % (encoding, repr(result)))
3110
3111 def testIntegerPropertyTypes(self):
3112@@ -1431,7 +1433,7 @@
3113 sample_data_path = os.path.join(
3114 config.root, 'lib', 'lp', 'hardwaredb', 'scripts',
3115 'tests', 'hardwaretest.xml')
3116- sample_data = open(sample_data_path).read()
3117+ sample_data = open(sample_data_path, 'rb').read()
3118 parser = SubmissionParser()
3119 result = parser.parseSubmission(sample_data, 'parser test 1')
3120 self.assertNotEqual(result, None,
3121@@ -1441,7 +1443,7 @@
3122 # parseSubmission returns None, if the submitted data is not
3123 # well-formed XML...
3124 result = parser.parseSubmission(
3125- sample_data.replace('<summary', '<inconsitent_opening_tag'),
3126+ sample_data.replace(b'<summary', b'<inconsitent_opening_tag'),
3127 'parser test 2')
3128 self.assertEqual(result, None,
3129 'Not-well-formed XML data accepted by '
3130@@ -1449,7 +1451,7 @@
3131
3132 # ...or if RelaxNG validation fails...
3133 result = parser.parseSubmission(
3134- sample_data.replace('<summary', '<summary foo="bar"'),
3135+ sample_data.replace(b'<summary', b'<summary foo="bar"'),
3136 'parser test 3')
3137 self.assertEqual(result, None,
3138 'XML data that does pass the Relax NG validation '
3139@@ -1459,8 +1461,8 @@
3140 # property set containing two properties with the same name.
3141 result = parser.parseSubmission(
3142 sample_data.replace(
3143- '<property name="info.parent"',
3144- """<property name="info.parent" type="dbus.String">
3145+ b'<property name="info.parent"',
3146+ b"""<property name="info.parent" type="dbus.String">
3147 foo
3148 </property>
3149 <property name="info.parent"
3150@@ -1980,8 +1982,8 @@
3151 [self.udev_root_device, self.udev_pci_device]))
3152 self.assertErrorMessage(
3153 parser.submission_key,
3154- "Non-PCI udev device with PCI properties: set(['PCI_SLOT_NAME']) "
3155- "'/devices/LNXSYSTM:00'")
3156+ "Non-PCI udev device with PCI properties: set([u'PCI_SLOT_NAME']) "
3157+ "u'/devices/LNXSYSTM:00'")
3158
3159 def testCheckUdevPciPropertiesPciDeviceWithoutRequiredProperties(self):
3160 """Test of SubmissionParser.checkUdevPciProperties().
3161@@ -1997,7 +1999,7 @@
3162 self.assertErrorMessage(
3163 parser.submission_key,
3164 "PCI udev device without required PCI properties: "
3165- "set(['PCI_CLASS']) '/devices/pci0000:00/0000:00:1f.2'")
3166+ "set(['PCI_CLASS']) u'/devices/pci0000:00/0000:00:1f.2'")
3167
3168 def testCheckUdevPciPropertiesPciDeviceWithNonIntegerPciClass(self):
3169 """Test of SubmissionParser.checkUdevPciProperties().
3170@@ -2012,8 +2014,8 @@
3171 [self.udev_root_device, self.udev_pci_device]))
3172 self.assertErrorMessage(
3173 parser.submission_key,
3174- "Invalid udev PCI class: 'not-an-integer' "
3175- "'/devices/pci0000:00/0000:00:1f.2'")
3176+ "Invalid udev PCI class: u'not-an-integer' "
3177+ "u'/devices/pci0000:00/0000:00:1f.2'")
3178
3179 def testCheckUdevPciPropertiesPciDeviceWithInvalidPciClassValue(self):
3180 """Test of SubmissionParser.checkUdevPciProperties().
3181@@ -2028,8 +2030,8 @@
3182 [self.udev_root_device, self.udev_pci_device]))
3183 self.assertErrorMessage(
3184 parser.submission_key,
3185- "Invalid udev PCI class: '1234567' "
3186- "'/devices/pci0000:00/0000:00:1f.2'")
3187+ "Invalid udev PCI class: u'1234567' "
3188+ "u'/devices/pci0000:00/0000:00:1f.2'")
3189
3190 def testCheckUdevPciPropertiesPciDeviceWithInvalidDeviceID(self):
3191 """Test of SubmissionParser.checkUdevPciProperties().
3192@@ -2044,8 +2046,8 @@
3193 [self.udev_root_device, self.udev_pci_device]))
3194 self.assertErrorMessage(
3195 parser.submission_key,
3196- "Invalid udev PCI device ID: 'not-an-id' "
3197- "'/devices/pci0000:00/0000:00:1f.2'")
3198+ "Invalid udev PCI device ID: u'not-an-id' "
3199+ "u'/devices/pci0000:00/0000:00:1f.2'")
3200
3201 def testCheckUdevPciPropertiesPciDeviceWithInvalidSubsystemID(self):
3202 """Test of SubmissionParser.checkUdevPciProperties().
3203@@ -2060,8 +2062,8 @@
3204 [self.udev_root_device, self.udev_pci_device]))
3205 self.assertErrorMessage(
3206 parser.submission_key,
3207- "Invalid udev PCI device ID: 'not-a-subsystem-id' "
3208- "'/devices/pci0000:00/0000:00:1f.2'")
3209+ "Invalid udev PCI device ID: u'not-a-subsystem-id' "
3210+ "u'/devices/pci0000:00/0000:00:1f.2'")
3211
3212 def testCheckUdevUsbProperties(self):
3213 """Test of SubmissionParser.checkUdevUsbProperties().
3214@@ -2096,7 +2098,7 @@
3215 self.assertErrorMessage(
3216 parser.submission_key,
3217 "USB udev device found without required properties: "
3218- "set(['%s']) '/devices/pci0000:00/0000:00:1d.1/usb3/3-2'"
3219+ "set(['%s']) u'/devices/pci0000:00/0000:00:1d.1/usb3/3-2'"
3220 % property_name)
3221 self.udev_usb_device['E'][property_name] = saved_property
3222
3223@@ -2114,8 +2116,8 @@
3224 self.assertErrorMessage(
3225 parser.submission_key,
3226 "USB udev device found with invalid product ID: "
3227- "'not-a-valid-usb-product-id' "
3228- "'/devices/pci0000:00/0000:00:1d.1/usb3/3-2'")
3229+ "u'not-a-valid-usb-product-id' "
3230+ "u'/devices/pci0000:00/0000:00:1d.1/usb3/3-2'")
3231
3232 def testCheckUdevUsbProperties_with_invalid_type_data(self):
3233 """Test of SubmmissionParser.checkUdevUsbProperties().
3234@@ -2129,8 +2131,8 @@
3235 [self.udev_root_device, self.udev_usb_device]))
3236 self.assertErrorMessage(
3237 parser.submission_key,
3238- "USB udev device found with invalid type data: 'no-type' "
3239- "'/devices/pci0000:00/0000:00:1d.1/usb3/3-2'")
3240+ "USB udev device found with invalid type data: u'no-type' "
3241+ "u'/devices/pci0000:00/0000:00:1d.1/usb3/3-2'")
3242
3243 def testCheckUdevUsbProperties_with_invalid_devtype(self):
3244 """Test of SubmmissionParser.checkUdevUsbProperties().
3245@@ -2145,8 +2147,8 @@
3246 [self.udev_root_device, self.udev_usb_device]))
3247 self.assertErrorMessage(
3248 parser.submission_key,
3249- "USB udev device found with invalid udev type data: 'nonsense' "
3250- "'/devices/pci0000:00/0000:00:1d.1/usb3/3-2'")
3251+ "USB udev device found with invalid udev type data: u'nonsense' "
3252+ "u'/devices/pci0000:00/0000:00:1d.1/usb3/3-2'")
3253
3254 def testCheckUdevUsbProperties_interface_without_interface_property(self):
3255 """Test of SubmmissionParser.checkUdevUsbProperties().
3256@@ -2161,7 +2163,7 @@
3257 self.assertErrorMessage(
3258 parser.submission_key,
3259 "USB interface udev device found without INTERFACE property: "
3260- "'/devices/pci0000:00/0000:00:1d.1/usb3/3-2/3-2:1.1'")
3261+ "u'/devices/pci0000:00/0000:00:1d.1/usb3/3-2/3-2:1.1'")
3262
3263 def testCheckUdevUsbProperties_interface_invalid_interface_property(self):
3264 """Test of SubmmissionParser.checkUdevUsbProperties().
3265@@ -2177,8 +2179,8 @@
3266 self.assertErrorMessage(
3267 parser.submission_key,
3268 "USB Interface udev device found with invalid INTERFACE "
3269- "property: 'nonsense' "
3270- "'/devices/pci0000:00/0000:00:1d.1/usb3/3-2/3-2:1.1'")
3271+ "property: u'nonsense' "
3272+ "u'/devices/pci0000:00/0000:00:1d.1/usb3/3-2/3-2:1.1'")
3273
3274 def testCheckUdevScsiProperties(self):
3275 """Test of SubmissionParser.checkUdevScsiProperties()."""
3276@@ -2218,7 +2220,7 @@
3277 self.assertErrorMessage(
3278 parser.submission_key,
3279 "SCSI udev node found without DEVTYPE property: "
3280- "'/devices/pci0000:00/0000:00:1f.1/host4/target4:0:0/4:0:0:0'")
3281+ "u'/devices/pci0000:00/0000:00:1f.1/host4/target4:0:0/4:0:0:0'")
3282
3283 def testCheckUdevScsiProperties_no_sysfs_data(self):
3284 """Test of SubmissionParser.checkUdevScsiProperties().
3285@@ -2234,7 +2236,7 @@
3286 self.assertErrorMessage(
3287 parser.submission_key,
3288 "SCSI udev device node found without related sysfs record: "
3289- "'/devices/pci0000:00/0000:00:1f.1/host4/target4:0:0/4:0:0:0'")
3290+ "u'/devices/pci0000:00/0000:00:1f.1/host4/target4:0:0/4:0:0:0'")
3291
3292 def testCheckUdevScsiProperties_missing_sysfs_attributes(self):
3293 """Test of SubmissionParser.checkUdevScsiProperties().
3294@@ -2255,7 +2257,7 @@
3295 parser.submission_key,
3296 "SCSI udev device found without required sysfs attributes: "
3297 "set(['model']) "
3298- "'/devices/pci0000:00/0000:00:1f.1/host4/target4:0:0/4:0:0:0'")
3299+ "u'/devices/pci0000:00/0000:00:1f.1/host4/target4:0:0/4:0:0:0'")
3300
3301 class UdevTestSubmissionParser(SubmissionParser):
3302 """A variant of SubmissionParser that shortcuts udev related tests.
3303@@ -2612,4 +2614,4 @@
3304 self.assertErrorMessage(
3305 'Consistency check detects circular parent-child relationships',
3306 "Found HAL devices with circular parent/child "
3307- "relationship: ['/foo', '/bar']")
3308+ "relationship: [u'/foo', u'/bar']")
3309
3310=== modified file 'lib/lp/hardwaredb/scripts/tests/test_hwdb_submission_processing.py'
3311--- lib/lp/hardwaredb/scripts/tests/test_hwdb_submission_processing.py 2018-01-02 15:23:24 +0000
3312+++ lib/lp/hardwaredb/scripts/tests/test_hwdb_submission_processing.py 2019-04-16 17:27:23 +0000
3313@@ -3,10 +3,12 @@
3314
3315 """Tests of the HWDB submissions parser."""
3316
3317+from __future__ import absolute_import, print_function, unicode_literals
3318+
3319 import bz2
3320 from copy import deepcopy
3321-from cStringIO import StringIO
3322 from datetime import datetime
3323+import io
3324 import logging
3325 import os
3326
3327@@ -397,7 +399,7 @@
3328 parser.submission_key = 'udev device with invalid path'
3329 self.assertFalse(parser.buildUdevDeviceList(parsed_data))
3330 self.assertErrorMessage(
3331- parser.submission_key, "Invalid device path name: '/nonsense'")
3332+ parser.submission_key, "Invalid device path name: u'/nonsense'")
3333
3334 def test_buildUdevDeviceList_missing_root_device(self):
3335 """Test the creation of UdevDevice instances for a submission.
3336@@ -1565,7 +1567,7 @@
3337 % found_bus)
3338 self.assertWarningMessage(
3339 parser.submission_key,
3340- "Unknown bus 'nonsense' for device " + self.UDI_PCCARD_DEVICE)
3341+ "Unknown bus u'nonsense' for device " + self.UDI_PCCARD_DEVICE)
3342
3343 def test_HALDevice_is_root_device_for_root_device(self):
3344 """Test of HALDevice.is_root_device for the root device."""
3345@@ -2147,13 +2149,13 @@
3346 ('pci.vendor_id',
3347 "A HALDevice that is supposed to be a real device does not "
3348 "provide bus, vendor ID, product ID or product name: <DBItem "
3349- "HWBus.PCI, (1) PCI> None 28980 'Intel PCCard bridge 1234' "
3350+ "HWBus.PCI, (1) PCI> None 28980 u'Intel PCCard bridge 1234' "
3351 "/org/freedesktop/Hal/devices/pci_8086_27c5"
3352 ),
3353 ('pci.product_id',
3354 "A HALDevice that is supposed to be a real device does not "
3355 "provide bus, vendor ID, product ID or product name: "
3356- "<DBItem HWBus.PCI, (1) PCI> 32902 None 'Intel PCCard bridge "
3357+ "<DBItem HWBus.PCI, (1) PCI> 32902 None u'Intel PCCard bridge "
3358 "1234' /org/freedesktop/Hal/devices/pci_8086_27c5"
3359 ),
3360 ('info.product',
3361@@ -4212,7 +4214,7 @@
3362 # which a USB is not. Hence we get a warning.
3363 self.assertWarningMessage(
3364 parser.submission_key,
3365- "Unknown bus 'usb_interface' for device "
3366+ "Unknown bus u'usb_interface' for device "
3367 "/devices/pci0000:00/0000:00:1d.7/usb1/1-1/1-1:1.0")
3368
3369 def test_real_bus_pci(self):
3370@@ -4370,8 +4372,8 @@
3371 parser.submission_key,
3372 "A UdevDevice that is supposed to be a real device does not "
3373 "provide bus, vendor ID, product ID or product name: "
3374- "<DBItem HWBus.SYSTEM, (0) System> None 'LIFEBOOK E8210' "
3375- "'LIFEBOOK E8210' /devices/LNXSYSTM:00")
3376+ "<DBItem HWBus.SYSTEM, (0) System> None u'LIFEBOOK E8210' "
3377+ "u'LIFEBOOK E8210' /devices/LNXSYSTM:00")
3378
3379 def test_has_reliable_data_system_no_product_name(self):
3380 """Test of UdevDevice.has_reliable_data for a system.
3381@@ -4390,7 +4392,7 @@
3382 parser.submission_key,
3383 "A UdevDevice that is supposed to be a real device does not "
3384 "provide bus, vendor ID, product ID or product name: "
3385- "<DBItem HWBus.SYSTEM, (0) System> 'FUJITSU SIEMENS' None None "
3386+ "<DBItem HWBus.SYSTEM, (0) System> u'FUJITSU SIEMENS' None None "
3387 "/devices/LNXSYSTM:00")
3388
3389 def test_has_reliable_data_acpi_device(self):
3390@@ -5078,6 +5080,8 @@
3391 def createSubmissionData(self, data, compress, submission_key,
3392 private=False):
3393 """Create a submission."""
3394+ if not isinstance(data, bytes):
3395+ data = data.encode('UTF-8')
3396 if compress:
3397 data = bz2.compress(data)
3398 switch_dbuser('launchpad')
3399@@ -5089,7 +5093,7 @@
3400 submission_key=submission_key,
3401 emailaddress=u'test@canonical.com',
3402 distroarchseries=None,
3403- raw_submission=StringIO(data),
3404+ raw_submission=io.BytesIO(data),
3405 filename='hwinfo.xml',
3406 filesize=len(data),
3407 system_fingerprint='A Machine Name')
3408
3409=== modified file 'lib/lp/hardwaredb/scripts/tests/test_hwdbsubmissions.py'
3410--- lib/lp/hardwaredb/scripts/tests/test_hwdbsubmissions.py 2012-04-23 11:52:39 +0000
3411+++ lib/lp/hardwaredb/scripts/tests/test_hwdbsubmissions.py 2019-04-16 17:27:23 +0000
3412@@ -3,6 +3,8 @@
3413
3414 """Tests for hwdbsubmissions script."""
3415
3416+from __future__ import absolute_import, print_function, unicode_literals
3417+
3418 __metaclass__ = type
3419
3420 from tempfile import mktemp
3421
3422=== modified file 'lib/lp/hardwaredb/stories/hwdb/xx-hwdb.txt'
3423--- lib/lp/hardwaredb/stories/hwdb/xx-hwdb.txt 2016-01-26 15:47:37 +0000
3424+++ lib/lp/hardwaredb/stories/hwdb/xx-hwdb.txt 2019-04-16 17:27:23 +0000
3425@@ -42,7 +42,7 @@
3426 For easy error checks by the HWDB client, an extra header is added, if the
3427 data has successfully been uploaded.
3428
3429- >>> print browser.headers
3430+ >>> print(browser.headers)
3431 Status: 200 Ok
3432 Content-Length: ...
3433 Content-Type: text/html;charset=utf-8
3434@@ -56,7 +56,7 @@
3435
3436 >>> for tag in find_tags_by_class(
3437 ... browser.contents, 'informational message'):
3438- ... print tag
3439+ ... print(tag)
3440 <div class="informational message">Thank you for your submission.</div>
3441
3442 If fields are not set, the response contains a header explaining this
3443@@ -74,8 +74,8 @@
3444 ... browser, wrong_data, submit_data_checkboxes, submit_file,
3445 ... 'test.txt')
3446 ... browser.getControl('Upload').click()
3447- ... print "--- missing field", field
3448- ... print browser.headers
3449+ ... print("--- missing field", field)
3450+ ... print(browser.headers)
3451 --- missing field Date Created:
3452 Status: 200 Ok
3453 ...
3454@@ -118,7 +118,7 @@
3455 >>> fill_form(
3456 ... browser, wrong_data, submit_data_checkboxes, None, 'test.txt')
3457 >>> browser.getControl('Upload').click()
3458- >>> print browser.headers
3459+ >>> print(browser.headers)
3460 Status: 200 Ok
3461 ...
3462 X-Launchpad-Hwdb-Submission: Error in field 'submission_data' - Required input is missing.
3463@@ -134,7 +134,7 @@
3464 ... browser, wrong_data, submit_data_checkboxes, submit_file,
3465 ... 'test.txt')
3466 >>> browser.getControl('Upload').click()
3467- >>> print browser.headers
3468+ >>> print(browser.headers)
3469 Status: 200 Ok
3470 ...
3471 X-Launchpad-Hwdb-Submission: Error in field 'submission_key' - Submission key already exists.
3472@@ -149,7 +149,7 @@
3473 ... browser, wrong_data, submit_data_checkboxes, submit_file,
3474 ... 'test.txt')
3475 >>> browser.getControl('Upload').click()
3476- >>> print browser.headers
3477+ >>> print(browser.headers)
3478 Status: 200 Ok
3479 ...
3480 X-Launchpad-Hwdb-Submission: Error in field 'date_created' - Invalid datetime data
3481@@ -164,7 +164,7 @@
3482 ... browser, wrong_data, submit_data_checkboxes, submit_file,
3483 ... 'test.txt')
3484 >>> browser.getControl('Upload').click()
3485- >>> print browser.headers
3486+ >>> print(browser.headers)
3487 Status: 200 Ok
3488 ...
3489 X-Launchpad-Hwdb-Submission: Error in field 'submission_key' - Invalid textual data
3490@@ -179,7 +179,7 @@
3491 ... browser, wrong_data, submit_data_checkboxes, submit_file,
3492 ... 'test.txt')
3493 >>> browser.getControl('Upload').click()
3494- >>> print browser.headers
3495+ >>> print(browser.headers)
3496 Status: 200 Ok
3497 ...
3498 X-Launchpad-Hwdb-Submission: Error in field 'emailaddress' - Invalid email address
3499@@ -212,7 +212,7 @@
3500 ... }
3501 >>> browser.open('http://launchpad.dev/+hwdb/+submit',
3502 ... data=urlencode(form_data))
3503- >>> print browser.headers
3504+ >>> print(browser.headers)
3505 Status: 200 Ok
3506 ...
3507 X-Launchpad-Hwdb-Submission: Error: Required fields not contained in
3508@@ -230,7 +230,7 @@
3509
3510 >>> anon_browser.open('http://launchpad.dev/~name12/+hwdb-submissions')
3511 >>> [content_table] = find_tags_by_class(anon_browser.contents, 'listing')
3512- >>> print extract_text(content_table)
3513+ >>> print(extract_text(content_table))
3514 System Date submitted Download Raw
3515 Fujitsu_CY26 ... test.txt ...
3516 TONKA TUFFBOOK2600 ... hwsubmission1.xml ...
3517@@ -297,7 +297,7 @@
3518 >>> browser.getControl('Upload').click()
3519 >>> anon_browser.open('http://launchpad.dev/~name12/+hwdb-submissions')
3520 >>> [content_table] = find_tags_by_class(anon_browser.contents, 'listing')
3521- >>> print extract_text(content_table)
3522+ >>> print(extract_text(content_table))
3523 System Date submitted Download Raw
3524 Fujitsu_CY26 ... test.txt ...
3525 TONKA TUFFBOOK2600 ... hwsubmission1.xml ...
3526@@ -312,7 +312,7 @@
3527 >>> browser = setupBrowser(auth='Basic test@canonical.com:test')
3528 >>> browser.open('http://launchpad.dev/~name12/+hwdb-submissions')
3529 >>> [content_table] = find_tags_by_class(browser.contents, 'listing')
3530- >>> print extract_text(content_table)
3531+ >>> print(extract_text(content_table))
3532 System Date submitted Download Private Raw
3533 Fujitsu_CY26 ... test2.txt yes ...
3534 Fujitsu_CY26 ... test.txt no ...
3535@@ -322,7 +322,7 @@
3536 displayed.
3537
3538 >>> anon_browser.open('http://launchpad.dev/~name16/+hwdb-submissions')
3539- >>> print extract_text(find_main_content(anon_browser.contents))
3540+ >>> print(extract_text(find_main_content(anon_browser.contents)))
3541 Hardware submissions for Foo Bar...
3542 Foo Bar has posted no submissions.
3543
3544@@ -351,14 +351,14 @@
3545 >>> browser.getControl('Upload').click()
3546 >>> anon_browser.open(
3547 ... 'http://launchpad.dev/~ubuntu-team/+hwdb-submissions')
3548- >>> print extract_text(find_main_content(anon_browser.contents))
3549+ >>> print(extract_text(find_main_content(anon_browser.contents)))
3550 Hardware submissions for ...Ubuntu Team...
3551 Ubuntu Team has posted no submissions.
3552
3553 >>> browser = setupBrowser(auth='Basic celso.providelo@canonical.com:test')
3554 >>> browser.open('http://launchpad.dev/~ubuntu-team/+hwdb-submissions')
3555 >>> [content_table] = find_tags_by_class(browser.contents, 'listing')
3556- >>> print extract_text(content_table)
3557+ >>> print(extract_text(content_table))
3558 System Date submitted Download Raw
3559 Black Box 42 ... teamtest.txt ...
3560
3561@@ -371,7 +371,7 @@
3562
3563 >>> browser.open(
3564 ... 'http://launchpad.dev/+hwdb/+submission/unique-id-1/+text')
3565- >>> print browser.contents
3566+ >>> print(browser.contents)
3567 Date-Created: 2007-01-01 00:00:00+00:00
3568 Date-Submitted: ...
3569 Format: VERSION_1
3570@@ -394,7 +394,7 @@
3571 >>> browser = setupBrowser(auth='Basic celso.providelo@canonical.com:test')
3572 >>> browser.open(
3573 ... 'http://launchpad.dev/+hwdb/+submission/unique-id-3a/+text')
3574- >>> print browser.contents
3575+ >>> print(browser.contents)
3576 Date-Created: 2007-01-01 00:00:00+00:00
3577 Date-Submitted: ...
3578 Format: VERSION_1
3579@@ -413,7 +413,7 @@
3580 >>> anon_browser.open(
3581 ... 'http://launchpad.dev/+hwdb/+fingerprint/Fujitsu_CY26')
3582 >>> [content_table] = find_tags_by_class(anon_browser.contents, 'listing')
3583- >>> print extract_text(content_table)
3584+ >>> print(extract_text(content_table))
3585 Date submitted Submitted by Download Raw
3586 ... n/a test.txt ...
3587
3588@@ -432,7 +432,7 @@
3589 >>> anon_browser.open(
3590 ... 'http://launchpad.dev/+hwdb/+fingerprint/Fujitsu_CY26')
3591 >>> [content_table] = find_tags_by_class(anon_browser.contents, 'listing')
3592- >>> print extract_text(content_table)
3593+ >>> print(extract_text(content_table))
3594 Date submitted Submitted by Download Raw
3595 ... Sample Person (name12) test3.txt ...
3596 ... n/a test.txt ...
3597@@ -443,7 +443,7 @@
3598 >>> browser.open(
3599 ... 'http://launchpad.dev/+hwdb/+fingerprint/Fujitsu_CY26')
3600 >>> [content_table] = find_tags_by_class(browser.contents, 'listing')
3601- >>> print extract_text(content_table)
3602+ >>> print(extract_text(content_table))
3603 Date submitted Submitted by Download Raw
3604 ... Sample Person (name12) test3.txt ...
3605 ... Sample Person (name12) test2.txt ...
3606@@ -453,7 +453,7 @@
3607
3608 >>> anon_browser.open(
3609 ... 'http://launchpad.dev/+hwdb/+fingerprint/unknownfingerprint')
3610- >>> print extract_text(find_main_content(anon_browser.contents))
3611+ >>> print(extract_text(find_main_content(anon_browser.contents)))
3612 Hardware Database submissions for a fingerprint
3613 Submissions for system: unknownfingerprint
3614 There are no submissions for this system.
3615
3616=== modified file 'lib/lp/hardwaredb/stories/webservice/xx-hwdb.txt'
3617--- lib/lp/hardwaredb/stories/webservice/xx-hwdb.txt 2015-10-06 06:48:01 +0000
3618+++ lib/lp/hardwaredb/stories/webservice/xx-hwdb.txt 2019-04-16 17:27:23 +0000
3619@@ -49,8 +49,8 @@
3620
3621 The query parameter `bus` must be a bus name as enumerated by HWBus.
3622
3623- >>> print webservice.get(
3624- ... '/+hwdb?ws.op=devices&bus=NoSuchBus&vendor_id=MSI')
3625+ >>> print(webservice.get(
3626+ ... '/+hwdb?ws.op=devices&bus=NoSuchBus&vendor_id=MSI'))
3627 HTTP/1.1 400 Bad Request
3628 ...
3629 bus: Invalid value "NoSuchBus". Acceptable values are: System, PCI,
3630@@ -58,14 +58,14 @@
3631
3632 Omitting the query parameters `bus` or `vendor_id` leads to an error.
3633
3634- >>> print webservice.get(
3635- ... '/+hwdb?ws.op=devices&bus=System')
3636+ >>> print(webservice.get(
3637+ ... '/+hwdb?ws.op=devices&bus=System'))
3638 HTTP/1.1 400 Bad Request
3639 ...
3640 vendor_id: Required input is missing.
3641
3642- >>> print webservice.get(
3643- ... '/+hwdb?ws.op=devices&vendor_id=MSI')
3644+ >>> print(webservice.get(
3645+ ... '/+hwdb?ws.op=devices&vendor_id=MSI'))
3646 HTTP/1.1 400 Bad Request
3647 ...
3648 bus: Required input is missing.
3649@@ -91,7 +91,7 @@
3650
3651 >>> devices = webservice.get(
3652 ... '/+hwdb?ws.op=devices&bus=System&vendor_id=MSI&product_id=nothing')
3653- >>> print devices.jsonBody()['entries']
3654+ >>> print(devices.jsonBody()['entries'])
3655 []
3656
3657 Some buses have constraints for the values of vendor and product IDs.
3658@@ -99,14 +99,14 @@
3659 an overview of these constraints, see doc/hwdb-device-tables.txt.)
3660 Queries with invalid parameter values return a 400 error.
3661
3662- >>> print webservice.get(
3663- ... '/+hwdb?ws.op=devices&bus=PCI&vendor_id=WRONG')
3664+ >>> print(webservice.get(
3665+ ... '/+hwdb?ws.op=devices&bus=PCI&vendor_id=WRONG'))
3666 HTTP/1.1 400 Bad Request
3667 ...
3668 u'WRONG' is not a valid vendor ID for PCI
3669
3670- >>> print webservice.get(
3671- ... '/+hwdb?ws.op=devices&bus=PCI&vendor_id=0x1234&product_id=BAD')
3672+ >>> print(webservice.get(
3673+ ... '/+hwdb?ws.op=devices&bus=PCI&vendor_id=0x1234&product_id=BAD'))
3674 HTTP/1.1 400 Bad Request
3675 ...
3676 u'BAD' is not a valid product ID for PCI
3677@@ -129,7 +129,7 @@
3678
3679 A 404 error is returned, when a non-existent ID is passed in the URL...
3680
3681- >>> print webservice.get('/+hwdb/+device/1000000')
3682+ >>> print(webservice.get('/+hwdb/+device/1000000'))
3683 HTTP/1.1 404 Not Found
3684 ...
3685 Object: <lp.systemhomes.HWDBApplication
3686@@ -137,7 +137,7 @@
3687
3688 ...and when an otherwise invalid ID is passed.
3689
3690- >>> print webservice.get('/+hwdb/+device/nonsense')
3691+ >>> print(webservice.get('/+hwdb/+device/nonsense'))
3692 HTTP/1.1 404 Not Found
3693 ...
3694 Object: <lp.systemhomes.HWDBApplication
3695@@ -187,7 +187,7 @@
3696 >>> class_info = webservice.named_post(
3697 ... '/+hwdb/+device/2', 'getOrCreateDeviceClass', {}, main_class=12,
3698 ... sub_class=3).jsonBody()
3699- >>> print class_info['self_link']
3700+ >>> print(class_info['self_link'])
3701 http://api.launchpad.dev/beta/+hwdb/+deviceclass/...
3702
3703 The property device.classes returns the collection of all classes
3704@@ -203,12 +203,12 @@
3705
3706 We can delete existing class data by calling deviceclass.delete().
3707
3708- >>> print webservice.delete(class_info['entries'][0]['self_link'])
3709+ >>> print(webservice.delete(class_info['entries'][0]['self_link']))
3710 HTTP/1.1 200 Ok
3711 ...
3712
3713 >>> class_info = webservice.get('/+hwdb/+device/2/classes').jsonBody()
3714- >>> print class_info['total_size']
3715+ >>> print(class_info['total_size'])
3716 0
3717
3718
3719@@ -389,7 +389,7 @@
3720
3721 A 404 error is returned, when a non-existent ID is passed in the URL...
3722
3723- >>> print webservice.get('/+hwdb/+driver/1000000')
3724+ >>> print(webservice.get('/+hwdb/+driver/1000000'))
3725 HTTP/1.1 404 Not Found
3726 ...
3727 Object: <lp.systemhomes.HWDBApplication
3728@@ -397,7 +397,7 @@
3729
3730 ...and when an otherwise invalid ID is passed.
3731
3732- >>> print webservice.get('/+hwdb/+driver/nonsense')
3733+ >>> print(webservice.get('/+hwdb/+driver/nonsense'))
3734 HTTP/1.1 404 Not Found
3735 ...
3736 Object: <lp.systemhomes.HWDBApplication
3737@@ -408,7 +408,7 @@
3738 >>> submissions = webservice.named_get(
3739 ... '/+hwdb/+driver/1', 'getSubmissions').jsonBody()
3740 >>> for submission in submissions['entries']:
3741- ... print submission['submission_key']
3742+ ... print(submission['submission_key'])
3743 sample-submission
3744
3745 We can filter the list of drivers by distribution.
3746@@ -417,13 +417,13 @@
3747 ... '/+hwdb/+driver/1', 'getSubmissions',
3748 ... distribution=webservice.getAbsoluteUrl('/ubuntu')).jsonBody()
3749 >>> for submission in submissions['entries']:
3750- ... print submission['submission_key']
3751+ ... print(submission['submission_key'])
3752 sample-submission
3753
3754 >>> submissions = webservice.named_get(
3755 ... '/+hwdb/+driver/1', 'getSubmissions',
3756 ... distribution=webservice.getAbsoluteUrl('/debian')).jsonBody()
3757- >>> print submissions['total_size']
3758+ >>> print(submissions['total_size'])
3759 0
3760
3761 We can filter the list of drivers by distribution series.
3762@@ -432,13 +432,13 @@
3763 ... '/+hwdb/+driver/1', 'getSubmissions',
3764 ... distroseries=webservice.getAbsoluteUrl('/ubuntu/hoary')).jsonBody()
3765 >>> for submission in submissions['entries']:
3766- ... print submission['submission_key']
3767+ ... print(submission['submission_key'])
3768 sample-submission
3769
3770 >>> submissions = webservice.named_get(
3771 ... '/+hwdb/+driver/1', 'getSubmissions',
3772 ... distroseries=webservice.getAbsoluteUrl('/ubuntu/warty')).jsonBody()
3773- >>> print submissions['total_size']
3774+ >>> print(submissions['total_size'])
3775 0
3776
3777 We can filter the list of drivers by processor architecture.
3778@@ -447,13 +447,13 @@
3779 ... '/+hwdb/+driver/1', 'getSubmissions',
3780 ... architecture='i386').jsonBody()
3781 >>> for submission in submissions['entries']:
3782- ... print submission['submission_key']
3783+ ... print(submission['submission_key'])
3784 sample-submission
3785
3786 >>> submissions = webservice.named_get(
3787 ... '/+hwdb/+driver/1', 'getSubmissions',
3788 ... architecture='powerpc').jsonBody()
3789- >>> print submissions['total_size']
3790+ >>> print(submissions['total_size'])
3791 0
3792
3793 We can filter by distribution series and processor architecture.
3794@@ -463,7 +463,7 @@
3795 ... distroseries=webservice.getAbsoluteUrl('/ubuntu/hoary'),
3796 ... architecture='i386').jsonBody()
3797 >>> for submission in submissions['entries']:
3798- ... print submission['submission_key']
3799+ ... print(submission['submission_key'])
3800 sample-submission
3801
3802
3803@@ -536,7 +536,7 @@
3804
3805 Accessing the raw submission data yields a redirect to a Librarian URL.
3806
3807- >>> print webservice.get(submission['raw_submission_link'])
3808+ >>> print(webservice.get(submission['raw_submission_link']))
3809 HTTP/1.1 303 See Other...
3810 Content-Length: 0
3811 Content-Type: text/plain
3812@@ -546,7 +546,7 @@
3813 A 404 error is returned when a client tries to access a non-existent
3814 submission.
3815
3816- >>> print webservice.get('/+hwdb/+submission/nonsense')
3817+ >>> print(webservice.get('/+hwdb/+submission/nonsense'))
3818 HTTP/1.1 404 Not Found
3819 ...
3820 Object: <...systemhomes.HWDBApplication object at ...>, name: u'nonsense'
3821@@ -557,7 +557,7 @@
3822 >>> submissions = webservice.get(
3823 ... '/+hwdb/+device/2?ws.op=getSubmissions').jsonBody()
3824 >>> for submission in submissions['entries']:
3825- ... print submission['submission_key']
3826+ ... print(submission['submission_key'])
3827 sample-submission
3828
3829 We can limit the result set to submissions where the device is accessed
3830@@ -572,7 +572,7 @@
3831 >>> submissions = webservice.get(
3832 ... '/+hwdb/+device/2?' + urlencode(parameters)).jsonBody()
3833 >>> for submission in submissions['entries']:
3834- ... print submission['submission_key']
3835+ ... print(submission['submission_key'])
3836 sample-submission
3837
3838 ...but when we set it to nv_xorg_driver, we get an empty result set.
3839@@ -583,7 +583,7 @@
3840 ... }
3841 >>> submissions = webservice.get(
3842 ... '/+hwdb/+device/2?' + urlencode(parameters)).jsonBody()
3843- >>> print submissions['total_size']
3844+ >>> print(submissions['total_size'])
3845 0
3846
3847 We can also limit the result set to submissions made for a specific
3848@@ -604,7 +604,7 @@
3849 >>> submissions = webservice.get(
3850 ... '/+hwdb/+device/2?' + urlencode(parameters)).jsonBody()
3851 >>> for submission in submissions['entries']:
3852- ... print submission['submission_key']
3853+ ... print(submission['submission_key'])
3854 sample-submission
3855
3856 >>> parameters = {
3857@@ -613,7 +613,7 @@
3858 ... }
3859 >>> submissions = webservice.get(
3860 ... '/+hwdb/+device/2?' + urlencode(parameters)).jsonBody()
3861- >>> print submissions['total_size']
3862+ >>> print(submissions['total_size'])
3863 0
3864
3865 ...for a specific processor architecture...
3866@@ -625,7 +625,7 @@
3867 >>> submissions = webservice.get(
3868 ... '/+hwdb/+device/2?' + urlencode(parameters)).jsonBody()
3869 >>> for submission in submissions['entries']:
3870- ... print submission['submission_key']
3871+ ... print(submission['submission_key'])
3872 sample-submission
3873
3874 >>> parameters = {
3875@@ -634,7 +634,7 @@
3876 ... }
3877 >>> submissions = webservice.get(
3878 ... '/+hwdb/+device/2?' + urlencode(parameters)).jsonBody()
3879- >>> print submissions['total_size']
3880+ >>> print(submissions['total_size'])
3881 0
3882
3883 ...for a specific distro series...
3884@@ -643,13 +643,13 @@
3885 ... '/+hwdb/+device/2', 'getSubmissions',
3886 ... distroseries=webservice.getAbsoluteUrl('/ubuntu/hoary')).jsonBody()
3887 >>> for submission in submissions['entries']:
3888- ... print submission['submission_key']
3889+ ... print(submission['submission_key'])
3890 sample-submission
3891
3892 >>> submissions = webservice.named_get(
3893 ... '/+hwdb/+device/2', 'getSubmissions',
3894 ... distroseries=webservice.getAbsoluteUrl('/ubuntu/warty')).jsonBody()
3895- >>> print submissions['total_size']
3896+ >>> print(submissions['total_size'])
3897 0
3898
3899 ...and the combination of a distro series and processor architecture.
3900@@ -659,22 +659,22 @@
3901 ... distroseries=webservice.getAbsoluteUrl('/ubuntu/hoary'),
3902 ... architecture='i386').jsonBody()
3903 >>> for submission in submissions['entries']:
3904- ... print submission['submission_key']
3905+ ... print(submission['submission_key'])
3906 sample-submission
3907
3908 >>> submissions = webservice.named_get(
3909 ... '/+hwdb/+device/2', 'getSubmissions',
3910 ... distroseries=webservice.getAbsoluteUrl('/ubuntu/hoary'),
3911 ... architecture='powerpc').jsonBody()
3912- >>> print submissions['total_size']
3913+ >>> print(submissions['total_size'])
3914 0
3915
3916 But we can't supply both distribution and distroseries.
3917
3918- >>> print webservice.named_get(
3919+ >>> print(webservice.named_get(
3920 ... '/+hwdb/+device/2', 'getSubmissions',
3921 ... distribution=webservice.getAbsoluteUrl('/ubuntu'),
3922- ... distroseries=webservice.getAbsoluteUrl('/ubuntu/hoary'))
3923+ ... distroseries=webservice.getAbsoluteUrl('/ubuntu/hoary')))
3924 HTTP/1.1 400 Bad Request
3925 ...
3926 Only one of `distribution` or `distroseries` can be present.
3927@@ -685,13 +685,13 @@
3928 ... '/+hwdb/+device/2', 'getSubmissions',
3929 ... owner=webservice.getAbsoluteUrl('/~name12')).jsonBody()
3930 >>> for submission in submissions['entries']:
3931- ... print submission['submission_key']
3932+ ... print(submission['submission_key'])
3933 sample-submission
3934
3935 >>> submissions = webservice.named_get(
3936 ... '/+hwdb/+device/2', 'getSubmissions',
3937 ... owner=webservice.getAbsoluteUrl('/~name20')).jsonBody()
3938- >>> print submissions['total_size']
3939+ >>> print(submissions['total_size'])
3940 0
3941
3942 === Getting all submissions for a user ===
3943@@ -718,13 +718,13 @@
3944 >>> owner = webservice.getAbsoluteUrl('/~name12')
3945 >>> submissions = webservice.get(
3946 ... '/+hwdb?ws.op=search&owner=%s' % owner).jsonBody()
3947- >>> print submissions['total_size']
3948+ >>> print(submissions['total_size'])
3949 2
3950
3951 >>> owner = webservice.getAbsoluteUrl('/~name20')
3952 >>> submissions = webservice.get(
3953 ... '/+hwdb?ws.op=search&owner=%s' % owner).jsonBody()
3954- >>> print submissions['total_size']
3955+ >>> print(submissions['total_size'])
3956 0
3957
3958 ...and by device:
3959@@ -732,7 +732,7 @@
3960 >>> device = webservice.getAbsoluteUrl('/+hwdb/+device/1')
3961 >>> submissions = webservice.named_get(
3962 ... '/+hwdb', 'search', device=device).jsonBody()
3963- >>> print submissions['total_size']
3964+ >>> print(submissions['total_size'])
3965 1
3966
3967 ...and by driver:
3968@@ -740,7 +740,7 @@
3969 >>> driver = webservice.getAbsoluteUrl('/+hwdb/+driver/1')
3970 >>> submissions = webservice.named_get(
3971 ... '/+hwdb', 'search', driver=driver).jsonBody()
3972- >>> print submissions['total_size']
3973+ >>> print(submissions['total_size'])
3974 1
3975
3976 ...and by distribution:
3977@@ -748,12 +748,12 @@
3978 >>> ubuntu_url = webservice.getAbsoluteUrl('/ubuntu')
3979 >>> submissions = webservice.named_get(
3980 ... '/+hwdb', 'search', distribution=ubuntu_url).jsonBody()
3981- >>> print submissions['total_size']
3982+ >>> print(submissions['total_size'])
3983 1
3984 >>> debian_url = webservice.getAbsoluteUrl('/debian')
3985 >>> submissions = webservice.named_get(
3986 ... '/+hwdb', 'search', distribution=debian_url).jsonBody()
3987- >>> print submissions['total_size']
3988+ >>> print(submissions['total_size'])
3989 0
3990
3991 ...and by distroseries:
3992@@ -761,23 +761,23 @@
3993 >>> hoary_url = webservice.getAbsoluteUrl('/ubuntu/hoary')
3994 >>> submissions = webservice.named_get(
3995 ... '/+hwdb', 'search', distroseries=hoary_url).jsonBody()
3996- >>> print submissions['total_size']
3997+ >>> print(submissions['total_size'])
3998 1
3999 >>> warty_url = webservice.getAbsoluteUrl('/ubuntu/warty')
4000 >>> submissions = webservice.named_get(
4001 ... '/+hwdb', 'search', distroseries=warty_url).jsonBody()
4002- >>> print submissions['total_size']
4003+ >>> print(submissions['total_size'])
4004 0
4005
4006 ...and by architecture:
4007
4008 >>> submissions = webservice.named_get(
4009 ... '/+hwdb', 'search', architecture='i386').jsonBody()
4010- >>> print submissions['total_size']
4011+ >>> print(submissions['total_size'])
4012 1
4013 >>> submissions = webservice.named_get(
4014 ... '/+hwdb', 'search', architecture='powerpc').jsonBody()
4015- >>> print submissions['total_size']
4016+ >>> print(submissions['total_size'])
4017 0
4018
4019 ...and by date created:
4020@@ -785,11 +785,11 @@
4021 >>> date_created = u'2007-09-11T00:00:00+00:00'
4022 >>> submissions = webservice.named_get(
4023 ... '/+hwdb', 'search', created_before=date_created).jsonBody()
4024- >>> print submissions['total_size']
4025+ >>> print(submissions['total_size'])
4026 1
4027 >>> submissions = webservice.named_get(
4028 ... '/+hwdb', 'search', created_after=date_created).jsonBody()
4029- >>> print submissions['total_size']
4030+ >>> print(submissions['total_size'])
4031 1
4032
4033 ...and by date submitted:
4034@@ -797,11 +797,11 @@
4035 >>> date_submitted = u'2007-09-11T15:23:45.653316+00:00'
4036 >>> submissions = webservice.named_get(
4037 ... '/+hwdb', 'search', submitted_before=date_submitted).jsonBody()
4038- >>> print submissions['total_size']
4039+ >>> print(submissions['total_size'])
4040 1
4041 >>> submissions = webservice.named_get(
4042 ... '/+hwdb', 'search', submitted_after=date_submitted).jsonBody()
4043- >>> print submissions['total_size']
4044+ >>> print(submissions['total_size'])
4045 1
4046
4047
4048@@ -867,7 +867,7 @@
4049
4050 A 404 error is returned, when a non-existent ID is passed in the URL...
4051
4052- >>> print webservice.get('/+hwdb/+hwvendorid/1000000')
4053+ >>> print(webservice.get('/+hwdb/+hwvendorid/1000000'))
4054 HTTP/1.1 404 Not Found
4055 ...
4056 Object: <lp.systemhomes.HWDBApplication
4057@@ -875,7 +875,7 @@
4058
4059 ...and when an otherwise invalid ID is passed.
4060
4061- >>> print webservice.get('/+hwdb/+hwvendorid/nonsense')
4062+ >>> print(webservice.get('/+hwdb/+hwvendorid/nonsense'))
4063 HTTP/1.1 404 Not Found
4064 ...
4065 Object: <lp.systemhomes.HWDBApplication
4066@@ -905,52 +905,52 @@
4067 We can query how often a given device or a given driver appears in
4068 HWDB submissions.
4069
4070- >>> print webservice.named_get(
4071+ >>> print(webservice.named_get(
4072 ... '/+hwdb', 'numDevicesInSubmissions',
4073 ... bus='IDE', vendor_id='SEAGATE', product_id='ST3250820NS '
4074- ... ).jsonBody()
4075+ ... ).jsonBody())
4076 1
4077
4078- >>> print webservice.named_get(
4079- ... '/+hwdb', 'numDevicesInSubmissions', driver_name='sd').jsonBody()
4080+ >>> print(webservice.named_get(
4081+ ... '/+hwdb', 'numDevicesInSubmissions', driver_name='sd').jsonBody())
4082 5
4083
4084 We can ask how many given devices controlled by a given driver appear
4085 in HWDB submissions.
4086
4087- >>> print webservice.named_get(
4088+ >>> print(webservice.named_get(
4089 ... '/+hwdb', 'numDevicesInSubmissions',
4090 ... bus='IDE', vendor_id='SEAGATE', product_id='ST3250820NS ',
4091- ... driver_name='sd').jsonBody()
4092+ ... driver_name='sd').jsonBody())
4093 1
4094- >>> print webservice.named_get(
4095+ >>> print(webservice.named_get(
4096 ... '/+hwdb', 'numDevicesInSubmissions',
4097 ... bus='IDE', vendor_id='SEAGATE', product_id='ST3250820NS ',
4098- ... driver_name='nonsense').jsonBody()
4099+ ... driver_name='nonsense').jsonBody())
4100 0
4101
4102 This count can be limited to a package_name.
4103
4104- >>> print webservice.named_get(
4105+ >>> print(webservice.named_get(
4106 ... '/+hwdb', 'numDevicesInSubmissions',
4107 ... bus='IDE', vendor_id='SEAGATE', product_id='ST3250820NS ',
4108- ... package_name='linux-image-2.6.24-19-generic').jsonBody()
4109+ ... package_name='linux-image-2.6.24-19-generic').jsonBody())
4110 1
4111- >>> print webservice.named_get(
4112+ >>> print(webservice.named_get(
4113 ... '/+hwdb', 'numDevicesInSubmissions',
4114 ... bus='IDE', vendor_id='SEAGATE', product_id='ST3250820NS ',
4115- ... package_name='nonsense').jsonBody()
4116+ ... package_name='nonsense').jsonBody())
4117 0
4118
4119- >>> print webservice.named_get(
4120+ >>> print(webservice.named_get(
4121 ... '/+hwdb', 'numDevicesInSubmissions', driver_name='sd',
4122- ... package_name='linux-image-2.6.24-19-generic').jsonBody()
4123+ ... package_name='linux-image-2.6.24-19-generic').jsonBody())
4124 5
4125
4126 While the parameters for a device and for a driver are optional,
4127 specifying neither leads to an error.
4128
4129- >>> print webservice.named_get('/+hwdb', 'numDevicesInSubmissions')
4130+ >>> print(webservice.named_get('/+hwdb', 'numDevicesInSubmissions'))
4131 HTTP/1.1 400 Bad Request
4132 ...
4133 Specify (bus, vendor_id, product_id) or driver_name.
4134@@ -958,77 +958,76 @@
4135 We can additionally pass a reference to a distribution...
4136
4137 >>> ubuntu_url = webservice.getAbsoluteUrl('/ubuntu')
4138- >>> print webservice.named_get(
4139+ >>> print(webservice.named_get(
4140 ... '/+hwdb', 'numDevicesInSubmissions',
4141 ... bus='IDE', vendor_id='SEAGATE', product_id='ST3250820NS ',
4142- ... distribution=ubuntu_url).jsonBody()
4143+ ... distribution=ubuntu_url).jsonBody())
4144 1
4145 >>> debian_url = webservice.getAbsoluteUrl('/debian')
4146- >>> print webservice.named_get(
4147+ >>> print(webservice.named_get(
4148 ... '/+hwdb', 'numDevicesInSubmissions',
4149 ... bus='IDE', vendor_id='SEAGATE', product_id='ST3250820NS ',
4150- ... distribution=debian_url).jsonBody()
4151+ ... distribution=debian_url).jsonBody())
4152 0
4153
4154 ...a reference to a distroseries...
4155
4156 >>> hoary_url = webservice.getAbsoluteUrl('/ubuntu/hoary')
4157- >>> print webservice.named_get(
4158+ >>> print(webservice.named_get(
4159 ... '/+hwdb', 'numDevicesInSubmissions',
4160 ... bus='IDE', vendor_id='SEAGATE', product_id='ST3250820NS ',
4161- ... distroseries=hoary_url).jsonBody()
4162+ ... distroseries=hoary_url).jsonBody())
4163 1
4164 >>> warty_url = webservice.getAbsoluteUrl('/ubuntu/warty')
4165- >>> print webservice.named_get(
4166+ >>> print(webservice.named_get(
4167 ... '/+hwdb', 'numDevicesInSubmissions',
4168 ... bus='IDE', vendor_id='SEAGATE', product_id='ST3250820NS ',
4169- ... distroseries=warty_url).jsonBody()
4170+ ... distroseries=warty_url).jsonBody())
4171 0
4172
4173 ...or a reference to a distroarchseries.
4174
4175 >>> hoary_i386_url = webservice.getAbsoluteUrl('/ubuntu/hoary/i386')
4176- >>> print webservice.named_get(
4177+ >>> print(webservice.named_get(
4178 ... '/+hwdb', 'numDevicesInSubmissions',
4179 ... bus='IDE', vendor_id='SEAGATE', product_id='ST3250820NS ',
4180- ... distroarchseries=hoary_i386_url).jsonBody()
4181+ ... distroarchseries=hoary_i386_url).jsonBody())
4182 1
4183 >>> hoary_hppa_url = webservice.getAbsoluteUrl('/ubuntu/hoary/hppa')
4184- >>> print webservice.named_get(
4185+ >>> print(webservice.named_get(
4186 ... '/+hwdb', 'numDevicesInSubmissions',
4187 ... bus='IDE', vendor_id='SEAGATE', product_id='ST3250820NS ',
4188- ... distroarchseries=hoary_hppa_url).jsonBody()
4189+ ... distroarchseries=hoary_hppa_url).jsonBody())
4190 0
4191
4192 But at most one of the parameters distribution, distroseries,
4193 distroarchseries may be specified.
4194
4195- >>> print webservice.named_get(
4196+ >>> print(webservice.named_get(
4197 ... '/+hwdb', 'numDevicesInSubmissions',
4198 ... bus='IDE', vendor_id='SEAGATE', product_id='ST3250820NS ',
4199- ... distribution=ubuntu_url, distroseries=hoary_url)
4200+ ... distribution=ubuntu_url, distroseries=hoary_url))
4201 ...
4202 HTTP/1.1 400 Bad Request
4203 ...
4204 Only one of `distribution`, `distroseries` or `distroarchseries` can
4205 be present.
4206
4207- >>> print webservice.named_get(
4208+ >>> print(webservice.named_get(
4209 ... '/+hwdb', 'numDevicesInSubmissions',
4210 ... bus='IDE', vendor_id='SEAGATE', product_id='ST3250820NS ',
4211 ... distribution=ubuntu_url,
4212- ... distroarchseries=hoary_i386_url)
4213+ ... distroarchseries=hoary_i386_url))
4214 ...
4215 HTTP/1.1 400 Bad Request
4216 ...
4217 Only one of `distribution`, `distroseries` or `distroarchseries` can
4218 be present.
4219
4220- >>> print webservice.named_get(
4221+ >>> print(webservice.named_get(
4222 ... '/+hwdb', 'numDevicesInSubmissions',
4223 ... bus='IDE', vendor_id='SEAGATE', product_id='ST3250820NS ',
4224- ... distroseries=hoary_url, distroarchseries=hoary_i386_url
4225- ... )
4226+ ... distroseries=hoary_url, distroarchseries=hoary_i386_url))
4227 HTTP/1.1 400 Bad Request
4228 ...
4229 Only one of `distribution`, `distroseries` or `distroarchseries` can
4230@@ -1040,46 +1039,47 @@
4231 distroseries or distroarchseries, if one of these parameters is
4232 specified.
4233
4234- >>> print webservice.named_get(
4235+ >>> print(webservice.named_get(
4236 ... '/+hwdb', 'numSubmissionsWithDevice',
4237 ... bus='IDE', vendor_id='SEAGATE', product_id='ST3250820NS '
4238- ... ).jsonBody()
4239+ ... ).jsonBody())
4240 {u'submissions_with_device': 1, u'all_submissions': 1}
4241
4242- >>> print webservice.named_get(
4243- ... '/+hwdb', 'numSubmissionsWithDevice', driver_name='sd').jsonBody()
4244+ >>> print(webservice.named_get(
4245+ ... '/+hwdb', 'numSubmissionsWithDevice',
4246+ ... driver_name='sd').jsonBody())
4247 {u'submissions_with_device': 1, u'all_submissions': 1}
4248
4249 The parameters for a device and a driver can be combined.
4250
4251- >>> print webservice.named_get(
4252+ >>> print(webservice.named_get(
4253 ... '/+hwdb', 'numSubmissionsWithDevice',
4254 ... bus='IDE', vendor_id='SEAGATE', product_id='ST3250820NS ',
4255- ... driver_name='sd').jsonBody()
4256+ ... driver_name='sd').jsonBody())
4257 {u'submissions_with_device': 1, u'all_submissions': 1}
4258- >>> print webservice.named_get(
4259+ >>> print(webservice.named_get(
4260 ... '/+hwdb', 'numSubmissionsWithDevice',
4261 ... bus='IDE', vendor_id='SEAGATE', product_id='ST3250820NS ',
4262- ... driver_name='nonsense').jsonBody()
4263+ ... driver_name='nonsense').jsonBody())
4264 {u'submissions_with_device': 0, u'all_submissions': 1}
4265
4266 Additionally, a package_name can be passed.
4267
4268- >>> print webservice.named_get(
4269+ >>> print(webservice.named_get(
4270 ... '/+hwdb', 'numSubmissionsWithDevice',
4271 ... bus='IDE', vendor_id='SEAGATE', product_id='ST3250820NS ',
4272- ... package_name='linux-image-2.6.24-19-generic').jsonBody()
4273+ ... package_name='linux-image-2.6.24-19-generic').jsonBody())
4274 {u'submissions_with_device': 1, u'all_submissions': 1}
4275- >>> print webservice.named_get(
4276+ >>> print(webservice.named_get(
4277 ... '/+hwdb', 'numSubmissionsWithDevice',
4278 ... bus='IDE', vendor_id='SEAGATE', product_id='ST3250820NS ',
4279- ... package_name='nonsense').jsonBody()
4280+ ... package_name='nonsense').jsonBody())
4281 {u'submissions_with_device': 0, u'all_submissions': 1}
4282
4283 If neither a device nor a driver is specified, an error is returned.
4284
4285- >>> print webservice.named_get(
4286- ... '/+hwdb', 'numSubmissionsWithDevice')
4287+ >>> print(webservice.named_get(
4288+ ... '/+hwdb', 'numSubmissionsWithDevice'))
4289 HTTP/1.1 400 Bad Request
4290 ...
4291 Specify (bus, vendor_id, product_id) or driver_name.
4292@@ -1087,77 +1087,76 @@
4293 The count can be limited to a distribution...
4294
4295 >>> ubuntu_url = webservice.getAbsoluteUrl('/ubuntu')
4296- >>> print webservice.named_get(
4297+ >>> print(webservice.named_get(
4298 ... '/+hwdb', 'numSubmissionsWithDevice',
4299 ... bus='IDE', vendor_id='SEAGATE', product_id='ST3250820NS ',
4300- ... distribution=ubuntu_url).jsonBody()
4301+ ... distribution=ubuntu_url).jsonBody())
4302 {u'submissions_with_device': 1, u'all_submissions': 1}
4303 >>> debian_url = webservice.getAbsoluteUrl('/debian')
4304- >>> print webservice.named_get(
4305+ >>> print(webservice.named_get(
4306 ... '/+hwdb', 'numSubmissionsWithDevice',
4307 ... bus='IDE', vendor_id='SEAGATE', product_id='ST3250820NS ',
4308- ... distribution=debian_url).jsonBody()
4309+ ... distribution=debian_url).jsonBody())
4310 {u'submissions_with_device': 0, u'all_submissions': 0}
4311
4312 ...or a distroseries...
4313
4314 >>> hoary_url = webservice.getAbsoluteUrl('/ubuntu/hoary')
4315- >>> print webservice.named_get(
4316+ >>> print(webservice.named_get(
4317 ... '/+hwdb', 'numSubmissionsWithDevice',
4318 ... bus='IDE', vendor_id='SEAGATE', product_id='ST3250820NS ',
4319- ... distroseries=hoary_url).jsonBody()
4320+ ... distroseries=hoary_url).jsonBody())
4321 {u'submissions_with_device': 1, u'all_submissions': 1}
4322 >>> warty_url = webservice.getAbsoluteUrl('/ubuntu/warty')
4323- >>> print webservice.named_get(
4324+ >>> print(webservice.named_get(
4325 ... '/+hwdb', 'numSubmissionsWithDevice',
4326 ... bus='IDE', vendor_id='SEAGATE', product_id='ST3250820NS ',
4327- ... distroseries=warty_url).jsonBody()
4328+ ... distroseries=warty_url).jsonBody())
4329 {u'submissions_with_device': 0, u'all_submissions': 0}
4330
4331 ...or a distroarchseries.
4332
4333 >>> hoary_i386_url = webservice.getAbsoluteUrl('/ubuntu/hoary/i386')
4334- >>> print webservice.named_get(
4335+ >>> print(webservice.named_get(
4336 ... '/+hwdb', 'numSubmissionsWithDevice',
4337 ... bus='IDE', vendor_id='SEAGATE', product_id='ST3250820NS ',
4338- ... distroarchseries=hoary_i386_url).jsonBody()
4339+ ... distroarchseries=hoary_i386_url).jsonBody())
4340 {u'submissions_with_device': 1, u'all_submissions': 1}
4341 >>> hoary_hppa_url = webservice.getAbsoluteUrl('/ubuntu/hoary/hppa')
4342- >>> print webservice.named_get(
4343+ >>> print(webservice.named_get(
4344 ... '/+hwdb', 'numSubmissionsWithDevice',
4345 ... bus='IDE', vendor_id='SEAGATE', product_id='ST3250820NS ',
4346- ... distroarchseries=hoary_hppa_url).jsonBody()
4347+ ... distroarchseries=hoary_hppa_url).jsonBody())
4348 {u'submissions_with_device': 0, u'all_submissions': 0}
4349
4350 But at most one of the parameters distribution, distroseries,
4351 distroarchseries may be specified.
4352
4353- >>> print webservice.named_get(
4354+ >>> print(webservice.named_get(
4355 ... '/+hwdb', 'numSubmissionsWithDevice',
4356 ... bus='IDE', vendor_id='SEAGATE', product_id='ST3250820NS ',
4357- ... distribution=ubuntu_url, distroseries=hoary_url)
4358+ ... distribution=ubuntu_url, distroseries=hoary_url))
4359 ...
4360 HTTP/1.1 400 Bad Request
4361 ...
4362 Only one of `distribution`, `distroseries` or `distroarchseries` can
4363 be present.
4364
4365- >>> print webservice.named_get(
4366+ >>> print(webservice.named_get(
4367 ... '/+hwdb', 'numSubmissionsWithDevice',
4368 ... bus='IDE', vendor_id='SEAGATE', product_id='ST3250820NS ',
4369 ... distribution=ubuntu_url,
4370- ... distroarchseries=hoary_i386_url)
4371+ ... distroarchseries=hoary_i386_url))
4372 ...
4373 HTTP/1.1 400 Bad Request
4374 ...
4375 Only one of `distribution`, `distroseries` or `distroarchseries` can
4376 be present.
4377
4378- >>> print webservice.named_get(
4379+ >>> print(webservice.named_get(
4380 ... '/+hwdb', 'numSubmissionsWithDevice',
4381 ... bus='IDE', vendor_id='SEAGATE', product_id='ST3250820NS ',
4382- ... distroseries=hoary_url, distroarchseries=hoary_i386_url
4383- ... )
4384+ ... distroseries=hoary_url, distroarchseries=hoary_i386_url))
4385 HTTP/1.1 400 Bad Request
4386 ...
4387 Only one of `distribution`, `distroseries` or `distroarchseries` can
4388@@ -1170,123 +1169,122 @@
4389 the given distribution, distroseries or distroarchseries, if one
4390 of these parameters is specified.
4391
4392- >>> print webservice.named_get(
4393+ >>> print(webservice.named_get(
4394 ... '/+hwdb', 'numOwnersOfDevice',
4395 ... bus='IDE', vendor_id='SEAGATE', product_id='ST3250820NS '
4396- ... ).jsonBody()
4397+ ... ).jsonBody())
4398 {u'owners': 1, u'all_submitters': 1}
4399
4400- >>> print webservice.named_get(
4401- ... '/+hwdb', 'numOwnersOfDevice', driver_name='sd').jsonBody()
4402+ >>> print(webservice.named_get(
4403+ ... '/+hwdb', 'numOwnersOfDevice', driver_name='sd').jsonBody())
4404 {u'owners': 1, u'all_submitters': 1}
4405
4406 A device and a driver can be specified simultaneously.
4407
4408- >>> print webservice.named_get(
4409+ >>> print(webservice.named_get(
4410 ... '/+hwdb', 'numOwnersOfDevice',
4411 ... bus='IDE', vendor_id='SEAGATE', product_id='ST3250820NS ',
4412- ... driver_name='sd').jsonBody()
4413+ ... driver_name='sd').jsonBody())
4414 {u'owners': 1, u'all_submitters': 1}
4415- >>> print webservice.named_get(
4416+ >>> print(webservice.named_get(
4417 ... '/+hwdb', 'numOwnersOfDevice',
4418 ... bus='IDE', vendor_id='SEAGATE', product_id='ST3250820NS ',
4419- ... driver_name='nonsense').jsonBody()
4420+ ... driver_name='nonsense').jsonBody())
4421 {u'owners': 0, u'all_submitters': 1}
4422
4423 Specifying neiher a device nor a driver leads to an error.
4424
4425- >>> print webservice.named_get('/+hwdb', 'numOwnersOfDevice')
4426+ >>> print(webservice.named_get('/+hwdb', 'numOwnersOfDevice'))
4427 HTTP/1.1 400 Bad Request
4428 ...
4429 Specify (bus, vendor_id, product_id) or driver_name.
4430
4431 Additionally, a package_name can be passed...
4432
4433- >>> print webservice.named_get(
4434+ >>> print(webservice.named_get(
4435 ... '/+hwdb', 'numOwnersOfDevice',
4436 ... bus='IDE', vendor_id='SEAGATE', product_id='ST3250820NS ',
4437- ... package_name='linux-image-2.6.24-19-generic').jsonBody()
4438+ ... package_name='linux-image-2.6.24-19-generic').jsonBody())
4439 {u'owners': 1, u'all_submitters': 1}
4440- >>> print webservice.named_get(
4441+ >>> print(webservice.named_get(
4442 ... '/+hwdb', 'numOwnersOfDevice',
4443 ... bus='IDE', vendor_id='SEAGATE', product_id='ST3250820NS ',
4444- ... package_name='nonsense').jsonBody()
4445+ ... package_name='nonsense').jsonBody())
4446 {u'owners': 0, u'all_submitters': 1}
4447
4448 ...a reference to a distribution...
4449
4450 >>> ubuntu_url = webservice.getAbsoluteUrl('/ubuntu')
4451- >>> print webservice.named_get(
4452+ >>> print(webservice.named_get(
4453 ... '/+hwdb', 'numOwnersOfDevice',
4454 ... bus='IDE', vendor_id='SEAGATE', product_id='ST3250820NS ',
4455- ... distribution=ubuntu_url).jsonBody()
4456+ ... distribution=ubuntu_url).jsonBody())
4457 {u'owners': 1, u'all_submitters': 1}
4458 >>> debian_url = webservice.getAbsoluteUrl('/debian')
4459- >>> print webservice.named_get(
4460+ >>> print(webservice.named_get(
4461 ... '/+hwdb', 'numOwnersOfDevice',
4462 ... bus='IDE', vendor_id='SEAGATE', product_id='ST3250820NS ',
4463- ... distribution=debian_url).jsonBody()
4464+ ... distribution=debian_url).jsonBody())
4465 {u'owners': 0, u'all_submitters': 0}
4466
4467 ...a reference to a distroseries...
4468
4469 >>> hoary_url = webservice.getAbsoluteUrl('/ubuntu/hoary')
4470- >>> print webservice.named_get(
4471+ >>> print(webservice.named_get(
4472 ... '/+hwdb', 'numOwnersOfDevice',
4473 ... bus='IDE', vendor_id='SEAGATE', product_id='ST3250820NS ',
4474- ... distroseries=hoary_url).jsonBody()
4475+ ... distroseries=hoary_url).jsonBody())
4476 {u'owners': 1, u'all_submitters': 1}
4477 >>> warty_url = webservice.getAbsoluteUrl('/ubuntu/warty')
4478- >>> print webservice.named_get(
4479+ >>> print(webservice.named_get(
4480 ... '/+hwdb', 'numOwnersOfDevice',
4481 ... bus='IDE', vendor_id='SEAGATE', product_id='ST3250820NS ',
4482- ... distroseries=warty_url).jsonBody()
4483+ ... distroseries=warty_url).jsonBody())
4484 {u'owners': 0, u'all_submitters': 0}
4485
4486 ...or a reference to a distroarchseries.
4487
4488 >>> hoary_i386_url = webservice.getAbsoluteUrl('/ubuntu/hoary/i386')
4489- >>> print webservice.named_get(
4490+ >>> print(webservice.named_get(
4491 ... '/+hwdb', 'numOwnersOfDevice',
4492 ... bus='IDE', vendor_id='SEAGATE', product_id='ST3250820NS ',
4493- ... distroarchseries=hoary_i386_url).jsonBody()
4494+ ... distroarchseries=hoary_i386_url).jsonBody())
4495 {u'owners': 1, u'all_submitters': 1}
4496 >>> hoary_hppa_url = webservice.getAbsoluteUrl('/ubuntu/hoary/hppa')
4497- >>> print webservice.named_get(
4498+ >>> print(webservice.named_get(
4499 ... '/+hwdb', 'numOwnersOfDevice',
4500 ... bus='IDE', vendor_id='SEAGATE', product_id='ST3250820NS ',
4501- ... distroarchseries=hoary_hppa_url).jsonBody()
4502+ ... distroarchseries=hoary_hppa_url).jsonBody())
4503 {u'owners': 0, u'all_submitters': 0}
4504
4505 But at most one of the parameters distribution, distroseries,
4506 distroarchseries may be specified.
4507
4508- >>> print webservice.named_get(
4509+ >>> print(webservice.named_get(
4510 ... '/+hwdb', 'numOwnersOfDevice',
4511 ... bus='IDE', vendor_id='SEAGATE', product_id='ST3250820NS ',
4512- ... distribution=ubuntu_url, distroseries=hoary_url)
4513+ ... distribution=ubuntu_url, distroseries=hoary_url))
4514 ...
4515 HTTP/1.1 400 Bad Request
4516 ...
4517 Only one of `distribution`, `distroseries` or `distroarchseries` can
4518 be present.
4519
4520- >>> print webservice.named_get(
4521+ >>> print(webservice.named_get(
4522 ... '/+hwdb', 'numOwnersOfDevice',
4523 ... bus='IDE', vendor_id='SEAGATE', product_id='ST3250820NS ',
4524 ... distribution=ubuntu_url,
4525- ... distroarchseries=hoary_i386_url)
4526+ ... distroarchseries=hoary_i386_url))
4527 ...
4528 HTTP/1.1 400 Bad Request
4529 ...
4530 Only one of `distribution`, `distroseries` or `distroarchseries` can
4531 be present.
4532
4533- >>> print webservice.named_get(
4534+ >>> print(webservice.named_get(
4535 ... '/+hwdb', 'numOwnersOfDevice',
4536 ... bus='IDE', vendor_id='SEAGATE', product_id='ST3250820NS ',
4537- ... distroseries=hoary_url, distroarchseries=hoary_i386_url
4538- ... )
4539+ ... distroseries=hoary_url, distroarchseries=hoary_i386_url))
4540 HTTP/1.1 400 Bad Request
4541 ...
4542 Only one of `distribution`, `distroseries` or `distroarchseries` can
4543@@ -1305,7 +1303,7 @@
4544 ... '/+hwdb', 'deviceDriverOwnersAffectedByBugs',
4545 ... bus='IDE', vendor_id='SEAGATE', product_id='ST3250820NS ',
4546 ... bug_ids=[1]).jsonBody()['entries']:
4547- ... print person['display_name']
4548+ ... print(person['display_name'])
4549 Sample Person
4550
4551 We can additionally ask for bugsubscribers...
4552@@ -1314,7 +1312,7 @@
4553 ... '/+hwdb', 'deviceDriverOwnersAffectedByBugs',
4554 ... bus='IDE', vendor_id='SEAGATE', product_id='ST3250820NS ',
4555 ... bug_ids=[9], subscribed_to_bug=True).jsonBody()['entries']:
4556- ... print person['display_name']
4557+ ... print(person['display_name'])
4558 Sample Person
4559
4560 or users affected by a bug.
4561@@ -1335,7 +1333,7 @@
4562 ... '/+hwdb', 'deviceDriverOwnersAffectedByBugs',
4563 ... bus='IDE', vendor_id='SEAGATE', product_id='ST3250820NS ',
4564 ... bug_ids=[15], affected_by_bug=True).jsonBody()['entries']:
4565- ... print person['display_name']
4566+ ... print(person['display_name'])
4567 Sample Person
4568
4569 We can limit the search to a driver...
4570@@ -1344,14 +1342,14 @@
4571 ... '/+hwdb', 'deviceDriverOwnersAffectedByBugs',
4572 ... bus='IDE', vendor_id='SEAGATE', product_id='ST3250820NS ',
4573 ... bug_ids=[1], driver_name='sd').jsonBody()['entries']:
4574- ... print person['display_name']
4575+ ... print(person['display_name'])
4576 Sample Person
4577
4578- >>> print webservice.named_get(
4579+ >>> print(webservice.named_get(
4580 ... '/+hwdb', 'deviceDriverOwnersAffectedByBugs',
4581 ... bus='IDE', vendor_id='SEAGATE', product_id='ST3250820NS ',
4582 ... bug_ids=[9], driver_name='nonsense', subscribed_to_bug=True
4583- ... ).jsonBody()['total_size']
4584+ ... ).jsonBody()['total_size'])
4585 0
4586
4587 ...or a package name.
4588@@ -1361,14 +1359,14 @@
4589 ... bus='IDE', vendor_id='SEAGATE', product_id='ST3250820NS ',
4590 ... bug_ids=[1], package_name='linux-image-2.6.24-19-generic'
4591 ... ).jsonBody()['entries']:
4592- ... print person['display_name']
4593+ ... print(person['display_name'])
4594 Sample Person
4595
4596- >>> print webservice.named_get(
4597+ >>> print(webservice.named_get(
4598 ... '/+hwdb', 'deviceDriverOwnersAffectedByBugs',
4599 ... bus='IDE', vendor_id='SEAGATE', product_id='ST3250820NS ',
4600 ... bug_ids=[9], package_name='nonsense', subscribed_to_bug=True
4601- ... ).jsonBody()['total_size']
4602+ ... ).jsonBody()['total_size'])
4603 0
4604
4605 And we can search for people using a given driver and being affected by
4606@@ -1377,18 +1375,18 @@
4607 >>> for person in webservice.named_get(
4608 ... '/+hwdb', 'deviceDriverOwnersAffectedByBugs',
4609 ... driver_name='sd', bug_ids=[1]).jsonBody()['entries']:
4610- ... print person['display_name']
4611+ ... print(person['display_name'])
4612 Sample Person
4613
4614- >>> print webservice.named_get(
4615+ >>> print(webservice.named_get(
4616 ... '/+hwdb', 'deviceDriverOwnersAffectedByBugs',
4617- ... driver_name='nonsense', bug_ids=[1]).jsonBody()['total_size']
4618+ ... driver_name='nonsense', bug_ids=[1]).jsonBody()['total_size'])
4619 0
4620
4621 A 400 error is returned, if neither a device nor a driver name is specified.
4622
4623- >>> print webservice.named_get(
4624- ... '/+hwdb', 'deviceDriverOwnersAffectedByBugs', bug_ids=[1])
4625+ >>> print(webservice.named_get(
4626+ ... '/+hwdb', 'deviceDriverOwnersAffectedByBugs', bug_ids=[1]))
4627 HTTP/1.1 400 Bad Request
4628 ...
4629 Specify (bus, vendor_id, product_id) or driver_name.
4630@@ -1396,9 +1394,9 @@
4631 If one of the parameters bus, vendor_id, product_id is specified, all of
4632 them have to be specified.
4633
4634- >>> print webservice.named_get(
4635+ >>> print(webservice.named_get(
4636 ... '/+hwdb', 'deviceDriverOwnersAffectedByBugs',
4637- ... bus='IDE', bug_ids=[1])
4638+ ... bus='IDE', bug_ids=[1]))
4639 HTTP/1.1 400 Bad Request
4640 ...
4641 Either specify bus, vendor_id and product_id or none of them.
4642@@ -1409,7 +1407,7 @@
4643 >>> for entry in webservice.named_get(
4644 ... '/+hwdb', 'hwInfoByBugRelatedUsers',
4645 ... bug_ids=[1]).jsonBody():
4646- ... print entry
4647+ ... print(entry)
4648 [u'name12', u'IDE', u'Optiarc', u'DVD RW AD-7170S ']
4649 [u'name12', u'IDE', u'SEAGATE', u'ST3250820NS ']
4650 [u'name12', u'PCI', u'0x10de', u'0x0455']
4651@@ -1424,7 +1422,7 @@
4652 >>> for entry in webservice.named_get(
4653 ... '/+hwdb', 'hwInfoByBugRelatedUsers',
4654 ... bug_ids=[9], subscribed_to_bug=True).jsonBody():
4655- ... print entry
4656+ ... print(entry)
4657 [u'name12', u'IDE', u'Optiarc', u'DVD RW AD-7170S ']
4658 [u'name12', u'IDE', u'SEAGATE', u'ST3250820NS ']
4659 [u'name12', u'PCI', u'0x10de', u'0x0455']
4660@@ -1438,7 +1436,7 @@
4661 >>> for entry in webservice.named_get(
4662 ... '/+hwdb', 'hwInfoByBugRelatedUsers',
4663 ... bug_ids=[15], affected_by_bug=True).jsonBody():
4664- ... print entry
4665+ ... print(entry)
4666 [u'name12', u'IDE', u'Optiarc', u'DVD RW AD-7170S ']
4667 [u'name12', u'IDE', u'SEAGATE', u'ST3250820NS ']
4668 [u'name12', u'PCI', u'0x10de', u'0x0455']
4669
4670=== modified file 'lib/lp/hardwaredb/tests/test_doc.py'
4671--- lib/lp/hardwaredb/tests/test_doc.py 2012-01-20 15:42:44 +0000
4672+++ lib/lp/hardwaredb/tests/test_doc.py 2019-04-16 17:27:23 +0000
4673@@ -5,6 +5,8 @@
4674 Run the doctests and pagetests.
4675 """
4676
4677+from __future__ import absolute_import, print_function, unicode_literals
4678+
4679 import os
4680
4681 from lp.services.testing import build_test_suite
4682@@ -13,6 +15,7 @@
4683 LaunchpadFunctionalLayer,
4684 LaunchpadZopelessLayer,
4685 )
4686+from lp.testing.pages import setUpGlobs
4687 from lp.testing.systemdocs import (
4688 LayeredDocFileSuite,
4689 setUp,
4690@@ -24,7 +27,7 @@
4691
4692
4693 def hwdbDeviceTablesSetup(test):
4694- setUp(test)
4695+ setUp(test, future=True)
4696 switch_dbuser('hwdb-submission-processor')
4697
4698
4699@@ -38,4 +41,7 @@
4700
4701
4702 def test_suite():
4703- return build_test_suite(here, special, layer=LaunchpadFunctionalLayer)
4704+ return build_test_suite(
4705+ here, special, layer=LaunchpadFunctionalLayer,
4706+ setUp=lambda test: setUp(test, future=True),
4707+ pageTestsSetUp=lambda test: setUpGlobs(test, future=True))
4708
4709=== modified file 'lib/lp/hardwaredb/tests/test_hwdb_submission_validation.py'
4710--- lib/lp/hardwaredb/tests/test_hwdb_submission_validation.py 2012-01-01 02:58:52 +0000
4711+++ lib/lp/hardwaredb/tests/test_hwdb_submission_validation.py 2019-04-16 17:27:23 +0000
4712@@ -3,6 +3,8 @@
4713
4714 """Tests of the HWDB submissions parser."""
4715
4716+from __future__ import absolute_import, print_function, unicode_literals
4717+
4718 from datetime import datetime
4719 import logging
4720 import os
4721@@ -36,6 +38,8 @@
4722 config.root, 'lib', 'lp', 'hardwaredb', 'scripts',
4723 'tests', 'hardwaretest.xml')
4724 self.sample_data = open(sample_data_path).read()
4725+ if isinstance(self.sample_data, bytes):
4726+ self.sample_data = self.sample_data.decode('UTF-8')
4727
4728 def runValidator(self, sample_data):
4729 """Run the Relax NG validator.
4730@@ -44,6 +48,8 @@
4731 expected in a test is indeed created by this test.
4732 """
4733 self.submission_count += 1
4734+ if not isinstance(sample_data, bytes):
4735+ sample_data = sample_data.encode('UTF-8')
4736 submission_id = 'submission_%i' % self.submission_count
4737 result = SubmissionParser(self.log)._getValidatedEtree(sample_data,
4738 submission_id)
4739@@ -165,7 +171,7 @@
4740 data=self.sample_data,
4741 replace_text='<?xml version="1.0" encoding="%s"?>' % encoding,
4742 from_text='<?xml',
4743- to_text='?>')
4744+ to_text='?>').encode(encoding)
4745
4746 def testAsciiEncoding(self):
4747 """Validation of ASCII encoded XML data.
4748@@ -182,8 +188,8 @@
4749 sample_data = self.replaceSampledata(
4750 data=sample_data_ascii_encoded,
4751 replace_text=tag_with_umlaut,
4752- from_text='<architecture',
4753- to_text='/>')
4754+ from_text=b'<architecture',
4755+ to_text=b'/>')
4756 result, submission_id = self.runValidator(sample_data)
4757 self.assertEqual(result, None,
4758 'Invalid submission with ASCII encoding accepted')
4759@@ -196,12 +202,12 @@
4760 def testISO8859_1_Encoding(self):
4761 """XML data with ISO-8859-1 may have bytes with bit 7 set."""
4762 sample_data_iso_8859_1_encoded = self._setEncoding('ISO-8859-1')
4763- tag_with_umlaut = '<architecture value="\xc4"/>'
4764+ tag_with_umlaut = b'<architecture value="\xc4"/>'
4765 sample_data = self.replaceSampledata(
4766 data=sample_data_iso_8859_1_encoded,
4767 replace_text=tag_with_umlaut,
4768- from_text='<architecture',
4769- to_text='/>')
4770+ from_text=b'<architecture',
4771+ to_text=b'/>')
4772 result, submission_id = self.runValidator(sample_data)
4773 self.assertNotEqual(result, None,
4774 'Valid submission with ISO-8859-1 encoding '
4775@@ -211,24 +217,24 @@
4776 """UTF-8 encoded data is properly detected and parsed."""
4777 sample_data_utf8_encoded = self._setEncoding('UTF-8')
4778 umlaut = u'\xc4'.encode('utf8')
4779- tag = '<architecture value="%s"/>'
4780+ tag = b'<architecture value="%s"/>'
4781 tag_with_valid_utf8 = tag % umlaut
4782 sample_data = self.replaceSampledata(
4783 data=sample_data_utf8_encoded,
4784 replace_text=tag_with_valid_utf8,
4785- from_text='<architecture',
4786- to_text='/>')
4787+ from_text=b'<architecture',
4788+ to_text=b'/>')
4789 result, submission_id = self.runValidator(sample_data)
4790 self.assertNotEqual(result, None,
4791 'Valid submission with UTF-8 encoding rejected')
4792
4793 # Broken UTF8 encoding is detected.
4794- tag_with_broken_utf8 = tag % umlaut[0]
4795+ tag_with_broken_utf8 = tag % umlaut[:1]
4796 sample_data = self.replaceSampledata(
4797 data=tag_with_broken_utf8,
4798 replace_text=tag_with_broken_utf8,
4799- from_text='<architecture',
4800- to_text='/>')
4801+ from_text=b'<architecture',
4802+ to_text=b'/>')
4803 result, submission_id = self.runValidator(sample_data)
4804 self.assertEqual(result, None,
4805 'Invalid submissison with UTF-8 encoding accepted')