
    kd$                        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kD  Z G d dej                        Z G d	 d
e      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d dej                        Z G d de      Z G d d e      Zd! Zd" Zd$d#Zy)%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                   "    e Zd ZdZdZddZd Zy)r   zInternal error of the aptdaemonzorg.debian.aptc                 h    t        |      }t        j                  j                  | |       || _        y N)_convert_unicodedbusDBusException__init___message)selfmessages     2/usr/lib/python3/dist-packages/aptdaemon/errors.pyr   zAptDaemonError.__init__/   s)    "7+##D'2    c                     t         rt        j                  j                  |       S | j                  j                  d      S )zOverwrite the DBusException method, since it calls
        Exception.__str__() internally which doesn't support unicode or
        or non-ascii encodings.UTF-8)PY3Kr   r   get_dbus_messager   encoder   s    r   r!   zAptDaemonError.get_dbus_message4   s3     %%66t<<==''00r   N )__name__
__module____qualname____doc___dbus_error_namer   r!    r   r   r   r   )   s    )' 
1r   r   c                       e Zd ZdZdZy)r   3Error if a transaction has already been configured.z(org.debian.apt.TransactionRoleAlreadySetNr&   r'   r(   r)   r*   r+   r   r   r   r   >       =Ar   r   c                       e Zd ZdZdZy)r   r-   (org.debian.apt.TransactionAlreadyRunningNr.   r+   r   r   r   r   E   r/   r   r   c                       e Zd ZdZdZy)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     Er   r	   c                       e Zd ZdZdZy)r   z;Error if a transaction was initialized by a different user.r1   Nr.   r+   r   r   r   r   U   s    EAr   r   c                   (    e Zd ZdZdZddZd Zd Zy)r
   zDInternal error if a transaction could not be processed successfully.z org.debian.apt.TransactionFailedc                     |s|j                  dd      }t        |D cg c]  }t        |       c}      }t        |      }|| _        || _        || _        t        j                  | |d||z         y c c}w )N%z%%: )replacetupler   codedetailsdetails_argsr   r   )r   r:   r;   argsargs        r   r   zTransactionFailed.__init__b   sn    ooc40Gt<&s+<="7+	 $$&GH =s   A6c                 t    dt         j                  j                  | j                        d| j                  S )NzTransaction failed: 
)	aptdaemonenumsget_error_string_from_enumr:   r;   r#   s    r   __unicode__zTransactionFailed.__unicode__m   s)    ::499E 	r   c                 l    t         r| j                         S | j                         j                  d      S )Nzutf-8)r    rD   r"   r#   s    r   __str__zTransactionFailed.__str__r   s.    ##%%##%,,W55r   Nr$   )r&   r'   r(   r)   r*   r   rD   rF   r+   r   r   r
   r
   \   s    N9	I
6r   r
   c                       e Zd ZdZdZy)r   zInvalid meta data givenzorg.debian.apt.InvalidMetaDataNr.   r+   r   r   r   r   y   s    !7r   r   c                       e Zd ZdZdZd Zy)r   zInvalid proxy givenzorg.debian.apt.InvalidProxyc                 6    t         j                  | d|z         y )NzInvalidProxyError: %s)r   r   )r   proxys     r   r   zInvalidProxyError.__init__   s    &=&EFr   N)r&   r'   r(   r)   r*   r   r+   r   r   r   r      s    4Gr   r   c                       e Zd ZdZdZy)r   z.Internal error if a transaction was cancelled.z#org.debian.apt.TransactionCancelledNr.   r+   r   r   r   r      s    8<r   r   c                       e Zd ZdZdZy)r   zThe added repository is invalidz org.debian.apt.RepositoryInvalidNr.   r+   r   r   r   r      s    )9r   r   c                       e Zd Zy)PolicyKitErrorN)r&   r'   r(   r+   r   r   rN   rN      s    r   rN   c                       e Zd ZdZd Zy)r   z-org.freedesktop.PolicyKit.Error.NotAuthorizedc                 j    t         j                  j                  | |d|       || _        || _        y )Nr7   )r   r   r   	action_idsubject)r   rR   rQ   s      r   r   zNotAuthorizedError.__init__   s+    ##Dgy*IJ"r   N)r&   r'   r(   r*   r   r+   r   r   r   r      s    Fr   r   c                       e Zd ZdZy)AuthorizationFailedz&org.freedesktop.PolicyKit.Error.FailedN)r&   r'   r(   r*   r+   r   r   rT   rT      s    ?r   rT   c                 l     t        j                         dd \  }}}t                f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.
    N   c                  H   	 |d   fd|d<   	  | i |S # t         $ rN t        |       }	 j                  d      }||   fd||<   t        |      } n# t        t
        f$ r Y nw xY wY _w xY w# t        j                  j                  $ r}t        |      d }~ww xY w)Nerror_handlerc                 &     t        |             S r   r   errrX   s    r   <lambda>zIconvert_dbus_exception.<locals>._convert_dbus_exception.<locals>.<lambda>   s    -$S)3+ r   c                 &     t        |             S r   rZ   r[   s    r   r]   zIconvert_dbus_exception.<locals>._convert_dbus_exception.<locals>.<lambda>   s    =(-,/ r   )
KeyErrorlistindexr9   
IndexError
ValueErrorr   
exceptionsr   r   )r=   kwargs_argsra   errorrX   argnamesfuncs        @r   _convert_dbus_exceptionz7convert_dbus_exception.<locals>._convert_dbus_exception   s    	+"?3M'+F?#	.(((  
	$JE$ 7 %e /eU| 
+ 
	$  ,, 	.&u--	.sI    A4 A1AA1A+(A1*A++A10A14B!BB!)inspectgetfullargspecr   )ri   varargsre   defaultsrj   rh   s   `    @r   r   r      sC     +2*@*@*Fr*J'Hgvx
4[. .* #"r   c                    t        | t        j                        s| S | j                         }| j	                         }|t
        j                  k(  rt        |j                  dd       S |t        j                  k(  rt        |j                  dd       S |t        j                  k(  rt        |j                  dd       S t        t        t        t        t        t        t         t"        fD ]  }||j                  k(  s ||      c S  | 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*   splitrT   r   r   r   r   r   r   r   r   r   )rg   	dbus_namedbus_msg	error_clss       r   r   r      s     eT//0##%I%%'H%666 (..a"899	)::	:"HNN3$:;;	(99	9!8>>#q#9::$&?/1C*,=*,BD '	 	222X&&' Lr   c                     t         r t        | t              st        | |d      } | S t         st        | t              st        | |d      } | S )zAlways return an unicode.ignore)errors)r    rr   strunicode)textencodings     r   r   r      sD    JtS)4(3 K *T73tXh7Kr   )r   )r)   
__author____all__rk   	functoolsr   sysr   aptdaemon.enumsrA   version_infomajorr    r   r   r   r   r	   r   r
   r   r   r   r   rN   r   rT   r   r   r   r+   r   r   <module>r      s   " 5
#   
  
!1T'' 1*B BB BE> EB B6 6:8> 8G G=> =:^ :	T'' 	 @, @
#B.r   