a
    zeX                     @   s  d dl mZ d dlZd dlZd dlZd dlZd dlZdd ZG dd dZdddd	Z	d
d Z
dd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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'dFdG Z(dHdI Z)dOdJdKZ*dLdM Z+e,dNkre+  dS )P    )print_functionNc                 C   s*   | d u rd S t | } tdd| } |  S )Nz\s+ )strresubstrip)text r	   %/usr/lib/python3.9/test/pythoninfo.pynormalize_text   s
    r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )
PythonInfoc                 C   s
   i | _ d S N)infoselfr	   r	   r
   __init__   s    zPythonInfo.__init__c                 C   s\   || j v rtd| |d u r"d S t|tsNt|ts>t|}| }|sNd S || j |< d S )Nzduplicate key: %r)r   
ValueError
isinstanceintr   r   )r   keyvaluer	   r	   r
   add   s    


zPythonInfo.addc                 C   s   dd | j  D S )Nc                 S   s   i | ]\}}|t |qS r	   )r   ).0r   r   r	   r	   r
   
<dictcomp>.       z(PythonInfo.get_infos.<locals>.<dictcomp>)r   itemsr   r	   r	   r
   	get_infos*   s    zPythonInfo.get_infosN)__name__
__module____qualname__r   r   r   r	   r	   r	   r
   r      s   r   	formatterc                C   sH   |D ]>}t ||d }|d u rq|| }|d ur8|||}| || qd S r   )getattr)info_addobjZname_fmt
attributesr!   attrr   namer	   r	   r
   copy_attributes1   s    
r(   c                 C   s2   zt ||}W n ty"   Y d S 0 | || d S r   r"   AttributeError)r#   r'   modZ	attr_namer   r	   r	   r
   	copy_attr<   s
    r,   c                C   sH   zt ||}W n ty"   Y d S 0 | }|d ur:||}| || d S r   r)   )r#   r'   r+   	func_namer!   funcr   r	   r	   r
   	call_funcD   s    r/   c                 C   s   d}t | td| t| dtd t| dtd t }ttdrPd|t f }| d	| d
D ]T}tt|}|d u rvq^t|dd }|sq^t|dd }|rd||f }| d| | q^ttd}|rd}nd}| d| d S )N)
_frameworkabiflagsapi_versionbuiltin_module_names	byteorderdont_write_bytecode
executableflags
float_infofloat_repr_style	hash_info
hexversionimplementationint_infomaxsize
maxunicodepathplatformprefixthread_infoversionversion_infoZwinverzsys.%szsys.androidapilevelgetandroidapilevelzsys.windowsversiongetwindowsversiongetfilesystemencodeerrorsz%s/%szsys.filesystem_encoding)stdinstdoutstderrencodingerrorszsys.%s.encodingZgettotalrefcountz$Yes (sys.gettotalrefcount() present)z#No (sys.gettotalrefcount() missing)Py_DEBUG)r(   sysr/   getfilesystemencodinghasattrrH   r"   )r#   r%   rL   r'   streamrM   rN   r   r	   r	   r
   collect_sysO   s0    



rS   c                 C   sl   dd l }| }dtt|}| d| | d|  | d|j dd d|   }|rh| d	| d S )
Nr   r   zplatform.architecturezplatform.python_implementationzplatform.platformT)Zaliasedz%s %szplatform.libc_ver)rA   ZarchitecturejoinfilterboolZpython_implementationlibc_verr   )r#   rA   ZarchrW   r	   r	   r
   collect_platform   s    

rX   c                 C   s   dd l }| d|d d S )Nr   zlocale.encodingF)localegetpreferredencoding)r#   rY   r	   r	   r
   collect_locale   s    r[   c                 C   s$   | dt d | dt d d S )Nzbuiltins.float.float_formatfloatzbuiltins.float.double_formatZdouble)r\   __getformat__)r#   r	   r	   r
   collect_builtins   s    r^   c              
   C   s   dd l }t|drzRz|d|j d}W n, tyV } zd| }W Y d }~n
d }~0 0 | d| W n2 ty } z|jtjkr W Y d }~n
d }~0 0 d S )Nr   	getrandom   zready (initialized)znot seeded yet (%s)zos.getrandom)osrQ   r_   GRND_NONBLOCKBlockingIOErrorOSErrorerrnoZENOSYS)r#   ra   stateexcr	   r	   r
   collect_urandom   s    
rh   c                 C   s  dd l }dd }d}t| |d||d dD ]}t| d| || q*dd	 }t| d
|d|d t|drz| }W n ty   Y n0 | d| td}|j D ]D\}}	|	 }
|
|v s|

ds|

dr|
dr| d| |	 qt|dr|d}|| | dd|  d S )Nr   c                 S   s&   | dv rt tdd |D S |S d S )N)supports_follow_symlinkssupports_fdsupports_effective_idsc                 s   s   | ]}|j V  qd S r   )r   )r   r.   r	   r	   r
   	<genexpr>   r   z2collect_os.<locals>.format_attr.<locals>.<genexpr>)r   sortedr&   r   r	   r	   r
   format_attr   s    zcollect_os.<locals>.format_attr)r'   supports_bytes_environrk   rj   ri   zos.%sr    )
	cpu_countgetcwdgetegidgeteuidgetgid
getloadavg	getresgid	getresuidgetuidunamec                 S   s   d tt| S )N, )rT   mapr   )groupsr	   r	   r
   format_groups   s    z!collect_os.<locals>.format_groupszos.getgroups	getgroupsgetloginzos.login)>APPDATAZARZ	ARCHFLAGSZARFLAGSZAUDIODEVCCCFLAGSCOLUMNSZCOMPUTERNAMEZCOMSPECZCPPZCPPFLAGSZDISPLAYZDISTUTILS_DEBUGZDISTUTILS_USE_SDKZDYLD_LIBRARY_PATHZENSUREPIP_OPTIONSZHISTORY_FILEHOME	HOMEDRIVEHOMEPATHZIDLESTARTUPLANGZLDFLAGSZLDSHAREDZLD_LIBRARY_PATHLINESZMACOSX_DEPLOYMENT_TARGETZMAILCAPSZ	MAKEFLAGSZMIXERDEVZMSSDKPATHPATHEXTZPIP_CONFIG_FILEZPLATZPOSIXLY_CORRECTZPY_SAX_PARSERZProgramFileszProgramFiles(x86)ZRUNNING_ON_VALGRINDZSDK_TOOLS_BINZSERVER_SOFTWARESHELLSOURCE_DATE_EPOCHZ
SYSTEMROOTTEMPZTERMZTILE_LIBRARYZTIX_LIBRARYTMPTMPDIRZTRAVISZTZUSERPROFILEZVIRTUAL_ENVZWAYLAND_DISPLAYZWINDIRZ_PYTHON_HOST_PLATFORMZ_PYTHON_PROJECT_BASEZ_PYTHON_SYSCONFIGDATA_NAME__PYVENV_LAUNCHER__)ZPYTHONLC_ZVSZ	COMNTOOLSzos.environ[%s]umaskzos.umaskz0o%03o)ra   r(   r/   rQ   r   rd   	frozensetenvironr   upper
startswithendswithr   )r#   ra   ro   r%   r.   r~   ZloginZENV_VARSr'   r   rz   maskr	   r	   r
   
collect_os   s:    

@

r   c                 C   s   zdd l }W n ty    Y d S 0 dd l}| }z||}W n tyV   d }Y n0 | d| |d url|nd |d u r~d S t|dr||j|j	}d
tt|}| d| d S )Nr   zpwd.getpwuid(%s)z
<KeyError>getgrouplistr{   zos.getgrouplist)pwdImportErrorra   ry   getpwuidKeyErrorrQ   r   pw_namepw_gidrT   r|   r   )r#   r   ra   uidentryr}   r	   r	   r
   collect_pwd:  s&    

r   c                 C   s   zdd l }W n ty    Y d S 0 dd }d}t| |d||d t|ds|t|dd	}d
|v rj| dd
 nd|v r|| dd d S )Nr   c                 S   s   t |trd| S |S d S )Nz%#x)r   r   rn   r	   r	   r
   ro   [  s    
z%collect_readline.<locals>.format_attr)Z_READLINE_VERSIONZ_READLINE_RUNTIME_VERSION_READLINE_LIBRARY_VERSIONzreadline.%sr    r   __doc__ zlibedit readlinezreadline.libraryzGNU readline)readliner   r(   rQ   r"   )r#   r   ro   r%   docr	   r	   r
   collect_readlineU  s    

r   c                 C   sn   dd l }z6|jg d|j|jdd}| d }|jr<W d S W n tyR   Y d S 0 | d }| d| d S )Nr   )Zgdbz-nx	--versionTrJ   rK   universal_newlinesZgdb_version)
subprocessPopenPIPEcommunicate
returncoderd   
splitlines)r#   r   procrD   r	   r	   r
   collect_gdbr  s    

r   c                 C   st   zdd l }W n ty   Y n0 d}t| |d| zdd l}W n tyP   Y n 0 | }|dd}| d| d S )Nr   )Z
TK_VERSIONZTCL_VERSIONz
tkinter.%sr   
patchlevelztkinter.info_patchlevel)_tkinterr   r(   tkinterZTclcall)r#   r   r%   r   Ztclr   r	   r	   r
   collect_tkinter  s    r   c              	   C   s   dd l }| d|   d}t| |d| t|drdD ]`}z:tjdd ||}W d    n1 sh0    Y  W n ty   Y q60 | d	| | q6d S )
Nr   z	time.time)altzonedaylighttimezonetznameztime.%sget_clock_info)clock	monotonicperf_counterprocess_timethread_timetimeT)recordztime.get_clock_info(%s))r   r(   rQ   warningscatch_warningsr   r   )r#   r   r%   r   Z
clock_infor	   r	   r
   collect_time  s    
,r   c                 C   s6   zdd l }W n ty    Y d S 0 | d|j   d S )Nr   zdatetime.datetime.now)datetimer   Znow)r#   r   r	   r	   r
   collect_datetime  s
    r   c                 C   sD   dd l }dD ]2}||}|dkr(|s(qt|}| d| | qd S )Nr   )ZABIFLAGSANDROID_API_LEVELr   ZCCSHAREDr   ZCFLAGSFORSHAREDZCONFIG_ARGSZHOST_GNU_TYPEZMACHDEPZ	MULTIARCHZOPTZ	PY_CFLAGSZPY_CFLAGS_NODISTZPY_CORE_LDFLAGSZ
PY_LDFLAGSZPY_LDFLAGS_NODISTZPY_STDMODULE_CFLAGSrN   ZPy_ENABLE_SHAREDr   ZSOABIrB   r   zsysconfig[%s])	sysconfigget_config_varr   )r#   r   r'   r   r	   r	   r
   collect_sysconfig  s    
r   c              	   C   s.  dd l }zdd l}W n ty(   Y d S 0 zdd l}W n tyL   d }Y n0 dd }d}t| |d||d d| fd| fd	| ffD ]"\}}d
}t| |d| d| qddg}|d urt|dr|	 }	|
|	d |	d f |D ]:}z|j| }
W n ty   Y qY n0 | d| |
 qd S )Nr   c                 S   s   |  drd| S |S d S )NZOP_z%#8xr   rn   r	   r	   r
   ro     s    
z collect_ssl.<locals>.format_attr)ZOPENSSL_VERSIONZOPENSSL_VERSION_INFOZHAS_SNIZOP_ALLZOP_NO_TLSv1_1zssl.%sr    
SSLContextZdefault_https_contextZstdlib_context)Zminimum_versionZmaximum_versionprotocoloptionsZverify_modezssl.z.%sZOPENSSL_CONFZSSLKEYLOGFILEget_default_verify_paths   zssl.environ[%s])ra   sslr   _sslr(   r   Z_create_default_https_contextZ_create_stdlib_contextrQ   r   extendr   r   )r#   ra   r   r   ro   r%   r'   ctxZ	env_namespartsr   r	   r	   r
   collect_ssl  s8    




r   c                 C   s   dd l }| }| d| d S )Nr   zsocket.hostname)socketgethostname)r#   r   hostnamer	   r	   r
   collect_socket  s    r   c                 C   s8   zdd l }W n ty    Y d S 0 d}t| |d| d S )Nr   )rD   Zsqlite_versionz
sqlite3.%s)sqlite3r   r(   )r#   r   r%   r	   r	   r
   collect_sqlite  s    r   c                 C   s8   zdd l }W n ty    Y d S 0 d}t| |d| d S )Nr   )ZLIB_VERSIONZLIB_RUNTIME_VERSIONzzlib.%s)zlibr   r(   )r#   r   r%   r	   r	   r
   collect_zlib&  s    r   c                 C   s<   zddl m} W n ty$   Y d S 0 d}t| |d| d S )Nr   )expat)ZEXPAT_VERSIONzexpat.%s)Zxml.parsersr   r   r(   )r#   r   r%   r	   r	   r
   collect_expat0  s    r   c                 C   s8   zdd l }W n ty    Y d S 0 d}t| |d| d S )Nr   )Z__libmpdec_version__z_decimal.%s)_decimalr   r(   )r#   r   r%   r	   r	   r
   collect_decimal:  s    r   c                 C   sB   zdd l }W n ty    Y d S 0 t| d|d t| d|d d S )Nr   zpymem.allocatorZpymem_getallocatorsnamezpymem.with_pymallocZWITH_PYMALLOC)	_testcapir   r/   r,   )r#   r   r	   r	   r
   collect_testcapiD  s    r   c                 C   sr   zdd l }W n ty    Y d S 0 dd t|D }|D ]&}t||}||}| d| | q8t| d|d d S )Nr   c                 S   s   g | ]}| d r|qS )ZRLIMIT_r   )r   r&   r	   r	   r
   
<listcomp>T  r   z$collect_resource.<locals>.<listcomp>zresource.%szresource.pagesizeZgetpagesize)resourcer   dirr"   Z	getrlimitr/   )r#   r   Zlimitsr'   r   r   r	   r	   r
   collect_resourceN  s    

r   c                 C   sJ   zddl m} W n ty$   Y d S 0 dd t|D }t| |d| d S )Nr   )test_socketc                 S   s   g | ]}| d r|qS )ZHAVE_r   )r   r'   r	   r	   r
   r   d  s   
z'collect_test_socket.<locals>.<listcomp>ztest_socket.%s)testr   r   r   r(   )r#   r   r%   r	   r	   r
   collect_test_socket]  s    r   c                 C   sX   zddl m} W n ty$   Y d S 0 d}t| |d| t| d|d t| d|d d S )	Nr   )support)ZIPV6_ENABLEDztest_support.%sztest_support._is_gui_availableZ_is_gui_availablez test_support.python_is_optimizedZpython_is_optimized)r   r   r   r(   r/   )r#   r   r%   r	   r	   r
   collect_test_supporti  s    r   c           	      C   s   dd l }dd l}|d}|s"d S zdd l}||}W n tyR   | }Y n0 |d z|j||j|j	dd}W n t
y   Y d S 0 | d }|jrd S | d }t|}| d| d S )Nr   r   r   Tr   z
CC.version)r   r   r   shlexsplitr   appendr   r   STDOUTrd   r   r   r   r   )	r#   r   r   r   r   argsr   rJ   r   r	   r	   r
   
collect_ccv  s2    


r   c                 C   s@   zddl m} W n ty$   Y d S 0 | ddtt| d S )Nr   )_GDBM_VERSIONzgdbm.GDBM_VERSION.)_gdbmr   r   rT   r|   r   )r#   r   r	   r	   r
   collect_gdbm  s
    r   c                 C   sn   zddl m} W n ty$   Y d S 0 | }t|D ]4}|| }t|D ]}| d||f t||  qHq4d S )Nr   )get_configsz%s[%s])Z_testinternalcapir   r   rm   repr)r#   r   Zall_configsZconfig_typeZconfigr   r	   r	   r
   collect_get_config  s    r  c                 C   s   dd l }t| |dd d S )Nr   zsubprocess.%s)_USE_POSIX_SPAWN)r   r(   )r#   r   r	   r	   r
   collect_subprocess  s    r  c              	   C   s  zdd l }W n ty    Y d S 0 t|ds0d S |d}|j}z
|j}W n ty`   d}Y n0 ||_d|_t	| }| d| z"dd l
}|tj}| d| W n ttfy   Y n0 dd l}z6|jg d|j|jd	d
d}	|	 \}
}|	jrd}
W n ty   Y np0 |
 D ]d}| }|drP|d }|rz| d| n*|dr|d }|r| d| qz6|jdgd
|j|jd
d}	|	 d }
|	jrd}
W n ty   Y d S 0 |
 }
|
 d }|r| d| d S )Nr   WinDLLntdllz<function not available>r	   zwindows.RtlAreLongPathsEnabledzwindows.dll_path)Zwmicra   getzCaption,Versionz/valueZoemT)rJ   rK   rL   r   r   zCaption=zwindows.version_captionzVersion=zwindows.versionver)shellrJ   rK   r   zwindows.ver)ctypesr   rQ   r  Zc_ubyteRtlAreLongPathsEnabledr*   ZrestypeargtypesrV   _winapiZGetModuleFileNamerO   Z	dllhandler   r   r   r   r   rd   r   r   r   removeprefix)r#   r
  r  ZBOOLEANr  resr  Zdll_pathr   r   outputrK   liner	   r	   r
   collect_windows  sx    







r  c                 C   s   zdd l }W n ty"   d }Y n0 |d ur:t| d|d zJtddd}|  }W d    n1 sj0    Y  |r| d| W n ty   Y n0 d S )Nr   zfips.openssl_fips_modeZget_fips_modez/proc/sys/crypto/fips_enabledzutf-8)rL   zfips.linux_crypto_fips_enabled)_hashlibr   r/   openr   rstriprd   )r#   r  fpr  r	   r	   r
   collect_fips  s    
*r  c                 C   s   d}| j }ttttttttt	t
tttttttttttttttttttfD ]`}z|| W qH ty   d}td|j  t!j"d t#j$t!j"d tt!j"d t!j"%  Y qH0 qH|S )NFTzERROR: %s() failedfile)&r   rh   r^   r   r   r   r   r  r   r   r  r[   r   rX   r   r   r   r   r   r   r  rS   r   r   r   r   r  r   r   r   	Exceptionprintr   rO   rK   	traceback	print_excflush)r   errorr#   Zcollect_funcr	   r	   r
   collect_info  sV    %
r   c                 C   sj   d}t | t dt|  t   |  }t| }|D ]$\}}|dd}t d||f  q:t   d S )NzPython debug information=
r   z%s: %s)r  lenr   rm   r   replace)r   r  titleZinfosr   r   r	   r	   r
   	dump_infoF  s    r&  c                  C   s6   t  } t| }t|  |r2tdtjd td d S )Nz"Collection failed: exit with errorr  r`   )r   r   r&  r  rO   rK   exit)r   r  r	   r	   r
   mainT  s    r(  __main__)N)-Z
__future__r   re   r   rO   r  r   r   r   r(   r,   r/   rS   rX   r[   r^   rh   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   r&  r(  r   r	   r	   r	   r
   <module>   sZ   9 	#5




#	H6


