a c8h3@sDddlZddlZddlZddlmZmZddZddZdZdZ d Z d Z d Z d Z d ZdZdZd Zd Zd Zd ZdZdZd Zd Zd ZdZdZd Zd Zd ZdZdZ d Z!d Z"d Z#d Z$dZ%dZ&dZ'dZ(d Z)dZ*dZ+d Z,d Z-d Z.d Z/dZ0dZ1d Z2d Z3d Z4d Z5d Z6dZ7dZ8d Z9d Z:d Z;d ZddZ?ddZ@dd ZAd!d"ZBd#d$ZCdS)%N)PCIUSBc Cs@t}|}g}|dddddD]}|j}||jt|dt|t|d}|dd urvd |d<|d d urd |d <|dkrt |d rt |d |d<|j |d<|j dkrq6t |drq6t |ddkrq6t |ddkrq6n|dkrFt |d}|r| d\|d<|d<t |d}|r| d\|d<|d<n>|dkrt |drjt |d|d<t |drt |d|d<t |d r0t |d dkr0t |dst |dr0t |drt |d}t d |} nt |d}t d!|} | r0| d"|d<| d#|d<| d$|d<| d%|d<||q6|S)&aE Returns list of dictionaries with keys for every device in system (values are provide as example): 'bus' : 'pci' 'driver' : 'pcieport-driver' 'pciType' : '1' 'detached' : '0' 'class' : 'OTHER' 'desc' : 'Intel Corporation|5000 Series Chipset PCI Express x4 Port 2' pciusbblockZccwscsi0)busdriverZpciTypeZdetachedclassZdescr NOTHERr unknownZID_BUSr device partitionZDM_NAMEZMAJOR17PCI_ID:Zprop1Zprop2Z PCI_SUBSYS_IDZprop3Zprop4 ID_VENDOR_ID ID_MODEL_IDZID_PATHZDEVPATHz.*scsi-(\d+):(\d+):(\d+):(\d+)z!.*/(\d+):(\d+):(\d+):(\d+)/block/)pyudevZContextZ list_devicesZmatch_subsystem subsystemr _clasify_pci_type_clasify_class_get_device_desc_get_device_propertyZsys_name device_typesplitresearchgroupappend) contextZdevicesresultrrZ result_item pci_classZ pci_subsyspathmr+@/usr/lib/python3.9/site-packages/up2date_client/hardware_udev.py get_devicessl (                 r-cCs$t}|d|d|dd}|S)z Return dictionaries with keys (values are provided as example): 'system.formfactor': 'unknown' 'system.kernel.version': '2.6.18-128.1.6.el5xen' 'system.kernel.machine': 'i686' 'system.kernel.name': 'Linux' rrr)zsystem.kernel.namezsystem.kernel.versionzsystem.kernel.machine)osuname)r/r'r+r+r,get_computer_infobs r0rZ00Z01Z02Z03Z04Z802346Z05Z06Z07Z08r9CcCs|dkr dSdSdS)z) return 1 if device is PCI, otherwise -1 rrz-1Nr+)rr+r+r,rsrcCs0z|j|WSty*||YS0dS)zS return the property of the given device independent of the implementation version N)Z propertiesgetAttributeError)rZpropr+r+r,rs rcCs<tt|d\}}|j}|tkr$dS|tkrD|tkr8dS|tkrDdSt|d}|rr|}d|vrfdSd|vrrdS|rZ|tkrdS|t kr|t krd S|t krd Sn|t kr|t krd S|tkrd S|tkrd S|tkrdSnz|tkr|tkrdS|tkr|tkrdS|tkr8|tkr(dS|tkrZdSn"|tkrZ|tksV|tkrZdS|dkrt|dst|drt|ddkrdSdSn|dkrdS|dkr|jdkrt|}|dks|dkrdS|dkrd S|d!krdSdStd"|j}|rd#S|dkr d S|d$ks4|d%kr8dSd&S)'a Clasify type of device. Returned value is one of following string: NETWORK, KEYBOARD, MOUSE, VIDEO, USB, IDE, SCSI, RAID, MODEM, SCANNER CAPTURE, AUDIO, FIREWIRE, SOCKET, CDROM, HD, FLOPPY, TAPE, PRINTER, OTHER or None if it is neither PCI nor USB device. Z PCI_CLASSr ZKEYBOARDZMOUSEZ ID_SERIALZkeyboardZmouseZVIDEOrZFIREWIREZIDEZSCSIZRAIDZFLOPPYZMODEMZSCANNERZCAPTUREZAUDIOZSOCKETrZID_CDROMZID_TYPEZcdZCDROMZHDZsoundrZ scsi_devicerrZTAPEz .*/lp\d+$ZPRINTERrrN)_parse_pci_classrrPCI_BASE_CLASS_NETWORKPCI_BASE_CLASS_INPUTPCI_CLASS_INPUT_KEYBOARDPCI_CLASS_INPUT_MOUSElowerPCI_BASE_CLASS_DISPLAYPCI_BASE_CLASS_SERIALPCI_CLASS_SERIAL_USBPCI_CLASS_SERIAL_FIREWIREPCI_BASE_CLASS_STORAGEPCI_CLASS_STORAGE_IDEPCI_CLASS_STORAGE_SCSIPCI_CLASS_STORAGE_RAIDPCI_CLASS_STORAGE_FLOPPYPCI_BASE_CLASS_COMMUNICATIONPCI_CLASS_COMMUNICATION_MODEMPCI_CLASS_INPUT_SCANNERPCI_BASE_CLASS_MULTIMEDIAPCI_CLASS_MULTIMEDIA_VIDEOPCI_CLASS_MULTIMEDIA_AUDIOPCI_BASE_CLASS_BRIDGEPCI_CLASS_BRIDGE_PCMCIAPCI_CLASS_BRIDGE_CARDBUSr _get_scsi_dev_typer"r#sys_path)rZ base_classZ sub_classrZ id_serialZdev_typer*r+r+r,rs              rc CsN|j}d}d}|dkrLt|dd\}}t}d|||||f}n|dkr(t|d}t}|rd||||t|df}n|jd kr|jd krd }n|jd krd }nd}nj|jdkrztd|jd}Wnty(YdS0|}||S)zQ Return SCSI type of device in raw format as presented in /sys/...devpath../type z%s/typer)openrTIOErrorreadlineclose)rfr'r+r+r,rSNs rS)Drr.r"Zhwdatarrr-r0rErGrFrIZPCI_CLASS_STORAGE_IPIrHZPCI_CLASS_STORAGE_OTHERr<ZPCI_CLASS_NETWORK_ETHERNETZPCI_CLASS_NETWORK_TOKEN_RINGZPCI_CLASS_NETWORK_FDDIZPCI_CLASS_NETWORK_ATMZPCI_CLASS_NETWORK_OTHERrAZPCI_CLASS_DISPLAY_VGAZPCI_CLASS_DISPLAY_XGAZPCI_CLASS_DISPLAY_3DZPCI_CLASS_DISPLAY_OTHERrMrNrOZPCI_CLASS_MULTIMEDIA_PHONEZPCI_CLASS_MULTIMEDIA_OTHERrPZPCI_CLASS_BRIDGE_HOSTZPCI_CLASS_BRIDGE_ISAZPCI_CLASS_BRIDGE_EISAZPCI_CLASS_BRIDGE_MCZPCI_CLASS_BRIDGE_PCIrQZPCI_CLASS_BRIDGE_NUBUSrRZPCI_CLASS_BRIDGE_RACEWAYZPCI_CLASS_BRIDGE_OTHERrJZPCI_CLASS_COMMUNICATION_SERIALZ PCI_CLASS_COMMUNICATION_PARALLELZ#PCI_CLASS_COMMUNICATION_MULTISERIALrKZPCI_CLASS_COMMUNICATION_OTHERr=r>ZPCI_CLASS_INPUT_PENr?rLZPCI_CLASS_INPUT_GAMEPORTZPCI_CLASS_INPUT_OTHERrBrDZPCI_CLASS_SERIAL_ACCESSZPCI_CLASS_SERIAL_SSArCZPCI_CLASS_SERIAL_FIBERZPCI_CLASS_SERIAL_SMBUSrrrrr;rSr+r+r+r,sM`"