grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026a B€:f‡’ã@s*ddlmZddlZddlZddlmZz ddlZWne yNddlZYn0ddl m Z ddl m Z mZmZmZddlZGdd„dejƒZGdd „d ejƒZGd d „d eeeƒƒZed d d�eddd�eddd�eddd�eddd�eddd�eddd�eddd�Gdd„deƒƒƒƒƒƒƒƒƒZe d¡Zed d d�edd d�ed!d"d�edd#d�edd$d�ed%d&d�eddd�ed'd(d�eddd�Gd)d*„d*eƒƒƒƒƒƒƒƒƒƒZed d d�edd+d�edd,d�ed-d.d�eddd�Gd/d0„d0eƒƒƒƒƒƒZed d d�edd1d�ed2d3d�ed4d5d�eddd�ed-d6d�eddd�edd7d�ed8d9d�ed:d;d�Gdd�ed2d3d�ed4d?d�ed'd@d�eddAd�eddd�GdBdC„dCeƒƒƒƒƒƒƒƒZed d d�eddDd�edEdFd�eddd�GdGdH„dHeƒƒƒƒƒZed d d�edIdJd�edKdLd�edMdNd�edOdPd�edQdRd�edSdTd�edUdVd�edWdXd�edYdZd�edd[d�Gd\d]„d]eƒƒƒƒƒƒƒƒƒƒƒƒZed^d_d�ed`dad�edbd$d�Gdcdd„ddeƒƒƒƒZ ed ded�eddfd�edgdhd�edidjd�eddd�edd[d�Gdkdl„dleƒƒƒƒƒƒƒZ!ed ded�edmdnd�edodpd�edqdrd�edsdtd�edudvd�eddd�edd[d�Gdwdx„dxeƒƒƒƒƒƒƒƒƒZ"Gdydz„dzeƒZ#ed d d�edd d�ed{d|d�edd}d�eddd�eddd�Gd~d„deƒƒƒƒƒƒƒZ$e%d€k�r&dS)�é)ÚABCMetaN)Úwith_metaclass)Ú WHITESPACE)Ú get_classÚdefault_propertyÚ ErrorNumberÚLsmErrorc@seZdZdZdd„ZdS)Ú DataEncoderz? Custom json encoder for objects derived form ILsmData cCs,t|tƒs tdtt|ƒƒƒ‚n| ¡SdS)Nzincorrect class type:)Ú isinstanceÚIDataÚ ValueErrorÚstrÚtypeÚ_to_dict)ÚselfZmy_class©rú//usr/lib64/python3.9/site-packages/lsm/_data.pyÚdefault s zDataEncoder.defaultN)Ú__name__Ú __module__Ú __qualname__Ú__doc__rrrrrr sr c@sBeZdZdZedd„ƒZedd„ƒZedd„ƒZej fdd „Z d S) Ú DataDecoderz? Custom json decoder for objects derived from ILsmData cCs<i}d|vrt |¡}n | ¡D]\}}t |¡||<q |S)z( Processes a dictionary Úclass)r Ú_factoryÚitemsrÚ_DataDecoder__decode)ÚdÚrcÚkÚvrrrZ__process_dict,s  zDataDecoder.__process_dictcCs`g}t|ƒD]N\}}t|ƒtur2| t |¡¡q t|ƒturP| t |¡¡q | |¡q |S)z" Processes a list )Ú enumeraterÚlistÚappendrÚ_DataDecoder__process_listÚdictÚ_DataDecoder__process_dict)ÚlrÚelemÚvaluerrrZ__process_list;s   zDataDecoder.__process_listcCs4t|ƒturt |¡St|ƒtur,t |¡S|SdS)z) Decodes the parsed json N)rr%rr&r"r$)ÚerrrZ__decodeJs     zDataDecoder.__decodecCst t |¡¡S©N)rrÚjsonÚloads)rZ json_stringZ_wrrrÚdecodeVszDataDecoder.decodeN) rrrrÚ staticmethodr&r$rrÚmatchr.rrrrr's   rc@s,eZdZdZdd„Zedd„ƒZdd„ZdS) r z? Base class functionality of serializable classes. cCsXd|jji}t|j ¡ƒD]8\}}t|tƒrB| ¡||dd…<q|||dd…<q|S)z5 Represent the class as a dictionary réN)Ú __class__rr"Ú__dict__rr r r)rrrr rrrr`s   zIData._to_dictcCsŒd|vrˆ|d}|d=ttd|ƒ}t| ¡ƒD]F\}}t|tƒrfd|vrft | |¡¡|d|<q2| |¡|d|<q2|fi|¤ŽSdS)zŒ Factory for creating the appropriate class given a dictionary. This only works for objects that inherit from IData rÚ.Ú_N) rrr"rr r%r rÚpop)rÚ class_nameÚcrr rrrrpszIData._factorycCs t| ¡ƒS)z7 Used for human string representation. )r r©rrrrÚ__str__„sz IData.__str__N)rrrrrr/rr:rrrrr Zs  r ÚidzUnique identifier)ÚdocÚnamezDisk name (aka. vendor)Z disk_typezEnumerated type of diskÚ block_sizezSize of each blockÚ num_of_blockszTotal number of blocksÚstatuszEnumerated statusÚ system_idzSystem identifierZ plugin_datazPrivate plugin datac@sXeZdZdZddgZdZdZdZdZdZ dZ d Z d Z d Z d Zd ZdZdZdZdZdZdZdZd ZdZdZdZdZdZdZdZdZdZ dZ!dZ"dZ#dZ$dZ%dZ&dZ'dZ(dZ)dZ*dZ+d Z,d Z-d Z.d Z/d Z0dZ1dZ2dZ3dZ4dZ5d Z6dZ7dZ8dZ9dZ:dZ;dZd d!d!e"e&fd"d#„Z?e@d$d%„ƒZAe@d&d'„ƒZBe@d(d)„ƒZCe@d*d+„ƒZDe@d,d-„ƒZEd.d/„ZFd S)0ÚDiskz Represents a disk. r;rAéÿÿÿÿrr1ééééééé é3é4é5é6ééé é@é€éééiéé éþÿÿÿé é NÚc Csj||_||_||_||_||_||_||_||_| rNt  | ¡sNt t j d| ƒ‚| |_ | |_| |_| |_dS©Nz^Incorrect format of VPD 0x83 NAA(3) string: '%s', expecting 32 or 16 lower case hex characters)Ú_idÚ_nameÚ _disk_typeÚ _block_sizeÚ_num_of_blocksÚ_statusÚ _system_idÚ _plugin_dataÚVolumeÚ vpd83_verifyrrÚINVALID_ARGUMENTÚ_vpd83Ú _locationÚ_rpmÚ _link_type) rr^r_r`rarbrcrdrerirjrkrlrrrÚ__init__ðs& ÿþz Disk.__init__cCs |j|jS)z% Disk size in bytes. ©r>r?r9rrrÚ size_bytesszDisk.size_bytescCs|jdkrttjdƒ‚|jS)zú String. SCSI VPD83 ID. New in version 1.3. Only available for DAS(direct attached storage) systems. The VPD83 ID could be used in 'lsm.SCSI.disk_paths_of_vpd83()' when physical disk is exposed to OS directly. r\z5Disk.vpd83 is not supported by current disk or plugin)rirrÚ NO_SUPPORTr9rrrÚvpd83s  þz Disk.vpd83cCs|jdkrttjdƒ‚|jS)zP String. Disk location in storage topology. New in version 1.3. r\z:Disk.location property is not supported by this plugin yet)rjrrrpr9rrrÚlocation%s  þz Disk.locationcCs|jtjkrttjdƒ‚|jS)a» Integer. New in version 1.3. Disk rotation speed - revolutions per minute(RPM): -1 (LSM_DISK_RPM_UNKNOWN): Unknown RPM 0 (LSM_DISK_RPM_NON_ROTATING_MEDIUM): Non-rotating medium (e.g., SSD) 1 (LSM_DISK_RPM_ROTATING_UNKNOWN_SPEED): Rotational disk with unknown speed >1: Normal rotational disk (e.g., HDD) z,Disk.rpm is not supported by this plugin yet)rkrBÚRPM_NO_SUPPORTrrrpr9rrrÚrpm1s  ÿzDisk.rpmcCs|jtjkrttjdƒ‚|jS)a Integer. New in version 1.3. Link type, possible values are: lsm.Disk.LINK_TYPE_UNKNOWN Failed to detect link type lsm.Disk.LINK_TYPE_FC Fibre Channel lsm.Disk.LINK_TYPE_SSA Serial Storage Architecture, Old IBM tech. lsm.Disk.LINK_TYPE_SBP Serial Bus Protocol, used by IEEE 1394. lsm.Disk.LINK_TYPE_SRP SCSI RDMA Protocol lsm.Disk.LINK_TYPE_ISCSI Internet Small Computer System Interface lsm.Disk.LINK_TYPE_SAS Serial Attached SCSI lsm.Disk.LINK_TYPE_ADT Automation/Drive Interface Transport Protocol, often used by Tape. lsm.Disk.LINK_TYPE_ATA PATA/IDE or SATA. lsm.Disk.LINK_TYPE_USB USB disk. lsm.Disk.LINK_TYPE_SOP SCSI over PCI-E lsm.Disk.LINK_TYPE_PCIE PCI-E, e.g. NVMe z2Disk.link_type is not supported by this plugin yet)rlrBÚLINK_TYPE_NO_SUPPORTrrrpr9rrrÚ link_typeDs  þzDisk.link_typecCs|jSr+©r=r9rrrr:jsz Disk.__str__)GrrrrÚSUPPORTED_SEARCH_KEYSZBLOCK_COUNT_NOT_FOUNDZBLOCK_SIZE_NOT_FOUNDÚ TYPE_UNKNOWNÚ TYPE_OTHERZTYPE_ATAZ TYPE_SATAZTYPE_SASÚTYPE_FCZTYPE_SOPZ TYPE_SCSIZTYPE_LUNZ TYPE_NL_SASZTYPE_HDDZTYPE_SSDZ TYPE_HYBRIDÚSTATUS_UNKNOWNÚ STATUS_OKÚ STATUS_OTHERÚSTATUS_PREDICTIVE_FAILUREÚ STATUS_ERRORZSTATUS_REMOVEDZSTATUS_STARTINGZSTATUS_STOPPINGÚSTATUS_STOPPEDÚSTATUS_INITIALIZINGZSTATUS_MAINTENANCE_MODEZSTATUS_SPARE_DISKZSTATUS_RECONSTRUCTZ STATUS_FREErsZ RPM_UNKNOWNZRPM_NON_ROTATING_MEDIUMZRPM_ROTATING_UNKNOWN_SPEEDruZLINK_TYPE_UNKNOWNZ LINK_TYPE_FCZ LINK_TYPE_SSAZ LINK_TYPE_SBPZ LINK_TYPE_SRPZLINK_TYPE_ISCSIZ LINK_TYPE_SASZ LINK_TYPE_ADTZ LINK_TYPE_ATAZ LINK_TYPE_USBZ LINK_TYPE_SOPZLINK_TYPE_PCIEZLED_STATUS_UNKNOWNZLED_STATUS_IDENT_ONZLED_STATUS_IDENT_OFFZLED_STATUS_IDENT_UNKNOWNZLED_STATUS_FAULT_ONZLED_STATUS_FAULT_OFFZLED_STATUS_FAULT_UNKNOWNZLINK_SPEED_UNKNOWNZHEALTH_STATUS_UNKNOWNZHEALTH_STATUS_FAILZHEALTH_STATUS_WARNZHEALTH_STATUS_GOODrmÚpropertyrorqrrrtrvr:rrrrrB‹sš   ô      %rBz*(?:^6[0-9a-f]{31})|(?:^[235][0-9a-f]{15})$zUser given namerqz"Vital product page 0x83 identifierzVolume block sizezNumber of blocksZ admin_statez$Enabled or disabled by administratorÚpool_idzPool identifierc@s eZdZdZgd¢ZdZdZdZdZdZ dZ dZ dZ dZ d ZdZdZd ZdZdZdZdZd Zd Zd Zd ZdZdZdZdZdZdZdZ d Z!d Z"d Z#d Z$d Z%dZ&dZ'dZ(dZ)dZ*dZ+dZ,dZ-dZ.dZ/dZ0dZ1dZ2dZ3dZ4dZ5dZ6ddd„Z7e8dd„ƒZ9dd„Z:e;dd„ƒZdZAd?ZBd@ZCdAZDdBZEdCZFdDZGdEZHdFZIdGZJdHZKdIZLdJZMdKZNdLZOdMZPdNZQdOZRdPZSdQZTdRZUdSZVdTZWdUdV„ZXdgdXdY„ZYdZd[„ZZd\d]„Z[e\d^d_„ƒZ]dhdadb„Z^efdcdd„Z_dedf„Z`dWS)iÚ Capabilitiesrr1rUrŠr‹rŒéééééééééé!é"é#é$é%é&é'é(é)é*é+é,é-é.é/é0rMrNé7é8é9é:é;rˆr‰é>é?rRéAéBédéeéfégéhéiéjékéménéoépéqéréxéyézé{é|éžéŸé é¡é£é¤é¥é«éÒéÓéÔéÕéÖé×éØéÙéÜéÝéÞéßcCs |jjd dd„|jDƒ¡dœS)Nr\cSsg|] }d|‘qS)z%02xr)Ú.0ÚbrrrÚ /óz)Capabilities._to_dict..)rZcap)r2rrÌÚ_capr9rrrr,sþzCapabilities._to_dictNcCs*|durtt |¡ƒ|_n ttjƒ|_dSr+)Ú bytearrayÚbinasciiZ unhexlifyr%r×Ú_NUM)rr%rrrrm2szCapabilities.__init__cCs| |¡tjkSr+)Úgetr×Ú SUPPORTED©rÚ capabilityrrrÚ supported8szCapabilities.supportedcCs|t|jƒkrtjS|j|Sr+)Úlenr%r×Ú UNSUPPORTEDr+rrrr);szCapabilities.getcCsjtƒ}ttj ¡ƒD]P\}}t|tjƒrt|ƒt kr|ddkrtj |krXtj krnq|||<q|S)zc Return a dict containing all valid capability: integer => string name rr5) r%r"r×r3rr ÚsixZ string_typesrr£Ú_CAP_NUM_BEGINr()Zlsm_cap_to_str_convZc_strZc_intrrrÚ_lsm_cap_to_str_dict@s ÿþþ  z!Capabilities._lsm_cap_to_str_dictFcCsNt ¡}|r|Si}t| ¡ƒD](}|j|tjkr ||vr ||||<q |S)za Returns a hash of the supported capabilities in the form constant, name )r×r2r"Úkeysr%r*)rZall_capZall_capsrrÀrrrÚ get_supportedNszCapabilities.get_supportedcCs||j|<dSr+)r%)rr,r)rrrÚset_szCapabilities.setcCs$tt|jƒƒD]}tj|j|<qdSr+)Úranger.r%r×r*)rrÀrrrÚ enable_allbszCapabilities.enable_all)N)F)arrrr/r*r(r1ZVOLUMESZ VOLUME_CREATEZ VOLUME_RESIZEZVOLUME_REPLICATEZVOLUME_REPLICATE_CLONEZVOLUME_REPLICATE_COPYZVOLUME_REPLICATE_MIRROR_ASYNCZVOLUME_REPLICATE_MIRROR_SYNCZVOLUME_COPY_RANGE_BLOCK_SIZEZVOLUME_COPY_RANGEZVOLUME_COPY_RANGE_CLONEZVOLUME_COPY_RANGE_COPYZ VOLUME_DELETEZ VOLUME_ENABLEZVOLUME_DISABLEZ VOLUME_MASKZ VOLUME_UNMASKZ ACCESS_GROUPSZACCESS_GROUP_CREATE_WWPNZACCESS_GROUP_DELETEZACCESS_GROUP_INITIATOR_ADD_WWPNZACCESS_GROUP_INITIATOR_DELETEZ"VOLUMES_ACCESSIBLE_BY_ACCESS_GROUPZACCESS_GROUPS_GRANTED_TO_VOLUMEZVOLUME_CHILD_DEPENDENCYZVOLUME_CHILD_DEPENDENCY_RMZACCESS_GROUP_CREATE_ISCSI_IQNZ$ACCESS_GROUP_INITIATOR_ADD_ISCSI_IQNZ VOLUME_ISCSI_CHAP_AUTHENTICATIONZVOLUME_RAID_INFOZ VOLUME_THINZ BATTERIESZVOLUME_CACHE_INFOZ!VOLUME_PHYSICAL_DISK_CACHE_UPDATEZ.VOLUME_PHYSICAL_DISK_CACHE_UPDATE_SYSTEM_LEVELZ+VOLUME_WRITE_CACHE_POLICY_UPDATE_WRITE_BACKZ%VOLUME_WRITE_CACHE_POLICY_UPDATE_AUTOZ.VOLUME_WRITE_CACHE_POLICY_UPDATE_WRITE_THROUGHZ,VOLUME_WRITE_CACHE_POLICY_UPDATE_IMPACT_READZ0VOLUME_WRITE_CACHE_POLICY_UPDATE_WB_IMPACT_OTHERZVOLUME_READ_CACHE_POLICY_UPDATEZ,VOLUME_READ_CACHE_POLICY_UPDATE_IMPACT_WRITEZFSZ FS_DELETEZ FS_RESIZEZ FS_CREATEZFS_CLONEZ FILE_CLONEZ FS_SNAPSHOTSZFS_SNAPSHOT_CREATEZFS_SNAPSHOT_DELETEZFS_SNAPSHOT_RESTOREZ"FS_SNAPSHOT_RESTORE_SPECIFIC_FILESZFS_CHILD_DEPENDENCYZFS_CHILD_DEPENDENCY_RMZ%FS_CHILD_DEPENDENCY_RM_SPECIFIC_FILESZ EXPORT_AUTHZEXPORTSZ EXPORT_FSZ EXPORT_REMOVEZEXPORT_CUSTOM_PATHZSYS_READ_CACHE_PCT_UPDATEZSYS_READ_CACHE_PCT_GETZSYS_FW_VERSION_GETZ SYS_MODE_GETZ DISK_LOCATIONZDISK_RPMZDISK_LINK_TYPEZ VOLUME_LEDZPOOLS_QUICK_SEARCHZVOLUMES_QUICK_SEARCHZDISKS_QUICK_SEARCHZACCESS_GROUPS_QUICK_SEARCHZFS_QUICK_SEARCHZNFS_EXPORTS_QUICK_SEARCHZ TARGET_PORTSZTARGET_PORTS_QUICK_SEARCHZDISKSZPOOL_MEMBER_INFOZVOLUME_RAID_CREATEZDISK_VPD83_GETrrmr-r)r/r2r4r5r7rrrrr×»s¼   r×rzCache hardware typezBattery statusc@sNeZdZddgZdZdZdZdZdZdZ dZ dZ dZ d Z d Zd Zdd d„Zd S)ÚBatteryr;rAr1rOrDrErIrPrQrRrSNcCs(||_||_||_||_||_||_dSr+)r^r_Ú_typercrdre)rr^r_r9rcrdrerrrrm~s zBattery.__init__)N)rrrrxryrzZ TYPE_CHEMICALZTYPE_CAPACITORr|r~r}ZSTATUS_DISCHARGINGZSTATUS_CHARGINGZSTATUS_LEARNINGršr€rmrrrrr8gsúr8Ú__main__)&ÚabcrZ_ABCMetarÊr'r0rZ simplejsonr,Ú ImportErrorZ json.decoderrZ lsm._commonrrrrZ JSONEncoderr Z JSONDecoderrÚobjectr rBrÏr�rfr�r›r r¢r«rµr»rÑr×r8rrrrrÚ sÜ      31         ^          "     [         ÿ$D                      &!         p         0-