Your IP : 216.73.216.213


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

�
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}xZ|j�D]L\}}|jd�s_|jd�r@qt|t�r|j|�qqWx`|D]X}|jd|�}|jd|�}|s�|rj|j||||�||<qjqjWdS)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�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)rrr �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)rrr r/r1rrrr
r+=sr+c@s4eZdZdd�Zdd�Zdd�ZdS)�EiffelDescriptorcCs7||_||_||_|j|_|j|_dS)N)�_funcrrrr))r#r'rrrrr
r/Is
			zEiffelDescriptor.__init__cCs
t||�S)N)r+)r#�objrrrr
�__get__QszEiffelDescriptor.__get__cCsZ|jr|j|||�n|j|||�}|jrV|j||||�n|S)N)rr3r)r#r.r$r%�xrrr
r0Ts		zEiffelDescriptor.callmethodN)rrr r/r5r0rrrr
r2Gsr2c@seZdZeZdS)�EiffelMetaClass2N)rrr r2rrrrr
r7]sr7c@s4eZdZdd�Zdd�Zdd�ZdS)�TestscCs|jt�dS)N)�_testr")r#rrr
�testEiffelMetaClass1eszTests.testEiffelMetaClass1cCs|jt�dS)N)r9r7)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)rrr 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.m2cSsdS)Nr)r#r?rrr
�m2_prexsz Tests._test.<locals>.Test.m2_precSsdS)Nr)r#�resultr?rrr
�m2_post{sz!Tests._test.<locals>.Test.m2_postN)rrr rr@rArCrrrr
�TestosrDcs1eZdZdd�Z��fdd�Z�S)zTests._test.<locals>.SubcSs|dS)N�r)r#r?rrr
r@szTests._test.<locals>.Sub.m2cst�|�j||�dS)N)rrC)r#ZResultr?)�Subrrr
rC�sz Tests._test.<locals>.Sub.m2_post)rrr r@rCr)rF)rr
rF~srFr>rEr�
��)ZassertEqualrr@ZassertRaises�AssertionError)r#r=r<rD�t�sr)rFr
r9ks		zTests._testN)rrr r:r;r9rrrr
r8csr8�__main__)r)Zunittest�typesrr�typerr"r+r2r7ZTestCaser8r�mainrrrr
�<module>s
.