o
    b$                  	   @   s  d dl Z d dlZd dlZd dlZd dlZd dlZedd edd edd 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Zzee W n eefyg   ede  ed Y nw 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S )    NGdkz3.0GtkLibvirtGLibz1.0)r   )BuildConfig)cli)log   )CLITestOptionsClassz3.31.3z#pygobject3 %s or later is required.c                 C   sV   t jd| |dd ddlm} | }td}tdd| i }|j|||dd	d
 d S )Nz"Error starting virt-manager: %s
%sT)exc_infor   )vmmErrorDialogz&Error starting Virtual Machine Managerz1Error starting Virtual Machine Manager: %(error)serrorF)detailstitlemodaldebug)r   r   r   r   get_instance_show_err)msgr   r   errr   errmsg r   2/usr/share/virt-manager/virtManager/virtmanager.py_show_startup_error%   s   

r   c                 C   s   t j}zA|d d | d d   t _ddlm} t jdd  } |dddr.td t d |  |t d< ddl	m
} |}W |t _| S |t _w )	Nr   r   )r         z!gtk3 3.22.0 or later is required.r   config)sysargvgi.repositoryr   check_versionprintexitinitglobals r   )	leftoversorigargvr   r   ignorer   r   r   _import_gtk4   s   

r*   c                 C   s:   ddl }ddl}|d}|std||d| g dS )zk
    If running from the virt-manager.git srcdir, compile our gsettings
    schema and use it directly
    r   Nzglib-compile-schemaszCYou must install glib-compile-schemas to run virt-manager from git.z--strict)
subprocessshutilwhichRuntimeError
check_call)	schemadirr+   r,   exer   r   r   _setup_gsettings_pathR   s   
r2   c                   C   s"   t  dkrt d t   d S )Nr   )osfork_exitsetsidr   r   r   r   drop_ttya   s   
r7   c               	   C   s\   t ddD ]} zt|  W q ty   Y qw ttjtj tdd tdd d S )Nr      r   )ranger3   closeOSErroropendevnullO_RDWRdup2)fdr   r   r   
drop_stdiol   s   rA   c                  C   s   d} t jd| d}|jddtjd |jd d |jdd	d
gt jd |jddg t jd |jdddddd |jddddd |jdddd |jdddd |jdd d!d" |jd#d d$d" |jd%d d&d" |jd'd d(d" |jd)dd*d | S )+Nz;Also accepts standard GTK arguments like --g-fatal-warningszvirt-manager [options])usageepilogz	--versionversion)actionrD   )domainz--trace-libvirtallmainloop)choiceshelpz--test-optionsappend)rE   defaultrJ   z-cz	--connecturizConnect to hypervisor at URIURI)destrJ   metavarz--debug
store_truez0Print debug output to stdout (implies --no-fork)F)rE   rJ   rL   z	--no-forkz%Don't fork into background on startup)rE   rJ   z--show-domain-creatorzShow 'New VM' wizardz--show-domain-editorzNAME|ID|UUIDzShow domain details window)rP   rJ   z--show-domain-performancezShow domain performance windowz--show-domain-consolez$Show domain graphical console windowz--show-domain-deletezShow domain delete windowz--show-host-summaryzShow connection details window)argparseArgumentParseradd_argumentr   rD   set_defaultsSUPPRESSparse_known_args)rC   parserr   r   r   parse_commandliney   sV   
rY   c                     sp  t  \} }td| jdd tdtj tdtj	t
 tjr'ttj | jrDtd ddlm} dd l}|j|| jd	kd d
 t| j}tjtjd< d}| jsd| jsdt  d}ttjtj t|}t d }|rrt  |rztd| tdtj d tj d tj d  td|! |" |#  ddl$m%} |j&'t| |j() }|*tj+ ddl,m-}	 |j./d d }
d }| j0r|	j1}
n.| j2r|	j3}
n'| j4r|	j5}
| j4}n| j6r|	j7}
| j6}n| j8r|	j9}
| j8}n	| j:r|	j;}
| j:}|
r| j<d u rtdd}|
r
d}t=>d  t=?  |	'  ddl@mA}  fdd}|B|jCtjD|d   E| j<|
|| d S )Nzvirt-managerFzvirt-manager version: %szvirtManager import: %szLibvirt tracing requestedr   )module_tracer   rH   )rH   regexGSETTINGS_SCHEMA_DIRTr   z#Unhandled command line options '%s'zPyGObject version: %d.%d.%dr8   zGTK version: %d.%d.%dr   )	vmmEnginez,can't use --show-* options without --connect)GLibc                    s   | }t d    d S )N0Received KeyboardInterrupt. Exiting application.)r   r   exit_app)	user_datar)   enginer   r   _sigint_handler  s   
zmain.<locals>._sigint_handler)FrY   r   setupLoggingr   r   r   rD   r3   pathdirname__file__running_from_srcdirr2   gsettings_dirtrace_libvirtlibrZ   libvirtwrap_moduler	   test_optionsenvironno_forkr7   signalSIGHUPSIG_IGNr*   r%   rA   r.   giversion_infoget_major_versionget_minor_versionget_micro_versionr&   r   	vmmConfigr   	IconThemeget_defaultprepend_search_pathicon_dirrc   r]   Windowset_default_icon_nameshow_domain_creatorCLI_SHOW_DOMAIN_CREATORshow_host_summaryCLI_SHOW_HOST_SUMMARYshow_domain_editorCLI_SHOW_DOMAIN_EDITORshow_domain_performanceCLI_SHOW_DOMAIN_PERFORMANCEshow_domain_consoleCLI_SHOW_DOMAIN_CONSOLEshow_domain_deleteCLI_SHOW_DOMAIN_DELETErM   r   r$   event_registerr    r^   unix_signal_addPRIORITY_DEFAULTSIGINTstart)optionsr'   rZ   rm   CLITestOptionsdo_drop_stdior   r   
icon_themer]   show_windowrF   skip_autostartr^   rd   r   rb   r   main   s   






r   c               
   C   st   zt   W d S  ty   td Y d S  ty9 }  zdt vr" tt| dt	
  W Y d } ~ d S d } ~ ww )Nr_   r   r&   )r   KeyboardInterruptr   r   	Exceptionr%   r   strjoin	traceback
format_exc)run_er   r   r   runcli  s   
&r   )rR   r3   rr   r   r   ru   require_versionr    r   virtinstr   r   r   lib.testmockr	   _PYGOBJECT_VERSIONr!   
ValueErrorAttributeErrorr"   r#   r   r*   r2   r7   rA   rY   r   r   r   r   r   r   <module>   s:   )k