
    Mf                     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    1XX     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KAKK(((;;;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   {0V<<<;;%((;;;
""48TFTM#:#:;;;	47:z**47011247J''(

 


 
	& 	& 
	

 

	& 
DGJ
++,47011247J''(

 


 
	0 	0 
	

 

	0 
DGJ
++VDGJ
-K-KL47011247J''(

 


 
	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ACq]oCqCq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    7GDDD9gFFF
""48UEN#;#;<<<	EHf%%veh
'C'CF58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     &MMMXXX1F1P1VTV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;;;;;%((;;;
""48TFTM#:#:;;;	47:z**470115*3M3M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**zazzF/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    
 
1XX
 
 
 h'"""
""48DC5L#9#9:::	36:&&3002F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1a11jQjjSY6Z6Z[[[
 
 
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     24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    
 
1XX
 
 
 h'"""
""48DC5L#9#9:::	5622J??: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,,,f1U1U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    
 
1XX
 
 
 h'"""
""48DC5L#9#9:::	5622J??5622J??@5622D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	fVZ0053L3L2M	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  3Dr r r r r rY Y Y Y Y Y + + + + + +$2 2 2 2 2 2$- - - - - -$       "CJ   OHJJJ 	
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XT****d##### r   