
    e`                        d dl mZ d dlZdZedz   Zedz   Zedz   Zddd	d
d
ddddd	Zedz   Zddddddd
d
ddddZ	edz   Z
d
d
d
d
ddddddd
Zedz   ZdddddddZedz   ZdddZedz   Z G d d           Z G d! d"          Z G d# d$          Z G d% d&          Z G d' d(          Z G d) d*e          Z G d+ d,e          Z G d- d.e          Z G d/ d0e          Z G d1 d2e          Z G d3 d4e          Zd5 Zd9d6Zd7 Zd8 ZdS ):    )unicode_literalsNz     zx%(channel_path)-30s | %(name)-40s | %(version)8s | %(family)-12s | %(build_number)-10s | %(license)-15s | %(subdirs)-15szH%(name)-40s | %(file_count)-12s | %(download_count)-13s | %(license)-15sz%(channel_path)-30s | %(privacy)-10s | %(owners)15s | %(artifact_count)-12s | %(download_count)-11s | %(subchannel_count)-14s |  %(mirror_count)-9s | %(description)-30s$-----------------------------------------------------------
----------z2--------------------------------------------------(----------------------------------------------------------------------)	idnametypemodestatesource_rootproxylast_run_at
updated_atz%(id)-36s | %(name)-15s | %(type)8s | %(mode)-10s | %(state)-10s | %(source_root)-50s | %(proxy)-40s | %(last_run_at)-30s | %(updated_at)-30sz------------------------------------------------------------------------------z"----------------------------------)r
   r   r   r   privacychannelr   r   r   
created_atr   z%(id)-36s | %(name)-15s | %(source_root)45s | %(type)-18s | %(channel)-18s  | %(privacy)-14s  | %(mode)-10s | %(state)-10s | %(last_run_at)-34s | %(created_at)-34s | %(updated_at)-34s<--------------------------------------------------------------------------------z-------------------------)
activefailedpassiveremoved	last_ckeylast_exceptiontotal_steps_countcurrent_step_numbercurrent_step_percentagecurrent_step_descriptionz%(active)-10s | %(failed)-10s | %(passive)-10s | %(removed)-10s | %(last_ckey)-60s  | %(last_exception)-18s  | %(total_steps_count)-18s | %(current_step_number)-20s | %(current_step_percentage)-25s | %(current_step_description)-34s)cvedatelicense
only_specsexclude_specsduplicated_legacy_condazv%(cve)-18s | %(date)-18s | %(license)-18s | %(only_specs)-18s | %(exclude_specs)-18s  | %(duplicated_legacy_conda)-18s)r&   r(   z%%(license)-18s | %(exclude_specs)-18sc                       e Zd Zd Zedd            ZddZedd            ZddZed             Z	d Z
ed	             Zd
 ZddZdS )PackagesFormatterc                     || _         d S N)log)selfr.   s     5lib/python3.11/site-packages/repo_cli/utils/format.py__init__zPackagesFormatter.__init__a   s        Fc                 P    | rddddd}t           }nddddd	dd
d}t          }||z  S )NNamez
# of filesz# of downloadLicenser   
file_countdownload_countr&   ChannelFamilyVersion	PlatformsBuild)channel_pathr   familyversionsubdirsr&   build_number)fmt_package_simple_headersfmt_package_headers)simplepackage_headerfmts      r0   format_package_headerz'PackagesFormatter.format_package_headerd   s`     	&*"1$	 N -CC !*"$&$ ' N &C^##r2   c                 b    | j                             |                     |                     d S NrE   )r.   inforH   )r/   rE   s     r0   log_format_package_headerz+PackagesFormatter.log_format_package_header{   s-    d000??@@@@@r2   c                    |                                  } |                     | d                    | d         r| d         d| d         | d<   n| d         | d<   d| vrg | d<   d| vrd| d<   d	| vrd| d	<   | d         d
| d         | d<   d                    d | d         D                       | d<   |rt          }nt          }|| z  S )Nmetadata
subchannelr   /r>   rA   rB    r&   z::r   	full_name, c              3   8   K   | ]}|t          |          V  d S r-   str.0xs     r0   	<genexpr>z3PackagesFormatter.format_package.<locals>.<genexpr>   s1       '
 '
!-CFF----'
 '
r2   )copyupdatejoinrC   rD   )packagerE   rG   s      r0   format_packagez PackagesFormatter.format_package~   s$   ,,..wz*+++<  	9	"""%%'GN##
 '.i&8GN#G##!#GI((&(GN#G##!#GI+2>+B+B+BGFOOT!YY '
 '
#I.'
 '
 '
 
 
	  	&,CC%CW}r2   c                 d    | j                             |                     ||                     d S rJ   )r.   rL   r`   )r/   r_   rE   s      r0   log_format_packagez$PackagesFormatter.log_format_package   s/    d))'&)AABBBBBr2   c            	      ,    ddddddddd	} t           | z  S )
Nr9   PrivacyOwnersz# Artifactsz# Downloadsz# Subchannelsz	# MirrorsDescription)r>   r   ownersartifact_countr8   subchannel_countmirror_countdescription)fmt_channel_headers)rF   s    r0   format_channel_headerz'PackagesFormatter.format_channel_header   s5     & ++ /'(	
 	
 #^33r2   c                 ^    | j                             |                                            d S r-   )r.   rL   rm   )r/   s    r0   log_format_channel_headerz+PackagesFormatter.log_format_channel_header   s(    d002233333r2   c                     |                                  } | d         r| d         d| d         | d<   n| d         | d<   d                    d | d         D                       | d<   t          | z  S )NparentrQ   r   r>   rT   c              3   8   K   | ]}|t          |          V  d S r-   rV   rX   s     r0   r[   z3PackagesFormatter.format_channel.<locals>.<genexpr>   s1       &
 &
CFF&
 &
r2   rg   )r\   r^   rl   )r   s    r0   format_channelz PackagesFormatter.format_channel   s    ,,..8 	6181B1B1BGFOO&TGN##&-foGN# II &
 &
#H-&
 &
 &
 
 
 #W,,r2   c                 `    | j                             |                     |                     d S r-   )r.   rL   rs   )r/   r   s     r0   log_format_channelz$PackagesFormatter.log_format_channel   s*    d))'2233333r2   c                    |                      |           |r*ddddd}| j                            t          |z             n,ddddddd	d
}| j                            t          |z             |D ]}|                     ||           |r|d         rt          |          |d         z   nd}| j                            dt          |d         fz             | j                            dt          t          |          |fz             n| j                            d           | j                            d           d S )NrK   r   r   z-------------r   r6   r	   ------------r   )r>   r   r@   r?   rA   r&   rB   offsetr   z
%s%i packages found.total_countz%sVisualizing %i-%i interval.zNo packages foundrR   )rM   r.   rL   rC   rD   rb   lenINITIAL_SPACE)r/   packagesrO   rE   rF   r_   end_sets          r0   formatzPackagesFormatter.format   s   &&f&555 	@ %"*#	 N HMM4~EFFFF !) ""## ( N HMM->??? 	< 	<G##GF#;;;; 
	/<DX<NUc(mmhx&888TUGHMM(M8M;R+SS   HMM/ #h--9:   
 HMM-...br2   N)F)__name__
__module____qualname__r1   staticmethodrH   rM   r`   rb   rm   ro   rs   ru   r~    r2   r0   r+   r+   `   s           $ $ $ \$,A A A A    \BC C C C 4 4 \44 4 4 - - \-4 4 4( ( ( ( ( (r2   r+   c                   r    e Zd ZddddZed             Zed             Zed             Zed             Z	d	S )
MirrorFormatter
created at
Updated atLast run atr   r   r   c           
         d |                                  D             } dddd}t          |           }t          dz   t          dz   g}g d}|D ]}|                    ||                    d	d
                    }|                    |d          }|dk    r|                    t          |d           |r_t          |                                          D ]=}|                    t          d|                    d          d||                    >|                    t          |d|           d	                    |          S )Nc                 B    i | ]\  }}|                     d d          |S mirror_rR   replacerY   keyvals      r0   
<dictcomp>z1MirrorFormatter.format_detail.<locals>.<dictcomp>   s,    QQQhc3#++i,,cQQQr2   r   r   r   r   zMirror Details:r   )r
   r   r   r   r   r   r   r   createdcronr   filters_ rR   r   :z      z| : 
)
itemsdictr{   getr   appendsortedkeysljustr^   )	mirrorkeymapr   respfieldsr   labelvalue
filter_keys	            r0   format_detailzMirrorFormatter.format_detail   s{   QQ&,,..QQQ&&(
 

 v,, 11=CT3TU
 
 
  	H 	HCJJsCKKS$9$9::EKKR((Ei}}eee<=== &,UZZ\\&:&:  
,}}j.>.>r.B.B.B.BE*DUDUW   
 --FGGGGyyr2   c                 l    d t           D             }|                    | j                   t          |z  S )Nc                 8    i | ]}||                                 S r   
capitalizerY   ks     r0   r   z7MirrorFormatter.format_list_headers.<locals>.<dictcomp>"  s"    NNN!Q\\^^NNNr2   )fmt_mirror_header_spacerr]   r   fmt_mirror_headersclsmirror_headerss     r0   format_list_headersz#MirrorFormatter.format_list_headers   s7    NN5MNNNcj)))!N22r2   c                 R    d |                                  D             } t          | z  S )Nc                 J    i | ] \  }}|                     d d          ||nd!S r   r   r   s      r0   r   z4MirrorFormatter.format_list_item.<locals>.<dictcomp>(  sD     
 
 
S KK	2&&R
 
 
r2   )r   r   )r   s    r0   format_list_itemz MirrorFormatter.format_list_item&  s5    
 
"LLNN
 
 
 "F**r2   c                 0   g }|                     t                                                     |                     t          t          z             | D ]/}|                     t                              |                     0d                    |          S Nr   )r   r   r   r   r   r   r^   mirrorslinesr   s      r0   format_listzMirrorFormatter.format_list.  s    _88::;;;'*BBCCC 	C 	CFLL99&AABBBByyr2   N)
r   r   r   r   r   r   classmethodr   r   r   r   r2   r0   r   r      s        ""$ F & & \&P 3 3 [3
 + + \+     \     r2   r   c                   ^    e Zd ZdddddZed             Zed             Zed             Zd	S )
AllMirrorFormatterzroot sourcezlast run atr   z
updated at)r   r   r   r   c                 0   g }|                     t                                                     |                     t          t          z             | D ]/}|                     t                              |                     0d                    |          S r   )r   r   format_list_all_headersfmt_all_mirror_headersfmt_all_mirror_header_spacerr   r^   r   s      r0   format_list_allz"AllMirrorFormatter.format_list_allB  s    '??AABBB+.JJKKK 	F 	FFLL+<<VDDEEEEyyr2   c                 l    d t           D             }|                    | j                   t          |z  S )Nc                 8    i | ]}||                                 S r   r   r   s     r0   r   z>AllMirrorFormatter.format_list_all_headers.<locals>.<dictcomp>O  s"    RRR!Q\\^^RRRr2   )r   r]   r   r   r   s     r0   r   z*AllMirrorFormatter.format_list_all_headersM  s7    RR5QRRRcj)))%66r2   c                     |                      dd            | d         }|                      dd            |                     d          |d<   i | |} t          | z  S )N
sync_stater   r   )popr   )r   r   s     r0   r   z#AllMirrorFormatter.format_list_itemS  sd    

<&&&#

9d###$[[00	&F&g&%..r2   N)	r   r   r   r   r   r   r   r   r   r   r2   r0   r   r   :  s}        $$""	 F     \  7 7 [7
 / / \/ / /r2   r   c                       e Zd ZdddddddZdd	d
dZddiZed             Zed             Z	ed             Z
ed             Zed             Zed             Zed             ZdS )SyncStateFormatterz	Last ckeyzLast exceptionzTotal steps countzCurrent step numberzCurrent step percentagezCurrent step description)r   r   r    r!   r"   r#   z
Only specszexclude specszDuplicated legacy conda)r'   r(   r)   r(   zExclude specsc                    d }| D ]}|d         |k    r|}|s/g }|                     d|z             d                    |          S |d         }g }|                     t          dz              |                     t                                                     |                     t
          t          z             |                     t                              |                     |                     d           |                     t          dz              |                     t                                                     |                     t          t          z             |                     t                              |d                              |                     d           |                     t          d	z              |                     t                                                     |                     t          t          z             |                     t                              |d                              |                     d           d                    |          S )
Nr   zNo Mirror named %sr   r   zSYNC STATE:rR   zFILTERED PACKAGES BY MIRROR:countzFILTERED PACKAGES BY CHANNEL:)r   r^   r{   r   format_sync_state_headersfmt_sync_state_headersfmt_sync_state_header_spacerformat_sync_state_generalformat_filtered_mirror_headers%fmt_sync_state_mirror_filtered_header,fmt_sync_state_mirror_filtered_header_spacer!format_sync_state_filtered_mirrorformat_filtered_channel_headers&fmt_sync_state_channel_filtered_header-fmt_sync_state_channel_filtered_header_spacer"format_sync_state_filtered_channel)datamirror_namer   mr   r   s         r0   format_sync_statez$SyncStateFormatter.format_sync_stateo  s9    	 	AyK'' 	$ELL-;<<<99U###L)
]]2333'AACCDDD+.JJKKK'AA*MMNNNR]%CCDDD'FFHHIII1:;	
 	
 	
 	@@GATUU	
 	
 	
 	R]%DDEEE'GGIIJJJ2;<	
 	
 	
 	AA*WBUVV	
 	
 	
 	Ryyr2   c                 l    d t           D             }|                    | j                   t          |z  S )Nc                 8    i | ]}||                                 S r   r   r   s     r0   r   z@SyncStateFormatter.format_sync_state_headers.<locals>.<dictcomp>  s"    VVVAaVVVr2   )r   r]   r   r   )r   sync_state_headerss     r0   r   z,SyncStateFormatter.format_sync_state_headers  s9    VV9UVVV!!#*---%(:::r2   c                     |                                  } | d         }|                     dd            |                     |           |                     dd            |                     dd            t          | z  S )Nr   mirror_filteredchannel_filtered)r\   r   r]   r   )r   r   s     r0   r   z,SyncStateFormatter.format_sync_state_general  sx    __&&
7#w%%%%   ($///)4000%
22r2   c                 l    d t           D             }|                    | j                   t          |z  S )Nc                 8    i | ]}||                                 S r   r   r   s     r0   r   zESyncStateFormatter.format_filtered_mirror_headers.<locals>.<dictcomp>  s/     -
 -
 -
"#Aq||~~-
 -
 -
r2   )r   r]   keymap_mirrorr   )r   !sync_state_mirror_filtered_headers     r0   r   z1SyncStateFormatter.format_filtered_mirror_headers  sF    -
 -
'S-
 -
 -
) 	*001BCCC47XXXr2   c                 &    | d         }t           |z  S )Nr   )r   )r   r   s     r0   r   z4SyncStateFormatter.format_sync_state_filtered_mirror  s    $%674FFr2   c                 l    d t           D             }|                    | j                   t          |z  S )Nc                 8    i | ]}||                                 S r   r   r   s     r0   r   zFSyncStateFormatter.format_filtered_channel_headers.<locals>.<dictcomp>  s/     .
 .
 .
"#Aq||~~.
 .
 .
r2   )r   r]   keymap_channelr   )r   "sync_state_channel_filtered_headers     r0   r   z2SyncStateFormatter.format_filtered_channel_headers  sH    .
 .
'T.
 .
 .
* 	+11#2DEEE25WW	
r2   c                 &    | d         }t           |z  S )Nr   )r   )r   r   s     r0   r   z5SyncStateFormatter.format_sync_state_filtered_channel  s    %&8958HHHr2   N)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r2   r0   r   r   _  s        *04#<$> F #(#< M
 &7N+  +  \+ Z ; ; [;
 3 3 \3 Y Y [Y G G \G 
 
 [
 I I \I I Ir2   r   c                       e Zd ZdZi Zedz   ZddddZg Ze	d             Z
e	d             Ze	d             Zed	             Ze	d
             ZdS )FormatterBaserR   	Publishedr   r   )
date_addedr   r   c                 `   |                      |          }t          d| j        z  z   t          dz   g}| j        D ]a}| j                            ||                                          }t          ||d          }|                    t          |d|           bd	                    |          S )Nz%s Details:r   rR   r   r   )
normalize_itemr{   entityr   r   r   r   
nested_getr   r^   )r   itemitem_r   r   r   r   s          r0   r   zFormatterBase.format_detail  s    ""4((MCJ66--

 : 	D 	DCJNN3,,7799Euc2..EKKmmUUUEEBCCCCyyr2   c                 l    d | j         D             }|                    | j                   | j        |z  S )Nc                 8    i | ]}||                                 S r   r   r   s     r0   r   z5FormatterBase.format_list_headers.<locals>.<dictcomp>  s"    IIIa1<<>>IIIr2   )fmt_header_spacerr]   r   fmt_headers)r   list_headerss     r0   r   z!FormatterBase.format_list_headers  s;    II33HIIICJ'''--r2   c                 @    |                      |          }| j        |z  S r-   r   r   )r   r   r   s      r0   r   zFormatterBase.format_list_item  s"    ""4((&&r2   c                     t           r-   )NotImplementedErrorr   s    r0   r   zFormatterBase.normalize_item  s    !!r2   c                    g }|                     |                                            |                     | j        | j        z             |D ]*}|                     |                     |                     +d                    |          S r   r   r   r   r   r   r^   )r   r   r   r   s       r0   r   zFormatterBase.format_list  s    S,,..///S_s'<<=== 	5 	5DLL--d334444yyr2   N)r   r   r   r   r   r{   r   r   r   r   r   r   r   r   r   r   r   r2   r0   r   r     s        F"$K ""$ F F  [ . . [.
 ' ' [' " " \"     [     r2   r   c                       e Zd ZdZdddddddZedz   Zi d	d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/Zg d0Ze	d1             Z
d2S )3CVEFormatterCVEr   z------r   r   d----------------------------------------------------------------------------------------------------)r
   score
score_typecuratedpackages_countrk   zd%(id)-14s | %(score)6s | %(score_type)10s | %(curated)8s | %(packages_count)10s | %(description)-50sr
   zCVE IDr  Typer  z
# Packagescvssv2.cvssV2.accessComplexityzCVSS V2 Access Complexitycvssv2.cvssV2.accessVectorzCVSS V2 Access Vectorcvssv2.cvssV2.authenticationzCVSS V2 Authentication cvssv2.cvssV2.availabilityImpactzCVSS V2 Availablity Impact#cvssv2.cvssV2.confidentialityImpactzCVSS V2 Confidentiality Impactcvssv2.cvssV2.integrityImpactzCVSS V2 Integrity Impactcvssv2.cvssV2.baseScorezCVSS V2 Base Scorecvssv2.severityzCVSS V2 Severitycvssv3.cvssV3.attackComplexityzCVSS V3 Attack Complexitycvssv3.cvssV3.attackVectorzCVSS V3 Attack Vector cvssv3.cvssV3.availabilityImpactzCVSS V3 Availability Impactcvssv3.cvssV3.baseScorezCVSS V3 Base Scorecvssv3.cvssV3.baseSeverityzCVSS V3 Base Severity#cvssv3.cvssV3.confidentialityImpactzCVSS V3 Confidentiality ImpactzCVSS V3 Integrity ImpactzCVSS V3 Privileges RequiredzCVSS V3 ScopezCVSS V3 User Interaction)cvssv3.cvssV3.integrityImpact cvssv3.cvssV3.privilegesRequiredcvssv3.cvssV3.scopecvssv3.cvssV3.userInteraction)r
   r  r  r  rk   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r!  r"  published_atr  c                 <   d |                                  D             }|                    d          }|r||d<   d|d<   n|                    d          |d<   d|d<   d fd	|                    d
g           D             }d                    |          |d
<   |S )Nc                     i | ]\  }}||	S r   r   r   s      r0   r   z/CVEFormatter.normalize_item.<locals>.<dictcomp>G      777hc3c777r2   cvssv3_scorer  CVSS3r  cvssv2_scoreCVSS2c                 T    	 d| vrd| d<    dj         di | S # t          $ r | cY S w xY w)NsubdirrR   z,{subdir}/{name}-{version} (sha258: {sha256})r   )r~   	TypeError)packs    r0   fmt_packagez0CVEFormatter.normalize_item.<locals>.fmt_packageP  sY    4''%'DNLELTTtTTT   s    ''c                 &    g | ]} |          S r   r   )rY   r.  r/  s     r0   
<listcomp>z/CVEFormatter.normalize_item.<locals>.<listcomp>X  s#    LLL$KK%%LLLr2   r|   rT   )r   r   r^   )r   r   r  r|   r/  s       @r0   r   zCVEFormatter.normalize_itemE  s    77$**,,777		.)) 	*"E'N")E,"YY~66E'N")E,	 	 	 MLLL%))J2K2KLLL IIh//jr2   N)r   r   r   r   r   r{   r   r   r   r   r   r   r2   r0   r	  r	    sr       F"   	
p	q 
hf 	, 	)*E	
 	%&= 	'(@ 	+,H 	./O 	()C 	"#7 	- 	)*E 	%&= 	+,I 	"#7  	%&=!" 	./O#$ *D,I.)C+  F0  F8   \  r2   r	  c                   P    e Zd ZdZddddddZedz   Zdd	d
ddZed             Z	dS )CVEFilesFormatterz	CVE Filesr   r   r    --------------------------------)r   artifact_family
cve_statuscommon_nameckeyz^%(channel)-40s | %(artifact_family)-10s | %(cve_status)-10s | %(common_name)-18s | %(ckey)-32sStatusr:   r4   Path)r6  r5  r7  r8  c                     d |                                  D             }|d         r|d         d|d         n|d         |d<   |S )Nc                     i | ]\  }}||	S r   r   r   s      r0   r   z4CVEFilesFormatter.normalize_item.<locals>.<dictcomp>t  r&  r2   parent_channel_namerQ   channel_namer   r   r   r   s     r0   r   z CVEFilesFormatter.normalize_itemr  sd    77$**,,777 *+'u2333U>5J5JKK~& 	i
 r2   N
r   r   r   r   r   r{   r   r   r   r   r   r2   r0   r3  r3  ]  s}        F#  	
j	k  #	 F   \  r2   r3  c                   F    e Zd ZdZddddZedz   ZddiZed             Z	d	S )
PackageFilesFormatterPackage Filesr   r   )r8  r@   platformz.%(ckey)-60s | %(version)-10s | %(platform)-10sr8  r:  c                     | S r-   r   r  s    r0   r   z$PackageFilesFormatter.normalize_item      r2   NrA  r   r2   r0   rC  rC  }  se        F 
  "RRK 	F   \  r2   rC  c                   N    e Zd ZdZddddddZedz   Zddd	d
Zed             Z	dS )PackageFilesFormatterWithCVErD  r   z	---------r   )r8  	cve_scorer6  r@   rE  zT%(ckey)-60s | %(cve_score)-9s | %(cve_status)-10s | %(version)-10s | %(platform)-10sr:  z	CVE Scorez
CVE Status)r8  rJ  r6  c                 v    d |                                  D             }|d         d|d<   |d         d|d<   |S )Nc                     i | ]\  }}||	S r   r   r   s      r0   r   z?PackageFilesFormatterWithCVE.normalize_item.<locals>.<dictcomp>  r&  r2   r6  zn/arJ  r?  r@  s     r0   r   z+PackageFilesFormatterWithCVE.normalize_item  sL    77$**,,777&"'E,%!&E+r2   NrA  r   r2   r0   rI  rI    sr        F  	
`	a 
 ;lSSF  \  r2   rI  c                       e Zd ZdZdddddZedz   Zdd	d
dZg dZddhZ	e
dd            Ze
dd            Ze
dd            ZdS )HistoryFormatterEventsr   r   r4  r  )event_id
event_typer   data_summaryzH%(event_id)-36s | %(event_type)20s | %(created)32s | %(data_summary)-50sr
   r  Summary)rP  rQ  rR  )r   r   rP  rQ  metarR  r8  r5  Tc                 B    |                      ||          }| j        |z  S r-   r  r   r   short_summaryr   s       r0   r   z!HistoryFormatter.format_list_item  s$    ""477&&r2   c                 6    d |                                 D             }|r=d                     fd|d                                          D                       |d<   n:d                    d |d                                          D                       |d<   |S )Nc                     i | ]\  }}||	S r   r   r   s      r0   r   z3HistoryFormatter.normalize_item.<locals>.<dictcomp>  r&  r2   z; c                 6    g | ]\  }}|j         v |d |S r   )short_summary_keys)rY   r   vr   s      r0   r1  z3HistoryFormatter.normalize_item.<locals>.<listcomp>  s@       1C222 !"11%222r2   r   rR  c                 "    g | ]\  }}|d |S r[  r   rY   r   r]  s      r0   r1  z3HistoryFormatter.normalize_item.<locals>.<listcomp>  s'    DDDtq!QQQ"DDDr2   )r   r^   rV  s   `   r0   r   zHistoryFormatter.normalize_item  s    77$**,,777 	$(II    $V 2 2 4 4  % %E.!! %)IIDDtF|/A/A/C/CDDD% %E.! r2   c                    g }|                     |                                            |                     | j        | j        z             |D ]+}|                     |                     ||                     ,d                    |          S r   r  )r   r   rW  r   r   s        r0   r   zHistoryFormatter.format_list  s    S,,..///S_s'<<=== 	D 	DDLL--dMBBCCCCyyr2   NT)r   r   r   r   r   r{   r   r   r   r\  r   r   r   r   r   r2   r0   rN  rN    s        F!	  	
T	U 
 fiPPFRRRF "34' ' ' ['    [        [     r2   rN  c                   f    e Zd ZdZdddZedz   ZdddZdd	gZe	dd            Z
e	d             ZdS )SettingsFormatterzAdmin Settingsr   rw   r   r   z%(key)-36s | %(value)-12szSetting NameValuer   r   Tc                     |S r-   r   )r   r   rW  s      r0   r   z SettingsFormatter.normalize_item  rG  r2   c                 d    |                      d |                                D                       S )Nc                     g | ]
\  }}||d S )rd  r   r_  s      r0   r1  z;SettingsFormatter.format_object_as_list.<locals>.<listcomp>  s$    OOO41aA 6 6OOOr2   )r   r   )r   objs     r0   format_object_as_listz'SettingsFormatter.format_object_as_list  s+    OO399;;OOOPPPr2   Nra  )r   r   r   r   r   r{   r   r   r   r   r   rj  r   r2   r0   rc  rc    s        F   "==K#g66FWF   [ Q Q [Q Q Qr2   rc  c                 P    t          |          }|                    | |           |S r-   )r+   r~   )r|   rT  logger	formatters       r0   format_packagesrn    s+    !&))IXt$$$r2   c                 Z    | }|                     d          D ]}||vr|c S ||         }|S )z{Returns the value of the nested dictionary, using path.

    Example:
        nested_get({"a":{"b": 42}}, "a.b") == 42
    .split)r   pathdefaultresultr   s        r0   r   r     sF     Fzz#  fNNNMr2   c                 @    d |                      d          D             S )zReturns a list of strings from the string, splitting by comma and removing trailing empty
        characters.

    Example:
        comma_string_to_list("flask, numpy ") == ["flask", "numpy"]
    c                 ^    g | ]*}|                                 |                                 +S r   )strip)rY   r   s     r0   r1  z(comma_string_to_list.<locals>.<listcomp>  s-    BBBTTZZ\\BDJJLLBBBr2   ,rq  )ss    r0   comma_string_to_listr{    s#     CBQWWS\\BBBBr2   c                     t          | t                    r| S |                                 dv rdS |                                 dv rdS t          j        d          )N)yestruety1T)nofalsefn0FzBoolean value expected.)
isinstanceboollowerargparseArgumentTypeError)r]  s    r0   string_to_boolr    s]    !T wwyy222t	
4	4	4u()BCCCr2   r-   ) 
__future__r   r  r{   rD   rC   rl   r   r   r   r   r   r   r   r   r   r   r+   r   r   r   r   r	  r3  rC  rI  rN  rc  rn  r   r{  r  r   r2   r0   <module>r     s   ' ' ' ' ' '  > >     
 cc  
 
   b b       ``  !#' (     AA  '0 0 , ~ & 1 1 -
 ;; '
M M M M M M M M`G  G  G  G  G  G  G  G T"/ "/ "/ "/ "/ "/ "/ "/JiI iI iI iI iI iI iI iIX4  4  4  4  4  4  4  4 nX X X X X= X X Xv       @    M   $    =   41  1  1  1  1 } 1  1  1 hQ Q Q Q Q Q Q Q(     C C CD D D D Dr2   