Ë
    ãš¾j "  ã                   óð   — 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Zddl	m
Z
 ddlmZ  ej                  d«      Zej                  ej                   ej"                  dœZd„ Z G d	„ d
e
«      Zd„ Zd„ Zy)é    N)ÚS_ISDIRÚS_ISLNKé   )ÚAbstractFileSystem©Úinfer_storage_optionszfsspec.sftp)Úauto_addÚrejectÚwarningc           	      óÀ  — | €t        j                  «       S t        | t        «      r	 t	        |    «       S t        | t        «      r!t        | t         j                  «      r | «       S t        | t         j                  «      r| S t        dt        t        «      › dt        | «      j                  › �«      ‚# t
        $ r! t        d| ›dt        t        «      › d�«      d‚w xY w)zDTurn a ``host_key_policy`` argument into a paramiko policy instance.NzUnknown host_key_policy z; expected one of z# or a paramiko.MissingHostKeyPolicyzhost_key_policy must be one of z<, a paramiko.MissingHostKeyPolicy subclass or instance, not )ÚparamikoÚAutoAddPolicyÚ
isinstanceÚstrÚHOST_KEY_POLICIESÚKeyErrorÚ
ValueErrorÚsortedÚtypeÚ
issubclassÚMissingHostKeyPolicyÚ	TypeErrorÚ__name__)Úpolicys    úe/home/spazio/kingdom_calls/work5/transenv/lib/python3.12/site-packages/fsspec/implementations/sftp.pyÚ_resolve_host_key_policyr      sâ   € à€~Ü×%Ñ%Ó'Ð'Ü�&œ#Ôð	Ü$ VÑ,Ó.Ð.ô �&œ$Ô¤J¨v´x×7TÑ7TÔ$UÙ‹xˆÜ�&œ(×7Ñ7Ô8ØˆÜ
Ø)ÜÔ#Ó$Ð
%ð &Ü  ›L×1Ñ1Ð2ð	4óð øô ò 	ÜØ*¨6¨*Ð4FÜÔ+Ó,Ð-Ð-PðRóð ðð	ús   ¨B3 Â3*Cc                   ó°   ‡ — e Zd ZdZdZˆ fd„Zd„ Zed„ «       Ze	d„ «       Z
dd„Zdd„Zd	„ Zd
„ Zd„ Zd„ Ze	dd„«       Zdd„Zdd„Zd„ Zdd„Zd„ Zd„ Zˆ xZS )ÚSFTPFileSystemzüFiles over SFTP/SSH

    Peer-to-peer filesystem over SSH using paramiko.

    Note: if using this with the ``open`` or ``open_files``, with full URLs,
    there is no way to tell if a path is relative, so all paths are assumed
    to be absolute.
    )ÚsftpÚsshc                 óè   •— | j                   ryt        ‰| �  di |¤Ž |j                  dd«      | _        t        |j                  dd«      «      | _        || _        || _        | j                  «        y)aL  

        Parameters
        ----------
        host: str
            Hostname or IP as a string
        temppath: str
            Location on the server to put files, when within a transaction
        host_key_policy: str or paramiko.MissingHostKeyPolicy, optional
            Policy applied when the server presents a host key that is not
            known yet, passed to
            ``paramiko.SSHClient.set_missing_host_key_policy``. Either one of
            the strings ``"auto_add"`` (default, ``paramiko.AutoAddPolicy``:
            accept and remember any unknown key), ``"warning"``
            (``paramiko.WarningPolicy``: log a warning and accept) or
            ``"reject"`` (``paramiko.RejectPolicy``: refuse to connect), or a
            ``paramiko.MissingHostKeyPolicy`` subclass or instance.

            The default, ``"auto_add"``, trusts any host key presented on the
            first connection to a host, so a man-in-the-middle attacker can
            impersonate the server. Pass ``"reject"`` to only connect to hosts
            whose keys are already in the known hosts of the process.
        ssh_kwargs: dict
            Parameters passed on to connection. See details in
            https://docs.paramiko.org/en/3.3/api/client.html#paramiko.client.SSHClient.connect
            May include port, username, password...
        NÚtemppathz/tmpÚhost_key_policy© )
Ú_cachedÚsuperÚ__init__Úpopr"   r   r#   ÚhostÚ
ssh_kwargsÚ_connect)Úselfr)   r*   Ú	__class__s      €r   r'   zSFTPFileSystem.__init__;   sf   ø€ ð8 �<Š<ØÜ‰ÑÑ&˜:Ò&Ø"Ÿ™ z°6Ó:ˆŒÜ7Ø�N‰NÐ,¨dÓ3ó 
ˆÔð ˆŒ	Ø$ˆŒØ�‰�ó    c                 ó`  — t         j                  d| j                  «       t        j                  «       | _        | j
                  j                  | j                  «        | j
                  j                  | j                  fi | j                  ¤Ž | j
                  j                  «       | _        y )NzConnecting to SFTP server %s)ÚloggerÚdebugr)   r   Ú	SSHClientÚclientÚset_missing_host_key_policyr#   Úconnectr*   Ú	open_sftpÚftp©r,   s    r   r+   zSFTPFileSystem._connectb   sr   € Ü�‰Ð3°T·Y±YÔ?Ü×(Ñ(Ó*ˆŒØ�‰×/Ñ/°×0DÑ0DÔEØˆ�‰×Ñ˜DŸI™IÑ9¨¯©Ò9Ø—;‘;×(Ñ(Ó*ˆ�r.   c                 ó   — t        |«      d   S )NÚpathr   )Úclsr:   s     r   Ú_strip_protocolzSFTPFileSystem._strip_protocoli   s   € ä$ TÓ*¨6Ñ2Ð2r.   c                 ód   — t        | «      }|j                  dd «       |j                  dd «       |S )Nr:   Úprotocol)r   r(   )ÚurlpathÚouts     r   Ú_get_kwargs_from_urlsz$SFTPFileSystem._get_kwargs_from_urlsm   s-   € ä# GÓ,ˆØ�‰�˜ÔØ�‰�
˜DÔ!Øˆ
r.   c                 óð   — | j                  |«      }t        j                  d|«       | j                  |«      rt	        d|› �«      ‚|r| j                  |«       y | j                  j                  ||«       y )NzCreating folder %súFile exists: )r<   r0   r1   ÚexistsÚFileExistsErrorÚmakedirsr7   Úmkdir)r,   r:   Úcreate_parentsÚmodes       r   rG   zSFTPFileSystem.mkdirt   s`   € Ø×#Ñ# DÓ)ˆÜ�‰Ð)¨4Ô0Ø�;‰;�tÔÜ! M°$°Ð"8Ó9Ð9áØ�M‰M˜$Õà�H‰H�N‰N˜4 Õ&r.   c                 ó  — | j                  |«      r|st        d|› �«      ‚|j                  d«      }|d d dk(  rdnd}|D ]>  }|sŒ|r|› d|› �n|}| j                  |«      rŒ#| j                  j	                  ||«       Œ@ y )NrC   ú/é   Ú )rD   rE   Úsplitr7   rG   )r,   r:   Úexist_okrI   ÚpartsÚnew_pathÚparts          r   rF   zSFTPFileSystem.makedirs   s†   € Ø�;‰;�tÔ¡XÜ! M°$°Ð"8Ó9Ð9à—
‘
˜3“ˆØ˜r ˜( cš/‘3¨rˆàò 	3ˆDÚÙ3;˜h˜Z q¨¨Ñ/À�Ø—{‘{ 8Õ,Ø—H‘H—N‘N 8¨TÕ2ñ		3r.   c                 óˆ   — | j                  |«      }t        j                  d|«       | j                  j	                  |«       y )NzRemoving folder %s)r<   r0   r1   r7   Úrmdir©r,   r:   s     r   rT   zSFTPFileSystem.rmdirŒ   s1   € Ø×#Ñ# DÓ)ˆÜ�‰Ð)¨4Ô0Ø�‰�‰�tÕr.   c                 ó†   — | j                  |«      }| j                  | j                  j                  |«      «      }||d<   |S )NÚname)r<   Ú_decode_statr7   Ústat)r,   r:   rY   s      r   ÚinfozSFTPFileSystem.info‘   s=   € Ø×#Ñ# DÓ)ˆØ× Ñ  §¡§¡¨tÓ!4Ó5ˆØˆˆV‰Øˆr.   c                 óf   — | j                  |«      }|j                  dd«      }|�|S t        d«      ‚)z=Return the created timestamp of a file as a datetime.datetimeÚmtimeNz5Could not retrieve creation time (modification time).©rZ   ÚgetÚRuntimeError©r,   r:   rZ   r\   s       r   ÚcreatedzSFTPFileSystem.created—   s8   € ð �y‰y˜‹ˆØ—‘˜ $Ó'ˆØÐØˆLÜÐRÓSÐSr.   c                 óf   — | j                  |«      }|j                  dd«      }|�|S t        d«      ‚)z>Return the modified timestamp of a file as a datetime.datetimer\   Nz%Could not retrieve modification time.r]   r`   s       r   ÚmodifiedzSFTPFileSystem.modified    s6   € à�y‰y˜‹ˆØ—‘˜ $Ó'ˆØÐØˆLÜÐBÓCÐCr.   c           
      ó   — t        | j                  «      rd}nt        | j                  «      rd}nd}d| j                  || j                  | j
                  t        j                  j                  | j                  t        j                  j                  ¬«      t        j                  j                  | j                  t        j                  j                  ¬«      dœ}|r/dj                  |j                  d«      | j                  g«      |d<   |S )	NÚ	directoryÚlinkÚfilerM   )Útz)rW   Úsizer   ÚuidÚgidÚtimer\   rK   rW   )r   Úst_moder   Úst_sizeÚst_uidÚst_gidÚdatetimeÚfromtimestampÚst_atimeÚtimezoneÚutcÚst_mtimeÚjoinÚrstripÚfilename)rY   Úparent_pathÚtr@   s       r   rX   zSFTPFileSystem._decode_stat¨   sÙ   € ä�4—<‘<Ô Ø‰AÜ�T—\‘\Ô"Ø‰AàˆAàØ—L‘LØØ—;‘;Ø—;‘;Ü×%Ñ%×3Ñ3Ø—‘¤(×"3Ñ"3×"7Ñ"7ð 4ó ô ×&Ñ&×4Ñ4Ø—‘¤(×"3Ñ"3×"7Ñ"7ð 5ó ñ
ˆñ ØŸ(™( K×$6Ñ$6°sÓ$;¸T¿]¹]Ð#KÓLˆC�‰KØˆ
r.   c                 ó  — | j                  |«      }t        j                  d|«       | j                  j	                  |«      D �cg c]  }| j                  ||«      ‘Œ }}|r|S |D �cg c]  }|d   ‘Œ	 }}t        |«      S c c}w c c}w )NzListing folder %srW   )r<   r0   r1   r7   Úlistdir_iterrX   r   )r,   r:   ÚdetailrY   ÚstatsÚpathss         r   ÚlszSFTPFileSystem.lsÁ   s…   € Ø×#Ñ# DÓ)ˆÜ�‰Ð(¨$Ô/Ø;?¿8¹8×;PÑ;PÐQUÓ;VÖW°4�×"Ñ" 4¨Õ.ÐWˆÐWÙØˆLà.3Ö4 d�T˜&“\Ð4ˆEÐ4Ü˜%“=Ð ùò Xùò 5s   ÁBÁ(Bc                 óÔ   — | j                  | j                  t        j                  |«      «      d¬«       t        j                  d||«       | j                  j                  ||«       y )NT©rO   zPut file %s into %s)ÚmkdirsÚ_parentÚosÚfspathr0   r1   r7   Úput)r,   ÚlpathÚrpathÚcallbackÚkwargss        r   Úput_filezSFTPFileSystem.put_fileË   sG   € Ø�‰�D—L‘L¤§¡¨5Ó!1Ó2¸TˆÔBÜ�‰Ð*¨E°5Ô9Ø�‰�‰�U˜EÕ"r.   c                 ó¬   — | j                  |«      rt        j                  |d¬«       y | j                  j	                  | j                  |«      |«       y )NTrƒ   )Úisdirr†   rF   r7   r^   r<   )r,   rŠ   r‰   rŒ   s       r   Úget_filezSFTPFileSystem.get_fileÐ   s9   € Ø�:‰:�eÔÜ�K‰K˜¨Ö-à�H‰H�L‰L˜×-Ñ-¨eÓ4°eÕ<r.   c                 óü  — t         j                  d|«       |j                  dd«      du r¯dj                  | j                  t        t        j                  «       «      g«      }| j                  j                  |||r|nd¬«      }||_        ||_
        | |_        t        j                  t        |«      |_        t        j                  t         |«      |_        |S | j                  j                  |||r|nd¬«      }|S )z­
        block_size: int or None
            If 0, no buffering, if 1, line buffering, if >1, buffer that many
            bytes, if None use default from paramiko.
        zOpening file %sÚ
autocommitTFrK   éÿÿÿÿ)Úbufsize)r0   r1   r^   rw   r"   r   ÚuuidÚuuid4r7   ÚopenÚ
targetpathÚfsÚtypesÚ
MethodTypeÚcommit_a_fileÚcommitÚdiscard_a_fileÚdiscard)r,   r:   rI   Ú
block_sizerŒ   Úpath2Úfs          r   Ú_openzSFTPFileSystem._openÖ   sÍ   € ô 	�‰Ð&¨Ô-Ø�:‰:�l DÓ)¨UÑ2à—H‘H˜dŸm™m¬S´·±³Ó->Ð?Ó@ˆEØ—‘—‘˜e TÁ±:ÐQS�ÓTˆAØˆAŒJØˆAŒLØˆAŒDÜ×'Ñ'¬°qÓ9ˆAŒHÜ×(Ñ(¬¸Ó;ˆAŒIð ˆð —‘—‘˜d DÁ
±*ÐPR�ÓSˆAØˆr.   c                 ó”   — | j                  |«      r| j                  j                  |«       y | j                  j                  |«       y ©N)r�   r7   rT   ÚremoverU   s     r   Ú_rmzSFTPFileSystem._rmê   s.   € Ø�:‰:�dÔØ�H‰H�N‰N˜4Õ à�H‰H�O‰O˜DÕ!r.   c                 ó®   — | j                  |«      }| j                  |«      }t        j                  d||«       | j                  j	                  ||«       y )NzRenaming %s into %s)r<   r0   r1   r7   Úposix_rename)r,   ÚoldÚnews      r   ÚmvzSFTPFileSystem.mvð   sG   € Ø×"Ñ" 3Ó'ˆØ×"Ñ" 3Ó'ˆÜ�‰Ð*¨C°Ô5Ø�‰×Ñ˜c 3Õ'r.   )Téÿ  )Fr­   r¥   )F)ÚrbN)r   Ú
__module__Ú__qualname__Ú__doc__r>   r'   r+   Úclassmethodr<   ÚstaticmethodrA   rG   rF   rT   rZ   ra   rc   rX   r�   r�   r�   r£   r§   r¬   Ú__classcell__)r-   s   @r   r   r   /   s”   ø„ ñð €Hô%òN+ð ñ3ó ð3ð ñó ðó	'ó3òò
òTòDð òó ðó0!ó#ò
=óò("ö(r.   r   c                 ód   — | j                   j                  | j                  | j                  «       y r¥   )r™   r¬   r"   r˜   r8   s    r   rœ   rœ   ÷   s   € Ø‡G�G‡J�Jˆt�}‰}˜dŸo™oÕ.r.   c                 óN   — | j                   j                  | j                  «       y r¥   )r™   r§   r"   r8   s    r   rž   rž   û   s   € Ø‡G�G‡K�K�—‘Õr.   )rq   Úloggingr†   rš   r•   rY   r   r   r   rM   r   Úutilsr   Ú	getLoggerr0   r   ÚRejectPolicyÚWarningPolicyr   r   r   rœ   rž   r$   r.   r   ú<module>r¼      sv   ðÛ Û Û 	Û Û ß !ã å !Ý )à	ˆ×	Ñ	˜=Ó	)€ð
 ×&Ñ&Ø×#Ñ#Ø×%Ñ%ñÐ òô.E(Ð'ô E(òP/ór.   