o
    ïì¿`°3  ã                   @   s|   d dl Z d dlmZ d dlmZ d dlmZ ddlmZ ddlm	Z	 ddl
mZ dd	lmZ dd
lmZ G dd„ deƒZdS )é    N)ÚGtk)Úlog)ÚStoragePoolé   )Úuiutil)ÚvmmAsyncJob)ÚvmmGObjectUI)ÚvmmStoragePool)ÚvmmXMLEditorc                   @   s   e Zd Zdd„ Zdd„ ZdFdd„Zdd	„ Zd
d„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ ZdGdd„Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Zd*d+„ Zd,d-„ Zd.d/„ Zd0d1„ Zd2d3„ Zd4d5„ Zd6d7„ Zd8d9„ Zd:d;„ Zd<d=„ Z d>d?„ Z!d@dA„ Z"dBdC„ Z#dDdE„ Z$dS )HÚvmmCreatePoolc              
   C   s‚   t  | dd¡ || _t| j| j|  d¡|  d¡ƒ| _| j d| j	¡ | j 
| j| j| j| j| j| j| jdœ¡ |  ¡  |  ¡  d S )Nzcreatepool.uizvmm-create-poolzpool-details-alignzpool-detailszxml-requested)Úon_pool_cancel_clickedÚon_vmm_create_pool_delete_eventÚon_pool_finish_clickedÚon_pool_type_changedÚon_pool_source_button_clickedÚon_pool_target_button_clickedÚon_pool_iqn_chk_toggled)r   Ú__init__Úconnr
   ÚbuilderÚtopwinÚwidgetÚ
_xmleditorÚconnectÚ_xmleditor_xml_requested_cbÚconnect_signalsÚcloseÚ_finish_clicked_cbÚ_pool_type_changed_cbÚ_browse_source_cbÚ_browse_target_cbÚ_iqn_toggled_cbÚbind_escape_key_closeÚ_init_ui)Úselfr   © r%   ú1/usr/share/virt-manager/virtManager/createpool.pyr      s(   
þÿ÷zvmmCreatePool.__init__c                 C   s,   t  d¡ |  ¡  | j |¡ | j ¡  d S )NzShowing new pool wizard)r   ÚdebugÚ_reset_stater   Úset_transient_forÚpresent)r$   Úparentr%   r%   r&   Úshow4   s   
zvmmCreatePool.showNc                 C   s   t  d¡ | j ¡  dS )NzClosing new pool wizardr   )r   r'   r   Úhide)r$   Úignore1Úignore2r%   r%   r&   r   :   s   

zvmmCreatePool.closec                 C   s   d | _ | j ¡  d | _d S ©N)r   r   Úcleanup©r$   r%   r%   r&   Ú_cleanup?   s   

zvmmCreatePool._cleanupc                 C   s^   t  tt¡}|  d¡}| |¡ t |d¡ t ¡ D ]}t 	|¡}| 
|d||f g¡ qd S )Nú	pool-typer   z%s: %s)r   Ú	ListStoreÚstrr   Ú	set_modelr   Úinit_combo_text_columnr	   Ú
list_typesÚpretty_typeÚappend)r$   ÚmodelÚ	type_listÚtypÚdescr%   r%   r&   Ú_build_pool_type_listI   s   


þz#vmmCreatePool._build_pool_type_listc                 C   sÄ   |   d¡}t tt¡}| |¡ t |d¡ dD ]	}| ||g¡ q|   d¡}t tt¡}| dtj	j
¡ | |¡ | d¡ |   d¡}t tt¡}| dtj	j
¡ | |¡ | d¡ |  ¡  d S )Núpool-formatr   )Úautoúpool-source-namer   úpool-source-path)r   r   r5   r6   r7   r   r8   r;   Úset_sort_column_idÚSortTypeÚ	ASCENDINGÚset_entry_text_columnr@   )r$   Úformat_listÚformat_modelÚfÚcombor<   Úsource_listÚsource_modelr%   r%   r&   r#   T   s"   







zvmmCreatePool._init_uic                 C   sÊ   | j  ¡  t | j ¡ d¡}|  d¡ |¡ |  d¡ ¡  |  d¡ d¡ |  d¡ 	¡  d¡ |  d¡ d¡ |  d¡ 
d¡ |  d¡ ¡  |  d	¡ d¡ |  d
¡ 
d¡ t |  d¡d¡ |  ¡  d S )NÚpoolú	pool-nameúpool-target-pathÚ rD   úpool-hostnamezpool-iqn-chkFúpool-iqnrA   r   r4   )r   Úreset_stater   Úfind_free_namer   Úget_backendr   Úset_textÚ
grab_focusÚ	get_childÚ
set_activeÚtoggledr   Úset_list_selectionÚ_show_options_by_pool)r$   Údefaultnamer%   r%   r&   r(   l   s   

ÿzvmmCreatePool._reset_statec           	      C   s´   |   ¡ }|  d¡}| ¡  ¡  |  d¡}| ¡  ¡  |tjkr-|  ¡ }dd„ |D ƒ}|}n|tjkrA|  |¡}dd„ |D ƒ}|}nd S |D ]	}| ¡  	|¡ qE|rX| 
d¡ d S d S )NrD   rC   c                 S   ó   g | ]}||g‘qS r%   r%   ©Ú.0Úhr%   r%   r&   Ú
<listcomp>   ó    z8vmmCreatePool._populate_pool_sources.<locals>.<listcomp>c                 S   r`   r%   r%   )rb   Úvr%   r%   r&   rd   ’   re   r   )Ú_get_config_pool_typer   Ú	get_modelÚclearr   Ú	TYPE_SCSIÚ_list_scsi_adaptersÚTYPE_LOGICALÚ_list_pool_sourcesr;   r[   )	r$   ÚpooltyperM   Ú	name_listÚ	host_listÚ
entry_listÚuse_listÚvglistÚer%   r%   r&   Ú_populate_pool_sourcesƒ   s&   




ÿz$vmmCreatePool._populate_pool_sourcesc                 C   s(   | j  d¡}dd„ |D ƒ}dd„ |D ƒS )NÚ	scsi_hostc                 S   s   g | ]}|j j‘qS r%   )ÚxmlobjÚhost)rb   Údevr%   r%   r&   rd   Ÿ   re   z5vmmCreatePool._list_scsi_adapters.<locals>.<listcomp>c                 S   s   g | ]}d | ‘qS )zhost%sr%   ra   r%   r%   r&   rd       re   )r   Úfilter_nodedevs)r$   Ú
scsi_hostsrp   r%   r%   r&   rk      s   z!vmmCreatePool._list_scsi_adaptersc                 C   s<   g }zt  | j ¡ |¡}W |S  ty   t d¡ Y |S w )NzPool enumeration failed)r   Úpool_list_from_sourcesr   rW   Ú	Exceptionr   Ú	exception)r$   Ú	pool_typeÚplistr%   r%   r&   rm   ¢   s   
ÿýýz vmmCreatePool._list_pool_sourcesc                 C   s   |t jt jt jfv rdS dS )NTF)r   ÚTYPE_DIRÚTYPE_FSÚ
TYPE_NETFS)r$   rn   r%   r%   r&   Ú_get_build_default¬   s   þz vmmCreatePool._get_build_defaultc                    s   ‡ fdd„}ˆ   ¡ }| ¡ }|oˆ j ¡  }| ¡ }|o!ˆ j ¡  }| ¡ }| ¡ }| ¡ }	| ¡ }
|j	t
jk}|j	t
jk}|j	t
jt
jt
jt
jfv rMd}|d|ƒ |d|ƒ |d|ƒ |d|ƒ |d|	ƒ |d	|
ƒ ˆ  d
¡ |rvtdƒpytdƒ¡ tdƒ}|	r†tdƒ}n|rŒtdƒ}ˆ  d¡ |¡ ˆ  d¡ d¡ |rªˆ  d¡ | ¡ p¨d¡ ˆ  d¡ |¡ ˆ  d¡ |¡ |
rÊˆ  d	¡ ¡  | ¡ pÈd¡ ˆ  ¡  d S )Nc                    s   ˆ   | d ¡}t ||¡ d S )Nz-label)r   r   Úset_grid_row_visible)ÚbaseÚdo_showr   r2   r%   r&   Úshow_rowµ   s   z5vmmCreatePool._show_options_by_pool.<locals>.show_rowFzpool-targetzpool-sourcerS   rA   rT   rC   zpool-source-name-labelzVolg_roup Name:zSou_rce Name:z_Source Path:z_Source IQN:z_Source Adapter:zpool-source-labelTrQ   rR   zpool-target-buttonzpool-source-button)Ú_make_stub_poolÚsupports_source_pathr   Ú	is_remoteÚsupports_target_pathÚsupports_hostsÚsupports_formatÚsupports_iqnÚsupports_source_nameÚtyper   rl   rj   rƒ   Ú
TYPE_ISCSIÚTYPE_GLUSTERr   Ú	set_labelÚ_rX   Úset_use_underlineÚdefault_target_pathÚset_sensitiverZ   Údefault_source_nameru   )r$   rˆ   rO   ÚsrcÚsrc_bÚtgtÚtgt_brx   ÚfmtÚiqnÚsrc_nameÚis_lvmÚis_scsiÚ	src_labelr%   r2   r&   r^   ´   sZ   ý






ÿ


ÿ
ÿz#vmmCreatePool._show_options_by_poolc                 C   s@   |   |¡}| ¡ r| ¡ sd S |d u r| ¡  ¡ S tj||dS )N©Úcolumn)r   Úget_sensitiveÚget_visibleÚget_textÚstripr   Úget_list_selection)r$   Úwidget_namer¥   r   r%   r%   r&   Ú_get_visible_textñ   s   
zvmmCreatePool._get_visible_textc                 C   ó   t  |  d¡¡S )Nr4   ©r   rª   r   r2   r%   r%   r&   rg   ú   ó   z#vmmCreatePool._get_config_pool_typec                 C   ó
   |   d¡S )NrQ   ©r¬   r2   r%   r%   r&   Ú_get_config_target_pathý   ó   
z%vmmCreatePool._get_config_target_pathc                 C   ó   | j dddS )NrD   r   r¤   r±   r2   r%   r%   r&   Ú_get_config_source_path   ó   z%vmmCreatePool._get_config_source_pathc                 C   r°   )NrS   r±   r2   r%   r%   r&   Ú_get_config_host  r³   zvmmCreatePool._get_config_hostc                 C   r´   )NrC   r   r¤   r±   r2   r%   r%   r&   Ú_get_config_source_name  r¶   z%vmmCreatePool._get_config_source_namec                 C   r­   )NrA   r®   r2   r%   r%   r&   Ú_get_config_format	  r¯   z vmmCreatePool._get_config_formatc                 C   r°   ©NrT   r±   r2   r%   r%   r&   Ú_get_config_iqn  r³   zvmmCreatePool._get_config_iqnc                 C   s(   | j  ¡ }t d|¡ t| j ¡ |dS )NzUsing XML from xmleditor:
%s)Úparsexml)r   Úget_xmlr   r'   r   r   rW   )r$   Úxmlr%   r%   r&   Ú_build_xmlobj_from_xmleditor  s   
z*vmmCreatePool._build_xmlobj_from_xmleditorc                 C   s,   t | j ¡ ƒ}|  ¡ |_|  d¡ ¡ |_|S )NrP   )r   r   rW   rg   r‘   r   r¨   Úname©r$   rO   r%   r%   r&   r‰     s   
zvmmCreatePool._make_stub_poolc           	      C   s†   |   ¡ }|  ¡ }|  ¡ }|  ¡ }|  ¡ }|  ¡ }|  ¡ }||_|r)|j 	¡ }||_
|r.||_|r7| ¡ r7||_|r<||_|rA||_|S r0   )r²   r·   rµ   r¹   r»   r¸   r‰   Útarget_pathÚhostsÚadd_newrÀ   Úsource_pathrŽ   ÚformatrŸ   Úsource_name)	r$   Útargetrx   Úsourcerž   rŸ   rÇ   rO   Úhostobjr%   r%   r&   Ú_build_xmlobj_from_ui  s(   
z#vmmCreatePool._build_xmlobj_from_uic              
   C   sd   z|   ¡ }|r| j ¡ r|  ¡ }|W S  ty1 } z| j tdƒt|ƒ ¡ W Y d }~d S d }~ww )NzError building XML: %s)	rË   r   Úis_xml_selectedr¿   r}   ÚerrÚshow_errr•   r6   )r$   Úcheck_xmleditorrw   rt   r%   r%   r&   Ú_build_xmlobj7  s   &€ÿzvmmCreatePool._build_xmlobjc                 C   s   |  ¡  d S r0   )ÚvalidaterÁ   r%   r%   r&   Ú	_validate@  ó   zvmmCreatePool._validatec                 C   sF   |   ¡  |rtdƒ| }| jj||d d S | jjdd |  ¡  d S )NzError creating pool: %s)ÚdetailsT)Úpollpool)Úreset_finish_cursorr•   rÍ   rÎ   r   Úschedule_priority_tickr   )r$   ÚerrorrÔ   rO   r%   r%   r&   Ú
_finish_cbH  s   
ÿzvmmCreatePool._finish_cbc                 C   s:   |  ¡ }t d¡ |jd||d}| d¡ t d¡ d S )Nz"Starting background pool creation.T)ÚcreateÚmeterÚbuildzPool creation succeeded)Ú	get_meterr   r'   ÚinstallÚsetAutostart)r$   ÚasyncjobrO   rÜ   rÛ   Úpoolobjr%   r%   r&   Ú_async_pool_createS  s
   

z vmmCreatePool._async_pool_createc              
   C   s¤   | j dd}|s
d S z|  |¡ |  |j¡}W n ty3 } z| j tdƒ| ¡W  Y d }~S d }~ww |  ¡  t	| j
||g| j|gtdƒtdƒ| jƒ}| ¡  d S )NT©rÏ   zError validating pool: %szCreating storage pool...z-Creating the storage pool may take a while...)rÐ   rÒ   r„   r‘   r}   rÍ   rÎ   r•   rÖ   r   râ   rÙ   r   Úrun)r$   rO   rÜ   rt   ÚprogWinr%   r%   r&   Ú_finish[  s$   
 €ÿûzvmmCreatePool._finishc                 C   s(   | j dd}| j |r| ¡ pd¡ d S )NFrã   rR   )rÐ   r   Úset_xmlr½   )r$   rš   rw   r%   r%   r&   r   u  s   z)vmmCreatePool._xmleditor_xml_requested_cbc                 C   ó   |   ¡  d S r0   )ræ   ©r$   rš   r%   r%   r&   r   y  rÓ   z vmmCreatePool._finish_clicked_cbc                 C   rè   r0   )r^   ré   r%   r%   r&   r   |  rÓ   z#vmmCreatePool._pool_type_changed_cbc                 C   s>   | j j| jtdƒtjjdd}|r|  d¡ ¡  	|¡ d S d S )NzChoose source pathz/dev©Údialog_typeÚstart_folderrD   )
rÍ   Úbrowse_localr   r•   r   ÚFileChooserActionÚOPENr   rZ   rX   )r$   rš   rÉ   r%   r%   r&   r     s   
ýÿzvmmCreatePool._browse_source_cbc                 C   sV   |   ¡ }d }|rtj |¡}| jj| jtdƒtj	j
|d}|r)|  d¡ |¡ d S d S )NzChoose target directoryrê   rQ   )r²   ÚosÚpathÚdirnamerÍ   rí   r   r•   r   rî   ÚSELECT_FOLDERr   rX   )r$   rš   ÚcurrentÚstartfolderrÈ   r%   r%   r&   r    ‡  s   
ýÿzvmmCreatePool._browse_target_cbc                 C   s   |   d¡ | ¡ ¡ d S rº   )r   r˜   Ú
get_activeré   r%   r%   r&   r!   ”  s   zvmmCreatePool._iqn_toggled_cb)NNr0   )%Ú__name__Ú
__module__Ú__qualname__r   r,   r   r3   r@   r#   r(   ru   rk   rm   r„   r^   r¬   rg   r²   rµ   r·   r¸   r¹   r»   r¿   r‰   rË   rÐ   rÒ   rÙ   râ   ræ   r   r   r   r   r    r!   r%   r%   r%   r&   r      sF    



=		r   )rð   Úgi.repositoryr   Úvirtinstr   r   Úlibr   rà   r   Ú	baseclassr   Úobject.storagepoolr	   Ú	xmleditorr
   r   r%   r%   r%   r&   Ú<module>   s   