U
    weG                  6   @   s  d dl Z d dlZd dlZd dlmZ d dlmZmZmZ d dl	m
Z
 edd\ZZZZZZZZZZZZZZZZZZZZedd\Z Z!Z"Z#Z$ed	d
\Z%Z&d Z'edd\Z(Z)Z*Z+Z,Z-Z.Z/dddddddddg	Z0dZ1dZ2dZ3dZ4dZ5dZ6dZ7edededededed ed!ed"ed#ed$ed%ed&ed'ed(ed)ed*ed+ed,ed-ed.e d/e!d0e"d1e#d2e$d3e%d4e&d5iZ8G d6d7 d7e9Z:G d8d9 d9e;Z<G d:d; d;Z=dS )<    N)util)DEBUGbyte_chrbyte_ord)Message      e   j         	   ZSuccesszEnd of filezNo such filezPermission deniedZFailurezBad messagezNo connectionzConnection lostzOperation unsupported                   initversionopenclosereadwritelstatfstatZsetstatZfsetstatZopendirZreaddirremovemkdirrmdirrealpathstatrenamereadlinksymlinkstatushandledatanameattrsextendedZextended_replyc                   @   s   e Zd ZdS )int64N__name__
__module____qualname__ r/   r/   l/mounts/lovelace/software/anaconda3/envs/qiime2-amplicon-2024.2/lib/python3.8/site-packages/paramiko/sftp.pyr*   }   s   r*   c                   @   s   e Zd ZdS )	SFTPErrorNr+   r/   r/   r/   r0   r1      s   r1   c                   @   sL   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dS )BaseSFTPc                 C   s   t d| _d | _d| _d S )Nzparamiko.sftpF)r   
get_loggerloggersockultra_debug)selfr/   r/   r0   __init__   s    zBaseSFTP.__init__c                 C   sT   t  }|t | t| |  \}}|tkr8tdt	d|d d d }|S )NIncompatible sftp protocol>Ir   r   )
r   add_int_VERSION_send_packetCMD_INIT_read_packetCMD_VERSIONr1   structunpack)r7   mtr&   r   r/   r/   r0   _send_version   s    
zBaseSFTP._send_versionc                 C   sf   |   \}}|tkrtdtd|d d d }ddg}t }|t |j|  | 	t
| |S )Nr9   r:   r   r   z
check-filezmd5,sha1)r?   r>   r1   rA   rB   r   r;   r<   addr=   r@   )r7   rD   r&   r   Zextension_pairsmsgr/   r/   r0   _send_server_version   s    

zBaseSFTP._send_server_versionc                 G   s   | j j||f|  d S )N)r4   log)r7   levelrG   argsr/   r/   r0   _log   s    zBaseSFTP._logc                 C   sH   t |dkrD| j|}|dkr&t |t |kr6d S ||d  }q d S )Nr   )lenr5   sendEOFError)r7   outnr/   r/   r0   
_write_all   s    zBaseSFTP._write_allc                 C   s   t  }|dkrt| jtjrTt| jgg g d\}}}t|dkr| j|}q`qn| j|}t|dkrrt ||7 }|t|8 }q|S )Nr   g?)bytes
isinstancer5   socketselectrM   recvrO   )r7   rQ   rP   r   r   errxr/   r/   r0   	_read_all   s    zBaseSFTP._read_allc                 C   sP   |  }tdt|d t| | }| jrB| tt	|d | 
| d S )Nr:   r   zOUT: )asbytesrA   packrM   r   r6   rL   r   r   format_binaryrR   )r7   rD   packetrP   r/   r/   r0   r=      s
     zBaseSFTP._send_packetc                 C   s   |  d}t|d rtdtd|d }|  |}| jrR| tt	|d |dkrvt|d }||dd  fS dt
 fS )Nr   r   zGarbage packet receivedr:   zIN: r   )rZ   r   r1   rA   rB   r6   rL   r   r   r]   rS   )r7   rY   sizer&   rD   r/   r/   r0   r?      s    

zBaseSFTP._read_packetN)r,   r-   r.   r8   rE   rH   rL   rR   rZ   r=   r?   r/   r/   r/   r0   r2      s   
r2   )>rV   rU   rA   paramikor   paramiko.commonr   r   r   paramiko.messager   ranger>   r@   ZCMD_OPENZ	CMD_CLOSEZCMD_READZ	CMD_WRITEZ	CMD_LSTATZ	CMD_FSTATZCMD_SETSTATZCMD_FSETSTATZCMD_OPENDIRZCMD_READDIRZ
CMD_REMOVEZ	CMD_MKDIRZ	CMD_RMDIRZCMD_REALPATHZCMD_STATZ
CMD_RENAMEZCMD_READLINKZCMD_SYMLINKZ
CMD_STATUSZ
CMD_HANDLEZCMD_DATAZCMD_NAMEZ	CMD_ATTRSZCMD_EXTENDEDZCMD_EXTENDED_REPLYSFTP_OKSFTP_EOFSFTP_NO_SUCH_FILESFTP_PERMISSION_DENIEDSFTP_FAILURESFTP_BAD_MESSAGESFTP_NO_CONNECTIONSFTP_CONNECTION_LOSTSFTP_OP_UNSUPPORTEDZ	SFTP_DESCZSFTP_FLAG_READZSFTP_FLAG_WRITEZSFTP_FLAG_APPENDZSFTP_FLAG_CREATEZSFTP_FLAG_TRUNCZSFTP_FLAG_EXCLr<   Z	CMD_NAMESintr*   	Exceptionr1   r2   r/   r/   r/   r0   <module>   s   
                           %