Edit File: util.cpython-36.pyc
3 �ft`�O������������������@���sv��d�dl�mZ�d�dl�mZ�d�dl�mZ�ddlmZmZ�d�dlmZm Z �d�dl Z d�dlZd�dlZd�dl Zd�dlZd�dlZd�dlZd�dlZd�dlZd�dlZd�dlZd�dlZd�dlZd�dlZd�dlZd�dlZd�dlZd�dlZd�dlZejd�Ze j ��j!d kr�e j ��j!ndZ"e"j#��Z$d d��Z%d^dd �Z&d_dd�Z'dd��Z(dd��Z)dd��Z*dd��Z+dd��Z,dd��Z-dd��Z.dd ��Z/d!d"��Z0d#d$��Z1d%d&��Z2d'd(��Z3d)d*��Z4d+d,��Z5d-d.��Z6d/d0��Z7d1d2��Z8d3d4��Z9d5d6��Z:d7d8��Z;d9d:��Z<d;d<��Z=d=d>��Z>d?d@��Z?dAdB��Z@dCdD��ZAd`dFdG�ZBdHdIejCfdJdK�ZDdLdM��ZEdNdO��ZFdPdQ��ZGdRdS��ZHG�dTdU��dUeI�ZJG�dVdW��dWeK�ZLG�dXdY��dYeM�ZNdZd[��ZOd\d]��ZPdS�)a�����)�print_function)�absolute_import)�unicode_literals����)�PY3� basestring)�_�ucdN�dnfZyumc�������������C���s����t�|�dg���t�|�dg���t�|�dg���t��}x�|D�]�}||kr>q0|j|��tjjj|�d�}|jd�rr|�jj|��q0|r�|d kr�|�jj|��q0|j d �r�|�j j|dd����q0|�jj|��q0W�dS�)a��� Categorize :param values list into packages, groups and filenames :param namespace: argparse.Namespace, where specs will be stored :param values: list of specs, whether packages ('foo') or groups/modules ('@bar') or filenames ('*.rmp', 'http://*', ...) To access packages use: specs.pkg_specs, to access groups use: specs.grp_specs, to access filenames use: specs.filenames � filenames� grp_specs� pkg_specsr���z.rpm�http�ftp�file�https�@r���N)r���r���r���r���)�setattr�set�addr ����pycompZurlparse�endswithr����append� startswithr���r ���)� namespace�valuesZtmp_set�valueZschemes��r����/usr/lib/python3.6/util.py�_parse_specs7���s ���� r���c�������������C���s����|d�krt�jj��}t�jj|�||�}tjj|j�r6|jS�t |j g�}|jd|��|j��g}yt jjjt jj|�d��W�nB�tk r��}�z&|jr�tt|���tjt|���W�Y�d�d�}~X�nX�|jS�)Nr���T)r ����callbackZNullDownloadProgress�repoZRemoteRPMPayload�os�path�existsZ local_path�sumZ download_size�startZ_librepo_target�libdnfZ PackageTargetZdownloadPackagesZVectorPPackageTarget�RuntimeError�strict�IOError�str�logger�error)�url�confZprogressZploadZest_remote_sizeZtargets�er���r���r����_urlopen_progressW���s���� r1����w+bc�������������K���s����t�rd|kr|jdd��tj|f|�}y<|r@|jj|�|j����n tjj j |rR|jnd|�|j����W�n.�tk r��}�zt t|���W�Y�dd}~X�nX�|jd��|S�)z| Open the specified absolute url, return a file object which respects proxy setting even for non-repo downloads �b�encodingzutf-8Nr���)r���� setdefault�tempfileZNamedTemporaryFileZ_repoZdownloadUrl�filenor'���r!���Z DownloaderZdownloadURLZ_configr(���r*���r+����seek)r.���r/���r!����mode�kwargsZfor0���r���r���r����_urlopenh���s����$ r;���c�������������C���s ���|�j�|�r|�d�t|����}�|�S�)N)r����len)�s�rr���r���r����rtrim|���s���� r?���c���������������C���s���t�j��dkS�)Nr���)r"����geteuidr���r���r���r���� am_i_root����s����rA���c�������������C���s.���x(t�j|��D�]}t�jj|�|�}t|��qW�dS�)zBRemove all files and dirs under `path` Also see rm_rf() N)r"����listdirr#����join�rm_rf)r#����entryZcontained_pathr���r���r���� clear_dir����s����rF���c�������������C���sX���yt�j|�dd��W�n@�tk rR�}�z$|jtjks>t�jj|���rB|�W�Y�d�d�}~X�nX�d�S�)Ni���)r9���)r"����makedirs�OSError�errnoZEEXISTr#����isdir)Zdnamer0���r���r���r���� ensure_dir����s ����rK���c�������������C���sJ���g�}|�}x<t�jj|�\}}|s6|s(|�r4|jd|��P�|jd|��q W�|S�)z` Split path by path separators. Use os.path.join() to join the path back to string. r���)r"���r#����split�insert)r#����result�head�tailr���r���r���� split_path����s���� rQ���c�������������C���s6���yt�|��}W�n �tk r,���t�t|���}Y�nX�|dkS�)Nr���)r<���� TypeError�list)�iterable�lr���r���r����empty����s ����rV���c�������������C���s*���t�|��}yt|�S��tk r$���dS�X�dS�)zFReturns the first item from an iterable or None if it has no elements.N)�iter�next� StopIteration)rT����itr���r���r����first����s ����r[���c�������������C���s4���t�|��}ytdd��|D���S��tk r.���d�S�X�d�S�)Nc�������������s���s���|�]}|d�k r|V��qd�S�)Nr���)�.0�itemr���r���r���� <genexpr>����s����z!first_not_none.<locals>.<genexpr>)rW���rX���rY���)rT���rZ���r���r���r����first_not_none����s ����r_���c�������������C���s���t�j���t|���S�)N)�time�file_timestamp)�fnr���r���r����file_age����s����rc���c�������������C���s���t�j|��jS�)N)r"����stat�st_mtime)rb���r���r���r���ra�������s����ra���c���������������C���s4���yt�jtj���d�S��tk r.���dtj���S�X�d�S�)Nr���zUID: %s)�pwd�getpwuidr"���r@����KeyErrorr���r���r���r����get_effective_login����s����ri���c�������������C���s(���x"|D�]}|�j�|�}�|�dkr|S�qW�|�S�)z!Like dict.get() for nested dicts.N)�get)Zdct�keysZ not_found�kr���r���r����get_in����s ���� rm���c����������������s�����fdd�}t�j||g�g�f�S�)Nc����������������s���|�t���|����j|��|�S�)N)�boolr���)Zaccr]���)rb���r���r����splitter����s����z!group_by_filter.<locals>.splitter)� functools�reduce)rb���rT���ro���r���)rb���r����group_by_filter����s����rr���c�������������c���s&���x |D�]}||�r|�V��|V��qW�dS�)z/Insert an item into an iterable by a condition.Nr���)r]���rT���� conditionZ original_itemr���r���r���� insert_if����s���� rt���c�������������C���s*���yt�|���W�n�tk r ���dS�X�dS�dS�)z&Test whether an iterator is exhausted.TFN)rX���rY���)�iteratorr���r���r����is_exhausted����s ����rv���c�������������C���s*���t�|��r|�g}�t|�t�o(tdd��|�D���S�)Nc�������������s���s���|�]}t�|�t�d��@�V��qdS�)z*[?N)r���)r\����pr���r���r���r^�������s����z"is_glob_pattern.<locals>.<genexpr>)�is_string_type� isinstancerS����any)�patternr���r���r����is_glob_pattern����s����r|���c�������������C���s���t�rt|�t�S�t|�t�S�d�S�)N)r���ry���r+���r���)�objr���r���r���rx�������s���� rx���c����������������s�����fdd�}|S�)z�Decorator to get lazy attribute initialization. Composes with @property. Force reinitialization by deleting the <attrname>. c����������������s������fdd�}|S�)Nc����������������s8���y t�|����S��tk r2����|��}t|���|��|S�X�d�S�)N)�getattr�AttributeErrorr���)r}����val)�attrnamerb���r���r���� cached_getter���s���� z6lazyattr.<locals>.get_decorated.<locals>.cached_getterr���)rb���r����)r����)rb���r���� get_decorated����s����zlazyattr.<locals>.get_decoratedr���)r����r����r���)r����r����lazyattr����s���� r����c�������������G���s���t�t|�f|����S�)z�Like functools.map(), but return a list instead of an iterator. This means all side effects of fn take place even without iterating the result. )rS����map)rb����seqr���r���r����mapall��s����r����c�������������C���s8���t�jdt�j|���}tjjs4tj��d�}|r4|j|�}|S�)z6Convert time into locale aware datetime string object.z%cr���) r`���ZstrftimeZ localtimer ���r���r����localeZ getlocale�decode)Z timestamp�tZcurrent_locale_settingr���r���r����normalize_time��s���� r����c��������������C���sz���y\d}�dd��t�j|��D��}t|�dkrZ|d�}tdj|�|���}|j��}t|�dkS�Q�R�X�dS��ttfk rt���dS�X�dS�)z�Decide whether we are on line power. Returns True if we are on line power, False if not, None if it can not be decided. z/sys/class/power_supplyc�������������S���s���g�|�]}|j�d��r|�qS�)ZAC)r���)r\���Znoder���r���r���� <listcomp>&��s����zon_ac_power.<locals>.<listcomp>r���z{}/{}/onliner���N) r"���rB���r<����open�format�read�intr*���� ValueError)Z ps_folderZac_nodesZac_nodeZ ac_status�datar���r���r����on_ac_power��s����r����c��������������C���s����yddl�}�W�n�tk r ���dS�X�y0|�j��}|jdd�}|�j|d�}|jdd�}W�n�|�jk rh���dS�X�|dkrvdS�|dkr�d S�|dkr�dS�td |��dS�)z�Decide whether we are on metered connection. Returns: True: if on metered connection False: if not None: if it can not be decided r���Nzorg.freedesktop.NetworkManagerz/org/freedesktop/NetworkManagerzorg.freedesktop.DBus.PropertiesZMeteredr�������T��������Fz&Unknown value for metered property: %r)r���r����)r����r����)�dbus�ImportErrorZ SystemBusZ get_objectZ InterfaceZGetZ DBusExceptionr����)r����Zbus�proxyZifaceZmeteredr���r���r����on_metered_connection1��s&����r����c�������������C���s&���t�j|�\}}tjj|�|�t|�|�fS�)z�Use a predicate to partition entries into false entries and true entries. Credit: Python library itertools' documentation. )� itertools�teer ���r����filterfalse�filter)ZpredrT���Zt1Zt2r���r���r���� partitionN��s����r����c�������������C���s(���yt�j|���W�n�tk r"���Y�nX�d�S�)N)�shutilZrmtreerH���)r#���r���r���r���rD���W��s����rD���c�������������#���sF���t�������fdd�}t��|�|�}||�V��x||�}|s8P�|V��q*W�dS�)z�Split an iterable into tuples by a condition. Inserts a separator before each item which meets the condition and then cuts the iterable by these separators. c����������������s���t�tj��fdd�|���S�)Nc����������������s���|���kS�)Nr���)r0���)� separatorr���r����<lambda>g��s����z4split_by.<locals>.next_subsequence.<locals>.<lambda>)�tupler����� takewhile)rZ���)r����r���r����next_subsequencef��s����z"split_by.<locals>.next_subsequenceN)�objectrt���)rT���rs���r����ZmarkedZsubsequencer���)r����r����split_by]��s���� r����c�������������C���s���|�j�|�r|�t|�d���S�d�S�)N)r���r<���)r=����prefixr���r���r����strip_prefixu��s���� r����Fc���������� ���C���s8���|st�j|�t�j�rt�j|�d�S�t|�d���W�dQ�R�X�dS�)z{Create an empty file if it doesn't exist or bump it's timestamps. If no_create is True only bumps the timestamps. N�a)r"����access�F_OK�utimer����)r#���Z no_creater���r���r����touch{��s����r�����write��c�������������C���s����yh|�dkr|j�|��nP|�dkr(|j���n>|�dkrD|j�|��|j���n"|�dkrZt||d��ntd|����W�n>�tk r��}�z"tjdjt|�j t |����W�Y�d�d�}~X�nX�d�S�)Nr�����flushZwrite_flush�print)r���zUnsupported type: z{}: {})r����r����r����r����r*���r,����criticalr�����type�__name__r ���)�tp�msg�outr0���r���r���r����_terminal_messenger���s���� r����c�������������C���sn���d}t�|��dk}xXt|�dd�D�]H\}}|rD|dtd��d|��7�}n|dtd��d�7�}|dj|�7�}qW�|S�) z� Format string about problems in resolve :param resolve_problems: list with list of strings (output of goal.problem_rules()) :return: string r����r���)r&���z ZProblemz %d: z: z - )r<���� enumerater���rC���)Zresolve_problemsr����Zcount_problems�iZrsr���r���r����_format_resolve_problems���s����r����c�������������C���sX���|�j���d�}|�j��d�k r4|�j��dkr4||�j��d�7�}||�j���d�|�j���d�|�j���S�)N�-�0�:�.)�N�E�V�R�A)ZteZnevrar���r���r���� _te_nevra���s����r����c�������������C���s����t�jd��xH|�D�]@}|j��}d�}|d�k r.|j}djt|�|||j���}t�j|��qW�x:|D�]2}djt|�|j|j|j |j |j���}t�j|��qZW�d�S�)NzLogging transaction elementsz@RPM element: '{}', Key(): '{}', Key state: '{}', Failed() '{}': z^SWDB element: '{}', State: '{}', Action: '{}', From repo: '{}', Reason: '{}', Get reason: '{}')r,����debug�Key�stater����r�����Failedr+����actionZ from_repo�reasonZ get_reason)�rpm_transaction�swdb_transaction�rpm_el�tsiZ tsi_stater����r���r���r����_log_rpm_trans_with_swdb���s���� r����c������� ������C���sV��t�jjt�jjt�jjt�jjt�jjh}dd��|D��}d}d}x�|�D�]�}t|�}|j��}|d�ksft |d��r�x:|D�]2} | j t�jjkr�ql| j|kr�qlt | �|krl| }P�qlW�|d�ks�t |d��r�tjtd�j|���d}q>|j��r�t�jj|_ d}q>t�jj|_ q>W�x6|D�].}|j t�jjkr�tjtd�jt |����d}q�W�|�rBtjtd���|�rRt|�|��d�S�) Nc�������������S���s���g�|�]}|�qS�r���r���)r\���r����r���r���r���r�������s����z-_sync_rpm_trans_with_swdb.<locals>.<listcomp>FZpkgz%TransactionItem not found for key: {}Tz)TransactionSWDBItem not found for key: {}z#Errors occurred during transaction.)r'����transactionZ TransactionItemAction_DOWNGRADEDZTransactionItemAction_OBSOLETED�TransactionItemAction_REMOVEZTransactionItemAction_UPGRADEDZ!TransactionItemAction_REINSTALLEDr����r�����hasattrr����ZTransactionItemState_UNKNOWNr����r+���r,���r����r���r����r�����TransactionItemState_ERRORZTransactionItemState_DONEr����r����) r����r����Zrevert_actionsZ cached_tsiZel_not_foundr-���r����Zte_nevrar����Z tsi_candidater���r���r����_sync_rpm_trans_with_swdb���sH���� r����c���������������@���s$���e�Zd�Zdd��Zdd��Zdd��ZdS�)�tmpdirc�������������C���s���dt�jj�}tj|d�|�_d�S�)Nz%s-)r����)r ����constZPREFIXr6���Zmkdtempr#���)�selfr����r���r���r����__init__���s����ztmpdir.__init__c�������������C���s���|�j�S�)N)r#���)r����r���r���r���� __enter__���s����ztmpdir.__enter__c�������������C���s���t�|�j��d�S�)N)rD���r#���)r�����exc_type� exc_value� tracebackr���r���r����__exit__���s����ztmpdir.__exit__N)r����� __module__�__qualname__r����r����r����r���r���r���r���r�������s���r����c�������������������s(���e�Zd�ZdZ��fdd�Zdd��Z���ZS�)�Bunchz�Dictionary with attribute accessing syntax. In DNF, prefer using this over dnf.yum.misc.GenericHolder. Credit: Alex Martelli, Doug Hudgeon c����������������s���t�t|��j||��|�|�_d�S�)N)�superr����r�����__dict__)r�����args�kwds)� __class__r���r���r�������s����zBunch.__init__c�������������C���s���t�|��S�)N)�id)r����r���r���r����__hash__��s����zBunch.__hash__)r����r����r�����__doc__r����r����� __classcell__r���r���)r����r���r�������s���r����c�������������������s,���e�Zd�Z��fdd�Zdd��Zdd��Z���ZS�)� MultiCallListc����������������s���t�t|��j���|�j|��d�S�)N)r����r����r�����extend)r����rT���)r����r���r���r������s����zMultiCallList.__init__c����������������s������fdd�}|S�)Nc�����������������s�������fdd�}t�t|���S�)Nc����������������s���t�|���}|����S�)N)r~���)�v�method)r����r:����whatr���r���� call_what ��s���� z8MultiCallList.__getattr__.<locals>.fn.<locals>.call_what)rS���r����)r����r:���r����)r����r����)r����r:���r���rb�����s����z%MultiCallList.__getattr__.<locals>.fnr���)r����r����rb���r���)r����r����r����__getattr__��s����zMultiCallList.__getattr__c����������������s������fdd�}t�t||���S�)Nc����������������s���t�|������d�S�)N)r���)r]���)r����r����r���r����setter��s����z)MultiCallList.__setattr__.<locals>.setter)rS���r����)r����r����r����r����r���)r����r����r����__setattr__��s����zMultiCallList.__setattr__)r����r����r����r����r����r����r����r���r���)r����r���r������s���r����c���������� ���C���sn��t�g�g�g�g�g�g�g�g�g�g�g�d��}�xF|�D��]<}|jtjjkrJ|jj|��q(|jtjjkrf|j j|��q(|jtjj kr�|jtjjkr�|j j|��nD|jtjjkr�|jj|��n(|jtjjkr�|jj|��n|jj|��q(|jtjjkr�|jj|��q(|jtjjk�rL|jtjjk�r |jj|��n*|jtjjk�r>|jj|��n|jj|��q(|jtjjkr(|jj|��q(W�|S�)N)� downgraded�erased�erased_clean� erased_dep� installed�installed_group� installed_dep�installed_weak�reinstalled�upgraded�failed)r����r����r'���r����r����r����r���r����ZTransactionItemAction_DOWNGRADEr����ZTransactionItemAction_INSTALLr����ZTransactionItemReason_GROUPr����Z TransactionItemReason_DEPENDENCYr����Z%TransactionItemReason_WEAK_DEPENDENCYr����r����ZTransactionItemAction_REINSTALLr����r����ZTransactionItemReason_CLEANr����r����r����ZTransactionItemAction_UPGRADEr����)r����r3���r����r���r���r����_make_lists��sH���� r���c����������������s������fdd�}t�jj|�}��jd|d�\}}|j|�}g�}x�td�|jftd�|jftd�|j|j �|j �|j�ftd�|jftd �|ftd �|j |j�|j�ftd�|jfgD�]&\} } |j|| t| tj|�d����q�W�|S�) al��Returns a human-readable summary of the results of the transaction. :param action_callback: function generating output for specific action. It takes two parameters - action as a string and list of affected packages for this action :return: a list of lines containing a human-readable summary of the results of the transaction c����������������s����|�j�|j�k|�j�|j�k��}|dkr$|S�tj|�j�|�j|�j|�j|�jd�}tj|j�|j|j|j|jd�}|j|��j�}|dkrz|S�|�j|jk|�j|jk��S�)z�Compares two transaction items or packages by nevra. Used as a fallback when tsi does not contain package object. r���)�name�epoch�version�release�arch) r���hawkeyZNEVRAr��r��r��r��Zevr_cmpZsack)Zitem1Zitem2�retZnevra1Znevra2)�baser���r����_tsi_or_pkg_nevra_cmpP��s����z7_post_transaction_output.<locals>._tsi_or_pkg_nevra_cmpF)Zreport_problemsr����ZUpgradedZ DowngradedZ InstalledZReinstalledZSkippedZRemovedr����)�key)r ����utilr���Z_skipped_packages�unionr���r����r����r����r����r����r����r����r����r����r����r����r�����sortedrp���� cmp_to_key)r��r����Zaction_callbackr ��Z list_bunchZskipped_conflictsZskipped_brokenZskippedr����r����Ztsisr���)r��r����_post_transaction_outputF��s(���� r��)N)NNr2���)F)QZ __future__r���r���r���r���r���r���Zdnf.i18nr���r ����argparser ���Zdnf.callbackZ dnf.constZ dnf.pycomprI���rp���r��r����r����Zloggingr"���rf���r�����sysr6���r`���Zlibdnf.repor'���Zlibdnf.transactionZ getLoggerr,����ArgumentParser�progZ MAIN_PROG�upperZMAIN_PROG_UPPERr���r1���r;���r?���rA���rF���rK���rQ���rV���r[���r_���rc���ra���ri���rm���rr���rt���rv���r|���rx���r����r����r����r����r����r����rD���r����r����r�����stdoutr����r����r����r����r����r����r�����dictr����rS���r����r���r��r���r���r���r����<module>���s���� (-