MCPcopy Create free account
hub / github.com/archlinux/archinstall / select_devices

Function select_devices

archinstall/lib/disk/disk_menu.py:300–355  ·  view source on GitHub ↗
(preset: list[BDevice] | None = [])

Source from the content-addressed store, hash-verified

298
299
300async def select_devices(preset: list[BDevice] | None = []) -> list[BDevice] | None:
301 def _preview_device_selection(item: MenuItem) -> str | None:
302 device: _DeviceInfo = item.value # type: ignore[assignment]
303 dev = device_handler.get_device(device.path)
304
305 if dev and dev.partition_infos:
306 return as_table(dev.partition_infos)
307 return None
308
309 if preset is None:
310 preset = []
311
312 devices = device_handler.devices
313
314 if len(devices) < 1:
315 await Notify(tr('No disks were detected. A disk is required to be able to install Arch Linux')).show()
316 return None
317
318 items = [
319 MenuItem(
320 str(d.device_info.path),
321 d.device_info,
322 preview_action=_preview_device_selection,
323 )
324 for d in devices
325 ]
326
327 presets = [p.device_info for p in preset]
328
329 group = MenuItemGroup(items)
330 group.set_selected_by_value(presets)
331
332 result = await Table[_DeviceInfo](
333 header=tr('Select disks for the installation'),
334 group=group,
335 presets=presets,
336 allow_skip=True,
337 multi=True,
338 preview_location='bottom',
339 preview_header=tr('Partitions'),
340 ).show()
341
342 match result.type_:
343 case ResultType.Reset:
344 return None
345 case ResultType.Skip:
346 return None
347 case ResultType.Selection:
348 selected_device_info = result.get_values()
349 selected_devices = []
350
351 for device in devices:
352 if device.device_info in selected_device_info:
353 selected_devices.append(device)
354
355 return selected_devices
356
357

Callers 1

select_disk_configFunction · 0.85

Calls 7

set_selected_by_valueMethod · 0.95
NotifyClass · 0.90
trFunction · 0.90
MenuItemClass · 0.90
MenuItemGroupClass · 0.90
get_valuesMethod · 0.80
showMethod · 0.45

Tested by

no test coverage detected