§
    ¨MºfÞ  ã                   ól  — d Z ddlZddlmZ ddlmZ ddlmZ ddlZddlm	Z	 ddl
Z
ddlmZmZ ddlmZmZmZmZmZmZ dd	lmZ dd
l
mZ ddlmZ  ee¦  «                             d¦  «        Zddeeef         fd„Zedk    r0 ed¦  «        Z eed¬¦  «         e                     d¬¦  «         dS dS )zsTest helpers to configure an app that tests many cases (single/multiple outputs, patterns, multi triggers, ...).


é    N©Úwraps)ÚPath)ÚUnion)Úhtml)ÚDashÚ	no_update)ÚMATCHÚALLÚ
ALLSMALLERÚInputÚOutputÚState)Ú	Component)Úrequest)Ú
DjangoDashz.jsonFÚappc                 ó*  ‡ ‡‡‡— ‰sd„ Šn4t                                d¦  «        Š‰                     d¦  «         ˆfd„Šˆ ˆfd„}ˆ ˆfd„}ˆ ˆfd„}ˆ ˆfd„}ˆ ˆfd	„}ˆ ˆfd
„}ˆ ˆˆfd„}t          j        g ¦  «        ‰ _         |¦   «           |¦   «           |¦   «           |¦   «           |¦   «           |¦   «           |¦   «          d}	d}
‰ j        j        D ]9}|j        D ]/}t          |t          ¦  «        r|	|_	        |
|_
        |	dz  }	|
dz  }
Œ0Œ:dS )aŽ  Takes an unitialized Dash (or DjangoDash) app and add dash components and callbacks to test
    - single/multiple outputs
    - patterns (ALL,ALLSMALLER,MATCH)
    - multi triggers

    :param app: the Dash/DjangoDash app to initialize with components and callbacks
    :param write: if True, it will record/log in the tests_dash_contract.json all client callbacks to the app
    :return: None
    c                 ó   — | S )N© )Úfs    úe/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/django_plotly_dash/tests_dash_contract.pyú<lambda>z"fill_in_test_app.<locals>.<lambda>%   s   €  a€ ó    Úwú[c                 ó@   •‡ — t          ‰ ¦  «        ˆ ˆfd„¦   «         }|S )Nc            	      óÒ   •—  ‰| i |¤Ž}‰                      t          j        t          j                             ¦   «         | ||dœ¦  «        ¦  «         ‰                      d¦  «         |S )N)ÚbodyÚargsÚkwargsÚresultú,)ÚwriteÚjsonÚdumpsÚflaskr   Úget_json)r    r!   r"   r   Úrecord_sessions      €€r   Úwrapperz<fill_in_test_app.<locals>.log_body_response.<locals>.wrapper+   s}   ø€ à˜˜DÐ+ FÐ+Ð+�Ø×$Ò$Ý”Jå$)¤M×$:Ò$:Ñ$<Ô$<Ø$(Ø&,Ø&,ð	ð ñô ñ	ô 	ð 	ð ×$Ò$ SÑ)Ô)Ð)Ø�r   r   )r   r*   r)   s   ` €r   Úlog_body_responsez+fill_in_test_app.<locals>.log_body_response*   s9   øø€ Ý�1‰XŒXðð ð ð ð ñ ŒXðð ˆNr   c                  ó~  •— t          j        dd¬¦  «        } d„ t          d¦  «        D ¦   «         }‰j        j                             t          j        | g|z   ¦  «        ¦  «         ‰                     t          |d         j	        d¦  «        t          | j	        d¦  «        gt          | j	        d	¦  «        g¦  «        ‰d
„ ¦   «         ¦   «         }‰                     t          |d         j	        d¦  «        gt          | j	        d¦  «        gt          | j	        d	¦  «        g¦  «        ‰d„ ¦   «         ¦   «         }‰                     t          |d         j	        d¦  «        t          |d         j	        d¦  «        gt          | j	        d¦  «        gt          | j	        d	¦  «        g¦  «        ‰d„ ¦   «         ¦   «         }dS )z#Test output format (in list or not)zMulti-single-outputÚinp1©Úidc                 ó>   — g | ]}t          j        d |› �¬¦  «        ‘ŒS )zout1-r.   ©r   ÚDiv©Ú.0Úis     r   ú
<listcomp>z?fill_in_test_app.<locals>.add_outputs_multi.<locals>.<listcomp>@   ó+   € Ð;Ð;Ð;¨Q•”˜K A˜K˜KÐ(Ñ(Ô(Ð;Ð;Ð;r   é   r   ÚchildrenÚn_clicks_timestampÚn_clicksc                  ó   — d| › �S )Nz	single - r   ©r    s    r   Útest_single_outputzGfill_in_test_app.<locals>.add_outputs_multi.<locals>.test_single_outputD   s   € ð &˜tÐ%Ð%Ð%r   é   c                  ó   — d| › �gS )Nzsingle in list - r   r=   s    r   Útest_single_output_listzLfill_in_test_app.<locals>.add_outputs_multi.<locals>.test_single_output_listM   s   € ð /¨Ð.Ð.Ð/Ð/r   é   é   c                  ó   — d| › �gdz  S )Nzmulti in list - rB   r   r=   s    r   Útest_multi_outputzFfill_in_test_app.<locals>.add_outputs_multi.<locals>.test_multi_outputV   s   € ð . tÐ-Ð-Ð.°Ñ2Ð2r   N)r   ÚButtonÚrangeÚlayoutr9   Úappendr2   Úcallbackr   r/   r   r   )r-   Úoutsr>   rA   rE   r   r+   s        €€r   Úadd_outputs_multiz+fill_in_test_app.<locals>.add_outputs_multi=   sÍ  ø€ åŒ{Ð0°VÐ<Ñ<Ô<ˆØ;Ð;µ%¸±(´(Ð;Ñ;Ô;ˆàŒ
Ô×"Ò"¥4¤8¨T¨F°T©MÑ#:Ô#:Ñ;Ô;Ð;à	�ŠÝ�4˜”7”:˜zÑ*Ô*Ý�4”7Ð0Ñ1Ô1Ð2Ý�4”7˜JÑ'Ô'Ð(ñ

ô 

ð
 
ð	&ð 	&ñ 
Ô	ñ

ô 

ð	&ð 
�ŠÝ�D˜”G”J 
Ñ+Ô+Ð,Ý�4”7Ð0Ñ1Ô1Ð2Ý�4”7˜JÑ'Ô'Ð(ñ

ô 

ð
 
ð	0ð 	0ñ 
Ô	ñ

ô 

ð	0ð 
�ŠÝ�D˜”G”J 
Ñ+Ô+­V°D¸´G´JÀ
Ñ-KÔ-KÐLÝ�4”7Ð0Ñ1Ô1Ð2Ý�4”7˜JÑ'Ô'Ð(ñ

ô 

ð
 
ð	3ð 	3ñ 
Ô	ñ

ô 

ð	3ð 	3ð 	3r   c                  óŒ  •— t          j        dd¬¦  «        } t          j        dd¬¦  «        }‰j        j                             t          j        | |g¦  «        ¦  «         ‰                     t          |j	        d¦  «        t          |j	        d¦  «        gt          | j	        d	¦  «        g¦  «        ‰d
„ ¦   «         ¦   «         }d S )NzInput-update-output-stateÚinp1br.   zhttp://www.example.com/nullÚout1b)Úhrefr/   rP   r9   r:   c                 ó   — d| › �d| › �fS )Nzhttp://www.example.com/r   )r:   s    r   Útest_update_output_statezVfill_in_test_app.<locals>.add_update_state_in_output.<locals>.test_update_output_statee   s#   € ð BÐ-?ÐAÐAÐCqÐ]oÐCqÐCqÐqÐqr   )r   rF   ÚArH   r9   rI   r2   rJ   r   r/   r   )rN   rO   rR   r   r+   s      €€r   Úadd_update_state_in_outputz4fill_in_test_app.<locals>.add_update_state_in_output_   sÍ   ø€ Ý”Ð7¸GÐDÑDÔDˆÝ”Ð9¸gÐFÑFÔFˆàŒ
Ô×"Ò"¥4¤8¨U°E¨NÑ#;Ô#;Ñ<Ô<Ð<à	�ŠÝ�E”H˜fÑ%Ô%¥v¨e¬h¸
Ñ'CÔ'CÐFÝ�5”8Ð1Ñ2Ô2Ð3ñ

ô 

ð 
ð	rð 	rñ 
Ô	ñ	

ô 

ð
	rð 	rð 	rr   c                  ó   •— t          j        dd¬¦  «        } d„ t          d¦  «        D ¦   «         }‰j        j                             t          j        | g|z   ¦  «        ¦  «         ‰                     t          |d         j	        d¦  «        t          | j	        d¦  «        t          | j	        d	¦  «        g¦  «        ‰d
„ ¦   «         ¦   «         }dS )zFTest a callback getting more than one element in the triggered contextzMultiple triggeredÚinp2r.   c                 ó>   — g | ]}t          j        d |› �¬¦  «        ‘ŒS )zout2-r.   r1   r3   s     r   r6   zAfill_in_test_app.<locals>.add_multi_triggered.<locals>.<listcomp>q   r7   r   r?   r   r9   r:   r;   c                  óR   — t          |¦  «         d| › dt          j        j        pg › �S )Nzmulti triggered - z - )ÚprintÚdashÚcallback_contextÚ	triggered)r    r!   s     r   r>   zIfill_in_test_app.<locals>.add_multi_triggered.<locals>.test_single_outputu   s1   € õ �&‰MŒMˆMØX¨ÐXÐXµÔ1FÔ1PÐ1VÐTVÐXÐXÐXr   N)r   rF   rG   rH   r9   rI   r2   rJ   r   r/   r   )r-   rK   r>   r   r+   s      €€r   Úadd_multi_triggeredz-fill_in_test_app.<locals>.add_multi_triggeredn   sÔ   ø€ åŒ{Ð/°FÐ;Ñ;Ô;ˆØ;Ð;µ%¸±(´(Ð;Ñ;Ô;ˆàŒ
Ô×"Ò"¥4¤8¨T¨F°T©MÑ#:Ô#:Ñ;Ô;Ð;à	�ŠÝ�4˜”7”:˜zÑ*Ô*Ý�4”7Ð0Ñ1Ô1µ5¸¼À*Ñ3MÔ3MÐNñ

ô 

ð 
ð	Yð 	Yñ 
Ô	ñ	

ô 

ð
	Yð 	Yð 	Yr   c            	      ó   •— d„ t          d¦  «        D ¦   «         } t          j        d¬¦  «        }‰j        j                             t          j        | |gz   ¦  «        ¦  «         ‰                     t          |j        d¦  «        t          t          ddœd¦  «        gt          t          ddœd	¦  «        g¦  «        ‰d
„ ¦   «         ¦   «         }d S )Nc                 óL   — g | ]!}t          j        d |› �d|› �ddœ¬¦  «        ‘Œ"S )zPattern ALL úinp-Úbtn3©Ú_idÚ_typer.   ©r   rF   r3   s     r   r6   z=fill_in_test_app.<locals>.add_pattern_all.<locals>.<listcomp>   sN   € ð 
ð 
ð 
àõ ŒKÐ* qÐ*Ð*°z¸a°z°zÈFÐ/SÐ/SÐTÑTÔTð
ð 
ð 
r   rC   Úout3r.   r9   ra   rb   r:   r;   c                  ó   — d| › �S )Nzpattern ALL - r   r=   s    r   r>   zEfill_in_test_app.<locals>.add_pattern_all.<locals>.test_single_output‡   s   € ð + DÐ*Ð*Ð*r   )rG   r   r2   rH   r9   rI   rJ   r   r/   r   r   r   ©ÚinpsÚoutr>   r   r+   s      €€r   Úadd_pattern_allz)fill_in_test_app.<locals>.add_pattern_all~   så   ø€ ð
ð 
å˜1‘X”Xð
ñ 
ô 
ˆõ Œh˜'Ð"Ñ"Ô"ˆàŒ
Ô×"Ò"¥4¤8¨D°C°5©LÑ#9Ô#9Ñ:Ô:Ð:à	�ŠÝ�3”6˜:Ñ&Ô&Ý�3¨Ð0Ð0Ð2FÑGÔGÐHÝ�3¨Ð0Ð0°*Ñ=Ô=Ð>ñ

ô 

ð
 
ð	+ð 	+ñ 
Ô	ñ

ô 

ð	+ð 	+ð 	+r   c            	      ó¦  •— d„ t          d¦  «        D ¦   «         } t          j        d¬¦  «        }‰j        j                             t          j        | |gz   ¦  «        ¦  «         ‰                     t          t          ddœd¦  «        t          t          ddœd¦  «        gt          t          ddœd	¦  «        g¦  «        ‰d
„ ¦   «         ¦   «         }d S )Nc                 óL   — g | ]!}t          j        d |› �d|› �ddœ¬¦  «        ‘Œ"S )zPattern ALLSMALLER r`   Úbtn4rb   r.   re   r3   s     r   r6   zDfill_in_test_app.<locals>.add_pattern_allsmaller.<locals>.<listcomp>‘   sO   € ð 
ð 
ð 
àõ ŒKÐ1¨aÐ1Ð1¸jÀQ¸j¸jÐSYÐ6ZÐ6ZÐ[Ñ[Ô[ð
ð 
ð 
r   rC   Úout4r.   rn   rb   r9   r;   r/   c                  ó   — d| › �S )Nzpattern ALLSMALLER - r   r=   s    r   r>   zLfill_in_test_app.<locals>.add_pattern_allsmaller.<locals>.test_single_output™   s   € ð 2¨4Ð1Ð1Ð1r   )rG   r   r2   rH   r9   rI   rJ   r   r
   r   r   r   rh   s      €€r   Úadd_pattern_allsmallerz0fill_in_test_app.<locals>.add_pattern_allsmaller�   sê   ø€ ð
ð 
å˜1‘X”Xð
ñ 
ô 
ˆõ Œh˜'Ð"Ñ"Ô"ˆàŒ
Ô×"Ò"¥4¤8¨D°C°5©LÑ#9Ô#9Ñ:Ô:Ð:à	�ŠÝ�5¨6Ð2Ð2°JÑ?Ô?Ý�:°Ð7Ð7¸ÑDÔDÐEÝ�:°Ð7Ð7¸Ñ>Ô>Ð?ñ

ô 

ð
 
ð	2ð 	2ñ 
Ô	ñ

ô 

ð	2ð 	2ð 	2r   c            	      ó¦  •— d„ t          d¦  «        D ¦   «         } t          j        d¬¦  «        }‰j        j                             t          j        | |gz   ¦  «        ¦  «         ‰                     t          t          ddœd¦  «        t          t          ddœd¦  «        gt          t          ddœd	¦  «        g¦  «        ‰d
„ ¦   «         ¦   «         }d S )Nc                 óL   — g | ]!}t          j        d |› �d|› �ddœ¬¦  «        ‘Œ"S )zPattern MATCH r`   Úbtn5rb   r.   re   r3   s     r   r6   z?fill_in_test_app.<locals>.add_pattern_match.<locals>.<listcomp>£   sN   € ð 
ð 
ð 
àõ ŒKÐ,¨Ð,Ð,¸À¸¸ÈfÐ1UÐ1UÐVÑVÔVð
ð 
ð 
r   rC   Úout5r.   rt   rb   r9   r;   r/   c                  ó   — d| › �S )Nzpattern MATCH - r   r=   s    r   r>   zGfill_in_test_app.<locals>.add_pattern_match.<locals>.test_single_output«   s   € ð - dÐ,Ð,Ð,r   )rG   r   r2   rH   r9   rI   rJ   r   r
   r   r   rh   s      €€r   Úadd_pattern_matchz+fill_in_test_app.<locals>.add_pattern_match¢   sê   ø€ ð
ð 
å˜1‘X”Xð
ñ 
ô 
ˆõ Œh˜'Ð"Ñ"Ô"ˆàŒ
Ô×"Ò"¥4¤8¨D°C°5©LÑ#9Ô#9Ñ:Ô:Ð:à	�ŠÝ�5¨6Ð2Ð2°JÑ?Ô?Ý�5¨6Ð2Ð2°JÑ?Ô?Ð@Ý�5¨6Ð2Ð2°DÑ9Ô9Ð:ñ

ô 

ð
 
ð	-ð 	-ñ 
Ô	ñ

ô 

ð	-ð 	-ð 	-r   c                  óì   •— ‰j         j                             t          j        dd¬¦  «        ¦  «         ‰                     t          dd¦  «        t          dd¦  «        g¦  «        ˆˆfd„¦   «         } d S )NÚstopr.   r9   r;   c                 ó¾   •— | rT‰r)‰                      d¦  «         ‰                     ¦   «          t          j                             d¦  «        } |¦   «          t
          S )Nú]zwerkzeug.server.shutdown)r$   Úcloser   ÚenvironÚgetr	   )ÚnclicksÚfuncr)   r$   s     €€r   Ústop_serverz7fill_in_test_app.<locals>.add_stop.<locals>.stop_server·   s`   ø€ àð Øð +à"×(Ò(¨Ñ-Ô-Ð-Ø"×(Ò(Ñ*Ô*Ð*Ý”×*Ò*Ð+EÑFÔF�Ø�‘”�ÝÐr   )rH   r9   rI   r   rF   rJ   r   r   )r�   r   r)   r$   s    €€€r   Úadd_stopz"fill_in_test_app.<locals>.add_stop´   s„   ø€ ØŒ
Ô×"Ò"¥4¤;¨v¸&Ð#AÑ#AÔ#AÑBÔBÐBà	�Š•f˜V ZÑ0Ô0µ5¸ÀÑ3LÔ3LÐ2MÑ	NÔ	Nð	ð 	ð 	ð 	ð 	ñ 
OÔ	Nð	ð 	ð 	r   r   l   L™Ýr?   éd   N)Údash_contract_dataÚopenr$   r   r2   rH   r9   Ú
isinstancer   r;   r:   )r   r$   rL   rT   r]   rk   rq   rw   r‚   r5   ÚtsÚcompÚelemr+   r)   s   ``           @@r   Úfill_in_test_apprŠ      s(  øøøø€ ð ð Ø'˜KÐÐå+×0Ò0°Ñ5Ô5ˆØ×Ò˜SÑ!Ô!Ð!ð	ð 	ð 	ð 	ð 	ð& 3ð  3ð  3ð  3ð  3ð  3ðDrð rð rð rð rð rðYð Yð Yð Yð Yð Yð +ð +ð +ð +ð +ð +ð$2ð 2ð 2ð 2ð 2ð 2ð$-ð -ð -ð -ð -ð -ð$ð ð ð ð ð ð õ ”˜"‘”€C„JØÐÑÔÐØÐÑ Ô Ð ØÐÑÔÐØ€OÑÔÐØÐÑÔÐØÐÑÔÐØ€H�J„J€Jð 	
€AØ	€BØ”
Ô#ð ð ˆØ”Mð 	ð 	ˆDÝ˜$¥	Ñ*Ô*ð Ø !�”Ø*,�Ô'Ø�Q‘�Ø�c‘	�øð	ðð r   Ú__main__ÚDashContractAppT)r$   )Údebug)F) Ú__doc__r%   Ú	functoolsr   Úpathlibr   Útypingr   rZ   r   r'   r   r	   Údash.dependenciesr
   r   r   r   r   r   Údash.development.base_componentr   r   Údjango_plotly_dashr   Ú__file__Úwith_suffixr„   rŠ   Ú__name__Útest_appÚ
run_serverr   r   r   ú<module>rš      s™  ððð ð
 €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à €€€Ø Ð Ð Ð Ð Ð Ø €€€Ø  Ð  Ð  Ð  Ð  Ð  Ð  Ð  Ø JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JØ 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø Ð Ð Ð Ð Ð à )Ð )Ð )Ð )Ð )Ð )à�T˜(‘^”^×/Ò/°Ñ8Ô8Ð ð|ð |˜% 
¨DÐ 0Ô1ð |ð |ð |ð |ð~ ˆzÒÐð ˆtÐ%Ñ&Ô&€HàÐ�X TÐ*Ñ*Ô*Ð*à×Ò˜dÐÑ#Ô#Ð#Ð#Ð#ð Ðr   