Ë
    æš¾jˆf  ã                  óà  — d Z ddlm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ZddlZddlZ	 ddlZddlZer‚ddlmZ ddlmZ ddlmZmZ dd	lmZ dd
lmZ ej<                  j>                  j@                  ej<                  j>                  jB                  z  ej<                  j>                  jD                  z  Z# ejH                  e%«      Z&e'e(e)fZ*	 dZ+	 dZ,	 dZ-	 dZ.	  G d„ de	«      Z/dd„Z0dd„Z1dde-e,e.f	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Z2	 	 	 	 	 	 	 	 d d„Z3 G d„ d«      Z4 G d„ dejj                  «      Z6 G d„ dejj                  «      Z7 G d„ dejj                  «      Z8y# e$ r dZY �Œ6w xY w)!zPImplements file-like objects for reading and writing to/from Azure Blob Storage.é    )ÚannotationsN)ÚTYPE_CHECKINGÚAnyÚ	TypedDictÚcastT)ÚTracebackType)ÚIO)ÚReadableBufferÚWriteableBuffer)ÚSelf)ÚTransportParamsÚazurei   i  @ é   c                  ó,   — e Zd ZU ded<   ded<   ded<   y)Ú	_AzureUriÚstrÚschemeÚcontainer_idÚblob_idN)Ú__name__Ú
__module__Ú__qualname__Ú__annotations__© ó    úZ/home/spazio/kingdom_calls/work5/transenv/lib/python3.12/site-packages/smart_open/azure.pyr   r   >   s   … ØƒKØÓØ„Lr   r   c                óâ   — t         j                  j                  | «      }|j                  t        k(  sJ ‚|j
                  }|j                  j                  d«      }|sd}|}n|}|}t        ||dœS )zAParse an ``azure://`` URI into its container and blob components.ú/z$root)r   r   r   )Ú
smart_openÚutilsÚsafe_urlsplitr   ÚSCHEMEÚnetlocÚpathÚlstrip)Úuri_as_stringÚsrÚfirstÚsecondr   r   s         r   Ú	parse_urir*   D   sk   € ä	×	Ñ	×	'Ñ	'¨Ó	6€BØ�9‰9œÒÐÐØ�I‰I€EØ�W‰W�^‰^˜CÓ €Fñ ØˆØ‰àˆØˆä¨lÀwÑOÐOr   c                óˆ   — t        | «      }t        j                  j                  t        |«      }t	        |d   |d   |fi |¤ŽS )zIOpen an Azure Blob Storage URI using the given mode and transport params.r   r   )r*   r   r    Úcheck_kwargsÚopen)ÚuriÚmodeÚtransport_paramsÚ
parsed_uriÚkwargss        r   Úopen_urir3   V   sB   € ä˜3“€JÜ×Ñ×*Ñ*¬4Ð1AÓB€FÜ�
˜>Ñ*¨J°yÑ,AÀ4ÑRÈ6ÑRÐRr   c                ó‚  — |sd}t        |«      ‚|t        j                  j                  k(  r)t	        | |||t        j                  j
                  |¬«      S |t        j                  j                  k(  rt        | ||||¬«      S |t        j                  j                  k(  rt        | ||||¬«      S d|›d�}t        |«      ‚)az  Open an Azure Blob Storage blob for reading or writing.

    Args:
        container_id: The name of the container this object resides in.
        blob_id: The name of the blob within the bucket.
        mode: The mode for opening the object.  Must be either "rb", "wb", or "ab".
        client: The Azure Blob Storage client to use when working with
            azure-storage-blob. May be a BlobServiceClient, ContainerClient, or
            BlobClient.
        blob_kwargs: Additional parameters to pass to
            ``BlobClient.commit_block_list`` (for "wb") or
            ``BlobClient.upload_blob`` (for "ab"). For writing only.
        buffer_size: The buffer size to use when performing I/O. For reading only.
        min_part_size: The minimum part size for multipart uploads. For writing
            only.
        max_concurrency: The number of parallel connections with which to
            download. For reading only.

    Returns:
        A file-like object for reading from or writing to the blob.

    Raises:
        ValueError: If no client is provided.
        NotImplementedError: If the requested mode is not supported.
    z/you must specify the client to connect to Azure)Úbuffer_sizeÚline_terminatorÚmax_concurrency)Úblob_kwargsÚmin_part_sizez$Azure Blob Storage support for mode z not implemented)Ú
ValueErrorr   Ú	constantsÚREAD_BINARYÚReaderÚBINARY_NEWLINEÚWRITE_BINARYÚWriterÚAPPEND_BINARYÚAppendWriterÚNotImplementedError)	r   r   r/   Úclientr8   r5   r9   r7   Úmsgs	            r   r-   r-   ]   sÉ   € ñF Ø?ˆÜ˜‹oÐàŒz×#Ñ#×/Ñ/Ò/ÜØØØØ#Ü&×0Ñ0×?Ñ?Ø+ô
ð 	
ð Œz×#Ñ#×0Ñ0Ò0Ü�l G¨VÀÐ\iÔjÐjØŒz×#Ñ#×1Ñ1Ò1ÜØ˜' 6°{ÐR_ô
ð 	
ð 1°°Ð8HÐ
I€CÜ
˜cÓ
"Ð"r   c                ó  — | }t        |d«      r|j                  |«      }t        |d«      r,|j                  |k7  rd|j                  ›d|›�}t        |«      ‚t        |d«      r|j	                  |«      }t        d|«      S )z<Return an Azure BlobClient for the given container and blob.Úget_container_clientÚcontainer_namezClient for z doesn't match container Úget_blob_clientúazure.storage.blob.BlobClient)ÚhasattrrG   rH   r:   rI   r   )rD   Ú	containerÚblobÚobjrE   s        r   Ú_get_blob_clientrO   —   s‰   € ð €CÜˆsÐ*Ô+Ø×&Ñ& yÓ1ˆäˆsÐ$Ô%¨#×*<Ñ*<À	Ò*IØ˜C×.Ñ.Ð1Ð1JÈ9È-ÐXˆÜ˜‹oÐäˆsÐ%Ô&Ø×!Ñ! $Ó'ˆäÐ/°Ó5Ð5r   c                  ó2   — e Zd ZdZdd„Zdd„Zd	d
d„Zd
d„Zy)Ú
_RawReaderz Read an Azure Blob Storage file.c                ó<   — || _         || _        d| _        || _        y ©Nr   )Ú_blobÚ_sizeÚ	_positionÚ_concurrency)ÚselfrM   ÚsizeÚconcurrencys       r   Ú__init__z_RawReader.__init__®   s   € ØˆŒ
ØˆŒ
ØˆŒØ'ˆÕr   c                ó(   — || _         | j                   S )zäSeek to the specified position (byte offset) in the Azure Blob Storage blob.

        Args:
            position: The byte offset from the beginning of the blob.

        Returns:
            The position after seeking.
        ©rV   )rX   Úpositions     r   Úseekz_RawReader.seek´   s   € ð "ˆŒØ�~‰~Ðr   c                ó˜   — | j                   | j                  k\  ry| j                  |«      }| xj                   t        |«      z  c_         |S )Nr   )rV   rU   Ú_download_blob_chunkÚlen)rX   rY   Úbinarys      r   Úreadz_RawReader.readÀ   s<   € Ø�>‰>˜TŸZ™ZÒ'ØØ×*Ñ*¨4Ó0ˆØ�Šœ#˜f›+Ñ%�Øˆr   c                óþ  — | j                   | j                  k(  ry|dk(  r2| j                  j                  | j                  | j                  ¬«      }n2| j                  j                  | j                  | j                  |¬«      }t
        j                  d| j                  «       t        |t        j                  j                  j                  «      r|j                  «       }n|j                  «       }t        d|«      S )Nr   éÿÿÿÿ)Úoffsetr7   )rg   r7   Úlengthz$reading with a max concurrency of %dÚbytes)rU   rV   rT   Údownload_blobrW   ÚloggerÚdebugÚ
isinstancer   ÚstoragerM   ÚStorageStreamDownloaderÚreadallrd   r   )rX   rY   Ústreamrc   s       r   ra   z_RawReader._download_blob_chunkÇ   sÂ   € Ø�:‰:˜Ÿ™Ò'ð
 Ø�2Š:Ø—Z‘Z×-Ñ-°T·^±^ÐUY×UfÑUfÐ-Óg‰Fà—Z‘Z×-Ñ-Ø—~‘~°t×7HÑ7HÐQUð .ó ˆFô 	�‰Ð;¸T×=NÑ=NÔOÜ�fœeŸm™m×0Ñ0×HÑHÔIØ—^‘^Ó%‰Fà—[‘[“]ˆFÜ�G˜VÓ$Ð$r   N)rM   rJ   rY   ÚintrZ   rr   ÚreturnÚNone)r^   rr   rs   rr   ©rf   ©rY   rr   rs   ri   )r   r   r   Ú__doc__r[   r_   rd   ra   r   r   r   rQ   rQ   «   s   „ Ù*ó(ó
ôô%r   rQ   c                  ó^  — e Zd ZU dZded<   dZded<   eej                  j                  e
f	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Zdd„Zedd	„«       Zdd
„Zdd„Zdd„Zej                  j$                  fdd„Zdd„Zd d!d„Zd"d#d„Zd"d#d„Zd$d„Zd"d%d„Zd"d&d„Zd"d'd„Zd(d„Z	 	 	 	 	 	 	 	 d)d„Zd*d„Zd*d„Zy)+r=   aØ  Reads bytes from Azure Blob Storage.

    Implements the io.BufferedIOBase interface of the standard library.

    Args:
        container: The name of the container the blob resides in.
        blob: The name of the blob within the container.
        client: The Azure Blob Storage client. May be a BlobServiceClient,
            ContainerClient, or BlobClient.
        buffer_size: The buffer size to use when performing I/O.
        line_terminator: The line terminator to use when reading lines.
        max_concurrency: The number of parallel connections with which to
            download.

    Raises:
        azure.core.exceptions.ResourceNotFoundError: Raised when the blob to read
            from does not exist.
    r   ÚnameNú$azure.storage.blob.BlobClient | NonerT   c                óà  — || _         || _        t        |||«      | _        | j                  €1d|› d|› �}t        j
                  j                  j                  |«      ‚	 | j                  j                  «       d   | _	        t        | j                  | j                  |«      | _        d| _        t        j                  j!                  |«      | _        || _        y # t        $ r
 d| _	        Y Œkw xY w)Nzblob z not found in rY   r   )Ú_container_nameÚ
_blob_namerO   rT   r   ÚcoreÚ
exceptionsÚResourceNotFoundErrorÚget_blob_propertiesrU   ÚKeyErrorrQ   Ú_raw_readerrV   r   Ú
bytebufferÚ
ByteBufferÚ_current_partÚ_line_terminator)rX   rL   rM   rD   r5   r6   r7   rE   s           r   r[   zReader.__init__ó   sÔ   € ð  )ˆÔØˆŒä% f¨i¸Ó>ˆŒ
à�:‰:ÐØ˜$˜˜~¨i¨[Ð9ˆCÜ—*‘*×'Ñ'×=Ñ=¸cÓBÐBð	ØŸ™×7Ñ7Ó9¸&ÑAˆDŒJô /9¸¿¹ÀTÇZÁZÐQ`Ó.aˆÔØˆŒÜ'×2Ñ2×=Ñ=¸kÓJˆÔØ /ˆÕøô ò 	ØˆDŽJð	ús   Á"C ÃC-Ã,C-c                ód   — t         j                  d«       | j                  sd| _        d| _        yy)zFlush and close this stream.úclose: calledN)rk   rl   ÚclosedrT   rƒ   ©rX   s    r   ÚclosezReader.close  s)   € ä�‰�_Ô%Ø�{Š{ØˆDŒJØ#ˆDÕð r   c                ó   — | j                   du S ©z$Return True if the stream is closed.N©rT   r‹   s    r   rŠ   zReader.closed  ó   € ð �z‰z˜TÐ!Ð!r   c                 ó   — y)z+Return True if the stream can be read from.Tr   r‹   s    r   ÚreadablezReader.readable  ó   € àr   c                 ó   — y)z2Return True; we support `seek` but not `truncate`.Tr   r‹   s    r   ÚseekablezReader.seekable!  r“   r   c                ó"   — t         j                  ‚©úUnsupported.©ÚioÚUnsupportedOperationr‹   s    r   ÚdetachzReader.detach(  ó   € ä×%Ñ%Ð%r   c                ó0  — t         j                  d||«       |t        j                  j                  vr+d|› dt        j                  j                  ›�}t        |«      ‚|t        j                  j                  k(  r|}n<|t        j                  j                  k(  r| j                  |z   }n| j                  |z   }|| j                  kD  r`|| j                  z
  t        | j                  «      k  r;| j                  j                  || j                  z
  «       || _        | j                  S | j                  }|€J ‚|| _        |j                  |«       t         j                  d| j                  «       | j                  j                  «        | j                  S )a"  Seek to the specified position.

        Args:
            offset: The offset in bytes.
            whence: Where the offset is from.

        Returns:
            The position after seeking.

        Raises:
            ValueError: If ``whence`` is not one of the accepted values.
        z seeking to offset: %r whence: %rzinvalid whence z, expected one of zcurrent_pos: %r)rk   rl   r   r;   ÚWHENCE_CHOICESr:   ÚWHENCE_STARTÚWHENCE_CURRENTrV   rU   rb   r†   rd   rƒ   r_   Úempty)rX   rg   ÚwhencerE   Únew_positionÚ
raw_readers         r   r_   zReader.seek,  sM  € ô 	�‰Ð7¸ÀÔHØœ×-Ñ-×<Ñ<Ñ<Ø# F 8Ð+=¼j×>RÑ>R×>aÑ>aÐ=dÐeˆCÜ˜S“/Ð!à”Z×)Ñ)×6Ñ6Ò6Ø!‰LØ”z×+Ñ+×:Ñ:Ò:ØŸ>™>¨FÑ2‰LàŸ:™:¨Ñ.ˆLð ˜$Ÿ.™.Ò(¨\¸D¿N¹NÑ-JÌcÐRV×RdÑRdÓNeÒ-eØ×Ñ×#Ñ# L°4·>±>Ñ$AÔBØ)ˆDŒNØ—>‘>Ð!à×%Ñ%ˆ
ØÐ%Ð%Ð%à%ˆŒØ�‰˜Ô%Ü�‰Ð&¨¯©Ô7à×Ñ× Ñ Ô"Ø�~‰~Ðr   c                ó   — | j                   S )z,Return the current position within the file.r]   r‹   s    r   ÚtellzReader.tellU  s   € à�~‰~Ðr   c                ó"   — t         j                  ‚r—   r™   ©rX   rY   s     r   ÚtruncatezReader.truncateY  r�   r   c                óŒ  — |€d}| j                   }|€J ‚|dk(  ry|dk  r2| j                  | _        | j                  «       |j	                  «       z   S t        | j                  «      |k\  r| j                  |«      S | j                  | j                  k(  r| j                  «       S | j                  |«       | j                  |«      S )z6Read up to size bytes from the object and return them.rf   r   r   )rƒ   rU   rV   Ú_read_from_bufferrd   rb   r†   Ú_fill_buffer)rX   rY   r¥   s      r   rd   zReader.read]  s¾   € àˆ<ØˆDØ×%Ñ%ˆ
ØÐ%Ð%Ð%Ø�1Š9ØØ�!Š8Ø!ŸZ™ZˆDŒNØ×)Ñ)Ó+¨j¯o©oÓ.?Ñ?Ð?ô
 ˆt×!Ñ!Ó" dÒ*Ø×)Ñ)¨$Ó/Ð/à�>‰>˜TŸZ™ZÒ'Ø×)Ñ)Ó+Ð+à×Ñ˜$ÔØ×%Ñ% dÓ+Ð+r   c                ó&   — | j                  |¬«      S )zThis is the same as read().)rY   )rd   r©   s     r   Úread1zReader.read1u  s   € à�y‰y˜dˆyÓ#Ð#r   c                ó¢   — t        |«      j                  d«      }| j                  t        |«      «      }|sy||dt        |«       t        |«      S )zDRead up to len(b) bytes into b, and return the number of bytes read.ÚBr   N)Ú
memoryviewr   rd   rb   )rX   ÚbÚmvÚdatas       r   ÚreadintozReader.readintoy  sG   € ä˜‹]×Ñ Ó$ˆØ�y‰yœ˜R›Ó!ˆÙØØˆˆ;ŒS�‹YˆÜ�4‹yÐr   c                ó^  — |€d}|dk7  rd}t        |«      ‚t        j                  «       }| j                  | j                  k(  rt        | j                  «      dk(  sÃ| j                  j                  | j                  «      }|j                  |«       | xj                  t        |«      z  c_        |j                  | j                  «      r	 |j                  «       S | j                  «        | j                  | j                  k(  sŒªt        | j                  «      dk(  sŒÃ|j                  «       S )zCRead up to and including the next newline.  Returns the bytes read.rf   z(limits other than -1 not implemented yetr   )rC   rš   ÚBytesIOrV   rU   rb   r†   Úreadliner‡   ÚwriteÚendswithr­   Úgetvalue)rX   ÚlimitrE   ÚlineÚ	line_parts        r   r¹   zReader.readline‚  sñ   € àˆ=ØˆEØ�BŠ;Ø<ˆCÜ% cÓ*Ð*ô
 �z‰z‹|ˆØ—>‘> T§Z¡ZÒ/´C¸×8JÑ8JÓ4KÈqÒ4PØ×*Ñ*×3Ñ3°D×4IÑ4IÓJˆIØ�J‰J�yÔ!Ø�NŠNœc )›nÑ,�Nà×!Ñ! $×"7Ñ"7Ô8Øð �}‰}‹Ðð ×ÑÔð —>‘> T§Z¡ZÓ/´C¸×8JÑ8JÓ4KÈqÓ4Pð �}‰}‹Ðr   c                ó°   — |dk\  r|nt        | j                  «      }| j                  j                  |«      }| xj                  t        |«      z  c_        |S )z:Remove at most size bytes from our buffer and return them.r   )rb   r†   rd   rV   )rX   rY   Úparts      r   r¬   zReader._read_from_bufferœ  sG   € à˜q’y‰t¤c¨$×*<Ñ*<Ó&=ˆØ×!Ñ!×&Ñ& tÓ,ˆØ�Šœ#˜d›)Ñ#�Øˆr   c                óª  — | j                   }|€J ‚t        || j                  j                  «      }t	        | j                  «      |k  r‹| j
                  | j                  k7  rr| j                  j                  t        d|«      «      }|dk(  rt        j                  d«       yt	        | j                  «      |k  r| j
                  | j                  k7  rŒry )Nz	IO[bytes]r   z reached EOF while filling bufferT)rƒ   Úmaxr†   Ú_chunk_sizerb   rV   rU   Úfillr   rk   rl   )rX   rY   r¥   Ú
bytes_reads       r   r­   zReader._fill_buffer£  s°   € Ø×%Ñ%ˆ
ØÐ%Ð%Ð%Ü�4˜×+Ñ+×7Ñ7Ó8ˆÜ�$×$Ñ$Ó%¨Ò,°·±À4Ç:Á:Ò1Mà×+Ñ+×0Ñ0´°kÀ:Ó1NÓOˆJØ˜QŠÜ—‘Ð?Ô@Øô �$×$Ñ$Ó%¨Ò,°·±À4Ç:Á:Ó1Mð r   c                ó   — | S )z!Enter the reader context manager.r   r‹   s    r   Ú	__enter__zReader.__enter__¯  ó   € àˆr   c                ó$   — | j                  «        y)z!Close the reader on context exit.N)rŒ   ©rX   Úexc_typeÚexc_valÚexc_tbs       r   Ú__exit__zReader.__exit__³  s   € ð 	�
‰
�r   c                ój   — d| j                   j                  › d| j                  ›d| j                  ›d�S )z8Return a short human-readable description of the reader.ú(ú, ú)©Ú	__class__r   r|   r}   r‹   s    r   Ú__str__zReader.__str__¼  ó5   € à�4—>‘>×*Ñ*Ð+¨2¨d×.BÑ.BÐ-EÀRÈÏÉÐGZÐZ[Ð\Ð\r   c                óh   — | j                   j                  › d| j                  ›d| j                  ›d�S )z3Return an unambiguous representation of the reader.ú(container=ú, blob=rÓ   rÔ   r‹   s    r   Ú__repr__zReader.__repr__À  ó6   € à—.‘.×)Ñ)Ð*¨+°d×6JÑ6JÐ5MÈWÐUY×UdÑUdÐTgÐghÐiÐir   )rL   r   rM   r   rD   Ú_AzureClientr5   rr   r6   ri   r7   rr   rs   rt   ©rs   rt   ©rs   Úbool©rs   zio.RawIOBase©rg   rr   r£   rr   rs   rr   ©rs   rr   ©N©rY   ú
int | Noners   rr   ru   )rY   ræ   rs   ri   )r³   r   rs   rr   )r½   ræ   rs   ri   rv   )rY   rr   rs   zbool | None©rs   r   ©rÌ   ztype[BaseException] | NonerÍ   zBaseException | NonerÎ   zTracebackType | Noners   rt   ©rs   r   ) r   r   r   rw   r   rT   ÚDEFAULT_BUFFER_SIZEr   r;   r>   ÚDEFAULT_MAX_CONCURRENCYr[   rŒ   ÚpropertyrŠ   r’   r•   rœ   r    r_   r§   rª   rd   r¯   r¶   r¹   r¬   r­   rÈ   rÏ   rÖ   rÛ   r   r   r   r=   r=   Ü   s  … ñð& ƒIØ26€EÐ/Ó6ð /Ø!+×!5Ñ!5×!DÑ!DØ6ð0àð0ð ð0ð ð	0ð
 ð0ð ð0ð ð0ð 
ó0ó<$ð ò"ó ð"óóó&ð /9×.BÑ.B×.OÑ.Oô 'óRô&ô,ô0$óôô4ô
óðà,ðð &ðð %ð	ð
 
óó]ôjr   r=   c                  ó  — e Zd ZU dZded<   dZded<   def	 	 	 	 	 	 	 	 	 	 	 dd„Zdd„Zdd	„Z	dd
„Z
edd„«       Zdd„Zdd„Zej                   j"                  fdd„Zd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#d„Zy)$r@   zqWrites bytes to Azure Blob Storage.

    Implements the io.BufferedIOBase interface of the standard library.
    r   ry   Nrz   rT   c                óÒ   — || _         || _        |xs i | _        || _        d| _        d| _        d| _        t        j                  «       | _	        g | _
        t        |||«      | _        y rS   )r|   r}   Ú_blob_kwargsÚ_min_part_sizeÚ_total_sizeÚ_total_partsÚ_bytes_uploadedrš   r¸   r†   Ú_block_listrO   rT   ©rX   rL   rM   rD   r8   r9   s         r   r[   zWriter.__init__Î  sf   € ð  )ˆÔØˆŒØ'Ò-¨2ˆÔØ+ˆÔØˆÔØˆÔØ ˆÔÜŸZ™Z›\ˆÔØ?AˆÔä% f¨i¸Ó>ˆ�
r   c                 ó   — y©z>No-op flush; data is buffered until `close` or `_upload_part`.Nr   r‹   s    r   ÚflushzWriter.flushâ  ó   � r   c                ó�   — t         j                  d| «       | j                  sg | _        d| _        t         j                  d| «       y)zºDo not commit block list on abort.

        Uploaded (uncommitted) blocks will be garbage collected after 7 days.

        See also https://stackoverflow.com/a/69673084/5511061.
        z %s: terminating multipart uploadNz%s: terminated multipart upload)rk   rl   rŠ   rô   rT   r‹   s    r   Ú	terminatezWriter.terminateå  s8   € ô 	�‰Ð7¸Ô>Ø�{Š{Ø!ˆDÔØˆDŒJÜ�‰Ð6¸Õ=r   c                ó¬  — t         j                  d«       | j                  s | j                  }|€J ‚t         j                  d| «       	 | j                  j                  «       dkD  r| j                  «         |j                  | j                  fi | j                  ¤Ž g | _        d| _        t         j                  d| «       yy# g | _        d| _        w xY w)z4Commit the buffered block list and close the stream.r‰   Nz%s: completing multipart uploadr   z%s: completed multipart upload)
rk   rl   rŠ   rT   r†   r§   Ú_upload_partÚcommit_block_listrô   rï   )rX   rM   s     r   rŒ   zWriter.closeõ  s¸   € ä�‰�_Ô%Ø�{Š{Ø—:‘:ˆDØÐ#Ð#Ð#Ü�L‰LÐ:¸DÔAð"Ø×%Ñ%×*Ñ*Ó,¨qÒ0Ø×%Ñ%Ô'Ø&�×&Ñ& t×'7Ñ'7ÑM¸4×;LÑ;LÒMà#%�Ô Ø!�”
Ü�L‰LÐ9¸4Õ@ð øð $&�Ô Ø!�•
ús   Á	AC ÃCc                ó   — | j                   du S rŽ   r�   r‹   s    r   rŠ   zWriter.closed  r�   r   c                 ó   — y©z+Return True if the stream supports writing.Tr   r‹   s    r   ÚwritablezWriter.writable
  r“   r   c                 ó   — y©z<Return True; we support `tell` but not `seek` or `truncate`.Tr   r‹   s    r   r•   zWriter.seekable  r“   r   c                ó"   — t         j                  ‚r—   r™   ©rX   rg   r£   s      r   r_   zWriter.seek  r�   r   c                ó"   — t         j                  ‚r—   r™   r©   s     r   rª   zWriter.truncate  r�   r   c                ó   — | j                   S ©z#Return the current stream position.©rñ   r‹   s    r   r§   zWriter.tell  ó   € à×ÑÐr   c                ó0   — d}t        j                  |«      ‚©r˜   zdetach() not supportedr™   ©rX   rE   s     r   rœ   zWriter.detach!  ó   € à&ˆÜ×%Ñ% cÓ*Ð*r   c                ó\  — t        |t        «      s dt        ›dt        |«      ›�}t        |«      ‚t	        t        |«      «      }| j                  j                  |«       | xj                  |z  c_        | j                  j                  «       | j                  k\  r| j                  «        |S )zÇWrite the given bytes (binary string) to the Azure Blob Storage file.

        There's buffering happening under the covers, so this may not actually
        do any HTTP transfer right away.
        úinput must be one of ú, got: ©rm   Ú_BINARY_TYPESÚtypeÚ	TypeErrorrb   r²   r†   rº   rñ   r§   rð   rý   ©rX   r³   rE   rh   s       r   rº   zWriter.write&  s�   € ô ˜!œ]Ô+Ø)¬-Ð):¸'Ä$ÀqÃ'ÀÐMˆCÜ˜C“.Ð ä”Z “]Ó#ˆØ×Ñ× Ñ  Ô#Ø×Ò˜FÑ"Õà×Ñ×"Ñ"Ó$¨×(;Ñ(;Ò;Ø×ÑÔàˆr   c                óh  — | j                   }|€J ‚| j                  dz   }| j                  j                  «       }| j                  |z   dz
  }t        |«      j                  d«      }t        j                  |j                  «       «      }| j                  j                  d«       |j                  || j                  j                  |«      «       | j                  j                  t        j                   j"                  j%                  |¬«      «       t&        j)                  d|||dz  «       | xj                  dz  c_        | xj                  |z  c_        t+        j,                  | j                  j                  «       «      | _        | j                  j                  dt*        j.                  «       y )Nr   é    r   )Úblock_idz+uploading part #%i, %i bytes (total %.3fGB)g      ÐA)rT   rò   r†   r§   ró   r   ÚzfillÚbase64Ú	b64encodeÚencoder_   Ústage_blockrd   rô   Úappendr   rn   rM   Ú	BlobBlockrk   Úinforš   r¸   ÚSEEK_END)rX   rM   Úpart_numÚcontent_lengthÚ
range_stopÚzero_padded_part_numr  s          r   rý   zWriter._upload_part9  sb  € Ø�z‰zˆØÐÐÐØ×$Ñ$ qÑ(ˆØ×+Ñ+×0Ñ0Ó2ˆØ×)Ñ)¨NÑ:¸QÑ>ˆ
ô
  # 8›}×2Ñ2°7Ó;ÐÜ×#Ñ#Ð$8×$?Ñ$?Ó$AÓBˆØ×Ñ×Ñ Ô"à×Ñ˜ 4×#5Ñ#5×#:Ñ#:¸>Ó#JÔKØ×Ñ×ÑÜ�M‰M×Ñ×(Ñ(°(Ð(Ó;ô	
ô 	�‰Ø9ØØØ˜Ñ"ô		
ð 	×Ò˜QÑÕØ×Ò Ñ.ÕÜŸZ™Z¨×(:Ñ(:×(?Ñ(?Ó(AÓBˆÔØ×Ñ×Ñ ¤2§;¡;Õ/r   c                ó   — | S )z!Enter the writer context manager.r   r‹   s    r   rÈ   zWriter.__enter__X  rÉ   r   c                óJ   — |�| j                  «        y| j                  «        y)z.Close or terminate the writer on context exit.N©rû   rŒ   rË   s       r   rÏ   zWriter.__exit__\  ó   € ð ÐØ�N‰NÕà�J‰J�Lr   c                ój   — d| j                   j                  › d| j                  ›d| j                  ›d�S )z8Return a short human-readable description of the writer.rÑ   rÒ   rÓ   rÔ   r‹   s    r   rÖ   zWriter.__str__h  r×   r   c                ó‚   — | j                   j                  › d| j                  ›d| j                  ›d| j                  ›d�S )z3Return an unambiguous representation of the writer.rÙ   rÚ   z, min_part_size=rÓ   )rÕ   r   r|   r}   rð   r‹   s    r   rÛ   zWriter.__repr__l  s[   € à—.‘.×)Ñ)Ð*¨+°d×6JÑ6JÐ5MÈWÐUY×UdÑUdÐTgÐgwÐx|÷  yLñ  yLð  xOð  OPð  Qð  	Qr   ©rL   r   rM   r   rD   rÝ   r8   údict[str, Any] | Noner9   rr   rs   rt   rÞ   rß   râ   rä   rå   rã   rá   ©r³   r
   rs   rr   rç   rè   ré   ©r   r   r   rw   r   rT   Ú_DEFAULT_MIN_PART_SIZEr[   rø   rû   rŒ   rì   rŠ   r  r•   r   r;   r    r_   rª   r§   rœ   rº   rý   rÈ   rÏ   rÖ   rÛ   r   r   r   r@   r@   Å  sú   … ñð
 ƒIØ26€EÐ/Ó6ð .2Ø3ð?àð?ð ð?ð ð	?ð
 +ð?ð ð?ð 
ó?ó(Mó>ó Að  ò"ó ð"óóð /9×.BÑ.B×.OÑ.Oô &ô&ó ó+ó
ó&0ó>ð
à,ð
ð &ð
ð %ð	
ð
 
ó
ó]ôQr   r@   c                  ó  — e Zd ZU dZded<   dZded<   def	 	 	 	 	 	 	 	 	 	 	 dd„Zdd„Zdd	„Z	dd
„Z
edd„«       Zdd„Zdd„Zej                   j"                  fdd„Zd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#d„Zy)$rB   zqAppend bytes to Azure Blob Storage.

    Implements the io.BufferedIOBase interface of the standard library.
    r   ry   Nrz   rT   c                ó¨   — || _         || _        |xs i | _        || _        d| _        t        j                  «       | _        t        |||«      | _	        y rS   )
r|   r}   rï   rð   rñ   rš   r¸   r†   rO   rT   rõ   s         r   r[   zAppendWriter.__init__z  sN   € ð  )ˆÔØˆŒØ'Ò-¨2ˆÔØ+ˆÔØˆÔÜŸZ™Z›\ˆÔä% f¨i¸Ó>ˆ�
r   c                 ó   — yr÷   r   r‹   s    r   rø   zAppendWriter.flush‹  rù   r   c                ó^   — | j                   s!t        j                  «       | _        d| _        yy)z4AppendBlob cannot be aborted, so we do nothing here.N)rŠ   rš   r¸   r†   rT   r‹   s    r   rû   zAppendWriter.terminateŽ  s#   € à�{Š{Ü!#§¡£ˆDÔØˆD�Jð r   c                ó    — | j                   s6	 | j                  j                  «       dkD  r| j                  «        d| _        yy# d| _        w xY w)zDNo action needed here, as the AppendBlob is automatically committed.r   N)rŠ   r†   r§   rý   rT   r‹   s    r   rŒ   zAppendWriter.close”  sH   € à�{Š{ð"Ø×%Ñ%×*Ñ*Ó,¨qÒ0Ø×%Ñ%Ô'à!�•
ð øð
 "�•
ús   Ž-A Á	Ac                ó   — | j                   du S rŽ   r�   r‹   s    r   rŠ   zAppendWriter.closed�  r�   r   c                 ó   — yr  r   r‹   s    r   r  zAppendWriter.writable¢  r“   r   c                 ó   — yr  r   r‹   s    r   r•   zAppendWriter.seekable¦  r“   r   c                ó"   — t         j                  ‚r—   r™   r  s      r   r_   zAppendWriter.seekª  r�   r   c                ó"   — t         j                  ‚r—   r™   r©   s     r   rª   zAppendWriter.truncate®  r�   r   c                ó   — | j                   S r	  r
  r‹   s    r   r§   zAppendWriter.tell²  r  r   c                ó0   — d}t        j                  |«      ‚r  r™   r  s     r   rœ   zAppendWriter.detach¶  r  r   c                ó\  — t        |t        «      s dt        ›dt        |«      ›�}t        |«      ‚t	        t        |«      «      }| j                  j                  |«       | xj                  |z  c_        | j                  j                  «       | j                  k\  r| j                  «        |S )z@Append `b` to the AppendBlob, buffering until ``min_part_size``.r  r  r  r  s       r   rº   zAppendWriter.write»  sŽ   € ä˜!œ]Ô+Ø)¬-Ð):¸'Ä$ÀqÃ'ÀÐMˆCÜ˜C“.Ð Ü”Z “]Ó#ˆØ×Ñ× Ñ  Ô#Ø×Ò˜FÑ"ÕØ×Ñ×"Ñ"Ó$¨×(;Ñ(;Ò;Ø×ÑÔØˆr   c                ó"  — | j                   }|€J ‚| j                  j                  «       } |j                  d|t        j
                  j                  j                  j                  ddœ| j                  ¤Ž t        j                  «       | _        y )NF)rµ   Ú	blob_typeÚ	overwriter   )rT   r†   r¼   Úupload_blobr   rn   rM   ÚBlobTypeÚ
APPENDBLOBrï   rš   r¸   )rX   rM   rµ   s      r   rý   zAppendWriter._upload_partÇ  s   € Ø�z‰zˆØÐÐÐØ×!Ñ!×*Ñ*Ó,ˆØˆ×Ñð 	
ØÜ—m‘m×(Ñ(×1Ñ1×<Ñ<Øñ	
ð ×Ñò		
ô  ŸZ™Z›\ˆÕr   c                ó   — | S )z(Enter the append writer context manager.r   r‹   s    r   rÈ   zAppendWriter.__enter__Ó  rÉ   r   c                óJ   — |�| j                  «        y| j                  «        y)z5Close or terminate the append writer on context exit.Nr*  rË   s       r   rÏ   zAppendWriter.__exit__×  r+  r   c                ój   — d| j                   j                  › d| j                  ›d| j                  ›d�S )z?Return a short human-readable description of the append writer.rÑ   rÒ   rÓ   rÔ   r‹   s    r   rÖ   zAppendWriter.__str__ã  r×   r   c                óh   — | j                   j                  › d| j                  ›d| j                  ›d�S )z:Return an unambiguous representation of the append writer.rÙ   rÚ   rÓ   rÔ   r‹   s    r   rÛ   zAppendWriter.__repr__ç  rÜ   r   r.  rÞ   rß   râ   rä   rå   rã   rá   r0  rç   rè   ré   r1  r   r   r   rB   rB   q  sù   … ñð
 ƒIØ26€EÐ/Ó6ð .2Ø3ð?àð?ð ð?ð ð	?ð
 +ð?ð ð?ð 
ó?ó"Móó"ð ò"ó ð"óóð /9×.BÑ.B×.OÑ.Oô &ô&ó ó+ó

ó
*óð
à,ð
ð &ð
ð %ð	
ð
 
ó
ó]ôjr   rB   )r&   r   rs   r   )r.   r   r/   r   r0   r   rs   úio.BufferedIOBase)r   r   r   r   r/   r   rD   z_AzureClient | Noner8   r/  r5   rr   r9   rr   r7   rr   rs   rJ  )rD   rÝ   rL   r   rM   r   rs   rJ   )9rw   Ú
__future__r   r  rš   ÚloggingÚtypingr   r   r   r   Úsmart_open.bytebufferr   Úsmart_open.constantsÚsmart_open.utilsÚazure.core.exceptionsr   Úazure.storage.blobÚImportErrorÚMISSING_DEPSÚtypesr   r	   Ú	_typeshedr
   r   Útyping_extensionsr   Úsmart_open._typingr   rn   rM   ÚBlobServiceClientÚContainerClientÚ
BlobClientrÝ   Ú	getLoggerr   rk   ri   Ú	bytearrayr²   r  r"   r2  rê   rë   r   r*   r3   r-   rO   rQ   ÚBufferedIOBaser=   r@   rB   r   r   r   ú<module>r_     sí  ðñ Wå "ã Û 	Û ß 6Ó 6ã Û Û ðÛ Ûñ Ý#Ýç9Ý&å2ð 	�‰×Ñ×,Ñ,Ø
�-‰-×
Ñ
×
,Ñ
,ñ	-à
�-‰-×
Ñ
×
'Ñ
'ñ	(ð ð 
ˆ×	Ñ	˜8Ó	$€à˜	 :Ð.€Ø Yà	€Ø Hà%Ð Ø Qà!Ð ðð Ð Ø Dô�	ô óPó$Sð #'Ø)-Ø*Ø/Ø2ð7#Øð7#àð7#ð ð7#ð  ð	7#ð
 'ð7#ð ð7#ð ð7#ð ð7#ð ó7#ðt6Øð6àð6ð ð6ð #ó	6÷(.%ñ .%ôbfjˆR×Ñô fjôRiQˆR×Ñô iQôXxj�2×$Ñ$õ xjøðs ò ØƒLðús   ®E" Å"E-Å,E-