B
    0²ô`Ã!  ã               @   sš   d Z dddddddg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dS )zInterface-specific exceptions
ÚInvalidÚDoesNotImplementÚBrokenImplementationÚBrokenMethodImplementationÚMultipleInvalidÚBadImplementsÚInvalidInterfacec               @   s   e Zd ZdZdS )r   z A specification is violated
    N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© r   r   úH/home/dcms/DCMS/lib/python3.7/site-packages/zope/interface/exceptions.pyr      s   c               @   sj   e Zd ZdZdZeZdZddd„Ze	dd„ ƒZ
e	d	d
„ ƒZe	dd„ ƒZe	dd„ ƒZdZdZdZdd„ ZdS )Ú_TargetInvalidé    é   z<Not Given>Nc             C   s&   y
| j | S  | jk
r    |S X d S )N)ÚargsÚ_NOT_GIVEN_CATCH)ÚselfÚixÚdefaultr   r   r   Ú_get_arg_or_default8   s    
z"_TargetInvalid._get_arg_or_defaultc             C   s   |   | j¡S )N)r   Ú_IX_INTERFACE)r   r   r   r   Ú	interface>   s    z_TargetInvalid.interfacec             C   s   |   | j| j¡S )N)r   Ú
_IX_TARGETÚ
_NOT_GIVEN)r   r   r   r   ÚtargetB   s    z_TargetInvalid.targetc             C   s   | j }|| jkrdS d|f S )Nz	An objectzThe object %r)r   r   )r   r   r   r   r   Ú_str_subjectZ   s    
z_TargetInvalid._str_subjectc             C   s   d| j p
d S )Nz$has failed to implement interface %sz	<Unknown>)r   )r   r   r   r   Ú_str_descriptiona   s    z_TargetInvalid._str_descriptionz: z	<unknown>Ú.c             C   s   d| j | j| j| j| jf S )Nz%s %s%s%s%s)r   r   Ú_str_conjunctionÚ_str_detailsÚ_str_trailer)r   r   r   r   Ú__str__k   s    z_TargetInvalid.__str__)N)r   r	   r
   r   r   Ú
IndexErrorr   r   r   Úpropertyr   r   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   a  
    DoesNotImplement(interface[, target])

    The *target* (optional) does not implement the *interface*.

    .. versionchanged:: 5.0.0
       Add the *target* argument and attribute, and change the resulting
       string value of this object accordingly.
    z.Does not declaratively implement the interfaceN)r   r	   r
   r   r    r   r   r   r   r   u   s   	c               @   s:   e Zd ZdZejd Zed Zedd„ ƒZ	edd„ ƒZ
dS )r   a[  
    BrokenImplementation(interface, name[, target])

    The *target* (optional) is missing the attribute *name*.

    .. versionchanged:: 5.0.0
       Add the *target* argument and attribute, and change the resulting
       string value of this object accordingly.

       The *name* can either be a simple string or a ``Attribute`` object.
    r   c             C   s
   | j d S )Nr   )r   )r   r   r   r   Úname“   s    zBrokenImplementation.namec             C   s    dt | jtƒrt| jƒn| j S )Nz!The %s attribute was not provided)Ú
isinstancer%   ÚstrÚrepr)r   r   r   r   r    —   s    z!BrokenImplementation._str_detailsN)r   r	   r
   r   r   r   Z_IX_NAMEr   r$   r%   r    r   r   r   r   r   ƒ   s
   
c               @   sT   e Zd ZdZdZed Zed Zedd„ ƒZedd„ ƒZ	e
dd	„ ƒZed
d„ ƒZdS )r   a¡  
    BrokenMethodImplementation(method, message[, implementation, interface, target])

    The *target* (optional) has a *method* in *implementation* that violates
    its contract in a way described by *mess*.

    .. versionchanged:: 5.0.0
       Add the *interface* and *target* argument and attribute,
       and change the resulting string value of this object accordingly.

       The *method* can either be a simple string or a ``Method`` object.

    .. versionchanged:: 5.0.0
       If *implementation* is given, then the *message* will have the
       string "implementation" replaced with an short but informative
       representation of *implementation*.

    é   r   c             C   s
   | j d S )Nr   )r   )r   r   r   r   Úmethod¶   s    z!BrokenMethodImplementation.methodc             C   s
   | j d S )Nr   )r   )r   r   r   r   Úmessº   s    zBrokenMethodImplementation.messc          	      s    dd l }y|j}t}W n, tk
rB   |j}|j‰ ‡ fdd„}Y nX y|| ƒ}W n ttfk
rl   t| ƒS X y
| j	}W n tk
r’   | j
}Y nX |||ƒ S )Nr   c                s   ˆ | Ž S )Nr   )Úsig)Úfr   r   Ú<lambda>É   ó    zABrokenMethodImplementation.__implementation_str.<locals>.<lambda>)ÚinspectÚ	signaturer'   ÚAttributeErrorÚ
getargspecÚformatargspecÚ
ValueErrorÚ	TypeErrorr(   r
   r   )Úimplr0   r,   Z	formatsigr%   r   )r-   r   Z__implementation_str¾   s"    

z/BrokenMethodImplementation.__implementation_strc             C   sh   |   | j| j¡}| j}|| jk	rDd|krD| dd¡}||  |¡f }dt| jtƒr\t	| jƒn| j|f S )NÚimplementationz%rz)The contract of %s is violated because %s)
r   Ú_IX_IMPLr   r+   ÚreplaceÚ/_BrokenMethodImplementation__implementation_strr&   r*   r'   r(   )r   r7   Úmessager   r   r   r    Û   s    z'BrokenMethodImplementation._str_detailsN)r   r	   r
   r   r9   r   r   r$   r*   r+   Ústaticmethodr;   r    r   r   r   r   r   ž   s   c                   sD   e Zd ZdZdZ‡ fdd„Zedd„ ƒZedd„ ƒZd	Z	d
Z
‡  ZS )r   zÏ
    The *target* has failed to implement the *interface* in
    multiple ways.

    The failures are described by *exceptions*, a collection of
    other `Invalid` instances.

    .. versionadded:: 5.0
    r   c                s   t t| ƒ ||t|ƒ¡ d S )N)Úsuperr   Ú__init__Útuple)r   r   r   Ú
exceptions)Ú	__class__r   r   r?   ö   s    zMultipleInvalid.__init__c             C   s
   | j d S )Nr)   )r   )r   r   r   r   rA   ù   s    zMultipleInvalid.exceptionsc             C   s   dd  dd„ | jD ƒ¡ S )Nz
    c             s   s*   | ]"}t |tƒr|j ¡ nt|ƒV  qd S )N)r&   r   r    Ústripr'   )Ú.0Úxr   r   r   ú	<genexpr>  s   z/MultipleInvalid._str_details.<locals>.<genexpr>)ÚjoinrA   )r   r   r   r   r    ý   s    zMultipleInvalid._str_detailsú:Ú )r   r	   r
   r   r   r?   r$   rA   r    r   r!   Ú__classcell__r   r   )rB   r   r   é   s   		c               @   s   e Zd ZdZdS )r   z'The interface has invalid contents
    N)r   r	   r
   r   r   r   r   r   r   
  s   c               @   s   e Zd ZdZdS )r   zŽAn implementation assertion is invalid

    because it doesn't contain an interface or a sequence of valid
    implementation assertions.
    N)r   r	   r
   r   r   r   r   r   r     s   N)r   Ú__all__Ú	Exceptionr   r   r   r   r   r   r   r6   r   r   r   r   r   Ú<module>   s   SK!