o
    `$!                     @   s6   d dl Z d dlZd dlmZ G dd deZe ZdS )    N)logc                   @   s   e Zd ZdZedd\ZZZZZ	edededede	diZ
d	d
ddddZdddddddddd	ZejdejdejdejdejdejdejdejdiZedd Ze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#d4S )5_LibvirtEnumMapzH
    Helper for mapping libvirt event int values to their API names
          VIR_DOMAIN_EVENT_ID_VIR_DOMAIN_EVENT_ID_AGENT_VIR_NETWORK_EVENT_ID_VIR_STORAGE_POOL_EVENT_ID_VIR_NODE_DEVICE_EVENT_ID_zVIR_DOMAIN_EVENT_[^_]+$z5VIR_CONNECT_DOMAIN_EVENT_AGENT_LIFECYCLE_STATE_[^_]+$zVIR_NETWORK_EVENT_[^_]+$zVIR_STORAGE_POOL_EVENT_[^_]+$zVIR_NODE_DEVICE_EVENT_[^_]+$)VIR_DOMAIN_EVENT_ID_LIFECYCLE#VIR_DOMAIN_EVENT_ID_AGENT_LIFECYCLEVIR_NETWORK_EVENT_ID_LIFECYCLE#VIR_STORAGE_POOL_EVENT_ID_LIFECYCLE"VIR_NODE_DEVICE_EVENT_ID_LIFECYCLEVIR_DOMAIN_EVENT_DEFINED_VIR_DOMAIN_EVENT_UNDEFINED_VIR_DOMAIN_EVENT_STARTED_VIR_DOMAIN_EVENT_SUSPENDED_VIR_DOMAIN_EVENT_RESUMED_VIR_DOMAIN_EVENT_STOPPED_VIR_DOMAIN_EVENT_SHUTDOWN_VIR_DOMAIN_EVENT_PMSUSPENDED_VIR_DOMAIN_EVENT_CRASHED_)	VIR_DOMAIN_EVENT_DEFINEDVIR_DOMAIN_EVENT_UNDEFINEDVIR_DOMAIN_EVENT_STARTEDVIR_DOMAIN_EVENT_SUSPENDEDVIR_DOMAIN_EVENT_RESUMEDVIR_DOMAIN_EVENT_STOPPEDVIR_DOMAIN_EVENT_SHUTDOWNVIR_DOMAIN_EVENT_PMSUSPENDEDVIR_DOMAIN_EVENT_CRASHEDstate_runningstate_shutoffstate_pausedc                 C   s   | t jkr	tdS | t jkrtdS | t jkrtdS | t jkr*|r&tdS tdS | t jkr3tdS | t jkr<tdS t	d|  td	S )
NRunningPausedzShutting DownSavedShutoffCrashed	Suspendedz&Unknown status %s, returning 'Unknown'Unknown)
libvirtVIR_DOMAIN_RUNNING_VIR_DOMAIN_PAUSEDVIR_DOMAIN_SHUTDOWNVIR_DOMAIN_SHUTOFFVIR_DOMAIN_CRASHEDVIR_DOMAIN_PMSUSPENDEDr   debug)statushas_managed_save r7   9/usr/share/virt-manager/virtManager/lib/libvirtenummap.pypretty_run_statusB   s$   





z!_LibvirtEnumMap.pretty_run_statusc                 C   s  dd }t j|ddtd|ddtd|d	d
td|ddtd|ddtd|ddtd|ddtd|ddtd|ddtdi	t j|ddtd|d dtd!|d"d
td#|d$dtd%|d&dtd'|d(dtd)|d*dtd|d+dtd,|d-dtd.|d/d0tdi
t j|d1dtdit j|d2dtd3|d4dtd5|d6d
td|d7dtd|d8dtd9|d:dtd;|d<dtdit j|d=dtd>ii}|| o||  |S )?Nc                 S   s   t td|  |S )NVIR_DOMAIN_)getattrr,   )xyr7   r7   r8   keyZ      z1_LibvirtEnumMap.pretty_status_reason.<locals>.keyRUNNING_BOOTEDr   BootedRUNNING_MIGRATED   MigratedRUNNING_RESTORED   RestoredRUNNING_FROM_SNAPSHOT   zFrom snapshotRUNNING_UNPAUSED   UnpausedRUNNING_MIGRATION_CANCELEDr   zMigration canceledRUNNING_SAVE_CANCELED   zSave canceledRUNNING_WAKEUP   zEvent wakeupRUNNING_CRASHED	   r)   PAUSED_USERUserPAUSED_MIGRATION	MigratingPAUSED_SAVESavingPAUSED_DUMPDumpingPAUSED_IOERRORz	I/O errorPAUSED_WATCHDOGWatchdogPAUSED_FROM_SNAPSHOTPAUSED_SHUTTING_DOWNzShutting downPAUSED_SNAPSHOTzCreating snapshotPAUSED_CRASHED
   SHUTDOWN_USERSHUTOFF_SHUTDOWNz	Shut DownSHUTOFF_DESTROYED	DestroyedSHUTOFF_CRASHEDSHUTOFF_MIGRATEDSHUTOFF_SAVEDr'   SHUTOFF_FAILEDFailedSHUTOFF_FROM_SNAPSHOTCRASHED_PANICKEDPanicked)r,   r-   r.   r/   r0   r1   r2   get)r5   reasonr>   reasonsr7   r7   r8   pretty_status_reasonX   sR   	(z$_LibvirtEnumMap.pretty_status_reasonc                 C   s
   i | _ d S N)_mapping)selfr7   r7   r8   __init__   s   
z_LibvirtEnumMap.__init__c              	      st   i } fddt tD D ]*}tt|}t|tur#td || q||v r3td || |  q|||< q|S )Nc                    s   g | ]
}t  |r|qS r7   )rematch).0aregexr7   r8   
<listcomp>   s    z-_LibvirtEnumMap._make_map.<locals>.<listcomp>z/libvirt regex=%s key=%s val=%s isn't an integerz;libvirt regex=%s key=%s val=%s is already in dict as key=%s)dirr,   r;   typeintr   r4   )rv   r}   retr>   valr7   r|   r8   	_make_map   s   

z_LibvirtEnumMap._make_mapc                 C   s0   |d u ri S || j vr| || j |< | j | S rt   )ru   r   )rv   r>   r}   r7   r7   r8   _get_map   s
   

z_LibvirtEnumMap._get_mapc                 C   s   t |}t |}t |}| || j| }|rI||vr!tt|}|| }| || j|}	||	v rI|	| }| || j|}
||
v rI|
| }|||fS rt   )strr   _EVENT_PREFIXnextiter_DETAIL1_PREFIXrp   _DETAIL2_PREFIX)rv   apieventdetail1detail2eventstr
detail1str
detail2streventmap
detail1map
detail2mapr7   r7   r8   
_make_strs   s&   


z_LibvirtEnumMap._make_strsc                 C   s"   |  |d||\}}}d||f S )Nr   zstate=%s reason=%s)r   )rv   r   r   r   ignored1strd2strr7   r7   r8   
_state_str   s   
z_LibvirtEnumMap._state_strc                 C      |  | j||S rt   )r   DOMAIN_EVENTrv   r   r   r7   r7   r8   domain_lifecycle_str   r?   z$_LibvirtEnumMap.domain_lifecycle_strc                 C   r   rt   )r   NETWORK_EVENTr   r7   r7   r8   network_lifecycle_str   r?   z%_LibvirtEnumMap.network_lifecycle_strc                 C   r   rt   )r   STORAGE_EVENTr   r7   r7   r8   storage_lifecycle_str   r?   z%_LibvirtEnumMap.storage_lifecycle_strc                 C   r   rt   )r   NODEDEV_EVENTr   r7   r7   r8   nodedev_lifecycle_str   r?   z%_LibvirtEnumMap.nodedev_lifecycle_strc                 C   r   rt   )r   DOMAIN_AGENT_EVENTr   r7   r7   r8   domain_agent_lifecycle_str   r?   z*_LibvirtEnumMap.domain_agent_lifecycle_strN)$__name__
__module____qualname____doc__ranger   r   r   r   r   r   r   r   r,   VIR_DOMAIN_BLOCKEDr2   r/   r-   r0   r1   VIR_DOMAIN_NOSTATEr3   VM_STATUS_ICONSstaticmethodr9   rs   rw   r   r   r   r   r   r   r   r   r   r7   r7   r7   r8   r      sj    



-r   )rx   r,   virtinstr   objectr   LibvirtEnumMapr7   r7   r7   r8   <module>   s    
: