a
    ©!cÛ†  ã                
   @   s  d dl mZ d dl mZ d dl mZ d dlmZ d dlmZ 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lZd dlZd dlZd dlZd dlZd dlZe d¡Zd	Ze d
¡ZdZddddddddddœ	Zdd„ ZG dd„ de	jƒZG dd„ dejƒZG dd„ de ƒZ!dS )é    )Úabsolute_import)Úprint_function)Úunicode_literals)Ú_)Úcommands)ÚOptionParserNÚdnfz.%{name}-%{epoch}:%{version}-%{release}.%{arch}z%(-?\d*?){([:.\w]+?)}a  name, arch, epoch, version, release, reponame (repoid), from_repo, evr,
debug_name, source_name, source_debug_name,
installtime, buildtime, size, downloadsize, installsize,
provides, requires, obsoletes, conflicts, sourcerpm,
description, summary, license, url, reasonÚ	conflictsÚenhancesÚ	obsoletesÚprovidesÚ
recommendsÚrequiresZrequires_preÚsuggestsÚsupplements)	r	   r
   r   r   r   r   úrequires-prer   r   c                 C   sž   dd„ }dd„ }|   dd¡  dd¡} t ¡ D ]\}}|   ||¡} q,d	}d
}t | ¡D ]0}||| || ¡ … ƒ7 }|||ƒ7 }| ¡ }qT||| |d… ƒ7 }|S )z:Convert a rpm like QUERYFMT to an python .format() string.c                 S   s^   |   ¡ d }|   ¡ d }|rJ|d dkr:d|dd …  }nd| }d| }d| ¡  | d S )	Nr   é   ú-ú>ú<ú:z{0.ú})ÚgroupsÚlower)ZmatchobjZfillÚkey© r   ú>/usr/lib/python3.9/site-packages/dnf/cli/commands/repoquery.pyÚfmt_replD   s    zrpm2py_format.<locals>.fmt_replc                 S   s   |   dd¡  dd¡S )Nú{z{{r   z}})Úreplace)Ztxtr   r   r   ÚbracketsO   s    zrpm2py_format.<locals>.bracketsz\nÚ
z\tú	Ú r   N)r   ÚOPTS_MAPPINGÚitemsÚQFORMAT_MATCHÚfinditerÚstartÚend)Úqueryformatr   r    r   ÚvalueZfmtÚsposÚitemr   r   r   Úrpm2py_formatB   s    
r.   c                   @   s   e Zd ZdZdS )Ú_CommaSplitCallbackz\s*,\s*N)Ú__name__Ú
__module__Ú__qualname__ZSPLITTERr   r   r   r   r/   _   s   r/   c                   @   sº   e Zd ZdZejejejdœZde	e 
¡ ƒ ZedƒZedd„ ƒZedd„ ƒZd	d
„ Zdd„ Zdd„ Zdd„ Zd$dd„Zd%dd„Zd&dd„Zdd„ Zdd„ Zdd„ Zdd „ Zd'd"d#„ZdS )(ÚRepoQueryCommandzSA class containing methods needed by the cli to execute the repoquery command.
    )zrepoquery-nzrepoquery-nazrepoquery-nevra)Z	repoqueryZrqz$search for packages matching keywordc                 C   s,   | j r|j| j d | jr(|j| jd |S )z'Filter query by repoid and arch options)Zreponame)Úarch)ZrepoÚfiltermÚarches)ÚoptsÚqueryr   r   r   Úfilter_repo_archm   s
    z!RepoQueryCommand.filter_repo_archc              
   C   sš  | j ddddtdƒd | j ddtdƒd	 | j d
ddg tdtdƒd | j ddddtdƒd | j dg tdtdƒd | j dg tdtdƒd | j dg tdtdƒd | j dg tdtdƒd | j d g tdtd!ƒd | j d"g tdtd#ƒd | j d$g tdtd%ƒd | j d&g tdtd'ƒd | j d(g tdtd)ƒd |  ¡ }|j d*dtd+ƒd	 |j d,dtd-ƒd	 | j d.dtd/ƒd	 | j d0dtd1ƒd	 | j d2dtd3ƒd	 | j d4dtd5ƒd	 | j d6dtd7ƒd	 | j d8d9ttd:ƒd; | j d<dtd=ƒd	 |  ¡ }|j d>d?d@dAdtdBƒdC |j dDdEdFdAdtdGƒdC |j dHdIdJdAdtdKƒdC |j dLdMdAdtdNƒdC |j dOdPdQttdRƒdS | j dTdtdUƒd	 |j dVdQtdWtdXƒdY |j dZdQd[dWtd\ƒdY |j d]dQd^dWtd_ƒdY |j d`dtdaƒd	 |  ¡ }|j dbdcdddWtdeƒdY |j dfdcdddWtjdY |j dgdcdhdWtdiƒdY |j djdcdkdWtdlƒdY | j dmdtdnƒd	 |  ¡ }tdoƒtdpƒtdqƒtdrƒtdsƒtdtƒtduƒtdvƒtdwƒdxœ	}| ¡ D ]&\}}dy| }|j |dzdW||d{ q²| j d|dtd}ƒd	 td~ƒtdƒtd€ƒtdƒj	t
jjd‚tdƒƒd„œ}	|  ¡ }
|	 ¡ D ]&\}}dy| }|
j |d…dW||d{ q.|
j d†d…dWd‡tjd{ | j dˆdtd‰ƒd	 | j dŠd‹dŒtdƒdŽ d S )Nz-az--allZqueryallÚ
store_truezNQuery all packages (shorthand for repoquery '*' or repoquery without argument))ÚdestÚactionÚhelpz--show-duplicatesz(Query all versions of packages (default))r<   r=   z--archz
--archlistr6   z[arch]z show only results from this ARCH)r;   Údefaultr<   Úmetavarr=   z-fz--fileÚFILEú+z show only results that owns FILE)r?   Únargsr=   z--whatconflictsZREQz#show only results that conflict REQ)r>   r<   r?   r=   z--whatdependszjshows results that requires, suggests, supplements, enhances, or recommends package provides and files REQz--whatobsoletesz#show only results that obsolete REQz--whatprovidesz"show only results that provide REQz--whatrequiresz:shows results that requires package provides and files REQz--whatrecommendsz$show only results that recommend REQz--whatenhancesz"show only results that enhance REQz--whatsuggestsz"show only results that suggest REQz--whatsupplementsz%show only results that supplement REQú	--alldepsz=check non-explicit dependencies (files and Provides); defaultú--exactdepsz:check dependencies exactly as given, opposite of --alldepsú--recursivezOused with --whatrequires, and --requires --resolve, query packages recursively.z	--deplistz>show a list of all dependencies and what packages provide themz	--resolvez.resolve capabilities to originating package(s)z--treez"show recursive tree for package(s)z--srpmz#operate on corresponding source RPMz--latest-limitÚlatest_limitzOshow N latest packages for a given name.arch (or latest but N if N is negative))r;   Útyper=   z--disable-modular-filteringz-list also packages of inactive module streamsz-iz--infoÚ	queryinfoFz+show detailed information about the package)r;   r>   r<   r=   z-lz--listÚqueryfilelistz!show list of files in the packagez-sz--sourceÚquerysourcerpmzshow package source RPM namez--changelogsÚquerychangelogszshow changelogs of the packagez--qfz--queryformatr*   zfdisplay format for listing packages: "%%{name} %%{version} ...", use --querytags to view full tag list)r;   r>   r=   z--querytagsz-show available tags to use with --queryformatz--nevraÚstore_constzZuse name-epoch:version-release.architecture format for displaying found packages (default))r;   Úconstr<   r=   z--nvrz%{name}-%{version}-%{release}zQuse name-version-release format for displaying found packages (rpm query default)z--envraz.%{epoch}:%{name}-%{version}-%{release}.%{arch}zPuse epoch:name-version-release.architecture format for displaying found packagesz--groupmemberz=Display in which comps groups are presented selected packagesz--duplicatesÚ	pkgfilterÚ
duplicatedz/limit the query to installed duplicate packagesz--duplicatedz--installonlyÚinstallonlyz1limit the query to installed installonly packagesz--unsatisfiedÚunsatisfiedzClimit the query to installed packages with unsatisfied dependenciesz
--locationz5show a location from where packages can be downloadedz5Display capabilities that the package conflicts with.zaDisplay capabilities that the package can depend on, enhance, recommend, suggest, and supplement.z2Display capabilities that the package can enhance.z-Display capabilities provided by the package.z1Display capabilities that the package recommends.z1Display capabilities that the package depends on.zÚIf the package is not installed display capabilities that it depends on for running %%pre and %%post scriptlets. If the package is installed display capabilities that is depends for %%pre, %%post, %%preun and %%postun.z/Display capabilities that the package suggests.z5Display capabilities that the package can supplement.)	r	   Údependsr
   r   r   r   r   r   r   z--%sÚ
packageatr)r;   r<   rM   r=   ú--availablez Display only available packages.z Display only installed packages.zLDisplay only packages that are not present in any of available repositories.zQDisplay only packages that provide an upgrade for some already installed package.zIDisplay only packages that can be removed by "{prog} autoremove" command.©Úprogz2Display only packages that were installed by user.)Ú	installedZextrasZupgradesÚunneededÚuserinstalledÚlistz--autoremoverX   z--recentz%Display only recently edited packagesr   Ú*ZKEYzthe key to search for)rB   r?   r=   )Úadd_argumentr   r/   Zadd_mutually_exclusive_groupÚintÚQFORMAT_DEFAULTÚargparseZSUPPRESSr%   Úformatr   ÚutilÚ	MAIN_PROG)ÚparserZwhatrequiresformZoutformrN   Zpackage_attributeZ	help_msgsÚargZhelp_msgÚnameZ	help_listZ
list_groupZlist_argZhelp_argZswitchr   r   r   Úset_argparserv   s^   ÿÿþÿ
þ
þ
þ
þ
þ
þ
þ
þ
þÿÿ
ÿ
ÿÿÿÿ
ÿÿ
þ
þ
þþ
þÿ
þ
ÿý
ÿþþþþÿô
ÿ
ÿú
ÿ
þ
ÿzRepoQueryCommand.set_argparserc                 C   s    | j js| jjtjtjd d S )N)ÚstdoutÚstderr)r7   ÚquietÚcliZredirect_loggerÚloggingZWARNINGÚINFO©Úselfr   r   r   Úpre_configure  s    zRepoQueryCommand.pre_configurec                 C   sj  | j js| j ¡  | jj}| j jrJ| j jrB| j dd| j j ¡ nd| j _| j jrVd S | j j	rv| j jsvt
j tdƒ¡‚| j jrÄ| j jr”| j dd¡ t| j j| j jdko®| j j	gƒsÄt
j tdƒ¡‚| j jsÖ| j jr| j js| j jst
j td	 | j jrd
nd¡ƒ¡‚| j jr$| jj ¡  | j jdvr@| j jdksJ| j jrPd|_d|_| j jrfd|_d S )Nz--obsoletesú--r   zÊOption '--resolve' has to be used together with one of the '--conflicts', '--depends', '--enhances', '--provides', '--recommends', '--requires', '--requires-pre', '--suggests' or '--supplements' optionsrE   rD   r   zŸOption '--recursive' has to be used with '--whatrequires <REQ>' (optionally with '--alldeps', but not with '--exactdeps'), or with '--requires <REQ> --resolve'z;argument {} requires --whatrequires or --whatdepends optionrC   )rW   rY   rP   T)r7   ri   rj   Zredirect_repo_progressÚdemandsr   rS   Z_option_conflictÚ	querytagsÚresolver   ZCliErrorr   Ú	recursiveÚ	exactdepsÚanyÚwhatrequiresÚalldepsÚwhatdependsr`   ÚsrpmÚbaseZreposZenable_source_reposrZ   rN   Ú	availableZavailable_reposZsack_activationrK   Ú
changelogs)rn   rq   r   r   r   Ú	configure  sP    
ÿÿÿÿÿ

ÿÿ
zRepoQueryCommand.configurec           	   
   C   s  |j rlg }| dt|ƒ ¡ |jD ]>}|d }| d| d¡tj |d ¡tj |d ¡f ¡ q"d |¡S zpt	|ƒ}|j
rŒ| jj |¡W S |jrº|j}|s´ttdƒ |¡tjd	 |W S |jrÈ|jW S t|jƒ |¡W S W n6 ty } ztj t|ƒ¡‚W Y d }~n
d }~0 0 d S )
NzChangelog for %sÚ	timestampz* %s %s
%s
z%a %b %d %YZauthorÚtextr!   zPackage {} contains no files)Úfile)rK   ÚappendÚstrr}   Ústrftimer   Úi18nÚucdÚjoinÚPackageWrapperrH   r{   ÚoutputZ
infoOutputrI   ÚfilesÚprintr   r`   Úsysrh   rJ   Z	sourcerpmr.   r*   ÚAttributeErrorÚ
exceptionsÚError)	rn   r7   ÚpkgÚoutZchlogÚdtZpoZfilelistÚer   r   r   Úbuild_format_fnG  s0    
þ

z RepoQueryCommand.build_format_fnc              
   C   sJ   | j j ¡ jdd}|D ],}| | tj |¡j	| j jddd¡¡}q|S )NT©ÚemptyF)Úwith_providesZwith_filenames)
r{   Úsackr8   r5   ÚunionÚintersectionr   ÚsubjectÚSubjectÚget_best_query)rn   ZnevrasZ
base_queryÚresolved_nevras_queryZnevrar   r   r   Ú_resolve_nevrasc  s    ýÿz RepoQueryCommand._resolve_nevrasNc                 C   sD   |r|n|}|j |d}| |¡}| |¡}|r@| j|||d}|S )N©r   ©Údone)ÚfilterÚ
differencer™   Ú_do_recursive_deps)rn   Úquery_inÚquery_selectr¢   Zquery_requiredr   r   r   r¥   p  s    

z#RepoQueryCommand._do_recursive_depsFc                 C   sÖ   |   ||¡}|j|d}| |j|d¡}|r¾| |j|d¡}| |j|d¡}| |j|d¡}| |j|d¡}| |j|d¡}| |j|d¡}| |j|d	¡}| |j|d
¡}| jjrÒ|  ||¡}|S )N©Zrequires__globr    ©Zrecommends__glob©Zenhances__glob©Zsupplements__glob©Zsuggests__glob©r   ©r
   ©r   ©r   )rŸ   r£   r™   r7   rt   r¥   )rn   Únamesr8   Zall_dep_typesrž   Zdepqueryr   r   r   Úby_all_deps}  s    zRepoQueryCommand.by_all_depsc                 C   s€   |r|n| j j ¡ jdd}| j j ¡ jdd}| ¡ D ]}| |j|jd¡}q8| |¡}|rv| j	||| |¡d}| |¡S )NTr•   ©r   r¡   )
r{   r˜   r8   r5   Úrunr™   r£   r   r¤   Ú_get_recursive_providers_query)rn   r¦   Ú	providersr¢   Útr   r§   r   r   r   rµ   ›  s    
z/RepoQueryCommand._get_recursive_providers_queryc                 C   st   g }g }| j jD ]B}tjj |¡d }| d¡r<| |¡ q|r|dv r| |¡ q|rp| jj|d| jj	j
d}|S )Nr   z.rpm)ÚhttpÚftpr   ÚhttpsF)ÚstrictÚprogress)r7   r   r   ZpycompÚurlparseÚendswithr‚   r{   Zadd_remote_rpmsr‰   r¼   )rn   ZrpmnamesÚremote_packagesr   Zschemesr   r   r   Ú_add_add_remote_packages¥  s    
ÿz)RepoQueryCommand._add_add_remote_packagesc                 C   s¾  | j jrttƒ d S | j | j ¡ | jjj| j j	r8t
jnt
jd}| j jræ|  ¡ }i }| j j| jv rx| j| j j g|d< g }|jdd}|r¦| | jj ¡ j|d¡}| j jD ]2}| tjj|ddj| jjfd|dœ|¤Ž¡}q®|}| j jrþ| | jjj¡}| j jrR| j jrš| j jd	kršt| jj ¡ ƒ tj  t!d
 "dd| j j ¡ƒ¡‚nH| j jdkrr| #| jj$j%¡}n(| j jrš| j jdkršt&|| j jƒƒ }| j j'dkrÄ| j (|¡}| )|¡ *¡ }nž| j j'dkrà| j (|¡}n‚| j j'dkrPtj +| j¡}| ,| jjj-| jjj.¡ tj/ 0|¡}	d|	_1|	j2dd}
|
sLttj3 4|	 5¡ ¡ƒ d S | j jsb| ¡ }|  6| j |¡}|}| j j7rŽ|j| j j7d | j j8rÆ|j| j j8d}| |j|  9| j j8|¡d¡}| j j:rà|j| j j:d | j j;r|j| j j;d}|r|}n|j| j j;d | j j<rL| j j=r<|j| j j<d n|  >| j j<|¡}| j j?rÜ| j j=rÊ|j| j j?d}| |j| j j?d¡}| |j| j j?d¡}| |j| j j?d¡}| |j| j j?d¡}n|  >| j j?|d¡}| j j@r|j| j j@d}| |j|  9| j j@|¡d¡}| j jArL|j| j jAd}| |j|  9| j jA|¡d¡}| j jBr„|j| j jBd}| |j|  9| j jB|¡d¡}| j jCr¼|j| j jCd}| |j|  9| j jC|¡d ¡}| j jDrÔ| E| j jD¡}| jjF|dd!}| j jGrHg }|D ]<}|jH}|d urö| jj ¡ j||jId"d#}|| 2¡ 7 }qö| jj ¡ j|d}| j jJrš| j j<s†| j jKd$vr†tj  t!d%ƒj"tj3jLd&¡‚|  M||| j ¡ d S tNƒ }| j jKrätNƒ }| 2¡ D ]p}| j jdksÚ| jj$ O|¡r¸| j jKd'kr| P|jQ|jR |jS |jT |jU ¡ n| Pt&|tV| j jK ƒ¡ q¸| j jWrÌ| j jd	krZ|  6| j | jj ¡ ¡}n|  6| j | jj ¡  ¡ ¡}|j|d(}| j jXrœ| |  Y||¡¡}tNƒ }| E¡  2¡ D ]}| Z|  [| j |¡¡ q®n| Pd)d*„ |D ƒ¡ n | j j\r| 2¡ D ]"}| ]¡ }|d urö| Z|¡ qönf| j j^r*g }t_tN| 2¡ ƒƒD ]Ô}| j jdks^| jj$ O|¡r<g }| `d+ta|ƒ ¡ t_d,d-„ |jQD ƒƒD ]t}| `d.| ¡ tj |¡}| | jj¡}|  6| j | ¡ ¡}| j jbsØ| E¡ }| 2¡ D ]}| `d/ta|ƒ ¡ qàqˆ| `d0 c|¡¡ q<|r&td1 c|¡ƒ d S | j jdrB|  e|¡ d S | 2¡ D ]8}| j jdksl| jj$ O|¡rJ| Z|  [| j |¡¡ qJ|rº| j jfr¨td1 ct_|ƒ¡ƒ ntd0 ct_|ƒ¡ƒ d S )2N)ÚflagsZformsTr•   ©r   )Zignore_caseF)r—   r8   rW   z)argument {}: not allowed with argument {}rT   rp   rX   rY   rO   rP   rQ   )Zverify)Z
file__glob)Zconflicts__glob)r	   )r   )Zprovides__globr¨   r©   rª   r«   r¬   r­   r®   r¯   r°   )ZwarningÚsrc)re   Úevrr4   )r	   r
   r   r   r   r   r   r   zôNo valid switch specified
usage: {prog} repoquery [--conflicts|--enhances|--obsoletes|--provides|--recommends|--requires|--suggest|--supplements|--whatrequires] [key] [--tree]

description:
  For the given packages print a tree of the packages.rU   rR   r³   c                 s   s   | ]}t |ƒV  qd S ©N©rƒ   )Ú.0Úrelr   r   r   Ú	<genexpr>Q  ó    z'RepoQueryCommand.run.<locals>.<genexpr>z	package: c                 S   s   g | ]}t |ƒ‘qS r   rÆ   )rÇ   Úreqr   r   r   Ú
<listcomp>]  rÊ   z(RepoQueryCommand.run.<locals>.<listcomp>z  dependency: z   provider: r!   z

)gr7   rr   r‹   Ú
QUERY_TAGSrj   Z _populate_update_security_filterr{   r˜   r8   Zdisable_modular_filteringÚhawkeyZIGNORE_MODULAR_EXCLUDESZAPPLY_EXCLUDESr   rÀ   ZcommandÚnevra_formsr£   r™   r5   r   r›   rœ   r   ZrecentZ_recentZconfr|   rZ   Z	optparserZprint_usagerŽ   r   r   r`   Z	_unneededÚhistoryZswdbÚgetattrrN   Z_get_installonly_queryr¤   rO   Z
rpmdb_sackZ
_configureZinstallonlypkgsZinstallonly_limitÚgoalZGoalZprotect_running_kernelr´   ra   Z_format_resolve_problemsZproblem_rulesr9   r   ZwhatconflictsrŸ   ZwhatobsoletesZwhatprovidesrw   ru   r²   ry   ZwhatrecommendsZwhatenhancesZwhatsupplementsZwhatsuggestsrF   ZlatestZ_merge_update_filtersrz   Zsource_namerÄ   ZtreerS   rb   Ú	tree_seedÚsetZuser_installedÚupdater   r
   r   r   r   r$   rs   rt   rµ   Úaddr”   ÚlocationZremote_locationZdeplistÚsortedr‚   rƒ   Úverboser‡   ZgroupmemberÚ_group_member_reportrH   )rn   Úqr¿   ZkwarkZpkgsZquery_resultsr   rP   ZrpmdbrÒ   ZsolvedZorqueryZrelsZquery_for_provideZdependsqueryZpkg_listr   ZsrcnameZ	tmp_queryr8   r¶   r×   Zdeplist_outputrË   r›   Zproviderr   r   r   r´   ³  sh   ÿýÿÿÿÿÿ
ÿ
















ÿ
üÿ
ÿÿ


ÿ



ÿ



zRepoQueryCommand.runc                 C   s  i }| j jjD ] }tdd„ | ¡ D ƒƒ||j< qi }g }| ¡ D ]b}g }| ¡ D ]\}}	|j|	v rP| 	|¡ qP|r”| 
d t|ƒ¡g ¡ 	t|ƒ¡ q@| 	t|ƒ¡ q@g }
t| ¡ ƒD ]4\}}|
 	d t|ƒtdd„ | d¡D ƒƒ ¡¡ q´|
 	d t|ƒ¡¡ |
rtd |
¡ƒ d S )Nc                 S   s   g | ]
}|j ‘qS r   ©re   )rÇ   r   r   r   r   rÌ   }  rÊ   z9RepoQueryCommand._group_member_report.<locals>.<listcomp>ú$r!   c                 S   s   g | ]}d | ‘qS )z  @r   )rÇ   Úidr   r   r   rÌ     rÊ   )r{   Úcompsr   rÔ   Zpackages_iterrÞ   r´   r%   re   r‚   Ú
setdefaultr‡   rØ   rƒ   Úsplitr‹   )rn   r8   Zpackage_conf_dictÚgroupZgroup_package_dictZpkg_not_in_groupr   Zgroup_id_listZgroup_idZpackage_name_setr‰   r   Zpackage_listr   r   r   rÚ   z  s2    
ÿÿ$ÿz%RepoQueryCommand._group_member_reportc           
      C   s˜   |   ||¡}|dkr t|ƒ d S d}td|ƒD ]}|d7 }q.g }|jD ]}| t|ƒ¡ qFdtt|ƒƒ d d |¡ d }	t|d	 | d |	 ƒ d S )
Néÿÿÿÿú r   z|   ú[z: z, ú]z\_ )r”   r‹   Úranger   r‚   rƒ   Úlenr‡   )
rn   Úlevelr   r7   Z
pkg_stringZspacingÚxr   Z
requirepkgZreqstrr   r   r   Ú	grow_tree’  s    

"zRepoQueryCommand.grow_treerã   c                 C   s,  t t| ¡ ƒdd„ dD ]}|d u s.|dkr4tƒ n|}|j d¡sP|j d¡rV d S |  |||¡ ||vr| |¡ |jrêt||jƒ}i }t|ƒD ]6}	| j	j
 ¡ j|	d}
|
D ]}|||jd |j < q°q”| j	j
 ¡ jt| ¡ ƒd	}
n&|jr|  |jf|¡n|j|jd
}
|  |
|||d |¡ qd S )Nc                 S   s   | j S rÅ   rÜ   )Úpr   r   r   Ú<lambda>¡  rÊ   z,RepoQueryCommand.tree_seed.<locals>.<lambda>)r   rã   ZrpmlibZsolvabler³   Ú.rÂ   r¨   r   )rØ   rÔ   r´   re   Ú
startswithrë   rÖ   rS   rÑ   r{   r˜   r8   r5   r4   rZ   Úvaluesrx   r²   r£   rÓ   )rn   r8   Zaqueryr7   ré   Zusedpkgsr   ZstrpkgZarre   ZpkgqueryZquerypkgr   r   r   rÓ      s&    
ÿzRepoQueryCommand.tree_seed)N)F)N)rã   N)r0   r1   r2   Ú__doc__rÎ   Z	FORM_NAMEZFORM_NAZ
FORM_NEVRArÏ   ÚtupleÚkeysÚaliasesr   ZsummaryÚstaticmethodr9   rf   ro   r~   r”   rŸ   r¥   r²   rµ   rÀ   r´   rÚ   rë   rÓ   r   r   r   r   r3   c   s2   þ

 0



 Hr3   c                   @   sD   e Zd ZdZdd„ Zdd„ Zedd„ ƒZedd	„ ƒZ	ed
d„ ƒZ
dS )rˆ   z>Wrapper for dnf.package.Package, so we can control formatting.c                 C   s
   || _ d S rÅ   )Ú_pkg)rn   r   r   r   r   Ú__init__º  s    zPackageWrapper.__init__c                 C   sF   t | j|ƒ}|d u rdS t|tƒr:d tdd„ |D ƒƒ¡S tj |¡S )Nz(none)r!   c                 S   s   h | ]}t j |¡’qS r   )r   r…   r†   )rÇ   Zreldepr   r   r   Ú	<setcomp>Â  rÊ   z-PackageWrapper.__getattr__.<locals>.<setcomp>)	rÑ   rö   Ú
isinstancerZ   r‡   rØ   r   r…   r†   )rn   ÚattrZatrr   r   r   Ú__getattr__½  s    
zPackageWrapper.__getattr__c                 C   s&   | dkrt j  | ¡}| d¡S dS d S )Nr   z%Y-%m-%d %H:%Mr#   )ÚdatetimeZutcfromtimestampr„   )r   r’   r   r   r   Ú_get_timestampÅ  s    
zPackageWrapper._get_timestampc                 C   s   |   | jj¡S rÅ   )rý   rö   Ú	buildtimerm   r   r   r   rþ   Í  s    zPackageWrapper.buildtimec                 C   s   |   | jj¡S rÅ   )rý   rö   Úinstalltimerm   r   r   r   rÿ   Ñ  s    zPackageWrapper.installtimeN)r0   r1   r2   rñ   r÷   rû   rõ   rý   Úpropertyrþ   rÿ   r   r   r   r   rˆ   ¶  s   

rˆ   )"Z
__future__r   r   r   Zdnf.i18nr   Zdnf.clir   Zdnf.cli.option_parserr   r_   rü   rk   ÚrerŒ   r   Zdnf.exceptionsZdnf.subjectZdnf.utilrÎ   Z	getLoggerZloggerr^   Úcompiler&   rÍ   r$   r.   Z_SplitCallbackr/   ZCommandr3   Úobjectrˆ   r   r   r   r   Ú<module>   sL   

÷    W