Your IP : 216.73.216.213


Current Path : /proc/242857/root/opt/alt/python34/lib64/python3.4/Tools/demo/__pycache__/
Upload File :
Current File : //proc/242857/root/opt/alt/python34/lib64/python3.4/Tools/demo/__pycache__/eiffel.cpython-34.pyc

�
e fN�@s�dZddlZddlmZGdd�de�ZGdd�de�ZGdd	�d	�ZGd
d�d�Z	Gdd
�d
e�Z
Gdd�dej�Ze
dkr�ej�ndS)zj
Support Eiffel-style preconditions and postconditions for functions.

An example for Python metaclasses.
�N)�FunctionTypecs4eZdZ�fdd�Zedd��Z�S)�EiffelBaseMetaClasscs,|j|�tt|�j||||�S)N)�convert_methods�superr�__new__)�meta�name�bases�dict)�	__class__��6/opt/alt/python34/lib64/python3.4/Tools/demo/eiffel.pyrs
zEiffelBaseMetaClass.__new__cCs�g}xo|j�D]a\}}|jd�s=|jd�rUt|t�stt�qt|t�r|j|�qqWx`|D]X}|jd|�}|jd|�}|s�|r|j||||�||<qqWdS)z�Replace functions in dict with EiffelMethod wrappers.

        The dict is modified in place.

        If a method ends in _pre or _post, it is removed from the dict
        regardless of whether there is a corresponding method.
        �_pre�_postz%s_prez%s_postN)�items�endswith�
isinstance�function�AssertionError�append�get�make_eiffel_method)�clsr
�methods�k�v�m�pre�postrrr
rs

z#EiffelBaseMetaClass.convert_methods)�__name__�
__module__�__qualname__r�classmethodrrr)rr
rsrc@s"eZdZedd��ZdS)�EiffelMetaClass1cs4���fdd�}�jr0�j|_n|S)NcsK�r�|||�n�|||�}�rG�||||�n|S)Nr)�self�args�kwargs�rv)�funcrrrr
�method/sz3EiffelMetaClass1.make_eiffel_method.<locals>.method)�__doc__)r(rrr)r)r(rrr
r-s	z#EiffelMetaClass1.make_eiffel_methodN)rr r!�staticmethodrrrrr
r#*sr#c@s(eZdZdd�Zdd�ZdS)�EiffelMethodWrappercCs||_||_dS)N)�_inst�_descr)r$�instZdescrrrr
�__init__?s	zEiffelMethodWrapper.__init__cOs|jj|j||�S)N)r.�
callmethodr-)r$r%r&rrr
�__call__CszEiffelMethodWrapper.__call__N)rr r!r0r2rrrr
r,=sr,c@s4eZdZdd�Zdd�Zdd�ZdS)�EiffelDescriptorcCs7||_||_||_|j|_|j|_dS)N)�_funcrrrr*)r$r(rrrrr
r0Is
			zEiffelDescriptor.__init__cCs
t||�S)N)r,)r$�objrrrr
�__get__QszEiffelDescriptor.__get__cCsZ|jr|j|||�n|j|||�}|jrV|j||||�n|S)N)rr4r)r$r/r%r&�xrrr
r1Ts		zEiffelDescriptor.callmethodN)rr r!r0r6r1rrrr
r3Gsr3c@seZdZeZdS)�EiffelMetaClass2N)rr r!r3rrrrr
r8]sr8c@s4eZdZdd�Zdd�Zdd�ZdS)�TestscCs|jt�dS)N)�_testr#)r$rrr
�testEiffelMetaClass1eszTests.testEiffelMetaClass1cCs|jt�dS)N)r:r8)r$rrr
�testEiffelMetaClass2hszTests.testEiffelMetaClass2cs�Gdd�dd|�}Gdd�d|�}G�fdd�d|��|�}|j|jd�d	�|j|jd�d	�|jt|jd
���}|jt|jd�|jt|jd�|j|jd�d
�dS)Nc@seZdZdS)zTests._test.<locals>.EiffelN)rr r!rrrr
�Eiffellsr=�	metaclassc@s@eZdZdd�Zdd�Zdd�Zdd�Zd	S)
zTests._test.<locals>.TestcSs|dS)zMake it a little larger�r)r$�argrrr
rpszTests._test.<locals>.Test.mcSs|dS)zMake it a little largerr?r)r$r@rrr
�m2tszTests._test.<locals>.Test.m2cSs|dkst�dS)Nr)r)r$r@rrr
�m2_prexsz Tests._test.<locals>.Test.m2_precSs||kst�dS)N)r)r$�resultr@rrr
�m2_post{sz!Tests._test.<locals>.Test.m2_postN)rr r!rrArBrDrrrr
�TestosrEcs1eZdZdd�Z��fdd�Z�S)zTests._test.<locals>.SubcSs|dS)N�r)r$r@rrr
rAszTests._test.<locals>.Sub.m2cs/t�|�j||�|dks+t�dS)N�d)rrDr)r$ZResultr@)�Subrrr
rD�sz Tests._test.<locals>.Sub.m2_post)rr r!rArDr)rH)rr
rH~srHr?rFr�
��)ZassertEqualrrAZassertRaisesr)r$r>r=rE�t�sr)rHr
r:ks		zTests._testN)rr r!r;r<r:rrrr
r9csr9�__main__)r*Zunittest�typesrr�typerr#r,r3r8ZTestCaser9r�mainrrrr
�<module>s
.