Skip to content

Commit d2e0eeb

Browse files
committed
Merge branch 'qdev'
* qdev: Adjust pylint mockups for device_protocol.py q-dev: Fix detecting already assigned devices on setting apply q-dev: fix detecting attached devices in settings q-dev: use simplify DeviceAssignment creation q-dev: direct import of device_protocol classes q-dev: implements device_id
2 parents 291421e + a7b52bd commit d2e0eeb

File tree

4 files changed

+43
-37
lines changed

4 files changed

+43
-37
lines changed

qubesmanager/device_list.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -48,10 +48,10 @@ def fill_device_list(self):
4848

4949
for i in range(self.dev_list.selected_list.count()):
5050
text = self.dev_list.selected_list.item(i).text()
51-
ident = self.dev_list.selected_list.item(i).dev.ident
51+
port_id = self.dev_list.selected_list.item(i).dev.port_id
5252
self.device_list.addItem(text)
53-
self.ident_list[text] = ident
54-
if ident in self.no_strict_reset_list:
53+
self.ident_list[text] = port_id
54+
if port_id in self.no_strict_reset_list:
5555
self.device_list.item(self.device_list.count()-1).setSelected(
5656
True)
5757

qubesmanager/settings.py

+23-30
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
import sys
3030
import traceback
3131
from qubesadmin.tools import QubesArgumentParser
32-
from qubesadmin import devices
32+
from qubesadmin import device_protocol
3333
from qubesadmin import utils as admin_utils
3434
from qubesadmin.tools import qvm_start
3535
import qubesadmin.exc
@@ -1217,7 +1217,7 @@ def __init_devices_tab__(self):
12171217
dom0_devs = \
12181218
list(self.vm.app.domains['dom0'].
12191219
devices['pci'].get_exposed_devices())
1220-
attached_devs = list(
1220+
attached = list(
12211221
self.vm.devices['pci'].get_assigned_devices(required_only=True))
12221222
except qubesadmin.exc.QubesException:
12231223
# no permission to access devices
@@ -1228,21 +1228,21 @@ def __init_devices_tab__(self):
12281228
class DevListWidgetItem(QtWidgets.QListWidgetItem):
12291229
def __init__(self, dev, unknown=False, parent=None):
12301230
super().__init__(parent)
1231-
name = dev.ident.replace('_', ":") + ' ' + dev.description
1231+
name = dev.port_id.replace('_', ":") + ' ' + dev.description
12321232
if unknown:
12331233
name += ' (unknown)'
12341234
self.setText(name)
12351235
self.dev = dev
12361236

12371237
for dev in dom0_devs:
1238-
if dev in attached_devs:
1238+
if any(attached_dev.matches(dev) for attached_dev in attached):
12391239
self.dev_list.selected_list.addItem(DevListWidgetItem(dev))
12401240
else:
12411241
self.dev_list.available_list.addItem(DevListWidgetItem(dev))
1242-
for dev in attached_devs:
1243-
if dev not in dom0_devs:
1242+
for ass in attached:
1243+
if not any(ass.matches(dev) for dev in dom0_devs):
12441244
self.dev_list.selected_list.addItem(
1245-
DevListWidgetItem(dev, unknown=True))
1245+
DevListWidgetItem(ass.device, unknown=True))
12461246

12471247
if self.dev_list.selected_list.count() > 0\
12481248
and self.include_in_balancing.isChecked():
@@ -1278,34 +1278,27 @@ def __apply_devices_tab__(self):
12781278
for i in range(self.dev_list.selected_list.count())]
12791279

12801280
for dev in new_devs:
1281-
if dev not in old_devs:
1281+
old_assignments = [old for old in old_devs
1282+
if old.matches(dev)]
1283+
if not old_assignments:
12821284
options = {}
1283-
if dev.ident in self.new_strict_reset_list:
1285+
if dev.port_id in self.new_strict_reset_list:
12841286
options['no-strict-reset'] = True
1285-
ass = devices.DeviceAssignment(
1286-
self.vm.app.domains['dom0'],
1287-
dev.ident, devclass='pci',
1288-
attach_automatically=True, required=True,
1289-
options=options)
1287+
ass = device_protocol.DeviceAssignment.new(
1288+
backend_domain=self.vm.app.domains['dom0'],
1289+
port_id=dev.port_id,
1290+
devclass='pci',
1291+
mode='required',
1292+
options=options,
1293+
)
12901294
self.vm.devices['pci'].assign(ass)
1291-
elif (dev.ident in self.current_strict_reset_list) != \
1292-
(dev.ident in self.new_strict_reset_list):
1293-
current_assignment = None
1294-
for assignment in self.vm.devices[
1295-
'pci'].get_assigned_devices(required_only=True):
1296-
if assignment.ident == dev.ident:
1297-
current_assignment = assignment
1298-
break
1299-
if current_assignment is None:
1300-
# it would be very weird if this happened
1301-
msg.append(self.tr("Error re-assigning device ") +
1302-
dev.ident)
1303-
continue
1304-
1295+
elif (dev.port_id in self.current_strict_reset_list) != \
1296+
(dev.port_id in self.new_strict_reset_list):
1297+
current_assignment = old_assignments[0]
13051298
self.vm.devices['pci'].unassign(current_assignment)
13061299

13071300
current_assignment.options['no-strict-reset'] = \
1308-
dev.ident in self.new_strict_reset_list
1301+
dev.port_id in self.new_strict_reset_list
13091302

13101303
self.vm.devices['pci'].assign(current_assignment)
13111304

@@ -1347,7 +1340,7 @@ def define_strict_reset_devices(self):
13471340
required_only=True):
13481341
if assignment.options.get('no-strict-reset', False):
13491342
self.current_strict_reset_list.append(
1350-
assignment.ident.replace('_', ':'))
1343+
assignment.port_id.replace('_', ':'))
13511344
self.new_strict_reset_list = self.current_strict_reset_list.copy()
13521345

13531346
def strict_reset_button_pressed(self):
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
### mock qubesadmin.devices module
2+
3+
class DeviceAssignment(object):
4+
5+
@classmethod
6+
def new(
7+
cls,
8+
backend_domain,
9+
port_id: str,
10+
devclass: str,
11+
device_id: Optional[str] = None,
12+
*,
13+
frontend_domain = None,
14+
options=None,
15+
mode = "manual",
16+
) -> "DeviceAssignment":
17+
pass

test-packages/qubesadmin/devices.py

-4
This file was deleted.

0 commit comments

Comments
 (0)