Mini Shell

Direktori : /lib/python3.6/site-packages/blivet/devices/__pycache__/
Upload File :
Current File : //lib/python3.6/site-packages/blivet/devices/__pycache__/raid.cpython-36.pyc

3

{)c��@sdddlZddlmZddlmZddlmZmZddlm	Z	ddl
mZee	�Gd	d
�d
e��ZdS)�N)�
add_metaclass�)�errors)�_�P_)�SynchronizedABCMeta�)�
StorageDevicec@s<eZdZdZejdd�dd�Zddd�Zd	d
�Zdd�Z	d
S)�
RaidDevicez7 Metaclass for devices that support RAID in some form. cCsgS)N�)�srr�/usr/lib/python3.6/raid.py�<lambda>%szRaidDevice.<lambda>z%A list of the member device instances)�docrcCsBt|j�|}|jr>||jkr>tdd|j�}|||jd�SdS)a� Returns an error message if the RAID level is invalid for this
            device, otherwise None.

            :param level: a RAID level
            :type level: :class:`~.devicelibs.raid.RAIDLevel`
            :param int parent_diff: number of parents being removed or added
            :returns: an error message if the RAID level is invalid, else None
            :rtype: str or NoneType

            The default number of parents being removed or added is 0,
            indicating that the level is to be checked against the current
            number of parents. The number is positive for added parents,
            negative for removed parents.
        zTRAID level %(raid_level)s requires that device have at least %(min_members)d member.zURAID level %(raid_level)s requires that device have at least %(min_members)d members.)�
raid_level�min_membersN)�len�members�existsrr)�self�levelZparent_diffZnum_members�messagerrr
�_validate_raid_level(szRaidDevice._validate_raid_levelcCsny|j|�}WnDtjk
rRtd�}djdd�|D��}t|||d���YnX|j|�}|rjt|��|S)a� Obtains a valid level for the allowed set of levels.

            :param value: a RAID level
            :type value: a valid RAID level descriptor
            :param levels: a list of valid levels
            :type levels: :class:`~.devicelibs.raid.RAIDLevels`
            :returns: a valid RAID level
            :rtype: :class:`~.devicelibs.raid.RAIDLevel`
            :raises ValueError: if invalid RAID level
        zKRAID level %(raid_level)s is an invalid value. Must be one of (%(levels)s).z, cSsg|]}t|��qSr)�str)�.0�lrrr
�
<listcomp>Psz)RaidDevice._get_level.<locals>.<listcomp>)r�levels)rr�	RaidErrorr�join�
ValueErrorr)r�valuerrr�choicesZ	error_msgrrr
�
_get_levelAs
zRaidDevice._get_levelcCsLy(|j�r&|jr&|jjr&td�|SWntjk
r>YnX|j|d�S)ax Check if it is possible to remove a parent from this device.

            :param level: a RAID level
            :type level: :class:`~.devicelibs.raid.RAIDLevel`
            :param parent: the parent to be removed
            :type parent: :class:`~.devices.StorageDevice`
            :returns: An error message if there is a problem
            :rtype: str or None
        z-Cannot remove a member from existing %s arrayr���)Zhas_redundancyr�formatrrrr)rr�parentrrr
�_validate_parent_removalYs
z#RaidDevice._validate_parent_removalN)r)
�__name__�
__module__�__qualname__�__doc__�abc�abstractpropertyrrr#r'rrrr
r
!s

r
)
r,Zsixr�rZi18nrrZthreadsrZstorager	r
rrrr
�<module>s