HEX
Server: Apache
System: Linux nc-ph-4101.simplemoneygoals.com 5.14.0-503.21.1.el9_5.x86_64 #1 SMP PREEMPT_DYNAMIC Sun Jan 12 09:45:05 EST 2025 x86_64
User: dailygoldindex (1004)
PHP: 8.1.33
Disabled: NONE
Upload Files
File: //lib64/python3.9/site-packages/lsm/__pycache__/_data.cpython-39.opt-1.pyc
a

B�:f���@s*ddlmZddlZddlZddlmZzddlZWne	yNddlZYn0ddl
mZddlm
Z
mZmZmZddlZGdd�dej�ZGdd	�d	ej�ZGd
d�deee��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�Gd<d=�d=e�����������Zedd
d�edd>d�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)rZjson_stringZ_wrrr�decodeVszDataDecoder.decodeN)rrrr�staticmethodr&r$rr�matchr.rrrrr's


rc@s,eZdZdZdd�Zedd��Zdd�ZdS)	rz?
    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
rr)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%rr�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:rrrrrZs

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 identifierZplugin_datazPrivate plugin datac@sXeZdZdZddgZdZdZdZdZdZ	dZ
d	Zd
ZdZ
dZd
ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!dZ"dZ#dZ$dZ%dZ&dZ'dZ(dZ)dZ*dZ+d	Z,d
Z-dZ.dZ/d
Z0dZ1dZ2dZ3dZ4dZ5dZ6dZ7dZ8dZ9dZ:dZ;dZ<dZ=dZ>d 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
tj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_LUNZTYPE_NL_SASZTYPE_HDDZTYPE_SSDZTYPE_HYBRID�STATUS_UNKNOWN�	STATUS_OK�STATUS_OTHER�STATUS_PREDICTIVE_FAILURE�STATUS_ERRORZSTATUS_REMOVEDZSTATUS_STARTINGZSTATUS_STOPPING�STATUS_STOPPED�STATUS_INITIALIZINGZSTATUS_MAINTENANCE_MODEZSTATUS_SPARE_DISKZSTATUS_RECONSTRUCTZSTATUS_FREErsZRPM_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 blocksZadmin_statez$Enabled or disabled by administrator�pool_idzPool identifierc@s
eZdZdZgd�ZdZdZdZdZdZ	dZ
dZdZdZ
d	ZdZdZd	ZdZdZdZdZd
ZdZd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��Z<dS)rfz
    Represents a volume.
    �r;rAr�rCrOrDrErFr1rrGrZ�rP�2�<rK�=���Nc

CsX||_||_|r*t�|�s*ttjd|��||_||_||_	||_
||_||_|	|_
dSr])r^r_rfrgrrrhrirarb�_admin_staterd�_pool_idre)
rr^r_rirarbr�rdr�rerrrrm�s 
��zVolume.__init__cCs|j|jS)z'
        Volume size in bytes.
        rnr9rrrro�szVolume.size_bytescCs|jSr+rwr9rrrr:�szVolume.__str__cCs|rt�|�rdSdS)zI
        Returns True if string is valid vpd 0x83 representation
        TF)�_vol_regex_vpd83r0)Zvpdrrrrg�szVolume.vpd83_verify)N)=rrrrrxZREPLICATE_UNKNOWNZREPLICATE_CLONEZREPLICATE_COPYZREPLICATE_MIRROR_SYNCZREPLICATE_MIRROR_ASYNCZPROVISION_UNKNOWNZPROVISION_THINZPROVISION_FULLZPROVISION_DEFAULTZADMIN_STATE_DISABLEDZADMIN_STATE_ENABLEDZRAID_TYPE_UNKNOWNZRAID_TYPE_RAID0ZRAID_TYPE_RAID1ZRAID_TYPE_RAID3ZRAID_TYPE_RAID4ZRAID_TYPE_RAID5ZRAID_TYPE_RAID6ZRAID_TYPE_RAID10ZRAID_TYPE_RAID15ZRAID_TYPE_RAID16ZRAID_TYPE_RAID50ZRAID_TYPE_RAID60ZRAID_TYPE_RAID51ZRAID_TYPE_RAID61ZRAID_TYPE_JBODZRAID_TYPE_MIXEDZRAID_TYPE_OTHERZSTRIP_SIZE_UNKNOWNZDISK_COUNT_UNKNOWNZMIN_IO_SIZE_UNKNOWNZOPT_IO_SIZE_UNKNOWNZVCR_STRIP_SIZE_DEFAULTZWRITE_CACHE_POLICY_UNKNOWNZWRITE_CACHE_POLICY_WRITE_BACKZWRITE_CACHE_POLICY_AUTOZ WRITE_CACHE_POLICY_WRITE_THROUGHZWRITE_CACHE_STATUS_UNKNOWNZWRITE_CACHE_STATUS_WRITE_BACKZ WRITE_CACHE_STATUS_WRITE_THROUGHZREAD_CACHE_POLICY_UNKNOWNZREAD_CACHE_POLICY_ENABLEDZREAD_CACHE_POLICY_DISABLEDZREAD_CACHE_STATUS_UNKNOWNZREAD_CACHE_STATUS_ENABLEDZREAD_CACHE_STATUS_DISABLEDZPHYSICAL_DISK_CACHE_UNKNOWNZPHYSICAL_DISK_CACHE_ENABLEDZPHYSICAL_DISK_CACHE_DISABLEDZ$PHYSICAL_DISK_CACHE_USE_DISK_SETTINGrmr�ror:r/rgrrrrrfssv
�

rfzUser defined system namezEnumerated status of systemZstatus_infoz#Detail status information of systemc@sjeZdZdZdZdZdZdZdZdZ	dZ
d	ZdZdZ
dZddd
�Zedd��Zedd��Zedd��Zd
S)�Systemr1rOrErIrPrQrYrCrNr\c		CsX||_||_||_||_||_||_|dur6tj|_n||_|durNtj	|_
n||_
dSr+)r^r_rc�_status_infore�_fw_versionr��READ_CACHE_PCT_NO_SUPPORT�_read_cache_pct�MODE_NO_SUPPORT�_mode)	rr^r_rcr�rer�r�r�rrrrms	

zSystem.__init__cCs|jdkrttjd��|jS)z�
        String. Firmware version string. New in version 1.3.
        On some system, it might contain multiple version strings, example:
            "Package: 23.32.0-0009, FW: 3.440.05-3712"
        r\z7System.fw_version() is not supported by this plugin yet)r�rrrpr9rrr�
fw_version,s
�zSystem.fw_versioncCs|jtjkrttjd��|jS)aQ
        Integer(enumerated value). System mode. New in version 1.3.
        Only available for HW RAID systems at this time.
        Possible values:
            * lsm.System.MODE_HARDWARE_RAID
                The logical volume(aka, RAIDed virtual disk) can be exposed
                to OS  while hardware RAID card is handling the RAID
                algorithm. Physical disk can not be exposed to OS directly.

            * lsm.System.MODE_HBA
                The physical disks can be exposed to OS directly.
                SCSI enclosure service might be exposed to OS also.
        z/System.mode is not supported by this plugin yet)r�r�r�rrrpr9rrr�mode:s
�zSystem.modecCs|jtjkrttjd��|jS)z�
        Integer. Read cache percentage. New in version 1.3.
        Possible values:
            * 0-100
                The read cache percentage. The write cache percentage will
                then be 100 - read_cache_pct
        z9System.read_cache_pct is not supported by this plugin yet)r�r�r�rrrpr9rrr�read_cache_pctNs	�zSystem.read_cache_pct)Nr\NN)rrrr|r}r��STATUS_DEGRADEDrr~r�ZMODE_UNKNOWNZMODE_HARDWARE_RAIDZMODE_HBAr�ZREAD_CACHE_PCT_UNKNOWNrmr�r�r�r�rrrrr��s.�



r�zUser supplied nameZtotal_spacezTotal space in bytesZ
free_spacezFree space in byteszText explaining statuszPlug-in private dataZelement_typezWhat pool can be used forZunsupported_actionsz"What cannot be done with this poolc@s�eZdZdZddgZdZdZdZdZdZ	dZ
d	Zd
ZdZ
dZdZdZdZdZdZd	Zd
ZdZdZdZdZdZdZdZdZddd�ZdS)�Poolz#
    Pool specific information
    r;rArCrOrErIrPrQrRrVr1rUrWrXi@i�rrDNcCs@||_||_||_||_||_||_||_||_|	|_|
|_	dSr+)
r^r_�
_element_type�_unsupported_actions�_total_space�_free_spacercr�rdre)rr^r_r�r�r�r�rcr�rdrerrrrm�sz
Pool.__init__)N)rrrrrxZTOTAL_SPACE_NOT_FOUNDZFREE_SPACE_NOT_FOUNDZELEMENT_TYPE_POOLZELEMENT_TYPE_VOLUMEZELEMENT_TYPE_FSZELEMENT_TYPE_DELTAZELEMENT_TYPE_VOLUME_FULLZELEMENT_TYPE_VOLUME_THINZELEMENT_TYPE_SYS_RESERVEDZUNSUPPORTED_VOLUME_GROWZUNSUPPORTED_VOLUME_SHRINKr|r}r~r�r�r�ZSTATUS_RECONSTRUCTINGZSTATUS_VERIFYINGr�ZSTATUS_GROWINGZMEMBER_TYPE_UNKNOWNZMEMBER_TYPE_OTHERZMEMBER_TYPE_DISKZMEMBER_TYPE_POOLrmrrrrr�_s:�r�zFile system namezFree space availablez$What pool the file system resides onz	System IDc@seZdZgd�Zddd�ZdS)�
FileSystemr�NcCs.||_||_||_||_||_||_||_dSr+)r^r_r�r�r�rdre)rr^r_r�r�r�rdrerrrrm�szFileSystem.__init__)N)rrrrxrmrrrrr��s	�r�z
Snapshot name�tsz#Time stamp the snapshot was createdc@seZdZddd�ZdS)�
FsSnapshotNcCs ||_||_t|�|_||_dSr+)r^r_�int�_tsre)rr^r_r�rerrrrm�s
zFsSnapshot.__init__)N�rrrrmrrrrr��sr��fs_idzFilesystem that is exportedZexport_pathzExport pathZauthzAuthentication type�rootz!List of hosts with no_root_squash�rwz*List of hosts with Read & Write privileges�roz'List of hosts with Read only privilegesZanonuidzUID for anonymous user idZanongidzGID for anonymous group id�optionsz"String containing advanced optionszPlugin private datac@s&eZdZddgZdZdZddd�ZdS)	�	NfsExportr;r�rCrYNcCsF||_||_||_||_||_||_||_||_|	|_|
|_	||_
dSr+)r^�_fs_id�_export_path�_auth�_root�_rw�_ro�_anonuid�_anongid�_optionsre)rr^r�r�r�r�r�r�r�r�r�rerrrrm�szNfsExport.__init__)N)rrrrxZANON_UID_GID_NAZANON_UID_GID_ERRORrmrrrrr��s

�r�Z	src_blockzSource logical block addressZ
dest_blockz!Destination logical block addressZblock_countc@seZdZdd�ZdS)�
BlockRangecCs||_||_||_dSr+)�
_src_block�_dest_block�_block_count)rr�r�r�rrrrmszBlockRange.__init__Nr�rrrrr�sr�zUnique instance identifierzAccess group name�init_idszList of initiator IDs�	init_typezInitiator typec@sheZdZddgZdZdZdZdZdZdd	d
�Z	e
dd��Ze�
d
ej�Ze
ddd��Ze
ddd��ZdS)�AccessGroupr;rArr1rOrFrHNcCs.||_||_t�|�|_||_||_||_dSr+)r^r_r��_standardize_init_list�	_init_ids�
_init_typerdre)rr^r_r�r�rdrerrrrmszAccessGroup.__init__cCsBg}|D]4}t�|�\}}}|r,|�|�qttjd|��q|S)NzInvalid initiator ID %s)r��initiator_id_verifyr#rrrh)r�r�iZvalidr��init_idrrrr�,s�z"AccessGroup._standardize_init_listzR
        ^(0x|0X)?([0-9A-Fa-f]{2})
        (([\.:\-])?[0-9A-Fa-f]{2}){7}$
        FcCs�|�d�s|�d�s|�d�r<|dus0|tjkr<dtj|fStj�t|��rp|dus^|tjkrpdtjt�|�fS|r�tt	j
d|��dS)a�
        Public method which can be used to verify an initiator id
        :param init_id:
        :param init_type:
        :param raise_exception: Will throw a LsmError INVALID_ARGUMENT if
                                not a valid initiator address
        :return:(Bool, init_type, init_id)  Note: init_id will be returned in
                normalized format if it's a WWPN
        ZiqnZeuiZnaaNTzInitiator id '%s' is invalid)FNN)�
startswithr��INIT_TYPE_ISCSI_IQN�_regex_wwpnr0r
�INIT_TYPE_WWPN�_wwpn_to_lsm_typerrrh)r�r�Zraise_exceptionrrrr�?s&�����zAccessGroup.initiator_id_verifyTcCsjtj�t|��rRt|�}|��}t�dd|�}t�dd|�}d�t�d|��}|S|rft	t
jd|��dS)a�
        Convert provided WWPN string into LSM standard one:

        LSM WWPN format:
            ^(?:[0-9a-f]{2}:){7}[0-9a-f]{2}$
        LSM WWPN Example:
           10:00:00:00:c9:95:2f:de

        Acceptable WWPN format is:
            ^[0x|0X]{0,1}(:?[0-9A-Fa-f]{2}[.-:]{0,1}){7}[0-9A-Fa-f]{2}$
        Acceptable WWPN example:
           10:00:00:00:c9:95:2f:de
           10:00:00:00:C9:95:2F:DE
           10-00-00-00-C9-95-2F-DE
           10-00-00-00-c9-95-2f-de
           10.00.00.00.C9.95.2F.DE
           10.00.00.00.c9.95.2f.de
           0x10000000c9952fde
           0X10000000C9952FDE
           10000000c9952fde
           10000000C9952FDE
        Return the LSM WWPN
        Return None if raise_error is False and not a valid WWPN.
        �0xr\z	[^0-9a-f]�:z..zInvalid WWPN Initiator: %sN)r�r�r0r
�lower�re�sub�join�findallrrrh)ZwwpnZraise_error�srrrr�\s�zAccessGroup._wwpn_to_lsm_type)N)NF)T)rrrrxZINIT_TYPE_UNKNOWNZINIT_TYPE_OTHERr�r�ZINIT_TYPE_ISCSI_WWPN_MIXEDrmr/r�r��compile�Xr�r�r�rrrrr�
s$�

�r�Z	port_typezTarget port typeZservice_addresszTarget port service addressZnetwork_addresszTarget port network addressZphysical_addresszTarget port physical addressZ
physical_namezTarget port physical port namec@s.eZdZddgZdZdZdZdZd
dd	�ZdS)�
TargetPortr;rAr1rOrDrENc		Cs4||_||_||_||_||_||_||_||_dSr+)r^�
_port_type�_service_address�_network_address�_physical_address�_physical_namerdre)	rr^r�r�r�r�r�rdrerrrrm�s	zTargetPort.__init__)N)	rrrrxrzr{Z	TYPE_FCOEZ
TYPE_ISCSIrmrrrrr��s	
�r�c@s�eZdZdZdZdZdZdZdZdZ	dZ
dZd	Zd
Z
dZdZd
ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!dZ"d Z#d!Z$d"Z%d#Z&d$Z'd%Z(d&Z)d'Z*d(Z+d)Z,d*Z-d+Z.d,Z/d-Z0d.Z1d/Z2d0Z3d1Z4d2Z5d3Z6d4Z7d5Z8d6Z9d7Z:d8Z;d9Z<d:Z=d;Z>d<Z?d=Z@d>ZAd?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�
<listcomp>/�z)Capabilities._to_dict.<locals>.<listcomp>)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
|krXtjkrnq|||<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_DISABLEZVOLUME_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_INFOZVOLUME_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_FILESZEXPORT_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
dZdZd	Z
d
ZdZdd
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.decoderrZlsm._commonrrrrZJSONEncoderr	ZJSONDecoderr�objectrrBr�r�rfr�r�r�r�r�r�r�r�r�r8rrrrr�<module>
s�31







 ^









"




[








�$D










	










&!








p







 0-