Source code for pylspci.device
from typing import Dict, List, NamedTuple, Optional, Union
from pylspci.fields import NameWithID, NameWithIDDict, Slot, SlotDict
DeviceDict = Dict[str, Union[
int,
str,
SlotDict,
NameWithIDDict,
List[str],
None,
]]
[docs]class Device(NamedTuple):
"""
Describes a device returned by lspci.
"""
slot: Slot
"""
The device's slot (domain, bus, number and function).
"""
cls: NameWithID
"""
The device's class, with a name and/or an ID.
"""
vendor: NameWithID
"""
The device's vendor, with a name and/or an ID.
"""
device: NameWithID
"""
The device's name and/or ID.
"""
subsystem_vendor: Optional[NameWithID] = None
"""
The device's subsystem vendor, if found, with a name and/or an ID.
"""
subsystem_device: Optional[NameWithID] = None
"""
The device's subsystem name and/or ID, if found.
"""
revision: Optional[int] = None
"""
The device's revision number.
"""
progif: Optional[int] = None
"""
The device's programming interface number.
"""
driver: Optional[str] = None
"""
The device's driver (Linux only).
"""
kernel_modules: List[str] = []
"""
One or more kernel modules that can handle this device (Linux only).
"""
numa_node: Optional[int] = None
"""
NUMA node this device is connected to (Linux only).
"""
iommu_group: Optional[int] = None
"""
IOMMU group that this device is part of (optional, Linux only).
"""
physical_slot: Optional[str] = None
"""
The device's physical slot number (Linux only).
"""
[docs] def as_dict(self) -> DeviceDict:
"""
Serialize this device as a JSON-serializable `dict`.
"""
return {
"slot": self.slot.as_dict(),
"cls": self.cls.as_dict(),
"vendor": self.vendor.as_dict(),
"device": self.device.as_dict(),
"subsystem_vendor": (
self.subsystem_vendor.as_dict()
if self.subsystem_vendor
else None
),
"subsystem_device": (
self.subsystem_device.as_dict()
if self.subsystem_device
else None
),
"revision": self.revision,
"progif": self.progif,
"driver": self.driver,
"kernel_modules": self.kernel_modules,
"numa_node": self.numa_node,
"iommu_group": self.iommu_group,
"physical_slot": self.physical_slot,
}