a
    ©!c¢  ã                   @   s    d dl mZ d dl mZ d dl mZ d dlZd dlmZ d dlmZ d dl	m
Z
mZmZ d dl	Zd dlZd dlZd dlZd dlZe d¡ZG d	d
„ d
ejƒZdS )é    )Úabsolute_import)Úprint_function)Úunicode_literalsN)Úcommands)ÚOptionParser)ÚucdÚ_ÚC_Údnfc                   @   sP   e Zd ZdZdZedƒZedd„ ƒZdd„ Z	dd	„ Z
d
d„ Zdd„ Zdd„ ZdS )ÚSearchCommandzTA class containing methods needed by the cli to execute the
    search command.
    )ÚsearchZsez+search package details for the given stringc              	   C   s<   | j ddtdƒd | j ddtdƒdgd tjtd	ƒd
 d S )Nz--allÚ
store_truez'search also package description and URL)ÚactionÚhelpÚquery_stringú+ZKEYWORDÚallzKeyword to search for)ÚnargsÚmetavarÚchoicesÚdefaultr   r   )Úadd_argumentr   r   ZPkgNarrowCallback)Úparser© r   ú;/usr/lib/python3.9/site-packages/dnf/cli/commands/search.pyÚset_argparser0   s    ÿýzSearchCommand.set_argparserc                    s$  t  dtddƒfdtddƒfdtddƒfdtd	ƒff¡‰ ‡ fd
d„‰‡‡fdd„}tj ¡ }|D ] }ˆ |d|¡ ˆ |d|¡ q`ˆjj	r²|D ] }ˆ |d|¡ ˆ |d|¡ qŽn6t
|ƒ}t| ¡ ƒ}|D ]}t
| |¡ƒ|krÊ||= qÊd}d}	d}
d}d}ˆjjjs$ˆjj ¡ j| ¡ d ¡ }tƒ }|jd|dD ]Ê}ˆjjjsp|j|j |v r^q8| |j|j ¡ || |¡krŽ| |¡}d}|	| |¡kr¬| |¡}	d}|
| |¡|	kkrÒ| |¡|	k}
d}|rè||
||	ƒ d}ˆjj || |¡|¡ q8t
|ƒdkr t tdƒ¡ dS )z0Search for simple text tags in a package object.ÚnameZlongÚNameÚsummaryZSummaryÚdescriptionZDescriptionÚurlZURLc                    s    z
ˆ |  W S    |  Y S 0 d S )Nr   )Úattr)Ú	TRANS_TBLr   r   Ú_translate_attrC   s    
z.SearchCommand._search.<locals>._translate_attrc                    s^   t ˆ |ƒ}tdƒ |¡}| r*tdƒ| }ntdƒ| }ˆjj |d |¡ ¡}tt|ƒƒ d S )Nz & z%s Exactly Matched: %%sz%s Matched: %%sz, )Úmapr   ÚjoinÚbaseÚoutputZ
fmtSectionÚprintr   )Úexact_matchÚattrsÚkeysZtrans_attrsZtrans_attrs_strZsection_textÚ	formatted)r#   Úselfr   r   Ú_print_section_headerI   s    
z4SearchCommand._search.<locals>._print_section_headerNF)ÚpkgT)ÚreverseZlimit_tor   zNo matches found.) ÚcollectionsÚOrderedDictr	   r   r
   Zmatch_counterZMatchCounterÚ_search_countedÚoptsr   ÚlenÚlistr+   Úmatched_needlesr&   ZconfZshowdupesfromreposÚsackÚqueryÚfiltermZlatestÚsetÚsortedr   ZarchÚaddZmatched_keysZmatched_haystacksr'   ZmatchcallbackÚloggerÚinfo)r-   Úargsr.   ÚcounterÚargZneedlesZpkgsr/   Z
used_attrsr7   r)   Zprint_section_headerÚlimitÚseenr   )r"   r#   r-   r   Ú_search9   sb    
ü


zSearchCommand._searchc                 C   s`   d| |i}t j |¡r$d| |i}| jj ¡ jtjfi |¤Ž}| 	¡ D ]}| 
|||¡ qH|S )Nz
%s__substrz%s__glob)r
   ÚutilZis_glob_patternr&   r8   r9   r:   ÚhawkeyZICASEÚrunr=   )r-   rA   r!   ZneedleZfdictÚqr/   r   r   r   r3   ˆ   s    zSearchCommand._search_countedc                 C   s    | j js| jjtjtjd d S )N)ÚstdoutÚstderr)r4   ÚquietÚcliZredirect_loggerÚloggingZWARNINGÚINFO©r-   r   r   r   Úpre_configure‘   s    zSearchCommand.pre_configurec                 C   sD   | j js| j ¡  | jj}d|_d|_d|_| j jp:| j j	| j _d S )NTF)
r4   rL   rM   Zredirect_repo_progressÚdemandsZavailable_reposZfresh_metadataZsack_activationr   Zquery_string_action)r-   rR   r   r   r   Ú	configure•   s    
zSearchCommand.configurec                 C   s   t  tdƒ¡ |  | jj¡S )NzSearching Packages: )r>   Údebugr   rE   r4   r   rP   r   r   r   rH   ž   s    zSearchCommand.runN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úaliasesr   r   Ústaticmethodr   rE   r3   rQ   rS   rH   r   r   r   r   r   (   s   
O		r   )Z
__future__r   r   r   r1   Zdnf.clir   Zdnf.cli.option_parserr   Zdnf.i18nr   r   r	   r
   Zdnf.match_counterZdnf.utilrG   rN   Z	getLoggerr>   ZCommandr   r   r   r   r   Ú<module>   s   
