§
    �Ÿjâ)  ã                   ó–   — d 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 ddl	m
Z
mZ ddlmZ ddlmZmZ dd	lmZ  G d
„ de¦  «        ZdS )zKernel Provisioner Classesé    N)ÚTYPE_CHECKINGÚAnyé   )ÚKernelConnectionInfoÚLocalPortCache)Úlaunch_kernel)Úis_local_ipÚ	local_ipsé   )ÚKernelProvisionerBasec                   ó˜  ‡ — e Zd ZdZdZdZdZdZdZdZ	dZ
edefd„¦   «         Zdedz  fd„Zdedz  fd„Zdeddfd	„Zdd
eddfd„Zdd
eddfd„Zededdfd„¦   «         Zdd
eddfd„Zdedeeef         fˆ fd„Zdee         dedefd„Zdededz  fd„Zedeeef         deeef         fd„¦   «         Z defˆ fd„Z!deddfˆ fd„Z"ˆ xZ#S )ÚLocalProvisionera0  
    :class:`LocalProvisioner` is a concrete class of ABC :py:class:`KernelProvisionerBase`
    and is the out-of-box default implementation used when no kernel provisioner is
    specified in the kernel specification (``kernel.json``).  It provides functional
    parity to existing applications by launching the kernel locally and using
    :class:`subprocess.Popen` to manage its lifecycle.

    This class is intended to be subclassed for customizing local kernel environments
    and serve as a reference implementation for other custom provisioners.
    NFÚreturnc                 ó   — | j         d uS )N)Úprocess)Úselfs    úz/var/www/finuniver-perm.ru/html/student/venv/lib/python3.11/site-packages/jupyter_client/provisioning/local_provisioner.pyÚhas_processzLocalProvisioner.has_process&   s   € àŒ| 4Ð'Ð'ó    c              ƒ   óN   K  — d}| j         r| j                              ¦   «         }|S )zPoll the provisioner.r   )r   Úpoll)r   Úrets     r   r   zLocalProvisioner.poll*   s-   è è € àˆØŒ<ð 	&Ø”,×#Ò#Ñ%Ô%ˆCØˆ
r   c              ƒ   óX  K  — d}| j         rž|                      ¦   «         ƒ d{V —†€4t          j        d¦  «        ƒ d{V —† |                      ¦   «         ƒ d{V —†®4| j                              ¦   «         }dD ]-}t          | j         |¦  «        }|r|                     ¦   «          Œ.d| _         |S )z!Wait for the provisioner process.r   Ngš™™™™™¹?)ÚstdoutÚstderrÚstdin)r   r   ÚasyncioÚsleepÚwaitÚgetattrÚclose)r   r   ÚattrÚfids       r   r   zLocalProvisioner.wait1   sÒ   è è € àˆØŒ<ð 	 ð
 Ÿ	š	™œÐ#Ð#Ð#Ð#Ð#Ð#Ð+Ý”m CÑ(Ô(Ð(Ð(Ð(Ð(Ð(Ð(Ð(ð Ÿ	š	™œÐ#Ð#Ð#Ð#Ð#Ð#Ð+ð ”,×#Ò#Ñ%Ô%ˆCà5ð  ð  �Ý˜dœl¨DÑ1Ô1�Øð  Ø—I’I‘K”K�KøØˆDŒLØˆ
r   Úsignumc              ƒ   ó\  K  — | j         r¢|t          j        k    r-t          j        dk    rddlm}  || j         j        ¦  «         dS | j        rBt          t          d¦  «        r-	 t          j        | j        |¦  «         dS # t          $ r Y nw xY w| j                              |¦  «         dS dS )aT  Sends a signal to the process group of the kernel (this
        usually includes the kernel and any subprocesses spawned by
        the kernel).

        Note that since only SIGTERM is supported on Windows, we will
        check if the desired signal is for interrupt and apply the
        applicable code on Windows in that case.
        Úwin32r   )Úsend_interruptNÚkillpg)r   ÚsignalÚSIGINTÚsysÚplatformÚwin_interruptr'   Úwin32_interrupt_eventÚpgidÚhasattrÚosr(   ÚOSErrorÚsend_signal)r   r$   r'   s      r   r3   zLocalProvisioner.send_signalF   sÙ   è è € ð Œ<ð 	Ø�œÒ&Ð&­3¬<¸7Ò+BÐ+BØ:Ð:Ð:Ð:Ð:Ð:à�˜tœ|ÔAÑBÔBÐBØ�ð Œyð �W¥R¨Ñ2Ô2ð ðÝ”I˜dœi¨Ñ0Ô0Ð0Ø�FøÝð ð ð Ø�Dðøøøð ŒL×$Ò$ VÑ,Ô,Ð,ØˆFð#	ð 	s   Á$B  Â 
BÂBÚrestartc              ƒ   óN  K  — | j         r›t          t          d¦  «        r8	 |                      t          j        ¦  «        ƒ d{V —† dS # t
          $ r Y nw xY w	 | j                              ¦   «          dS # t
          $ r%}t                               |¦  «         Y d}~dS d}~ww xY wdS )z,Kill the provisioner and optionally restart.ÚSIGKILLN)	r   r0   r)   r3   r6   r2   Úkillr   Ú_tolerate_no_process©r   r4   Úes      r   r7   zLocalProvisioner.killb   sâ   è è € àŒ<ð 	9Ý•v˜yÑ)Ô)ð ðØ×*Ò*­6¬>Ñ:Ô:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ø�FøÝð ð ð Ø�Dðøøøð9Ø”×!Ò!Ñ#Ô#Ð#Ð#Ð#øÝð 9ð 9ð 9Ý ×5Ò5°aÑ8Ô8Ð8Ð8Ð8Ð8Ð8Ð8Ð8øøøøð9øøøð	9ð 	9ó)    %A Á
AÁAÁA3 Á3
B"Á=BÂB"c              ƒ   óN  K  — | j         r›t          t          d¦  «        r8	 |                      t          j        ¦  «        ƒ d{V —† dS # t
          $ r Y nw xY w	 | j                              ¦   «          dS # t
          $ r%}t                               |¦  «         Y d}~dS d}~ww xY wdS )z1Terminate the provisioner and optionally restart.ÚSIGTERMN)	r   r0   r)   r3   r=   r2   Ú	terminater   r8   r9   s      r   r>   zLocalProvisioner.terminateq   sâ   è è € àŒ<ð 	9Ý•v˜yÑ)Ô)ð ðØ×*Ò*­6¬>Ñ:Ô:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ø�FøÝð ð ð Ø�Dðøøøð9Ø”×&Ò&Ñ(Ô(Ð(Ð(Ð(øÝð 9ð 9ð 9Ý ×5Ò5°aÑ8Ô8Ð8Ð8Ð8Ð8Ð8Ð8Ð8øøøøð9øøøð	9ð 	9r;   Úos_errorc                 óÜ   — t           j        dk    r!| j        dk    rd| › �}t          |¦  «        ‚d S ddlm} t          | t          ¦  «        r| j        |k    rd| › �}t          |¦  «        ‚d S )Nr&   é   z3Invalid Error, expecting error number to be 5, got r   )ÚESRCHz:Invalid Error, expecting ProcessLookupError or ESRCH, got )r+   r,   ÚwinerrorÚ
ValueErrorÚerrnorB   Ú
isinstanceÚProcessLookupError)r?   Úerr_messagerB   s      r   r8   z%LocalProvisioner._tolerate_no_process€   s¢   € õ Œ<˜7Ò"Ð"ØÔ  AÒ%Ð%Ø^ÐT\Ð^Ð^�Ý  Ñ-Ô-Ð-ð &Ð%ð $Ð#Ð#Ð#Ð#Ð#å˜hÕ(:Ñ;Ô;ð .¸x¼~ÐQVÒ?VÐ?Và[ÐQYÐ[Ð[ð õ ! Ñ-Ô-Ð-ð	 @WÐ?Vr   c              ƒ   ó6  K  — | j         r‹|s‹t          j        ¦   «         }| j        d         | j        d         | j        d         | j        d         | j        d         f}|D ]9}t          rt          |t          ¦  «        sJ ‚|                     |¦  «         Œ6dS dS dS )zFClean up the resources used by the provisioner and optionally restart.Ú
shell_portÚ
iopub_portÚ
stdin_portÚhb_portÚcontrol_portN)Úports_cachedr   ÚinstanceÚconnection_infor   rF   ÚintÚreturn_port)r   r4   ÚlpcÚportsÚports        r   ÚcleanupzLocalProvisioner.cleanup”   sÆ   è è € àÔð 	& Wð 	&å Ô)Ñ+Ô+ˆCàÔ$ \Ô2ØÔ$ \Ô2ØÔ$ \Ô2ØÔ$ YÔ/ØÔ$ ^Ô4ðˆEð ð &ð &�Ý ð 1Ý% d­CÑ0Ô0Ð0Ð0Ð0Ø—’ Ñ%Ô%Ð%Ð%ð	&ð 	&ð 	&ð 	&ð&ð &r   Úkwargsc              ‹   óÞ  •K  — | j         }|�r›|j        dk    r<t          |j        ¦  «        s(d|j        › dt	          ¦   «         › �}t          |¦  «        ‚|                     dg ¦  «        }|j        r¼| j        sµt          j
        ¦   «         }|                     |j        ¦  «        |_        |                     |j        ¦  «        |_        |                     |j        ¦  «        |_        |                     |j        ¦  «        |_        |                     |j        ¦  «        |_        d| _        d|v r3|d                              dd¦  «        }|                     |¬	¦  «         n|                     ¦   «          |                     ¦   «         | _        |                     |¬
¦  «        }n%|                     dg ¦  «        }| j        j        |z   } t1          ¦   «         j        dd|i|¤Žƒ d{V —†S )a  Perform any steps in preparation for kernel process launch.

        This includes applying additional substitutions to the kernel launch command and env.
        It also includes preparation of launch parameters.

        Returns the updated kwargs.
        Útcpz@Can only launch a kernel on a local interface. This one is not: zc.Make sure that the '*_address' attributes are configured properly. Currently valid addresses are: Úextra_argumentsTÚenvÚJPY_SESSION_NAMEÚ )Újupyter_session)r[   ÚcmdN© )ÚparentÚ	transportr	   Úipr
   ÚRuntimeErrorÚpopÚcache_portsrO   r   rP   Úfind_available_portrJ   rK   rL   rM   rN   ÚgetÚwrite_connection_fileÚget_connection_inforQ   Úformat_kernel_cmdÚkernel_specÚargvÚsuperÚ
pre_launch)	r   rX   ÚkmÚmsgr[   rT   r_   Ú
kernel_cmdÚ	__class__s	           €r   rp   zLocalProvisioner.pre_launch¥   s  øè è € ð Œ[ˆØñ #	AØŒ|˜uÒ$Ð$­[¸¼Ñ-?Ô-?Ð$ðDØ(*¬ðDð Dõ 7@±k´kð	Dð Dð õ # 3Ñ'Ô'Ð'à$ŸjšjÐ):¸BÑ?Ô?ˆOð Œ~ð ) dÔ&7ð )Ý$Ô-Ñ/Ô/�Ø #× 7Ò 7¸¼Ñ >Ô >�”Ø #× 7Ò 7¸¼Ñ >Ô >�”Ø #× 7Ò 7¸¼Ñ >Ô >�”Ø ×4Ò4°R´UÑ;Ô;�”
Ø"%×"9Ò"9¸"¼%Ñ"@Ô"@�”Ø$(�Ô!Ø˜ˆˆØ"(¨¤-×"3Ò"3Ð4FÈÑ"KÔ"K�Ø×(Ò(¸Ð(ÑIÔIÐIÐIà×(Ò(Ñ*Ô*Ð*Ø#%×#9Ò#9Ñ#;Ô#;ˆDÔ à×-Ò-Ø /ð .ñ ô ˆJˆJð %ŸjšjÐ):¸BÑ?Ô?ˆOØÔ)Ô.°Ñ@ˆJà'•U‘W”WÔ'ÐAÐA¨JÐA¸&ÐAÐAÐAÐAÐAÐAÐAÐAÐAr   r`   c              ‹   ó˜  K  — t                                |¦  «        }t          |fi |¤Ž| _        d}t	          t
          d¦  «        r0	 t          j        | j        j        ¦  «        }n# t          $ r Y nw xY w| j        j        | _        || _	        | 
                    dt          j                             ¦   «         ¦  «        | _        | j        S )zLaunch a kernel with a command.NÚgetpgidÚcwd)r   Ú_scrub_kwargsr   r   r0   r1   rv   Úpidr2   r/   ri   ÚpathlibÚPathrw   rQ   )r   r`   rX   Úscrubbed_kwargsr/   s        r   r   zLocalProvisioner.launch_kernel×   sÅ   è è € õ +×8Ò8¸Ñ@Ô@ˆÝ$ SÐ<Ð<¨OÐ<Ð<ˆŒØˆÝ•2�yÑ!Ô!ð 	ðÝ”z $¤,Ô"2Ñ3Ô3��øÝð ð ð Ø�ðøøøð ”<Ô#ˆŒØˆŒ	Ø—:’:˜e¥W¤\×%5Ò%5Ñ%7Ô%7Ñ8Ô8ˆŒØÔ#Ð#s   ÁA& Á&
A3Á2A3Úpath_strc                 ó4  — t          j        |¦  «                             ¦   «         }|                     ¦   «         s5| j        r.t          j        | j        ¦  «        |z                       ¦   «         }|                     ¦   «         r|                     ¦   «         S dS )zResolve path to given file.N)rz   r{   Ú
expanduserÚis_absoluterw   ÚresolveÚexistsÚas_posix)r   r}   Úpaths      r   Úresolve_pathzLocalProvisioner.resolve_pathè   s   € åŒ|˜HÑ%Ô%×0Ò0Ñ2Ô2ˆØ×ÒÑ!Ô!ð 	= d¤hð 	=Ý”L ¤Ñ*Ô*¨TÑ1×:Ò:Ñ<Ô<ˆDØ�;Š;‰=Œ=ð 	#Ø—=’=‘?”?Ð"Øˆtr   c                 ól   — ddg}|                       ¦   «         }|D ]}|                     |d¦  «         Œ|S )z:Remove any keyword arguments that Popen does not tolerate.r[   Ú	kernel_idN)Úcopyrf   )rX   Úkeywords_to_scrubr|   Úkws       r   rx   zLocalProvisioner._scrub_kwargsñ   sJ   € ð ):¸;Ð'GÐØ Ÿ+š+™-œ-ˆØ#ð 	*ð 	*ˆBØ×Ò  DÑ)Ô)Ð)Ð)ØÐr   c              ƒ   ó¨   •K  — t          ¦   «                              ¦   «         ƒ d{V —†}|                     | j        | j        | j        dœ¦  «         |S )zRCaptures the base information necessary for persistence relative to this instance.N)ry   r/   rd   )ro   Úget_provisioner_infoÚupdatery   r/   rd   ©r   Úprovisioner_infort   s     €r   rŒ   z%LocalProvisioner.get_provisioner_infoú   sY   øè è € å!&¡¤×!=Ò!=Ñ!?Ô!?Ð?Ð?Ð?Ð?Ð?Ð?ÐØ×Ò¨¬¸$¼)È4Ì7Ð SÐ SÑTÔTÐTØÐr   r�   c              ƒ   ó¨   •K  — t          ¦   «                              |¦  «        ƒ d{V —† |d         | _        |d         | _        |d         | _        dS )zOLoads the base information necessary for persistence relative to this instance.Nry   r/   rd   )ro   Úload_provisioner_infory   r/   rd   rŽ   s     €r   r‘   z&LocalProvisioner.load_provisioner_info   sZ   øè è € å‰gŒg×+Ò+Ð,<Ñ=Ô=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ø# EÔ*ˆŒØ$ VÔ,ˆŒ	Ø" 4Ô(ˆŒˆˆr   )F)$Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ú_exit_futurery   r/   rd   rO   rw   ÚpropertyÚboolr   rR   r   r   r3   r7   r>   Ústaticmethodr2   r8   rW   r   ÚdictÚstrrp   Úlistr   r   r…   rx   rŒ   r‘   Ú__classcell__)rt   s   @r   r   r      s–  ø€ € € € € ð	ð 	ð €GØ€LØ
€CØ€DØ	€BØ€LØ
€Càð(˜Tð (ð (ð (ñ „Xð(ð˜C $™Jð ð ð ð ð˜C $™Jð ð ð ð ð*¨ð °ð ð ð ð ð89ð 9 $ð 9°4ð 9ð 9ð 9ð 9ð9ð 9 tð 9¸ð 9ð 9ð 9ð 9ð ð. wð .°4ð .ð .ð .ñ „\ð.ð&&ð & Tð &°dð &ð &ð &ð &ð"0B¨ð 0B°°c¸3°h´ð 0Bð 0Bð 0Bð 0Bð 0Bð 0Bðd$ t¨C¤yð $¸Cð $ÐDXð $ð $ð $ð $ð" Sð ¨S°4©Zð ð ð ð ð ð˜d 3¨ 8œnð °°c¸3°h´ð ð ð ñ „\ðð ¨Dð  ð  ð  ð  ð  ð  ð)¸Dð )ÀTð )ð )ð )ð )ð )ð )ð )ð )ð )ð )r   r   )r•   r   r1   rz   r)   r+   Útypingr   r   Úconnectr   r   Úlauncherr   Úlocalinterfacesr	   r
   Úprovisioner_baser   r   ra   r   r   ú<module>r£      så   ðØ  Ð  ð €€€Ø 	€	€	€	Ø €€€Ø €€€Ø 
€
€
€
Ø %Ð %Ð %Ð %Ð %Ð %Ð %Ð %à :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ø $Ð $Ð $Ð $Ð $Ð $Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3ðs)ð s)ð s)ð s)ð s)Ð,ñ s)ô s)ð s)ð s)ð s)r   