
    wBf                        d Z ddlmZ ddlZddlmZmZ ddlmZ ddl	m
Z
 ddlmZ dd	lmZ d
dlmZmZmZ e
rd
dlmZ  ee      Z e ed       ed            Z G d de      Zy)zADefines S3 transport adapter for CondaSession (requests.Session).    )annotationsN)LoggerAdapter	getLogger)SpooledTemporaryFile)TYPE_CHECKING   )ensure_binary)url_to_s3_info   )BaseAdapterCaseInsensitiveDictResponse)PreparedRequestzconda.stderrlog
)
terminator)extrac                  N    e Zd Z	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 ddZd ZddZd Zy)		S3AdapterNc                    t               }d|_        |j                  |_        	 | j                  ||      S # t        $ r! t
        j                  d       d|_        |cY S w xY w)N   z
Error: boto3 is required for S3 channels. Please install with `conda install boto3`
Make sure to run `conda deactivate` if you are in a conda environment.
  )r   status_codeurl_send_boto3ImportError	stderrloginfo)selfrequeststreamtimeoutverifycertproxiesresps           Elib/python3.12/site-packages/conda/gateways/connection/adapters/s3.pysendzS3Adapter.send   se     z;;
	##D'22 	NN0  #DK	s   6 'A A c                     y N )r   s    r&   closezS3Adapter.close1   s        c                ~   ddl m} ddlm}m} t        |j                        \  }} |       }|j                  d      }	|	j                  ||dd        }
	 |
j                         }|d
   d   }t        |j                  dd      |d   |d   d      |_        | j                  |
j"                        |_        |j                  j                  |_        |S # ||f$ r`}d|_
        d|j                  t        |      d| j                  fd	      |_        |j                  j                  |_        |cY d }~S d }~ww xY w)Nr   )Session)BotoCoreErrorClientErrors3   r   zerror downloading file from s3)errorpath	exceptionc                ^    | j                  t        t        j                                    S r)   )writer	   jsondumps)xmessages    r&   <lambda>z'S3Adapter._send_boto3.<locals>.<lambda>K   s    !''-

70C"DE r,   ResponseMetadataHTTPHeaderszcontent-typez
text/plainzcontent-lengthzlast-modified)zContent-TypezContent-LengthzLast-Modified)boto3.sessionr.   botocore.exceptionsr/   r0   r
   r   resourceObjectgetr   repr_write_tempfilerawr+   r   headersdownload_fileobj)r   r%   r   r.   r/   r0   bucket_name
key_stringsessionr1   keyresponseekey_headersr;   s                 @r&   r   zS3Adapter._send_boto34   s/   )B"0"=Z )d#iiZ^4	wwyH 12=A* + M"-.>"?!,_!=
 ''(<(<=XX^^
3 {+ 	"D9!!WG
 ++EDH DJK	s   C D<AD71D<7D<c                L    t               } ||       |j                  d       |S )Nr   )r   seek)r   writer_callablefhs      r&   rE   zS3Adapter._write_tempfile^   s"    !#

	r,   )FNTNN)r   r   r    boolr!   z7None | float | tuple[float, float] | tuple[float, None]r"   z
bool | strr#   z4None | bytes | str | tuple[bytes | str, bytes | str]r$   zdict[str, str] | Nonereturnr   )r%   r   r   r   rU   r   )__name__
__module____qualname__r'   r+   r   rE   r*   r,   r&   r   r      sn     KO!EI)-   I	
  C ' 
2(Tr,   r   )__doc__
__future__r   r8   loggingr   r   tempfiler   typingr   common.compatr	   
common.urlr
    r   r   r   r   rV   logdictr   r   r*   r,   r&   <module>rc      s[    H "  , )   + ) 9 9")$56dd>ST	K Kr,   