Mini Shell
3
�Mf� � @ s~ d dl Z e jdd� d dlmZ d dlZddlmZ ddlm Z ddl
mZ d dlZej
d �Zd
dlmZ G dd
� d
e�ZdS )� N�BlockDevz2.0)r � )�errors)�log_method_call)�availabilityZblivet� )�
StorageDevicec @ s� e Zd ZdZdZejgZddd�Zdd� Z d d
� Z
edd� �Zed
d� �Z
ddd�Zddd�Zdd� Zddd�Zddd�Zedd� �ZdS ) �
LoopDevicez A loop device. �loopNFc C s4 |st d��|sd| j }tj| |||d|d� dS )a8
:param name: the device name (generally a device node's basename)
:type name: str
:keyword exists: does this device exist?
:type exists: bool
:keyword size: the device's size
:type size: :class:`~.size.Size`
:keyword parents: a list of parent devices
:type parents: list of :class:`StorageDevice`
:keyword fmt: this device's formatting
:type fmt: :class:`~.formats.DeviceFormat` or a subclass of it
Loop devices always exist.
z$LoopDevice requires a backing devicez tmploop%dT)�fmt�size�exists�parentsN)�
ValueError�idr �__init__)�self�namer r �
sysfs_pathr
r � r �/usr/lib/python3.6/loop.pyr - s
zLoopDevice.__init__c C s
|| _ d S )N)�_name)r �valuer r r � _set_nameG s zLoopDevice._set_namec C sF | j js| jS | jjd�r | jS tjj| j j�}|jd�r@|| _| jS )z Update this device's name. r
)�slave�statusr �
startswith�blockdevr
�
get_loop_name�path)r r r r r �update_nameJ s
zLoopDevice.update_namec C s* | j jo(| jjd�o(tjj| j j�| jkS )Nr
)r r r r r r
r r )r r r r r Z s zLoopDevice.statusc C s | j jS )N)r r )r r r r r ` s zLoopDevice.sizec C s0 t jj| jj�s"tjd| jj ��tj| |d�S )Nz"specified file (%s) does not exist)�orig)�osr r
r r ZDeviceErrorr �
_pre_setup)r r! r r r r# d s zLoopDevice._pre_setupc C s, t | | j|| j| jd� tjj| jj� dS )z Open, or set up, a device. )r! r �controllableN) r r r r$ r r
Zsetupr r )r r! r r r �_setupi s
zLoopDevice._setupc C s t j| � | j� | j� d S )N)r �_post_setupr Zupdate_sysfs_path)r r r r r&