U
    :>P                     @   s6  d Z dZdZddlZddlmZ ddlZddlZddlZ	ej
jdkZG dd dej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G dd deZG dd deZG dd deZG dd dejZG dd deZG dd  d eZd!d" Zd#d$ Zd(d&d'ZdS ))zException classesz%Sebastian Heinlein <devel@glatzor.de>)AptDaemonErrorForeignTransactionInvalidMetaDataErrorInvalidProxyErrorRepositoryInvalidErrorTransactionAlreadyRunningTransactionCancelledTransactionAlreadySimulatingTransactionFailedTransactionRoleAlreadySetNotAuthorizedErrorconvert_dbus_exceptionget_native_exception    N)wraps   c                   @   s&   e Zd ZdZdZd	ddZdd ZdS )
r   zInternal error of the aptdaemonzorg.debian.apt c                 C   s    t |}tj| | || _d S N)_convert_unicodedbusDBusException__init___message)selfmessage r   2/usr/lib/python3/dist-packages/aptdaemon/errors.pyr   /   s    zAptDaemonError.__init__c                 C   s    t rtj| S | jdS dS )zOverwrite the DBusException method, since it calls
        Exception.__str__() internally which doesn't support unicode or
        or non-ascii encodings.UTF-8N)PY3Kr   r   get_dbus_messager   encoder   r   r   r   r   4   s    zAptDaemonError.get_dbus_messageN)r   )__name__
__module____qualname____doc___dbus_error_namer   r   r   r   r   r   r   )   s   
r   c                   @   s   e Zd ZdZdZdS )r
   3Error if a transaction has already been configured.z(org.debian.apt.TransactionRoleAlreadySetNr!   r"   r#   r$   r%   r   r   r   r   r
   >   s   r
   c                   @   s   e Zd ZdZdZdS )r   r&   (org.debian.apt.TransactionAlreadyRunningNr'   r   r   r   r   r   E   s   r   c                   @   s   e Zd ZdZdZdS )r   zZError if a transaction should be simulated but a simulation is
    already processed.
    z+org.debian.apt.TransactionAlreadySimulatingNr'   r   r   r   r   r   L   s   r   c                   @   s   e Zd ZdZdZdS )r   z;Error if a transaction was initialized by a different user.r(   Nr'   r   r   r   r   r   U   s   r   c                   @   s.   e Zd ZdZdZdddZdd Zdd	 Zd
S )r	   zDInternal error if a transaction could not be processed successfully.z org.debian.apt.TransactionFailedr   c                 G   sX   |s| dd}tdd |D }t|}|| _|| _|| _t| d||| f  d S )N%z%%c                 S   s   g | ]}t |qS r   )r   ).0argr   r   r   
<listcomp>f   s     z.TransactionFailed.__init__.<locals>.<listcomp>%s: %s)replacetupler   codedetailsZdetails_argsr   r   )r   r0   r1   argsr   r   r   r   b   s    zTransactionFailed.__init__c                 C   s   dt j| j| jf S )NzTransaction failed: %s
%s)	aptdaemonZenumsZget_error_string_from_enumr0   r1   r    r   r   r   __unicode__m   s
    zTransactionFailed.__unicode__c                 C   s   t r|  S |  dS d S )Nzutf-8)r   r4   r   r    r   r   r   __str__r   s    zTransactionFailed.__str__N)r   )r!   r"   r#   r$   r%   r   r4   r5   r   r   r   r   r	   \   s
   
r	   c                   @   s   e Zd ZdZdZdS )r   zInvalid meta data givenzorg.debian.apt.InvalidMetaDataNr'   r   r   r   r   r   y   s   r   c                   @   s   e Zd ZdZdZdd ZdS )r   zInvalid proxy givenzorg.debian.apt.InvalidProxyc                 C   s   t | d|  d S )NzInvalidProxyError: %s)r   r   )r   proxyr   r   r   r      s    zInvalidProxyError.__init__N)r!   r"   r#   r$   r%   r   r   r   r   r   r      s   r   c                   @   s   e Zd ZdZdZdS )r   z.Internal error if a transaction was cancelled.z#org.debian.apt.TransactionCancelledNr'   r   r   r   r   r      s   r   c                   @   s   e Zd ZdZdZdS )r   zThe added repository is invalidz org.debian.apt.RepositoryInvalidNr'   r   r   r   r   r      s   r   c                   @   s   e Zd ZdS )PolicyKitErrorN)r!   r"   r#   r   r   r   r   r7      s   r7   c                   @   s   e Zd ZdZdd ZdS )r   z-org.freedesktop.PolicyKit.Error.NotAuthorizedc                 C   s&   t j| d||f  || _|| _d S )Nr-   )r   r   r   	action_idsubject)r   r9   r8   r   r   r   r      s    zNotAuthorizedError.__init__N)r!   r"   r#   r%   r   r   r   r   r   r      s   r   c                   @   s   e Zd ZdZdS )AuthorizationFailedz&org.freedesktop.PolicyKit.Error.FailedN)r!   r"   r#   r%   r   r   r   r   r:      s   r:   c                    s,   t \ }}}t fdd}|S )zA decorator which maps a raised DBbus exception to a native one.

    This decorator requires introspection to the decorated function. So it
    cannot be used on any already decorated method.
    c                     s   z|d  W nd t k
rp   t| }zd}||  W n ttfk
rR   Y nX  fdd||< t|} Y nX  fdd|d< z| |W S  tjjk
r } zt	|W 5 d }~X Y nX d S )Nerror_handlerc                    s    t | S r   r   errr;   r   r   <lambda>   s   zIconvert_dbus_exception.<locals>._convert_dbus_exception.<locals>.<lambda>c                    s    t | S r   r<   r=   r?   r   r   r@      s   )
KeyErrorlistindex
IndexError
ValueErrorr/   r   
exceptionsr   r   )r2   kwargsZ_argsrC   errorZargnamesfuncr?   r   _convert_dbus_exception   s     
z7convert_dbus_exception.<locals>._convert_dbus_exception)inspectZ
getargspecr   )rJ   ZvarargsrG   defaultsrK   r   rI   r   r      s    r   c                 C   s   t | tjs| S |  }|  }|tjkr:t|dd S |tjkrTt|dd S |t	jkrnt	|dd S t
tttttttfD ]}||jkr||  S q| S )zMap a DBus exception to a native one. This allows to make use of
    try/except on the client side without having to check for the error name.
    :   )
isinstancer   r   get_dbus_namer   r	   r%   splitr:   r   r   r
   r   r   r   r   r   r   )rH   	dbus_nameZdbus_msgZ	error_clsr   r   r   r      s*    


   
r   r   c                 C   s>   t rt| tst| |dd} nt s:t| ts:t| |dd} | S )zAlways return an unicode.ignore)errors)r   rP   strZunicode)textencodingr   r   r   r      s
    r   )r   )r$   
__author____all__rL   	functoolsr   sysr   Zaptdaemon.enumsr3   version_infomajorr   r   r   r
   r   r   r   r	   r   r   r   r   r7   r   r:   r   r   r   r   r   r   r   <module>   s0   	

!