a
    ϑ`B                  
   @   s   d dl mZ d dlmZ dZed Zed Zed Zddd	d
d
ddddd	Z	ed Z
G dd dZG dd dZG dd dZG dd deZG dd deZG dd deZG dd deZG dd deZG d d! d!eZd"d# Zd)d%d&Zd'd( Zd$S )*    )unicode_literals)parsez     zx%(channel_path)-30s | %(name)-40s | %(version)8s | %(family)-12s | %(build_number)-10s | %(license)-15s | %(subdirs)-15szH%(name)-40s | %(file_count)-12s | %(download_count)-12s | %(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)-30sc                   @   sv   e Zd Zdd ZedddZdddZeddd	Zdd
dZedd Z	dd Z
edd Zdd ZdddZdS )PackagesFormatterc                 C   s
   || _ d S N)log)selfr    r   4lib/python3.9/site-packages/repo_cli/utils/format.py__init__   s    zPackagesFormatter.__init__Fc                 C   s8   | rddddd}t }nddddd	dd
d}t}|| S )NNamez
# of filesz# of downloadZLicenser   Z
file_countdownload_countlicenseChannelFamilyZVersionZ	PlatformsZBuild)channel_pathr   familyversionsubdirsr   build_number)fmt_package_simple_headersfmt_package_headers)simplepackage_headerfmtr   r   r   format_package_header   s"    	z'PackagesFormatter.format_package_headerc                 C   s   | j | j|d d S Nr'   )r   infor*   )r   r'   r   r   r   log_format_package_header4   s    z+PackagesFormatter.log_format_package_headerc                 C   s   |   } | | d  | d r8d| d | d f | d< n| d | d< d| vrTg | d< d| vrdd| d< d	| vrtd| d	< d
| d | d f | d< ddd | d D | d< |rt}nt}||  S )NmetadataZ
subchannel%s/%schannelr    r#   r$    r   z%s::%sr   Z	full_name, c                 s   s   | ]}|d urt |V  qd S r   str.0xr   r   r   	<genexpr>K       z3PackagesFormatter.format_package.<locals>.<genexpr>)copyupdatejoinr%   r&   )packager'   r)   r   r   r   format_package7   s"    z PackagesFormatter.format_packagec                 C   s   | j | j||d d S r+   )r   r-   r?   )r   r>   r'   r   r   r   log_format_packageT   s    z$PackagesFormatter.log_format_packagec               	   C   s   ddddddddd	} t |  S )
Nr   ZPrivacyZOwnersz# Artifactsz# Downloadsz# Subchannelsz	# MirrorsZDescription)r    ZprivacyownersZartifact_countr   Zsubchannel_countZmirror_countdescription)fmt_channel_headers)r(   r   r   r   format_channel_headerW   s    
z'PackagesFormatter.format_channel_headerc                 C   s   | j |   d S r   )r   r-   rD   )r   r   r   r   log_format_channel_headere   s    z+PackagesFormatter.log_format_channel_headerc                 C   sZ   |   } | d r*d| d | d f | d< n| d | d< ddd | d D | d< t|  S )	Nparentr0   r   r    r3   c                 s   s   | ]}|d urt |V  qd S r   r4   r6   r   r   r   r9   q   r:   z3PackagesFormatter.format_channel.<locals>.<genexpr>rA   )r;   r=   rC   )r1   r   r   r   format_channelh   s    z PackagesFormatter.format_channelc                 C   s   | j | | d S r   )r   r-   rG   )r   r1   r   r   r   log_format_channelt   s    z$PackagesFormatter.log_format_channelc                 C   s   | j |d |r0ddddd}| jt|  n$dddddddd	}| jt|  |D ]}| j||d qX|rt||d
  }| jdt|d f  | jdtt||f  n| jd | jd d S )Nr,   r   r   ------------r   r   r	   r   )r    r   r"   r!   r#   r   r$   offsetz
%s%i packages found.Ztotal_countz%sVisualizing %i-%i interval.zNo packages foundr2   )r.   r   r-   r%   r&   r@   lenINITIAL_SPACE)r   packagesr/   r'   r(   r>   Zend_setr   r   r   formatw   s2    zPackagesFormatter.formatN)F)F)F)F)F)__name__
__module____qualname__r   staticmethodr*   r.   r?   r@   rD   rE   rG   rH   rN   r   r   r   r   r      s   



r   c                   @   sH   e Zd ZddddZedd Zedd Zed	d
 Zedd Z	dS )MirrorFormatter
created at
Updated atLast run atZ
created_atr   r   c           	   	   C   s   dd |   D } dddd}t| }td td g}g d	}|D ]}|||d
d }||d}|dkr|dt|f  |rt| D ]"}|dt|	d|| f  qqB|dt||f  qBd
|S )Nc                 S   s   i | ]\}}| d d|qS )mirror_r2   replacer7   keyvalr   r   r   
<dictcomp>   r:   z1MirrorFormatter.format_detail.<locals>.<dictcomp>rT   rU   rV   rW   zMirror Details:r   )r
   r   r   r   r   r   r   r   createdZcronr   filters_ r2   r`   z%s%s:z%s   %s| %s   %s%s: %s
)itemsdictrL   getrZ   
capitalizeappendsortedkeysljustr=   )	mirrorkeymaprX   respfieldsr\   labelvalueZ
filter_keyr   r   r   format_detail   s    "zMirrorFormatter.format_detailc                 C   s"   dd t D }|| j t| S )Nc                 S   s   i | ]}||  qS r   ri   r7   kr   r   r   r^      r:   z7MirrorFormatter.format_list_headers.<locals>.<dictcomp>)fmt_mirror_header_spacerr<   ro   fmt_mirror_headers)clsZmirror_headersr   r   r   format_list_headers   s    z#MirrorFormatter.format_list_headersc                 C   s   dd |   D } t|  S )Nc                 S   s*   i | ]"\}}| d d|dur"|ndqS )rX   r2   NrY   r[   r   r   r   r^      r:   z4MirrorFormatter.format_list_item.<locals>.<dictcomp>)rf   ry   )rn   r   r   r   format_list_item   s    z MirrorFormatter.format_list_itemc                 C   sD   g }| t  | tt  | D ]}| t| q$d|S Nre   )rj   rS   r{   ry   rx   r|   r=   )Zmirrorslinesrn   r   r   r   format_list   s    zMirrorFormatter.format_listN)
rO   rP   rQ   ro   rR   rt   classmethodr{   r|   r   r   r   r   r   rS      s   


rS   c                   @   sh   e Zd ZdZi Zed ZddddZg Ze	dd Z
e	dd	 Ze	d
d Zedd Ze	dd ZdS )FormatterBaser2   Z	PublishedrU   rV   )Z
date_addedr   r   c                 C   sh   |  |}td| j  td g}| jD ]6}| j|| }t||d}|dt||f  q&d	|S )Nz%s Details:r   r2   rd   re   )
normalize_itemrL   entityrq   ro   rh   ri   
nested_getrj   r=   )rz   itemitem_rp   r\   rr   rs   r   r   r   rt      s    

zFormatterBase.format_detailc                 C   s&   dd | j D }|| j | j| S )Nc                 S   s   i | ]}||  qS r   ru   rv   r   r   r   r^      r:   z5FormatterBase.format_list_headers.<locals>.<dictcomp>)fmt_header_spacerr<   ro   fmt_headers)rz   Zlist_headersr   r   r   r{      s    z!FormatterBase.format_list_headersc                 C   s   |  |}| j| S r   r   r   )rz   r   r   r   r   r   r|      s    
zFormatterBase.format_list_itemc                 C   s   t d S r   )NotImplementedErrorr   r   r   r   r      s    zFormatterBase.normalize_itemc                 C   sH   g }| |   | | j| j  |D ]}| | | q(d|S r}   rj   r{   r   r   r|   r=   )rz   rf   r~   r   r   r   r   r      s    zFormatterBase.format_listN)rO   rP   rQ   r   r   rL   r   ro   rq   r   rt   r{   r|   rR   r   r   r   r   r   r   r      s   



r   c                   @   sn   e Zd ZdZdddddddZed Zd	d
ddddddddddddddddddddZg dZe	d d! Z
d"S )#CVEFormatterZCVEz--------------z------r   r   d----------------------------------------------------------------------------------------------------)r
   score
score_typecuratedpackages_countrB   zd%(id)-14s | %(score)6s | %(score_type)10s | %(curated)8s | %(packages_count)10s | %(description)-50szCVE IDTypez
# PackageszCVSS V2 Access ComplexityzCVSS V2 Access VectorzCVSS V2 AuthenticationzCVSS V2 Availablity ImpactzCVSS V2 Confidentiality ImpactzCVSS V2 Integrity ImpactzCVSS V2 Base ScorezCVSS V2 SeverityzCVSS V3 Attack ComplexityzCVSS V3 Attack VectorzCVSS V3 Availability ImpactzCVSS V3 Base ScorezCVSS V3 Base SeverityzCVSS V3 Confidentiality ImpactzCVSS V3 Integrity ImpactzCVSS V3 Privileges RequiredzCVSS V3 ScopezCVSS V3 User Interaction)r
   r   r   cvssv2.cvssV2.accessComplexitycvssv2.cvssV2.accessVectorcvssv2.cvssV2.authentication cvssv2.cvssV2.availabilityImpact#cvssv2.cvssV2.confidentialityImpactcvssv2.cvssV2.integrityImpactcvssv2.cvssV2.baseScorecvssv2.severitycvssv3.cvssV3.attackComplexitycvssv3.cvssV3.attackVector cvssv3.cvssV3.availabilityImpactcvssv3.cvssV3.baseScorecvssv3.cvssV3.baseSeverity#cvssv3.cvssV3.confidentialityImpactcvssv3.cvssV3.integrityImpact cvssv3.cvssV3.privilegesRequiredcvssv3.cvssV3.scopecvssv3.cvssV3.userInteraction)r
   r   r   r   rB   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Zpublished_atr   c                    s|   dd |   D }|d}|r2||d< d|d< n|d|d< d|d< d	d
   fdd|dg D }d||d< |S )Nc                 S   s   i | ]\}}||qS r   r   r[   r   r   r   r^   :  r:   z/CVEFormatter.normalize_item.<locals>.<dictcomp>Zcvssv3_scorer   ZCVSS3r   Zcvssv2_scoreZCVSS2c                 S   s>   z"d| vrd| d< dj f i | W S  ty8   |  Y S 0 d S )NZsubdirr2   z,{subdir}/{name}-{version} (sha258: {sha256}))rN   	TypeError)packr   r   r   fmt_packageC  s    z0CVEFormatter.normalize_item.<locals>.fmt_packagec                    s   g | ]} |qS r   r   )r7   r   r   r   r   
<listcomp>K  r:   z/CVEFormatter.normalize_item.<locals>.<listcomp>rM   r3   )rf   rh   r=   )r   r   r   rM   r   r   r   r   8  s    

zCVEFormatter.normalize_itemN)rO   rP   rQ   r   r   rL   r   ro   rq   rR   r   r   r   r   r   r      sD   r   c                   @   sB   e Zd ZdZddddddZed Zdd	d
ddZedd Z	dS )CVEFilesFormatterz	CVE Filesr   r   z------------------ --------------------------------)r1   artifact_family
cve_statuscommon_nameckeyz^%(channel)-40s | %(artifact_family)-10s | %(cve_status)-10s | %(common_name)-18s | %(ckey)-32sZStatusr   r   Path)r   r   r   r   c                 C   s>   dd |   D }|d r.d|d |d f n|d |d< |S )Nc                 S   s   i | ]\}}||qS r   r   r[   r   r   r   r^   d  r:   z4CVEFilesFormatter.normalize_item.<locals>.<dictcomp>Zparent_channel_namer0   Zchannel_namer1   rf   r   r   r   r   r   r   b  s    z CVEFilesFormatter.normalize_itemN
rO   rP   rQ   r   r   rL   r   ro   rR   r   r   r   r   r   r   P  s   r   c                   @   s8   e Zd ZdZddddZed ZddiZedd	 Z	d
S )PackageFilesFormatterPackage Files<------------------------------------------------------------r   )r   r"   platformz.%(ckey)-60s | %(version)-10s | %(platform)-10sr   r   c                 C   s   | S r   r   r   r   r   r   r   y  s    z$PackageFilesFormatter.normalize_itemNr   r   r   r   r   r   l  s   r   c                   @   s@   e Zd ZdZddddddZed Zddd	d
Zedd Z	dS )PackageFilesFormatterWithCVEr   r   z	---------r   )r   	cve_scorer   r"   r   zT%(ckey)-60s | %(cve_score)-9s | %(cve_status)-10s | %(version)-10s | %(platform)-10sr   z	CVE Scorez
CVE Status)r   r   r   c                 C   s>   dd |   D }|d d u r&d|d< |d d u r:d|d< |S )Nc                 S   s   i | ]\}}||qS r   r   r[   r   r   r   r^     r:   z?PackageFilesFormatterWithCVE.normalize_item.<locals>.<dictcomp>r   zn/ar   r   r   r   r   r   r     s    z+PackageFilesFormatterWithCVE.normalize_itemNr   r   r   r   r   r   ~  s   r   c                   @   sl   e Zd ZdZdddddZed Zdd	d
dZg dZddhZ	e
dddZe
dddZe
dddZdS )HistoryFormatterZEventsr   z--------------------r   r   )event_id
event_typer_   data_summaryzH%(event_id)-36s | %(event_type)20s | %(created)32s | %(data_summary)-50sr
   r   ZSummary)r   r   r   )r_   datar   r   metar   r   r   Tc                 C   s   |  ||}| j| S r   r   rz   r   short_summaryr   r   r   r   r|     s    z!HistoryFormatter.format_list_itemc                    s`   dd |  D }|r<d fdd|d   D |d< n ddd |d   D |d< |S )	Nc                 S   s   i | ]\}}||qS r   r   r[   r   r   r   r^     r:   z3HistoryFormatter.normalize_item.<locals>.<dictcomp>z; c                    s&   g | ]\}}| j v rd ||f qS z%s: %s)short_summary_keysr7   rw   vrz   r   r   r     s   
z3HistoryFormatter.normalize_item.<locals>.<listcomp>r   r   c                 S   s   g | ]\}}d ||f qS r   r   r   r   r   r   r     r:   )rf   r=   r   r   r   r   r     s
    & zHistoryFormatter.normalize_itemc                 C   sJ   g }| |   | | j| j  |D ]}| | || q(d|S r}   r   )rz   rf   r   r~   r   r   r   r   r     s    zHistoryFormatter.format_listN)T)T)T)rO   rP   rQ   r   r   rL   r   ro   rq   r   r   r|   r   r   r   r   r   r   r     s    	r   c                   @   sN   e Zd ZdZdddZed ZdddZdd	gZe	dddZ
e	dd ZdS )SettingsFormatterzAdmin Settingsr   rI   r\   rs   z%(key)-36s | %(value)-12szSetting NameZValuer\   rs   Tc                 C   s   |S r   r   )rz   r   r   r   r   r   r     s    z SettingsFormatter.normalize_itemc                 C   s   |  dd | D S )Nc                 S   s   g | ]\}}||d qS )r   r   r   r   r   r   r     s   z;SettingsFormatter.format_object_as_list.<locals>.<listcomp>)r   rf   )rz   objr   r   r   format_object_as_list  s    
z'SettingsFormatter.format_object_as_listN)T)rO   rP   rQ   r   r   rL   r   ro   rq   r   r   r   r   r   r   r   r     s   
r   c                 C   s   t |}|| | |S r   )r   rN   )rM   r   logger	formatterr   r   r   format_packages  s    r   Nc                 C   s0   | }| dD ]}||vr"|  S || }q|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\   r   r   r   r     s    
r   c                 C   s   dd |  dD S )z Returns 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                 S   s   g | ]}|  r|  qS r   )strip)r7   r   r   r   r   r     r:   z(comma_string_to_list.<locals>.<listcomp>,r   )sr   r   r   comma_string_to_list  s    r   )N)Z
__future__r   Zdateutil.parserr   Z
parse_daterL   r&   r%   rC   rx   ry   r   rS   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s:    /0S*
