usbutils/SOURCES/0004-lsusb.py-fix-up-Python...

149 lines
4.2 KiB
Diff

From a7c25eadbc998bf359e5b7dac03aaea8c30d2932 Mon Sep 17 00:00:00 2001
From: Georg Brandl <georg@python.org>
Date: Thu, 17 May 2018 08:51:27 +0200
Subject: [PATCH 4/9] lsusb.py: fix up Python 3 conversion
- Use open() and ignore encoding errors
- Replace removed __cmp__ by rich comparison methods
- Convert commented-out print statements, remove unused future import
Fixes #68
---
lsusb.py.in | 50 ++++++++++++++++++++++----------------------------
1 file changed, 22 insertions(+), 28 deletions(-)
diff --git a/lsusb.py.in b/lsusb.py.in
index 0f4d318..083b512 100644
--- a/lsusb.py.in
+++ b/lsusb.py.in
@@ -12,8 +12,6 @@
import os, sys, re, getopt
-# from __future__ import print_function
-
# Global options
showint = False
showhubint = False
@@ -53,15 +51,12 @@ class UsbClass:
self.desc = str
def __repr__(self):
return self.desc
- def __cmp__(self, oth):
- # Works only on 64bit systems:
- #return self.pclass*0x10000+self.subclass*0x100+self.proto \
- # - oth.pclass*0x10000-oth.subclass*0x100-oth.proto
- if self.pclass != oth.pclass:
- return self.pclass - oth.pclass
- if self.subclass != oth.subclass:
- return self.subclass - oth.subclass
- return self.proto - oth.proto
+ def __lt__(self, oth):
+ return (self.pclass, self.subclass, self.proto) < \
+ (oth.pclass, oth.subclass, oth.proto)
+ def __eq__(self, oth):
+ return (self.pclass, self.subclass, self.proto) == \
+ (oth.pclass, oth.subclass, oth.proto)
class UsbVendor:
"Container for USB Vendors"
@@ -70,8 +65,10 @@ class UsbVendor:
self.vname = vname
def __repr__(self):
return self.vname
- def __cmp__(self, oth):
- return self.vid - oth.vid
+ def __lt__(self, oth):
+ return self.vid < oth.vid
+ def __eq__(self, oth):
+ return self.vid == oth.vid
class UsbProduct:
"Container for USB VID:PID devices"
@@ -81,13 +78,10 @@ class UsbProduct:
self.pname = pname
def __repr__(self):
return self.pname
- def __cmp__(self, oth):
- # Works only on 64bit systems:
- # return self.vid*0x10000 + self.pid \
- # - oth.vid*0x10000 - oth.pid
- if self.vid != oth.vid:
- return self.vid - oth.vid
- return self.pid - oth.pid
+ def __lt__(self, oth):
+ return (self.vid, self.pid) < (oth.vid, oth.pid)
+ def __eq__(self, oth):
+ return (self.vid, self.pid) == (oth.vid, oth.pid)
usbvendors = []
usbproducts = []
@@ -107,7 +101,7 @@ def parse_usb_ids():
mode = 0
strg = ""
cstrg = ""
- for ln in file(usbids, "r").readlines():
+ for ln in open(usbids, "r", errors="ignore"):
if ln[0] == '#':
continue
ln = ln.rstrip('\n')
@@ -146,7 +140,7 @@ def parse_usb_ids():
def bin_search(first, last, item, list):
"binary search on list, returns -1 on fail, match idx otherwise, recursive"
- #print "bin_search(%i,%i)" % (first, last)
+ #print("bin_search(%i,%i)" % (first, last))
if first == last:
return -1
if first == last-1:
@@ -233,7 +227,7 @@ def find_dev(driver, usbname):
for nm in devlst:
dir = prefix + usbname
prep = ""
- #print nm
+ #print(nm)
idx = nm.find('/')
if idx != -1:
prep = nm[:idx+1]
@@ -404,8 +398,8 @@ class UsbDevice:
try:
self.nointerfaces = int(readattr(fname, "bNumInterfaces"))
except:
- #print "ERROR: %s/bNumInterfaces = %s" % (fname,
- # readattr(fname, "bNumInterfaces"))a
+ #print("ERROR: %s/bNumInterfaces = %s" % (fname,
+ # readattr(fname, "bNumInterfaces")))
self.nointerfaces = 0
try:
self.driver = readlink(fname, "driver")
@@ -421,7 +415,7 @@ class UsbDevice:
for dirent in os.listdir(prefix + self.fname):
if not dirent[0:1].isdigit():
continue
- #print dirent
+ #print(dirent)
if os.access(prefix + dirent + "/bInterfaceClass", os.R_OK):
iface = UsbInterface(self, self.level+1)
iface.read(dirent)
@@ -532,7 +526,7 @@ def usage():
def read_usb():
"Read toplevel USB entries and print"
for dirent in os.listdir(prefix):
- #print dirent,
+ #print(dirent)
if not dirent[0:3] == "usb":
continue
usbdev = UsbDevice(None, 0)
@@ -590,7 +584,7 @@ def main(argv):
fix_usbclass()
except:
print(" WARNING: Failure to read usb.ids", file=sys.stderr)
- #print >>sys.stderr, sys.exc_info()
+ #print(sys.exc_info(), file=sys.stderr)
read_usb()
# Entry point
--
2.14.4