§
    ¨Mºf¶G  ã                   ó–  — d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlZd dlZd dlZd dlmZmZmZmZ d dlmZ  ej        e¦  «        Zdd„Z G d„ d¦  «        Z G d„ d	ej        ¦  «        Z G d
„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z  G d„ de¦  «        Z!dS )é    N)ÚNoAppFoundErrorÚTestingTimeoutErrorÚServerCloseErrorÚDashAppLoadingError)ÚwaitÚappc                 óÀ   — 	 t          j        | ¦  «        }||         }n?# t          $ r2}t                               d¦  «         t          d| › �¦  «        |‚d}~ww xY w|S )a
  Import a dash application from a module. The import path is in dot
    notation to the module. The variable named app will be returned.

    :Example:

        >>> app = import_app("my_app.app")

    Will import the application in module `app` of the package `my_app`.

    :param app_file: Path to the app (dot-separated).
    :type app_file: str
    :param application_name: The name of the dash application instance.
    :raise: dash_tests.errors.NoAppFoundError
    :return: App from module.
    :rtype: dash.Dash
    zthe app name cannot be foundz$No dash `app` instance was found in N)ÚrunpyÚ
run_moduleÚKeyErrorÚloggerÚ	exceptionr   )Úapp_fileÚapplication_nameÚ
app_moduler   Úapp_name_missings        ú_/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/dash/testing/application_runners.pyÚ
import_appr      s   € ð" ÝÔ% hÑ/Ô/ˆ
ØÐ)Ô*ˆˆøÝð  ð  ð  Ý×ÒÐ7Ñ8Ô8Ð8ÝØ=°8Ð=Ð=ñ
ô 
àð	 øøøøð øøøð
 €Js   ‚ Ÿ
A©-AÁAc                   ó’   — e Zd ZdZdZd„ Zd„ Zd„ Zed„ ¦   «         Z	d„ Z
d„ Zd	„ Zed
„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         ZdS )ÚBaseDashRunnerz4Base context manager class for running applications.iÂâ  c                 óL   — d| _         d | _        || _        || _        d | _        d S )Nér  )ÚportÚstartedÚ	keep_openÚstop_timeoutÚ_tmp_app_path)Úselfr   r   s      r   Ú__init__zBaseDashRunner.__init__@   s-   € ØˆŒ	ØˆŒØ"ˆŒØ(ˆÔØ!ˆÔÐÐó    c                 ó   — t           ‚©N©ÚNotImplementedError©r   ÚargsÚkwargss      r   ÚstartzBaseDashRunner.startG   ó   € Ý!Ð!r    c                 ó   — t           ‚r"   r#   ©r   s    r   ÚstopzBaseDashRunner.stopJ   r)   r    c                 óh   — 	 t          j        | ¦  «         n# t           j        j        $ r Y dS w xY wdS )NFT)ÚrequestsÚgetÚ
exceptionsÚRequestException)Úurls    r   Ú
accessiblezBaseDashRunner.accessibleM   sG   € ð	ÝŒL˜ÑÔÐÐøÝÔ"Ô3ð 	ð 	ð 	Ø�5�5ð	øøøàˆts   ‚ —/®/c                 ó   —  | j         |i |¤ŽS r"   )r(   r%   s      r   Ú__call__zBaseDashRunner.__call__U   s   € ØˆtŒz˜4Ð* 6Ð*Ð*Ð*r    c                 ó   — | S r"   © r+   s    r   Ú	__enter__zBaseDashRunner.__enter__X   s   € Øˆr    c                 ó  — | j         rb| j        s[	 t                               d¦  «         |                      ¦   «          n+# t
          $ r}t          d| j        › d�¦  «        |‚d }~ww xY wt                               d¦  «         d S )Nzkilling the app runnerzCannot stop server within z	s timeoutz__exit__ complete)r   r   r   Úinfor,   r   r   r   )r   Úexc_typeÚexc_valÚ	tracebackÚcannot_stop_servers        r   Ú__exit__zBaseDashRunner.__exit__[   sœ   € ØŒ<ð 	* ¤ð 	*ð*Ý—’Ð4Ñ5Ô5Ð5Ø—	’	‘”��øÝ&ð *ð *ð *Ý&ØM°Ô1BÐMÐMÐMñô à)ð*øøøøð*øøøõ 	�ŠÐ'Ñ(Ô(Ð(Ð(Ð(s   �.? ¿
A'Á	A"Á"A'c                 ó   — d| j         › �S )zThe default server url.zhttp://localhost:)r   r+   s    r   r2   zBaseDashRunner.urlf   s   € ð / 4¤9Ð.Ð.Ð.r    c                 ó"   — t           j        dk    S )NÚwin32)ÚsysÚplatformr+   s    r   Ú
is_windowszBaseDashRunner.is_windowsk   s   € åŒ|˜wÒ&Ð&r    c                 ó   — | j         S r"   )r   r+   s    r   Útmp_app_pathzBaseDashRunner.tmp_app_patho   s   € àÔ!Ð!r    N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú
_next_portr   r(   r,   Ústaticmethodr3   r5   r8   r?   Úpropertyr2   rE   rG   r7   r    r   r   r   ;   så   € € € € € Ø>Ð>à€Jð"ð "ð "ð"ð "ð "ð"ð "ð "ð ðð ñ „\ðð+ð +ð +ðð ð ð	)ð 	)ð 	)ð ð/ð /ñ „Xð/ð ð'ð 'ñ „Xð'ð ð"ð "ñ „Xð"ð "ð "r    r   c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚKillerThreadc                 óš   •—  t          ¦   «         j        di |¤Ž t          t          j                             ¦   «         ¦  «        | _        d S )Nr7   )Úsuperr   ÚlistÚ	threadingÚ_activeÚkeysÚ_old_threads)r   r'   Ú	__class__s     €r   r   zKillerThread.__init__u   sE   ø€ Ø�‰ŒÔÐ"Ð"˜6Ð"Ð"Ð"Ý ¥Ô!2×!7Ò!7Ñ!9Ô!9Ñ:Ô:ˆÔÐÐr    c                 ó¢  — t          t          j        ¦  «        D ]´}|| j        v rŒt          j                             t	          j        |¦  «        t	          j        t          ¦  «        ¦  «        }|dk    rt          d|› �¦  «        ‚|dk    rAt          j                             t	          j        |¦  «        d ¦  «         t          d¦  «        ‚Œµd S )Nr   zInvalid thread id: é   zStopping thread failure)rS   rT   rU   rW   ÚctypesÚ	pythonapiÚPyThreadState_SetAsyncExcÚc_longÚ	py_objectÚ
SystemExitÚ
ValueError)r   Ú	thread_idÚress      r   ÚkillzKillerThread.killy   sÔ   € å�iÔ/Ñ0Ô0ð 	<ð 	<ˆIØ˜DÔ-Ð-Ð-ØåÔ"×<Ò<Ý”˜iÑ(Ô(­&Ô*:½:Ñ*FÔ*Fñô ˆCð �aŠxˆxÝ Ð!B°yÐ!BÐ!BÑCÔCÐCØ�QŠwˆwÝÔ ×:Ò:Ý”M )Ñ,Ô,¨dñô ð õ !Ð!:Ñ;Ô;Ð;ð	 ð	<ð 	<r    )rH   rI   rJ   r   rd   Ú__classcell__©rX   s   @r   rP   rP   t   sG   ø€ € € € € ð;ð ;ð ;ð ;ð ;ð<ð <ð <ð <ð <ð <ð <r    rP   c                   ó8   ‡ — e Zd ZdZdˆ fd„	Zd„ Zd	d„Zd„ Zˆ xZS )
ÚThreadedRunnerzkRuns a dash application in a thread.

    This is the default flavor to use in dash integration tests.
    Fé   c                 ó\   •— t          ¦   «                              ||¬¦  «         d | _        d S ©N)r   r   )rR   r   Úthread©r   r   r   rX   s      €r   r   zThreadedRunner.__init__‘   s+   ø€ Ý‰Œ×Ò 9¸<ÐÑHÔHÐHØˆŒˆˆr    c                 ó|   — | j                              ¦   «         r|                      |¦  «        S t          d¦  «        ‚)NzThread is not alive.)rl   Úis_aliver3   r   )r   r2   s     r   Úrunning_and_accessiblez%ThreadedRunner.running_and_accessible•   s9   € ØŒ;×ÒÑ!Ô!ð 	(Ø—?’? 3Ñ'Ô'Ð'Ý!Ð"8Ñ9Ô9Ð9r    c                 óä  ‡ ‡‡— ˆˆˆ fd„}d}‰ j         �s'|dk     �r 	 ‰ j        rG‰ j                             ¦   «         r‰                      ¦   «          n‰ j                             ¦   «          t          |¬¦  «        ‰ _        d‰ j        _        ‰ j                             ¦   «          t          j	        ˆ fd„|¬¦  «         ‰ j                             ¦   «         ‰ _         nQ# t          $ rD}t                               |¦  «         d‰ _         |d	z  }t          j        d	¦  «         Y d
}~nd
}~ww xY w‰ j         s|dk     �° ‰ j                             ¦   «         ‰ _         ‰ j         st          d¦  «        ‚d
S )z)Start the app server in threading flavor.c                  ó¶  •— d‰j         j        _        d‰j        j        _        ‰                     ¦   «         } d‰vr,t
          j        x| d<   ‰_        t
          xj        dz  c_        n| d         ‰_        	  ‰j        dddi| ¤Ž d S # t          $ r t                               d¦  «         Y d S t          $ r!}t                               |¦  «         |‚d }~ww xY w)NTr   rZ   ÚthreadedúServer stoppedr7   )ÚscriptsÚconfigÚserve_locallyÚcssÚcopyr   rL   r   Úrunr`   r   r:   Ú	Exceptionr   )ÚoptionsÚerrorr   r'   r   s     €€€r   rz   z!ThreadedRunner.start.<locals>.runž   s÷   ø€ Ø/3ˆCŒKÔÔ,Ø+/ˆCŒGŒNÔ(à—k’k‘m”mˆGà˜VÐ#Ð#Ý.<Ô.GÐG�˜‘ $¤)ÝÐ)Ô)¨QÑ.Ð)Ô)Ð)à# FœO�”	ðØ�”Ð1Ð1 Ð1¨Ð1Ð1Ð1Ð1Ð1øÝð .ð .ð .Ý—’Ð,Ñ-Ô-Ð-Ð-Ð-Ð-Ýð ð ð Ý× Ò  Ñ'Ô'Ð'Ø�øøøøðøøøs   Á6B Â$CÂ.	CÂ7CÃCr   ri   ©ÚtargetTc                  ó8   •— ‰                       ‰ j        ¦  «        S r"   )rp   r2   r+   s   €r   ú<lambda>z&ThreadedRunner.start.<locals>.<lambda>Á   s   ø€ ˜D×7Ò7¸¼ÑAÔA€ r    ©ÚtimeoutFrZ   Nzthreaded server failed to start)r   rl   ro   r,   rd   rP   Údaemonr(   r   Úuntilr{   r   r   ÚtimeÚsleepr   )r   r   Ústart_timeoutr'   rz   ÚretriesÚerrs   `` `   r   r(   zThreadedRunner.start›   s¤  øøø€ ð	ð 	ð 	ð 	ð 	ð 	ð 	ð( ˆà”,ñ 	 7¨Q¢;¡;ðØ”;ð +Ø”{×+Ò+Ñ-Ô-ð +ØŸ	š	™œ˜˜àœ×(Ò(Ñ*Ô*Ð*å*°#Ð6Ñ6Ô6�”Ø%)�”Ô"Ø”×!Ò!Ñ#Ô#Ð#å”
ØAÐAÐAÐAÈ=ðñ ô ð ð  $œ{×3Ò3Ñ5Ô5�”�øÝð ð ð Ý× Ò  Ñ%Ô%Ð%Ø$�”Ø˜1‘�Ý”
˜1‘”������øøøøð	øøøð! ”,ð 	 7¨Q¢;¡;ð, ”{×+Ò+Ñ-Ô-ˆŒØŒ|ð 	IÝ%Ð&GÑHÔHÐHð	Ið 	Is   �B?C Ã
D+Ã':D&Ä&D+c                 óÀ   — | j                              ¦   «          | j                              ¦   «          t          j        | j         j        | j        ¦  «         d| _        d S )NF)rl   rd   Újoinr   Ú	until_notro   r   r   r+   s    r   r,   zThreadedRunner.stopÎ   sO   € ØŒ×ÒÑÔÐØŒ×ÒÑÔÐÝŒ�t”{Ô+¨TÔ->Ñ?Ô?Ð?ØˆŒˆˆr    ©Fri   ©ri   )	rH   rI   rJ   rK   r   rp   r(   r,   re   rf   s   @r   rh   rh   ‹   s~   ø€ € € € € ðð ð
ð ð ð ð ð ð:ð :ð :ð1Ið 1Ið 1Ið 1Iðfð ð ð ð ð ð r    rh   c                   ó.   ‡ — e Zd Zdˆ fd„	Zdd„Zd„ Zˆ xZS )ÚMultiProcessRunnerFri   c                 óZ   •— t          ¦   «                              ||¦  «         d | _        d S r"   ©rR   r   Úprocrm   s      €r   r   zMultiProcessRunner.__init__Ö   s(   ø€ Ý‰Œ×Ò˜ LÑ1Ô1Ð1ØˆŒ	ˆ	ˆ	r    c                 óô   ‡ ‡‡— ‰                      dd¦  «        ‰ _        ˆˆfd„}t          j        |¬¦  «        ‰ _        ‰ j                             ¦   «          t          j        ˆ fd„|¬¦  «         d‰ _        d S )Nr   r   c                  ó8  •— d‰j         j        _        d‰j        j        _        ‰                     ¦   «         } 	  ‰j        dddi| ¤Ž d S # t          $ r t                               d¦  «         ‚ t          $ r!}t           
                    |¦  «         |‚d }~ww xY w)NTrs   rt   r7   )ru   rv   rw   rx   ry   rz   r`   r   r:   r{   r   )r|   r}   r   r'   s     €€r   r   z(MultiProcessRunner.start.<locals>.targetÞ   s±   ø€ Ø/3ˆCŒKÔÔ,Ø+/ˆCŒGŒNÔ(à—k’k‘m”mˆGðØ�”Ð1Ð1 Ð1¨Ð1Ð1Ð1Ð1Ð1øÝð ð ð Ý—’Ð,Ñ-Ô-Ð-ØÝð ð ð Ý× Ò  Ñ'Ô'Ð'Ø�øøøøðøøøs   ¹A
 Á
.BÁ8BÂBr~   c                  ó8   •— ‰                       ‰ j        ¦  «        S r"   ©r3   r2   r+   s   €r   r�   z*MultiProcessRunner.start.<locals>.<lambda>ð   s   ø€ ˜4Ÿ?š?¨4¬8Ñ4Ô4€ r    r‚   T)	r/   r   ÚmultiprocessÚProcessr”   r(   r   r…   r   )r   r   rˆ   r'   r   s   `` ` r   r(   zMultiProcessRunner.startÛ   s‹   øøø€ Ø—J’J˜v tÑ,Ô,ˆŒ	ð	ð 	ð 	ð 	ð 	ð 	õ !Ô(°Ð7Ñ7Ô7ˆŒ	ØŒ	�ŠÑÔÐåŒ
Ð4Ð4Ð4Ð4¸mÐLÑLÔLÐLØˆŒˆˆr    c                 óŽ  — t          j        | j        j        ¦  «        }|                     d¬¦  «        D ],}	 |                     ¦   «          Œ# t           j        $ r Y Œ)w xY w	 |                     ¦   «          n# t           j        $ r Y nw xY w	 |                     d¦  «         d S # t           j        t           j        f$ r Y d S w xY w)NT)Ú	recursiverZ   )	Úpsutilrš   r”   ÚpidÚchildrenrd   ÚNoSuchProcessr   ÚTimeoutExpired)r   Úprocessr”   s      r   r,   zMultiProcessRunner.stopó   sè   € Ý”. ¤¤Ñ/Ô/ˆà×$Ò$¨tÐ$Ñ4Ô4ð 	ð 	ˆDðØ—	’	‘”��øÝÔ'ð ð ð Ø�ðøøøð	Ø�LŠL‰NŒNˆNˆNøÝÔ#ð 	ð 	ð 	ØˆDð	øøøð	Ø�LŠL˜‰OŒOˆOˆOˆOøÝÔ%¥vÔ';Ð<ð 	ð 	ð 	ØˆDˆDð	øøøs5   ¸AÁAÁAÁ#A8 Á8B
Â	B
ÂB% Â%CÃCrŽ   r�   )rH   rI   rJ   r   r(   r,   re   rf   s   @r   r‘   r‘   Õ   s`   ø€ € € € € ðð ð ð ð ð ð
ð ð ð ð0ð ð ð ð ð ð r    r‘   c                   ó<   ‡ — e Zd ZdZd
ˆ fd„	Z	 	 	 	 	 dd„Zd	„ Zˆ xZS )ÚProcessRunnerz}Runs a dash application in a waitress-serve subprocess.

    This flavor is closer to production environment but slower.
    Fri   c                 ó\   •— t          ¦   «                              ||¬¦  «         d | _        d S rk   r“   rm   s      €r   r   zProcessRunner.__init__  ó+   ø€ Ý‰Œ×Ò 9¸<ÐÑHÔHÐHØˆŒ	ˆ	ˆ	r    Nr   r   c           	      ó  ‡ — |s|st          j        d¦  «         dS |‰ _        t          j        |r|nd|› d|› d|› d�‰ j         ¬¦  «        }t                               d|¦  «         	 t          j	        |t          j
        t          j
        ¬	¦  «        ‰ _        t          j        ˆ fd
„|¬¦  «         nM# t          t          f$ r9 t                               d¦  «         d‰ _        ‰                      ¦   «          Y dS w xY wd‰ _        dS )z7Start the server with waitress-serve in process flavor.zAthe process runner needs to start with at least one valid commandNz waitress-serve --listen=0.0.0.0:ú ú:z.server©Úposixústart dash process with %s)ÚstdoutÚstderrc                  ó8   •— ‰                       ‰ j        ¦  «        S r"   r˜   r+   s   €r   r�   z%ProcessRunner.start.<locals>.<lambda>/  ó   ø€ ˜tŸš¨t¬xÑ8Ô8€ r    r‚   ú'process server has encountered an errorFT)Úloggingr}   r   ÚshlexÚsplitrE   r   ÚdebugÚ
subprocessÚPopenÚPIPEr”   r   r…   ÚOSErrorra   r   r   r,   )r   r   r   Úraw_commandr   rˆ   r&   s   `      r   r(   zProcessRunner.start  sD  ø€ ð ð 	˜kð 	ÝŒMØSñô ð ð ˆFØˆŒ	ÝŒ{àðbˆKˆKàa°DÐaÐa¸:ÐaÐaÐHXÐaÐaÐaØ”oÐ%ð	
ñ 
ô 
ˆõ 	�ŠÐ1°4Ñ8Ô8Ð8ð	Ý"Ô(Ø�Zœ_µZ´_ðñ ô ˆDŒIõ ŒJÐ8Ð8Ð8Ð8À-ÐPÑPÔPÐPÐPøå�Ð$ð 	ð 	ð 	Ý×ÒÐFÑGÔGÐGØ ˆDŒLØ�IŠI‰KŒKˆKØˆFˆFð		øøøð ˆŒˆˆs   Á)A	B3 Â3AC=Ã<C=c                 ó˜  — | j         �r'	 t                               d| j         j        ¦  «         | j                              ¦   «          | j        r]t          j                             | j        ¦  «        r9t           	                    d| j        ¦  «         t          j        | j        ¦  «         t          j        }| j                              | j        ¬¦  «         nW# |$ rO t                               d¦  «         | j                              ¦   «          | j                              ¦   «          Y nw xY wt                               d¦  «         d S )Nzproc.terminate with pid %szremoving temporary app path %sr‚   zPsubprocess terminate not success, trying to kill the subprocess in a safe mannerzprocess stop completes!)r”   r   r:   rž   Ú	terminaterG   ÚosÚpathÚexistsrµ   ÚshutilÚrmtreer¶   r¡   Úcommunicater   r   rd   )r   Ú_excepts     r   r,   zProcessRunner.stop9  sA  € ØŒ9ñ 	(ð(Ý—’Ð8¸$¼)¼-ÑHÔHÐHØ”	×#Ò#Ñ%Ô%Ð%ØÔ$ð 5­¬¯ª¸Ô8IÑ)JÔ)Jð 5Ý—L’LÐ!AÀ4ÔCTÑUÔUÐUÝ”M $Ô"3Ñ4Ô4Ð4å$Ô3�Ø”	×%Ò%Ø Ô-ð &ñ ô ð ð øð ð (ð (ð (Ý× Ò ð6ñô ð ð ”	—’Ñ Ô Ð Ø”	×%Ò%Ñ'Ô'Ð'Ð'Ð'ð(øøøõ 	�ŠÐ-Ñ.Ô.Ð.Ð.Ð.s   ŠCC ÃAD-Ä,D-rŽ   )Nr   Nr   ri   )rH   rI   rJ   rK   r   r(   r,   re   rf   s   @r   r¤   r¤     s|   ø€ € € € € ðð ð
ð ð ð ð ð ð ØØØØð%ð %ð %ð %ðN/ð /ð /ð /ð /ð /ð /r    r¤   c                   ó(   ‡ — e Zd Zdˆ fd„	Zdd„Zˆ xZS )	ÚRRunnerFri   c                 ó\   •— t          ¦   «                              ||¬¦  «         d | _        d S rk   r“   rm   s      €r   r   zRRunner.__init__Q  r¦   r    é   Nc                 óÊ	  ‡ ‡— t           j                             |¦  «        r]t           j                             |¦  «        r>‰s:t           j                             |¦  «        Št
                               d‰¦  «         �nWt           j                             ‰ j        sdnt          j	        d¦  «        t          j        ¦   «         j        ¦  «        ‰ _        	 t          j        ‰ j        ¦  «         n0# t           $ r# t
                               d‰ j        ¦  «         Y nw xY wt           j                             ‰ j        d¦  «        }t
                               d¦  «         t
                               d|¦  «         t
                               d¦  «         t
                               d	|¦  «         t'          |d
d¬¦  «        5 }|                     |¦  «         ddd¦  «         n# 1 swxY w Y   |}‰s“t+          j        ¦   «         D ]}d|d                              dd¦  «        vr_t           j                             t           j                             |d         ¦  «        ¦  «        Št
                               d‰¦  «          nŒ€‰�r4t
                               d‰¦  «         ˆfd„t          j        ‰¦  «        D ¦   «         }|D ]õ}t           j                             ‰ j        t           j                             |¦  «        ¦  «        }	t           j                             |	¦  «        r/t
                               d|	¦  «         t9          j        |	¦  «         t
                               d|‰ j        ¦  «         t9          j        ||	¦  «         t
                               dt          j        |	¦  «        ¦  «         Œönt
                               d¦  «         t
                               d|¦  «         t?          j         dt           j                             |¦  «        › d�‰ j         ¬¦  «        }
t
                               d|
¦  «         	 tC          j"        |
tB          j#        tB          j#        ‰ j        r‰ j        n‰¬¦  «        ‰ _$        tK          j&        ˆ fd„|¬ ¦  «         n9# t           tN          f$ r% t
                               d!¦  «         d"‰ _(        Y dS w xY wd#‰ _(        dS )$z-Start the server with subprocess and Rscript.z&RRunner inferred cwd from app path: %sú/tmpÚTEMPúcannot make temporary folder %szapp.Rz$RRunner start => app is R code chunkz+make a temporary R file for execution => %szcontent of the dashR appú%sÚwúutf-8©ÚencodingNú/dash/testing/rZ   ú\ú/úget cwd from inspect => %sz3RRunner inferred cwd from the Python call stack: %sc                 óô   •— g | ]t}|                      d ¦  «        °t          j                             t          j                             ‰|¦  «        ¦  «        ¯Tt          j                             ‰|¦  «        ‘ŒuS ©Ú__©Ú
startswithr½   r¾   ÚisdirrŒ   ©Ú.0Ú_Úcwds     €r   ú
<listcomp>z!RRunner.start.<locals>.<listcomp>€  ót   ø€ ð ð ð àØŸ<š<¨Ñ-Ô-ðõ 35´'·-²-ÅÄÇÂÈSÐRSÑ@TÔ@TÑ2UÔ2UðÝ”G—L’L  aÑ(Ô(ðð ð r    údelete existing target %súcopying %s => %súcopied with %sz¯RRunner found no cwd in the Python call stack. You may wish to specify an explicit working directory using something like: dashr.run_server(app, cwd=os.path.dirname(__file__))z Run dashR app with Rscript => %szRscript -e 'source("z")'rª   r¬   ©r­   r®   rÞ   c                  ó8   •— ‰                       ‰ j        ¦  «        S r"   r˜   r+   s   €r   r�   zRRunner.start.<locals>.<lambda>§  r°   r    r‚   r±   FT©)r½   r¾   Úisfiler¿   Údirnamer   r:   rŒ   rE   ÚgetenvÚuuidÚuuid4Úhexr   ÚmkdirrG   r¹   r   rµ   ÚopenÚwriteÚinspectÚstackÚreplaceÚrealpathÚwarningÚlistdirÚbasenamerÀ   rÁ   Úcopytreer³   r´   r¶   r·   r¸   r”   r   r…   ra   r   ©r   r   rˆ   rÞ   r¾   ÚfpÚentryÚassetsÚassetr   r&   s   `  `       r   r(   zRRunner.startV  s¸  øø€ õ Œ7�>Š>˜#ÑÔð <	¥2¤7§>¢>°#Ñ#6Ô#6ð <	àð KÝ”g—o’o cÑ*Ô*�Ý—’ÐDÀcÑJÔJÐJùõ "$¤§¢Ø"œoÐD��µ2´9¸VÑ3DÔ3DÅdÄjÁlÄlÔFVñ"ô "ˆDÔðWÝ”˜Ô*Ñ+Ô+Ð+Ð+øÝð Wð Wð WÝ× Ò Ð!BÀDÔDUÑVÔVÐVÐVÐVðWøøøå”7—<’< Ô 1°7Ñ;Ô;ˆDå�KŠKÐ>Ñ?Ô?Ð?Ý�KŠKÐEÀtÑLÔLÐLÝ�LŠLÐ3Ñ4Ô4Ð4Ý�LŠL˜˜sÑ#Ô#Ð#å�d˜C¨'Ð2Ñ2Ô2ð °bØ—’˜‘”�ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð ˆCð ð Ý$œ]™_œ_ð ð �EØ'¨u°Q¬x×/?Ò/?ÀÀcÑ/JÔ/JÐJÐJÝ œgŸošo­b¬g×.>Ò.>¸uÀQ¼xÑ.HÔ.HÑIÔI˜ÝŸšÐ'CÀSÑIÔIÐIØ˜ð Kð ñ Ý—’ÐQÐSVÑWÔWÐWðð ð ð åœZ¨™_œ_ðñ ô �ð $ð Gð G�EÝœWŸ\š\¨$Ô*;½R¼W×=MÒ=MÈeÑ=TÔ=TÑUÔU�FÝ”w—~’~ fÑ-Ô-ð .ÝŸšÐ%@À&ÑIÔIÐIÝœ fÑ-Ô-Ð-Ý—L’LÐ!3°U¸DÔ<MÑNÔNÐNÝ”O E¨6Ñ2Ô2Ð2Ý—L’LÐ!1µ2´:¸fÑ3EÔ3EÑFÔFÐFÐFðGõ —’ðKñô ð õ 	�ŠÐ6¸Ñ<Ô<Ð<åŒ{Ø?¥B¤G×$4Ò$4°SÑ$9Ô$9Ð?Ð?Ð?Ø”oÐ%ð
ñ 
ô 
ˆõ 	�ŠÐ1°4Ñ8Ô8Ð8ð	Ý"Ô(ØÝ!”Ý!”Ø)-Ô):ÐC�DÔ%Ð%Àð	ñ ô ˆDŒIõ ŒJÐ8Ð8Ð8Ð8À-ÐPÑPÔPÐPÐPøå�Ð$ð 	ð 	ð 	Ý×ÒÐFÑGÔGÐGØ ˆDŒLØˆFˆFð	øøøð
 ˆŒˆˆs7   ÃC0 Ã0*DÄDÇG#Ç#G'Ç*G'Ñ
AR# Ò#2SÓSrŽ   )rÇ   N©rH   rI   rJ   r   r(   re   rf   s   @r   rÅ   rÅ   P  sY   ø€ € € € € ðð ð ð ð ð ð
Xð Xð Xð Xð Xð Xð Xð Xr    rÅ   c                   ó(   ‡ — e Zd Zdˆ fd„	Zdd„Zˆ xZS )	ÚJuliaRunnerFri   c                 ó\   •— t          ¦   «                              ||¬¦  «         d | _        d S rk   r“   rm   s      €r   r   zJuliaRunner.__init__²  r¦   r    é   Nc                 óÈ	  ‡ ‡— t           j                             |¦  «        r]t           j                             |¦  «        r>‰s:t           j                             |¦  «        Št
                               d‰¦  «         �nWt           j                             ‰ j        sdnt          j	        d¦  «        t          j        ¦   «         j        ¦  «        ‰ _        	 t          j        ‰ j        ¦  «         n0# t           $ r# t
                               d‰ j        ¦  «         Y nw xY wt           j                             ‰ j        d¦  «        }t
                               d¦  «         t
                               d|¦  «         t
                               d¦  «         t
                               d	|¦  «         t'          |d
d¬¦  «        5 }|                     |¦  «         ddd¦  «         n# 1 swxY w Y   |}‰s“t+          j        ¦   «         D ]}d|d                              dd¦  «        vr_t           j                             t           j                             |d         ¦  «        ¦  «        Št
                               d‰¦  «          nŒ€‰�r4t
                               d‰¦  «         ˆfd„t          j        ‰¦  «        D ¦   «         }|D ]õ}t           j                             ‰ j        t           j                             |¦  «        ¦  «        }	t           j                             |	¦  «        r/t
                               d|	¦  «         t9          j        |	¦  «         t
                               d|‰ j        ¦  «         t9          j        ||	¦  «         t
                               dt          j        |	¦  «        ¦  «         Œönt
                               d¦  «         t
                               d|¦  «         t?          j         dt           j                             |¦  «        › �‰ j         ¬¦  «        }
t
                               d|
¦  «         	 tC          j"        |
tB          j#        tB          j#        ‰ j        r‰ j        n‰¬¦  «        ‰ _$        tK          j&        ˆ fd„|¬¦  «         n9# t           tN          f$ r% t
                               d ¦  «         d!‰ _(        Y dS w xY wd"‰ _(        dS )#z+Start the server with subprocess and julia.z*JuliaRunner inferred cwd from app path: %srÉ   rÊ   rË   zapp.jlz,JuliaRunner start => app is Julia code chunkz/make a temporary Julia file for execution => %szcontent of the Dash.jl apprÌ   rÍ   rÎ   rÏ   NrÑ   rZ   rÒ   rÓ   rÔ   z7JuliaRunner inferred cwd from the Python call stack: %sc                 óô   •— g | ]t}|                      d ¦  «        °t          j                             t          j                             ‰|¦  «        ¦  «        ¯Tt          j                             ‰|¦  «        ‘ŒuS rÖ   rØ   rÛ   s     €r   rß   z%JuliaRunner.start.<locals>.<listcomp>ã  rà   r    rá   râ   rã   z´JuliaRunner found no cwd in the Python call stack. You may wish to specify an explicit working directory using something like: dashjl.run_server(app, cwd=os.path.dirname(__file__))z Run Dash.jl app with julia => %szjulia rª   zstart Dash.jl process with %srä   c                  ó8   •— ‰                       ‰ j        ¦  «        S r"   r˜   r+   s   €r   r�   z#JuliaRunner.start.<locals>.<lambda>  r°   r    r‚   r±   FTræ   rø   s   `  `       r   r(   zJuliaRunner.start·  s±  øø€ õ Œ7�>Š>˜#ÑÔð >	¥2¤7§>¢>°#Ñ#6Ô#6ð >	àð OÝ”g—o’o cÑ*Ô*�Ý—’ÐHÈ#ÑNÔNÐNùõ "$¤§¢Ø"œoÐD��µ2´9¸VÑ3DÔ3DÅdÄjÁlÄlÔFVñ"ô "ˆDÔðWÝ”˜Ô*Ñ+Ô+Ð+Ð+øÝð Wð Wð WÝ× Ò Ð!BÀDÔDUÑVÔVÐVÐVÐVðWøøøå”7—<’< Ô 1°8Ñ<Ô<ˆDå�KŠKÐFÑGÔGÐGÝ�KŠKÐIÈ4ÑPÔPÐPÝ�LŠLÐ5Ñ6Ô6Ð6Ý�LŠL˜˜sÑ#Ô#Ð#å�d˜C¨'Ð2Ñ2Ô2ð °bØ—’˜‘”�ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð ˆCð ð Ý$œ]™_œ_ð ð �EØ'¨u°Q¬x×/?Ò/?ÀÀcÑ/JÔ/JÐJÐJÝ œgŸošo­b¬g×.>Ò.>¸uÀQ¼xÑ.HÔ.HÑIÔI˜ÝŸšÐ'CÀSÑIÔIÐIØ˜ð Kð ñ Ý—’ØMÈsñô ð ðð ð ð åœZ¨™_œ_ðñ ô �ð $ð Gð G�EÝœWŸ\š\¨$Ô*;½R¼W×=MÒ=MÈeÑ=TÔ=TÑUÔU�FÝ”w—~’~ fÑ-Ô-ð .ÝŸšÐ%@À&ÑIÔIÐIÝœ fÑ-Ô-Ð-Ý—L’LÐ!3°U¸DÔ<MÑNÔNÐNÝ”O E¨6Ñ2Ô2Ð2Ý—L’LÐ!1µ2´:¸fÑ3EÔ3EÑFÔFÐFÐFðGõ —’ðLñô ð õ 	�ŠÐ6¸Ñ<Ô<Ð<åŒ{Ð;¥B¤G×$4Ò$4°SÑ$9Ô$9Ð;Ð;ÀtÄÐCVÐWÑWÔWˆÝ�ŠÐ4°dÑ;Ô;Ð;ð	Ý"Ô(ØÝ!”Ý!”Ø)-Ô):ÐC�DÔ%Ð%Àð	ñ ô ˆDŒIõ ŒJÐ8Ð8Ð8Ð8À-ÐPÑPÔPÐPÐPøå�Ð$ð 	ð 	ð 	Ý×ÒÐFÑGÔGÐGØ ˆDŒLØˆFˆFð	øøøð
 ˆŒˆˆs7   ÃC0 Ã0*DÄDÇG#Ç#G'Ç*G'Ñ	AR" Ò"2SÓSrŽ   )r  Nrý   rf   s   @r   rÿ   rÿ   ±  sY   ø€ € € € € ðð ð ð ð ð ð
Wð Wð Wð Wð Wð Wð Wð Wr    rÿ   )r   )"rC   r½   r†   rê   r³   rT   rÀ   r¶   r²   rð   r[   r
   r.   r�   r™   Údash.testing.errorsr   r   r   r   Údash.testingr   Ú	getLoggerrH   r   r   r   ÚThreadrP   rh   r‘   r¤   rÅ   rÿ   r7   r    r   ú<module>r	     se  ðØ 
€
€
€
Ø 	€	€	€	Ø €€€Ø €€€Ø €€€Ø Ð Ð Ð Ø €€€Ø Ð Ð Ð Ø €€€Ø €€€Ø €€€à €€€Ø €€€Ø €€€ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð Ð Ð Ð Ð Ð à	ˆÔ	˜8Ñ	$Ô	$€ðð ð ð ð86"ð 6"ð 6"ð 6"ð 6"ñ 6"ô 6"ð 6"ðr<ð <ð <ð <ð <�9Ô#ñ <ô <ð <ð.Gð Gð Gð Gð G�^ñ Gô Gð GðT/ð /ð /ð /ð /˜ñ /ô /ð /ðdF/ð F/ð F/ð F/ð F/�Nñ F/ô F/ð F/ðR^ð ^ð ^ð ^ð ^ˆmñ ^ô ^ð ^ðB]ð ]ð ]ð ]ð ]�-ñ ]ô ]ð ]ð ]ð ]r    