%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /lib/python3.9/site-packages/setroubleshoot/__pycache__/
Upload File :
Create Path :
Current File : //lib/python3.9/site-packages/setroubleshoot/__pycache__/util.cpython-39.opt-1.pyc

a

���hI��@s�ddlmZddlmZgd�ZddlZddlZddlZddlm	Z	ddl
Z
ddlmZddl
Z
ddlZddlZddlZddlZddlZddlZddlZddlZddlZddlTddlZddlmZdd	lmZmZdd
lmZddlTdd�Z d
d�Z!dZ"dZ#dZ$e�%d��rdZ$ne�%d��r&dZ$dZ&e�'�Z(e�)d�Z*e�)d�Z+e�)d�Z,e�)d�Z-e�)d�Z.e�)d�Z/da0ej1a2ej3ej4ej1ej5ej6d�Z7dd�Z8dd�Z9dd �Z:d!d"�Z;d#d$�Z<d%d&�Z=d'd(�Z>d)d*�Z?d�d+d,�Z@d-d.�ZAd�d1d2�ZBd�d3d4�ZCd�d6d7�ZDd8d9�ZEd:d;�ZFd<d=�ZGd>d?�ZHdeH_Id@dA�ZJdBdC�ZKdDdE�ZLieL_MdFdG�ZNieN_MzddHlOmPZPeP�ZQWngZQYn0dIdJ�ZRdKdL�ZSdMdN�ZTdOdP�ZUd�dRdS�ZVdTdU�ZWdVdW�ZXdXdY�ZYdZd[�ZZd\d]�Z[d�d^d_�Z\d`da�Z]d�dbdc�Z^ddde�Z_d�dfdg�Z`dhdi�Zad�djdk�Zbdldm�Zcdndo�Zddpdq�Zedrds�Zfdtdu�Zgejhejidv�Zjejk�r`ejhejldv�ZmnejZmemejZne�hd�Zoejhdwdx�ZpGdydz�dzejq�ZrGd{d|�d|ejq�ZsGd}d~�d~�ZtGdd��d�ej�Zue�veu�dS)��)�absolute_import)�range)-�audit_msg_decode�merge_lists�preextend_list�fmt_obj�format_elapsed_time�format_2_column_name_value�	wrap_text�
format_msg�remove_linebreaks�default_text�default_date_text�is_standard_directory�get_standard_directories�get_rpm_nvr_from_header�get_package_nvr_by_name�get_package_nvr_by_file_path�get_rpm_nvr_by_type�get_rpm_nvr_by_scontext�get_rpm_source_package�get_store_root�is_hex�
split_rpm_nvr�
file_types�get_user_home_dir�get_plugin_names�load_plugins�get_os_environment�find_program�get_identity�get_hostname�make_database_filepath�valid_email_address�launch_web_browser_on_url�abstract�	log_debug�get_error_from_socket_exception�!assure_file_ownership_permissions�parse_datetime_offset�DATABASE_MAJOR_VERSION�DATABASE_MINOR_VERSION�database_version_compatible�syslog_trace�	TimeStamp�Retry�PACKAGE_MANAGERN)�SystemMessageBus)�GObject)�*)�
cmp_to_key)�FunctionType�
MethodType)�
get_configcCs||k||kS�N���x�yr9r9�7/usr/lib/python3.9/site-packages/setroubleshoot/util.py�<lambda>_�r>cCs.zt|t�WSty(t|t�YS0dSr8)�
isinstanceZTypeType�	NameError�type��objr9r9r=�is_typebsrE��rpm�dpkg�debz/etc/redhat-releasez	\s*\n+\s*z^[A-Fa-f0-9]+$z<a\s*href="([^"]+)"[^<]*</a>z^([^\s@]+)@([^\s@]+)$z^\s*"([^"]+)"\s*$z\s*\(\s*type\s+([\w-]+)\s*\)\s*)ZCRITICALZERRORZWARNING�INFO�DEBUGcCs&t�t|d����atdur"tjadS)N�level)�
log_levels�getr7�upper�	log_level�syslog�LOG_WARNING)�sectionr9r9r=�log_init�srTcCsttjkrt�tj|�dSr8)rPrQ�	LOG_DEBUG)�msgr9r9r=r&�s
r&cCs*|�d�}|D]}t|�rt�|�qdS)N�
)�split�lenrQ)ZtraceZ	log_lines�liner9r9r=r-�s
r-cCszd}}|�d�}t|�dkr*t|d�}t|�dkrBt|d�}|tkr`td|ttf�dStd|ttf�dSdS)	N�.�r�z=database version %s not compatible with current %d.%d versionFz9database version %s compatible with current %d.%d versionT)rXrY�intr*r&r+)�version�major�minor�
componentsr9r9r=r,�s
r,cCs�|durdSddl}|�|�\}}t|�}|d}||d}|d}||d}|d}||d}|r~d|||||fS|r�d||||fS|r�d|||fSd||S)	Nri�Qi�<z%dd:%dh:%dm:%.3fsz
%dh:%dm:%.3fsz	%dm:%.3fsz%.3fs)�mathZmodfr^)Zelapsed_timerdZfractionZwhole�days�hours�minutes�secondsr9r9r=r�s$rcCst�|�rdSdSdS�NTF)�hex_re�match��strr9r9r=r�s
rcCsj|durdSt�|�}|r&|�d�}n@z.tjddkrB|�d�}nt�|��d�}Wn|}Yn0|S)Nr\rrF�hexzutf-8)�audit_decode_re�search�group�sys�version_info�decode�	bytearray�fromhex)rVrkZdecodedr9r9r=r�s

rcCsH|s|S|s|Si}|D]}d||<q|D]}d||<q*t|���}|S)z2return a list containing the unique members of a+bN)�list�keys)�a�b�d�i�mr9r9r=r�s

rcs^|durg}t|�}||}|dkrZt��rJ|��fdd�t|�D��n|��g|�|S)Nrcsg|]
}���qSr9r9��.0r;��defaultr9r=�
<listcomp>�r?z"preextend_list.<locals>.<listcomp>)rYrE�extendr)Zrequested_lengthZ_listr�Z
cur_lengthZdeltar9r�r=r�srcs�t�tj�r�St�ttf�r:dd�dd��D��dSt�t�rxt����}|��dd��fdd�|D��dSt	��SdS)	N�[� cSsg|]}dt|��qS)z%s�rr~r9r9r=r�r?zfmt_obj.<locals>.<listcomp>�]�{cs$g|]}dt|�t�|�f�qS)z%s=%sr�)r�keyrCr9r=r�
r?�})
r@�six�string_typesrw�tuple�join�dictrx�sortrm)rDrxr9rCr=rs
 r��PcCsvt|�|kr"|d|d�d}n|d|t|�}|rB|��rN||dS|t_d|t_|t_t�|�dSdS)Nrr\r�rW)rY�isspace�text_wrapper�initial_indent�subsequent_indent�width�fill)�name�valueZvalue_indentZ
page_widthr�r9r9r=r	s
r	cCs(d|}|t_|t_|t_t�|�dS)Nr�rW)r�r�r�r�r�)�sr��indent�prefixr9r9r=r
s
r
�cCsD|durd}|��}d|}|t_|t_dt_|dt�|�dS)N�r�r�rWz

)�stripr�r�r�r�r�)�titlerVr�ZindentStringr9r9r=r&srcCs$t�d|���}|durdS|SdS)Nr�r�)�fix_newline_re�subr�)rmZnew_strr9r9r=r1srcCs |durdtd�d}t|�S)N�<ZUnknown�>)�_rm)�valr9r9r=r
9sr
cCs|durt|�S|��Sr8)r
�format)�dater9r9r=r?srcCsL|durdStj�|�}|r(tj�|�s,dStjdurBtt��t_|tjvS)z�
    Check whether given path is a standard directory.

    >>> is_standard_directory('/etc')
    True

    >>> is_standard_directory('/etc/systemd/')
    False

    >>> is_standard_directory('/usr/bin/cat')
    False
    NF)�os�path�normpath�isabsr�data�setr)r�r9r9r=rEs
rc
Cs�g}zTtdkr.tjgd�dtjd����d�}tdkrVtjgd�dtjd����d�}Wn>tjy�}z$t�tjd�	t|j
��WYd	}~n
d	}~00|S)
zH
>>> get_standard_directories() # doctest: +ELLIPSIS
[...'/bin'...]
    rG)rGz-qlZ
filesystemT��universal_newlines�stderrrWrI)rHz-Lz
base-fileszfailed to get list from {}: {}N)r0�
subprocess�check_output�PIPE�rstriprX�CalledProcessErrorrQ�LOG_ERRr�r�)Zlst�er9r9r=rcs $.rcCs&|d}|d}|d}d|||fS)z6Given an RPM header return the package NVR as a stringr�r_�releasez%s-%s-%sr9)Zhdrr�r_r�r9r9r=rusrc
Cs�|durdS|tjvr tj|Sd}zNtdkrJtjdd|gdtjd���}tdkrptjddd	|gdtjd���}Wn@tjy�}z&t�tj	d
t||j
f�WYd}~n
d}~00|tj|<|S)z?
>>> get_package_nvr_by_name("coreutils")[0:9]
'coreutils'
    NrG�-qTr�rI�
dpkg-queryz(-f=${Package}-${Version}:${Architecture}z-Wz,failed to retrieve %s info for name '%s': %s)r�cacher0r�r�r�r�r�rQr�r�)r��nvrr�r9r9r=r~s 

�0
rc
Cs�|durdStj�|�sdStj�|�}tj�|�s8dS|tjvrLtj|Sd}z�tdkrvtj	dd|gdtj
d���}tdk�r<ztj	dd|gtj
d	���}WnLtj
y�}z2|jd
kr�dtj|<WYd}~WdS�WYd}~n
d}~00|�d�}|D]@}|�d��rq�|jd
d
d�djdd
d�d}t|�}�q<q�WnBtj
�y�}z&t�tjdt||jf�WYd}~n
d}~00|tj|<|S)zB
>>> get_package_nvr_by_file_path("/bin/ls")[0:9]
'coreutils'
    NrGz-qfTr�rIr�z-S)r�r\rWz
diversion by z: )�maxsplitrz, z,failed to retrieve %s info for path '%s': %s)r�r�r�r��existsrr�r0r�r�r�r�rtr��
returncoderX�
startswithrrQr�r�)r�r��queryZcperZZpackage_namer�r9r9r=r�s@





 0
r)�get_all_file_typescCs6|�d�}|d}|d}d�|dd��}|||fS)N�-������)rXr�)r�rbr�r_r�r9r9r=r�s

rcCs�tdurt�tdurdSt�|d�}|dur2dSt|�}|dur||�d�d}d|d}t|�}|dur||d7}t|�}|S)a�
Finds an SELinux module which defines given SELinux type

##### arguments

* `selinux_type(s)`: an SELinux type

##### return values

* `nvr(s)`: nvr of rpm which ships module where `selinux_type` is defined

##### usage

>>> get_rpm_nvr_by_type("sshd_t")[0:14]
'selinux-policy'

>>> get_rpm_nvr_by_type("mysqld_log_t")[0:13]
'mysql-selinux'

>>> get_rpm_nvr_by_type("spc_t")[0:17]
'container-selinux'

    N�/r�z/usr/share/selinux/packages/z.ppz.bz2)�module_type_cache�build_module_type_cacherNrrX)Zselinux_typer��package�module_namer9r9r=r�s rcCs"zt|�WdSYdS0dSri�r^rlr9r9r=�__str_is_ints
r�c
	Cs"t��\}}|dkrdSt�}g}t�}t�d�||���*}tdd�|D�dd�d�}Wd�n1sj0Y|D]�}t�d	�|||��D]�\}}}	d
|	vr�zfzt	j
d�|�dd
�}
Wnt
d�|��}
Yn0|
D] }t�|�}|r�|||�
d�<q�|
��Wq�Yq�0q�qx|adS)z�
Creates a dictionary with all types defined in the module store as keys
and corresponding module paths as values.
The dictionary is stored in "module_type_cache" to be used by
"get_rpm_nvr_by_type"

>>> build_module_type_cache()

    rNz{}/{}/active/modulescSs$g|]}|��rt|j�r|j�qSr9)�is_dirr�r�r~r9r9r=r�7r?z+build_module_type_cache.<locals>.<listcomp>cSst|�Sr8r�)r;r9r9r=r>7r?z)build_module_type_cache.<locals>.<lambda>�r�z{}/{}/active/modules/{}Zcilz{}/cilZrt)�moder\)�selinuxZselinux_getpolicytyper�rr��scandirr��sorted�walk�bz2�open�typedef_regexprkrq�closer�)
ZretvalZ
policytypeZmodule_type_dictZ
prioritiesZ
store_rootZmodule_store�dir�dirpath�dirnames�	filenames�frZ�resultr9r9r=r�"s0
8

r�FcCsL|r(t�}|�dd�}t|�t|���St�t|��}ttt�|���SdS)a
Finds an SELinux module which defines given SELinux context

##### arguments

* `scontext(s)`: an SELinux context

##### return values

* `nvr(s)`: nvr of rpm which ships module where SELinux type used in `scontext` is defined

##### usage

>>> get_rpm_nvr_by_scontext("system_u:system_r:syslogd_t:s0")[0:14]
'selinux-policy'

>>> get_rpm_nvr_by_scontext("system_u:system_r:mysqld_log_t:s0")[0:13]
'mysql-selinux'

>>> get_rpm_nvr_by_scontext("system_u:system_r:timedatex_t:s0", use_dbus=True)[0:14]
'selinux-policy'

    z*org.fedoraproject.SetroubleshootPrivilegedz+/org/fedoraproject/SetroubleshootPrivilegedN)r1Z	get_proxyrmrr�Zcontext_newrZcontext_type_get)ZscontextZuse_dbusZbusZ
remote_object�contextr9r9r=rUs�rcCsd|durdSd}z0ddl}|jdddd|gdd��d	d
�d}Wnt�tjd|�Yn0|S)a;
    Find a source package for `name` rpm
    
    >>> get_rpm_source_package("policycoreutils-python-utils")
    'policycoreutils'

    >>> get_rpm_source_package("selinux-policy-targeted")
    'selinux-policy'

    >>> get_rpm_source_package("selinux-policy-targeted-35.8-1.fc35.noarch")
    'selinux-policy'
    NrrGr�z--qfz%{SOURCERPM}T)r�r�r]z"failed to retrieve rpm info for %s)r�r��rsplitrQr�)r��srcr�r9r9r=rxs
(rcCs6t��}zt�|�}Wnty*YdS0|j}|Sr8)r��getuid�pwd�getpwuid�KeyError�pw_dir)�uidZpwZhome_dirr9r9r=r�srcCst�|�}|rdSdSdSri)�name_at_domain_rerp)�addressrkr9r9r=r#�s
r#cCs tdd�}t�tj|||�dS)NZhelper_apps�web_browser_launcher)r7r��spawnl�P_NOWAIT)�urlr�r9r9r=r$�s
r$cCs6t|dd�}|r"|d}|d}nt}t|�}||fS)N�argsrr\)�getattrZERR_SOCKET_ERRORZget_strerror)r�r��errno�strerrorr9r9r=r'�s
r'c
Cs�d}tj�|�shzt|d�}|��Wn@tyf}z(d}t�tjd||jf�WYd}~n
d}~00zt�	||�WnBt
y�}z*d}t�tjd|||jf�WYd}~n
d}~00zbt|t�r�|}nt
�|�d}|dur�|}t|t�r�|}nddl}	|	�|�d}t�|||�Wnbt
�y�}zHd}ddl}	t�tjd|t
�|�d|	�|�d|jf�WYd}~n
d}~00|S)	NT�wFzcannot create file %s [%s]zcannot chmod %s to %o [%s]r]rzcannot chown %s to %s:%s [%s])r�r�r�r�r��	ExceptionrQr�r��chmod�OSErrorr@r^r��getpwnam�grp�getgrnam�chownr��getgrgid)
�filepathr��ownerrqr�r�r�r��gidr�r9r9r=r(�s:
.0

Fr(cCs<ddl}|�|���dd}|jj}td|||f��dS)Nrr\rFz=%s must be implemented in subclass %s or ancestor class of %s)�inspectZgetouterframesZcurrentframe�	__class__�__name__�NotImplementedError)rDr��method�subclassr9r9r=r%�s�r%cCs�|durd}nt�dd|�}tdd�}g}t�tj�||d��D]<}tj�|�}|dvr\qBtj�tj�|��d}|�	|�qB|S)	Nr3z.py$r��plugins�
plugin_dir�.py)z__init__.pyr)
�rer�r7�globr�r�r��basename�splitext�append)�filter_globr�plugin_names�p�plugin_namer9r9r=r�s
rcCs|��|��Sr8)Zget_priorityr:r9r9r=�sort_plugins�src
Csztdd�}tj�|�s&td|�gStj�|�}g}t|�}td|�|}|tjvr�z.t	j
�||d�}t	j
�|�}|j
�|�WnBty�}z*t�tjd|t|�f�gWYd}~Sd}~00|D]�}	d||	f}zDt	j
�||d|	d	�}t	j
�|�}|j
�|�|�|���Wq�t�yb}z&t�tjd
|	t|�f�WYd}~q�d}~00q�|jtt�d�|S)Nrrz4plugin directory %s does not exist, no plugin loadedzload_plugins() names=%sz/__init__.pyz&failed to initialize plugins in %s: %sz%s.%sr�rzfailed to load %s plugin: %sr�)r7r�r��isdirr&r
rrr�modules�	importlib�util�spec_from_file_location�module_from_spec�loader�exec_moduler�rQr�rmrZpluginr�r4r)
r
rZplugin_baserrr��mod_spec�modr�rr9r9r=r�s8

2rc	Cs~ztt���d��}Wn8zddl}d�|���}Wnd}Yn0Yn0t��}|d}|d}d||f}||fS)Nrr��unknownr]r�z%s %s)	r��redhat_release_path�	readlinesr��distror�Zlinux_distributionr��uname)Z
myplatformrr Zkernel_releaseZcpuZos_descr9r9r=r srcCs@|durt��}zt�|�}Wnty2YdS0|d}|S�Nr)r�r�r�r�r�)r�Z	pwd_entry�usernamer9r9r=r 3sr c
CsTzddl}|��}|WStyN}z t�tjd|�WYd}~dSd}~00dS)Nrzcannot lookup hostname: %s)ZsocketZgethostnamer�rQr�)ZSocket�hostnamer�r9r9r=r!?sr!cCs\tj�|�r|Stj�|�}tdd��d�}|D]&}tj�||�}tj�|�r0|Sq0dS)NZfix_commandZprog_search_path�:)r�r�r�r
r7rXr�r�)�progr
�search_pathr{r�r9r9r=rIs
rcCs2tdd�}t�dd|�}|d}tj�||�}|S)NZdatabase�database_dirz\.xml$r�z
_database.xml)r7rr�r�r�r�)r�r'�filenamer�r9r9r=r"Us

r"cCs t�d�}d}d}d}d}d}|��}|�|�D]�}|r0d}t|�d��}|�d�}	|	dur0|	dkrp||d	7}|	d
kr�||d7}|	dkr�||d
7}|	dkr�||7}|	dkr�||7}|	dkr�||7}|	dkr0||7}q0|�rtj||||d�}
td||
f�|
St	�	t	j
d|�dSdS)z�The time offset may be specified as a sequence of integer unit pairs.
       Units may be one of year,month,week,day,hour,minute,second and may optionally be plural.
       Example: '2 weeks 1 day' sets the threshold at 15 days.
       z0(\d+)\s*(year|month|week|day|hour|minute|second)FrTr\r]N�yearim�month�Zweek��day�hour�minute�second�rerfrgrhz)parse_datetime_offset(%s) = time delta %sz$could not parse datetime offset (%s))r�compile�lower�finditerr^rq�datetime�	timedeltar&rQr�)�textZdatetime_offset_re�foundrerfrgrhrkZquantityZunitZtdr9r9r=r)^sB


r)cCs~td��b}|D]L}z:|�d�\}}|��dkrJ|��WWd�SWqYq0qWd�n1sp0YdS)Nz/etc/selinux/semanage.conf�=z
store-rootz/var/lib/selinux)r�rXr�)r�rZZparamr�r9r9r=r�s
 &r)rhr\)rfc@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�
LocalTimezonecCs|�|�rtStSdSr8)�_isdst�	DSTOFFSET�	STDOFFSET��self�dtr9r9r=�	utcoffset�s
zLocalTimezone.utcoffsetcCs|�|�rtStSdSr8)r;�DSTDIFF�ZEROr>r9r9r=�dst�s
zLocalTimezone.dstcCstj|�|�Sr8)�time�tznamer;r>r9r9r=rF�szLocalTimezone.tznamec	CsD|j|j|j|j|j|j|��ddf	}t�|�}t�	|�}|j
dkS)Nrr�)r)r*r-r.r/r0�weekdayrE�mktime�	localtime�tm_isdst)r?r@�ttZstampr9r9r=r;�s
�

zLocalTimezone._isdstN)r�
__module__�__qualname__rArDrFr;r9r9r9r=r:�sr:c@s(eZdZdZdd�Zdd�Zdd�ZdS)�UTCcCs
t�d�Sr!�r5r6r>r9r9r=rA�sz
UTC.utcoffsetcCsdS)NrNr9r>r9r9r=rF�sz
UTC.tznamecCs
t�d�Sr!rOr>r9r9r=rD�szUTC.dstN)rrLrM�__doc__rArFrDr9r9r9r=rN�srNc@s�eZdZe�Ze�ZdZdZd#dd�Z	dd�Z
dd	�Zd
d�Zdd
�Z
dd�Zd$dd�Zdd�Zdd�Zdd�Zd%dd�Zdd�Zdd�Zd&d!d"�ZdS)'r.z%Y-%m-%dT%H:%M:%SZz%cNcCs�|dur|jdd�|_nft|tj�r0|�|�nNt|t�rNtj�||j	�|_n0t|tj�rb||_nt|t
�rv|j|_ntd��dS)NF��localz-must be string, float, datetime, or TimeStamp)�now�_dtr@r�r��parse�floatr5Z
fromtimestamp�utc_tzr.�	TypeError)r?�tr9r9r=�__init__�s


zTimeStamp.__init__cCs$t|t�r|j|jkS|j|kSdSr8�r@r.rT�r?�otherr9r9r=�__lt__�s
zTimeStamp.__lt__cCs$t|t�r|j|jS|j|SdSr8r[r\r9r9r=�__add__�s
zTimeStamp.__add__cCs.t|t�r|j|j7_n|j|7_|Sr8r[r\r9r9r=�__iadd__�s
zTimeStamp.__iadd__cCs$t|t�r|j|jS|j|SdSr8r[r\r9r9r=�__sub__�s
zTimeStamp.__sub__cCs.t|t�r|j|j8_n|j|8_|Sr8r[r\r9r9r=�__isub__�s
zTimeStamp.__isub__FcCs$|rtj�|j�Stj�|j�SdSr8)r5rS�local_tzrW)r?rRr9r9r=rSsz
TimeStamp.nowcCs|j�|j�Sr8)rTZ
astimezonerc�r?r9r9r=rRszTimeStamp.localcCs|j|jdd�S)NFrQ)r��iso8601_fmtrdr9r9r=�__str__	szTimeStamp.__str__c
CsBt�||j�\	}}}}}}}}	}
t�||||||d|j�|_|jSr!)rE�strptimerer5rWrT)r?rmr)r*r-r.r/r0rGZyeardayrDr9r9r=rUs��zTimeStamp.parsercCs |jtj||||d�7_dS)Nr1)rTr5r6)r?rerfrgrhr9r9r=�adds�z
TimeStamp.addcCs|��}||jkrdSdSdSri�rSrT�r?rSr9r9r=�	in_futures
zTimeStamp.in_futurecCs|��}||jkrdSdSdSririrjr9r9r=�in_pasts
zTimeStamp.in_pastTcCs0|dur|j}|r |���|�S|j�|�SdSr8)�
locale_fmtrR�strftimerT)r?�fmtrRr9r9r=r�%s
zTimeStamp.format)N)F)rrrr)NT)rrLrMrNrWr:rcrermrZr^r_r`rarbrSrRrfrUrhrkrlr�r9r9r9r=r.�s$


r.c@sheZdZdZdejjdejejffiZ	ddd�Z
dd�Zddd	�Zddd�Z
d
d�Zdd�Zdd�ZdS)r/al
    A class which schedules attempts until one succeeds.

    Intervals are expressed as floating point seconds.

    The retry attempt will be scheduled in the future based on the
    retry_interval which may be either a number of seconds or a
    callable object returning the number of seconds. The callable
    form of the retry_interval is useful when the interval should be
    adjusted based on prior history or other external factors,
    e.g. backing off the frequency of the retry attempts if initial
    attempts fail.

    The retry callback should return False if the attempt fails, in
    which case it will be scheduled again in the future based on the
    current value obtained from the retry_interval. If the retry
    callback returns True it indicates the retry attempt succeeded and
    no more attempts will be made.

    Retry's are started with the start() method and continues until
    the retry callback returns True or the stop() method is called. It
    is always safe to call stop() even if a retry is not pending.

    The retry callback, user_data and notify_interval may be specified
    in either the class init() or in the start() method for convenience.

    If notify_interval is set a 'pending_retry' signal will be emitted
    every time the notification interval elapses, this provides a
    countdown till the next retry attempt.

    The signature of the retry callback is: callback(retry_obj, user_data)

    The signature of the pending_retry signal handler is: callback(retry_obj, seconds_pending, user_data)

    The signature of the retry interval function is: interval(retry_obj, user_data)
    �
pending_retryNcCs:tj�|�||_||_||_d|_||_d|_d|_dSr!)	r2rZ�callback�retry_interval�	user_data�failed_attempts�notify_interval�trigger_time�
timeout_id)r?rqrrrsrur9r9r=rZZszRetry.__init__cCs |jdurt�|j�d|_dSr8)rwZGLibZ
source_removerdr9r9r=�stopds
z
Retry.stopcCsF|dur||_|dur||_|dur*||_|��d|_|�d�dS)NrT)rrrsrurxrt�_schedule_alarm)r?rrrsrur9r9r=�startiszRetry.startFcCsht��}|r||��|_|j|}|jrH|�d||j�t|j|�}n|}t�t	|d�|j
�|_dS)Nrpi�)rE�_get_retry_intervalrvru�emitrs�minr2Ztimeout_addr^�_alarm_callbackrw)r?Z	new_retryrS�seconds_pendingZ
alarm_timer9r9r=ryus
zRetry._schedule_alarmcCs6d|_t��}|j|}|dkr*|��n|��dS)Ng{�G�zt?F)rwrErv�_attempt_retryry)r?rSrr9r9r=r~�s

zRetry._alarm_callbackcCs4|�||j�r|��n|jd7_|�d�dS)Nr\T)rqrsrxrtryrdr9r9r=r��s
zRetry._attempt_retrycCs"ttttf�r|�||j�S|jSr8)r@Z
interval_typer6r5rrrsrdr9r9r=r{�szRetry._get_retry_interval)NN)NNN)F)rrLrMrPr2ZSignalFlagsZRUN_LASTZ
TYPE_FLOATZ
TYPE_PYOBJECTZ__gsignals__rZrxrzryr~r�r{r9r9r9r=r/0s%�



r/)NN)r�r�)r�r)r�)F)N)N)N)N)wZ
__future__rZ	six.movesr�__all__r�r�r5Zdasbus.connectionr1r	Z
gi.repositoryr2rr�r�r�shutilr�r�rr�textwraprE�typesrQ�	functoolsr4r5r6Zsetroubleshoot.configr7Zsetroubleshoot.errcode�cmprEr*r+r0�whichrZTextWrapperr�r2r�rjZhref_rer�ror�r�rRrPZLOG_CRITr�ZLOG_INFOrUrMrTr&r-r,rrrrrrr	r
rrr
rrr�rrrr�rZsepolicyr�rrrr�r�rrrr#r$r'r(r%rrrrr r!rr"r)rr6�timezoner=�daylight�altzoner<rBrCZHOURZtzinfor:rNr.r/Z
type_registerr9r9r9r=�<module>s�1





�	




	;

23
#

*


$

	-

fq

Zerion Mini Shell 1.0