Skip to content

Commit bead910

Browse files
committed
q-dev: comparison
1 parent 55dbba9 commit bead910

File tree

4 files changed

+40
-12
lines changed

4 files changed

+40
-12
lines changed

qubesadmin/device_protocol.py

+32-4
Original file line numberDiff line numberDiff line change
@@ -263,8 +263,8 @@ class DeviceCategory(Enum):
263263
Mouse = ("u03**02", "p0902**")
264264
Printer = ("u07****",)
265265
Scanner = ("p0903**",)
266-
# Multimedia = Audio, Video, Displays etc.
267266
Microphone = ("m******",)
267+
# Multimedia = Audio, Video, Displays etc.
268268
Multimedia = ("u01****", "u0e****", "u06****", "u10****", "p03****",
269269
"p04****")
270270
Wireless = ("ue0****", "p0d****")
@@ -369,7 +369,7 @@ def __eq__(self, other):
369369

370370
def __str__(self):
371371
if self.devclass == "block":
372-
return "Block device"
372+
return "Block Device"
373373
if self.devclass in ("usb", "pci"):
374374
# try subclass first as in `lspci`
375375
result = self._load_classes(self.devclass).get(
@@ -458,6 +458,32 @@ def __init__(
458458

459459
self.data = kwargs
460460

461+
def __hash__(self):
462+
return hash(self.port)# self.self_identity))
463+
464+
def __eq__(self, other):
465+
if isinstance(other, DeviceInfo):
466+
return (
467+
self.port == other.port
468+
# and self.self_identity == other.self_identity
469+
)
470+
else:
471+
return super().__lt__(other)
472+
473+
def __lt__(self, other):
474+
if isinstance(other, DeviceInfo):
475+
# return (self.port, self.self_identity) < \
476+
# (other.port, other.self_identity)
477+
return self.port < other.port
478+
else:
479+
return super().__lt__(other)
480+
481+
def __repr__(self):
482+
return f"{self.port!r}"#:{self.self_identity}"
483+
484+
def __str__(self):
485+
return f"{self.port}"#:{self.self_identity}"
486+
461487
@property
462488
def port(self) -> Port:
463489
"""
@@ -558,8 +584,10 @@ def description(self) -> str:
558584
else:
559585
vendor = "unknown vendor"
560586

561-
main_interface = str(self.interfaces[0])
562-
return f"{main_interface}: {vendor} {prod}"
587+
cat = self.interfaces[0].category.name
588+
if cat == "Other":
589+
cat = str(self.interfaces[0])
590+
return f"{cat}: {vendor} {prod}"
563591

564592
@property
565593
def interfaces(self) -> List[DeviceInterface]:

qubesadmin/devices.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -173,8 +173,8 @@ def get_assigned_devices(
173173
assignments_str = self._vm.qubesd_call(
174174
None, 'admin.vm.device.{}.Assigned'.format(self._class)).decode()
175175
for assignment_str in assignments_str.splitlines():
176-
device, _, untrusted_rest = assignment_str.partition(' ')
177-
backend_domain_name, ident = device.split('+', 1)
176+
port, _, untrusted_rest = assignment_str.partition(' ')
177+
backend_domain_name, ident = port.split('+', 1)
178178
backend_domain = self._vm.app.domains.get_blind(backend_domain_name)
179179

180180
assignment = DeviceAssignment.deserialize(

qubesadmin/tests/devices.py

+5-5
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ def test_000_available(self):
4949
self.assertEqual(
5050
dev.description, '?******: unknown vendor unknown test device')
5151
self.assertEqual(dev.data, {})
52-
self.assertEqual(str(dev), 'test-vm:dev1')
52+
self.assertEqual(str(dev.port), 'test-vm:dev1')
5353
self.assertAllCalled()
5454

5555
def test_001_available_desc(self):
@@ -64,7 +64,7 @@ def test_001_available_desc(self):
6464
self.assertEqual(dev.ident, 'dev1')
6565
self.assertEqual(dev.description, '?******: itl test-device')
6666
self.assertEqual(dev.data, {})
67-
self.assertEqual(str(dev), 'test-vm:dev1')
67+
self.assertEqual(str(dev.port), 'test-vm:dev1')
6868

6969
def test_002_available_options(self):
7070
self.app.expected_calls[
@@ -78,7 +78,7 @@ def test_002_available_options(self):
7878
self.assertEqual(dev.ident, 'dev1')
7979
self.assertEqual(dev.description, '?******: itl test-device')
8080
self.assertEqual(dev.data, {'ro': 'True', 'other': '123'})
81-
self.assertEqual(str(dev), 'test-vm:dev1')
81+
self.assertEqual(str(dev.port), 'test-vm:dev1')
8282
self.assertAllCalled()
8383

8484
def test_010_getitem(self):
@@ -91,7 +91,7 @@ def test_010_getitem(self):
9191
self.assertEqual(dev.ident, 'dev1')
9292
self.assertEqual(dev.description, '?******: itl test-device')
9393
self.assertEqual(dev.data, {})
94-
self.assertEqual(str(dev), 'test-vm:dev1')
94+
self.assertEqual(str(dev.port), 'test-vm:dev1')
9595
self.assertAllCalled()
9696

9797
def test_011_getitem_missing(self):
@@ -105,7 +105,7 @@ def test_011_getitem_missing(self):
105105
self.assertEqual(dev.description,
106106
'?******: unknown vendor unknown test device')
107107
self.assertEqual(dev.data, {})
108-
self.assertEqual(str(dev), 'test-vm:dev2')
108+
self.assertEqual(str(dev.port), 'test-vm:dev2')
109109
self.assertAllCalled()
110110

111111
def test_020_attach(self):

qubesadmin/tools/qvm_device.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ def _load_frontends_info(vm, dev, devclass):
135135

136136
try:
137137
for assignment in vm.devices[devclass].get_dedicated_devices():
138-
if dev != assignment:
138+
if dev != assignment.device:
139139
continue
140140
if assignment.options:
141141
yield '{!s} ({})'.format(

0 commit comments

Comments
 (0)