Ë
    æš¾jh  ã                  ó  — d Z ddlm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e	rddlmZmZ ddlmZ  ej$                  e«      ZdZdZ G d	„ d
e
«      Zdd„Zdd„Zdd„Z G d„ dej6                  «      Z G d„ dej6                  «      Zy)zdImplements reading and writing to/from HDFS via the Hadoop ``hdfs`` CLI (must be on your ``$PATH``).é    )ÚannotationsN)ÚTYPE_CHECKINGÚ	TypedDict)ÚReadableBufferÚWriteableBuffer)ÚTransportParams)ÚhdfsÚviewfs)zhdfs:///path/filezhdfs://host/path/filezhdfs://host:port/path/filezviewfs:///path/filezviewfs://host/path/filec                  ó"   — e Zd ZU ded<   ded<   y)Ú_HDFSUriÚstrÚschemeÚuri_pathN)Ú__name__Ú
__module__Ú__qualname__Ú__annotations__© ó    úY/home/spazio/kingdom_calls/work5/transenv/lib/python3.12/site-packages/smart_open/hdfs.pyr   r   &   s   … ØƒKØ„Mr   r   c                óè   — t         j                  j                  | «      }|j                  t        v sJ ‚|j
                  r| n|j                  }|r|dk(  rd| ›�}t        |«      ‚|j                  |dœS )zBParse an ``hdfs://`` or ``viewfs://`` URI into its path component.ú/zinvalid HDFS URI: )r   r   )ÚurllibÚparseÚurlsplitr   ÚSCHEMESÚnetlocÚpathÚRuntimeError)Úuri_as_stringÚ	split_urir   Úmsgs       r   Ú	parse_urir#   +   sq   € ä—‘×%Ñ% mÓ4€IØ×ÑœwÑ&Ð&Ð&ð
 !*× 0Ò 0‰}°i·n±n€HÙ�x 3’Ø" =Ð"3Ð4ˆÜ˜3ÓÐà×&Ñ&°HÑ=Ð=r   c                óº   — t         j                  j                  t        |«       t	        | «      }t        |d   |«      }|d   j                  d«      d   |_        |S )z;Open an HDFS URI using the given mode and transport params.r   r   éÿÿÿÿ)Ú
smart_openÚutilsÚcheck_kwargsÚopenr#   ÚsplitÚname)ÚuriÚmodeÚtransport_paramsÚ
parsed_uriÚfobjs        r   Úopen_urir1   ;   sT   € ä×Ñ×!Ñ!¤$Ð(8Ô9ä˜3“€JÜ�
˜:Ñ&¨Ó-€DØ˜:Ñ&×,Ñ,¨SÓ1°"Ñ5€D„IØ€Kr   c                ód   — |dk(  rt        | «      S |dk(  rt        | «      S d|›d�}t        |«      ‚)aI  Open an HDFS `uri` for reading or writing.

    Args:
        uri: The HDFS path to open.
        mode: The mode for opening the object. Must be either "rb" or "wb".

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

    Raises:
        NotImplementedError: If ``mode`` is not supported.
    ÚrbÚwbzhdfs support for mode z not implemented)ÚCliRawInputBaseÚCliRawOutputBaseÚNotImplementedError)r,   r-   r"   s      r   r)   r)   E   sB   € ð ˆt‚|Ü˜sÓ#Ð#Øˆt‚|Ü Ó$Ð$Ø" 4 (Ð*:Ð
;€CÜ
˜cÓ
"Ð"r   c                  ó€   — e Zd ZU dZded<   dZded<   dd„Zdd„Zedd	„«       Z	dd
„Z
dd„Zdd„Zddd„Zddd„Zdd„Zy)r5   z‰Reads bytes from HDFS via the "hdfs dfs" command-line interface.

    Implements the io.RawIOBase interface of the standard library.
    r   r+   Núsubprocess.Popen[bytes] | NoneÚ_subc                ó‚   — || _         t        j                  ddd| j                   gt        j                  ¬«      | _        y )Nr	   Údfsz-cat)Ústdout©Ú_uriÚ
subprocessÚPopenÚPIPEr:   ©Úselfr,   s     r   Ú__init__zCliRawInputBase.__init__c   s1   € ØˆŒ	Ü×$Ñ$ f¨e°V¸T¿Y¹YÐ%GÔPZ×P_ÑP_Ô`ˆ�	r   c                óz   — t         j                  d«       | j                  }|�|j                  «        d| _        yy©zFlush and close this stream.zclose: calledN)ÚloggerÚdebugr:   Ú	terminate©rD   Úsubs     r   ÚclosezCliRawInputBase.closej   s1   € ä�‰�_Ô%Ø�i‰iˆØˆ?Ø�M‰MŒOØˆD�Ið r   c                ó   — | j                   du S ©z$Return True if the stream is closed.N©r:   ©rD   s    r   ÚclosedzCliRawInputBase.closedr   ó   € ð �y‰y˜DÐ Ð r   c                ó   — | j                   duS )z+Return True if the stream can be read from.NrP   rQ   s    r   ÚreadablezCliRawInputBase.readablew   ó   € à�y‰y Ð$Ð$r   c                 ó   — y©z2Return False; HDFS streams do not support seeking.Fr   rQ   s    r   ÚseekablezCliRawInputBase.seekable{   ó   € àr   c                ó"   — t         j                  ‚)úUnsupported.©ÚioÚUnsupportedOperationrQ   s    r   ÚdetachzCliRawInputBase.detach‚   s   € ä×%Ñ%Ð%r   c                ó|   — | j                   }|€J ‚|j                  €J ‚|€d}|j                  j                  |«      S )z6Read up to size bytes from the object and return them.r%   )r:   r=   Úread)rD   ÚsizerL   s      r   rb   zCliRawInputBase.read†   sB   € à�i‰iˆØˆÐˆØ�z‰zÐ%Ð%Ð%Øˆ<ØˆDØ�z‰z�‰˜tÓ$Ð$r   c                ó&   — | j                  |¬«      S )zThis is the same as read().)rc   )rb   )rD   rc   s     r   Úread1zCliRawInputBase.read1�   s   € à�y‰y˜dˆyÓ#Ð#r   c                ó¢   — t        |«      j                  d«      }| j                  t        |«      «      }|sy||dt        |«       t        |«      S )zIRead up to ``len(b)`` bytes into `b` and return the number of bytes read.ÚBr   N)Ú
memoryviewÚcastrb   Úlen)rD   ÚbÚmvÚdatas       r   ÚreadintozCliRawInputBase.readinto“   sG   € ä˜‹]×Ñ Ó$ˆØ�y‰yœ˜R›Ó!ˆÙØØˆˆ;ŒS�‹YˆÜ�4‹yÐr   ©r,   r   ÚreturnÚNone©rp   rq   ©rp   Úbool©rp   zio.RawIOBase)r%   )rc   z
int | Nonerp   Úbytes)rk   r   rp   Úint)r   r   r   Ú__doc__r   r:   rE   rM   ÚpropertyrR   rU   rY   r`   rb   re   rn   r   r   r   r5   r5   Z   sV   … ñð
 ƒIØ+/€DÐ
(Ó/óaóð ò!ó ð!ó%óó&ô%ô$ôr   r5   c                  ót   — e Zd ZU dZded<   dZded<   dd„Zdd„Zedd	„«       Z	dd
„Z
dd„Zdd„Zdd„Zdd„Zy)r6   zˆWrites bytes to HDFS via the "hdfs dfs" command-line interface.

    Implements the io.RawIOBase interface of the standard library.
    r   r+   Nr9   r:   c                ó†   — || _         t        j                  ddddd| j                   gt        j                  ¬«      | _        y )Nr	   r<   z-putz-fú-)Ústdinr>   rC   s     r   rE   zCliRawOutputBase.__init__¦   s5   € ØˆŒ	Ü×$Ñ$ f¨e°V¸TÀ3ÈÏ	É	Ð%RÔZd×ZiÑZiÔjˆ�	r   c                óê   — t         j                  d«       | j                  }|�P|j                  €J ‚| j	                  «        |j                  j                  «        |j                  «        d| _        yyrG   )rH   rI   r:   r}   ÚflushrM   ÚwaitrK   s     r   rM   zCliRawOutputBase.closeª   sX   € ä�‰�_Ô%Ø�i‰iˆØˆ?Ø—9‘9Ð(Ð(Ð(Ø�J‰JŒLØ�I‰I�O‰OÔØ�H‰HŒJØˆD�Ið r   c                ó   — | j                   du S rO   rP   rQ   s    r   rR   zCliRawOutputBase.closedµ   rS   r   c                ót   — | j                   }|€J ‚|j                  €J ‚|j                  j                  «        y)z8Flush the underlying ``hdfs dfs -put`` subprocess stdin.N)r:   r}   r   rK   s     r   r   zCliRawOutputBase.flushº   s3   € à�i‰iˆØˆÐˆØ�y‰yÐ$Ð$Ð$Ø�	‰	�‰Õr   c                ó   — | j                   duS )z(Return True if this object is writeable.NrP   rQ   s    r   Ú	writeablezCliRawOutputBase.writeableÁ   rV   r   c                 ó   — yrX   r   rQ   s    r   rY   zCliRawOutputBase.seekableÅ   rZ   r   c                ót   — | j                   }|€J ‚|j                  €J ‚|j                  j                  |«      S )aÿ  Write the given buffer to the underlying raw stream.

        Returns the number of bytes written, as required by
        :class:`io.RawIOBase`. Without this return value, callers that wrap
        this stream and rely on the documented ``write`` contract (for
        example, ``ray._private.external_storage._write_multiple_objects``,
        which asserts ``written_bytes == payload_len``) fail with an
        ``AssertionError`` because ``write`` would otherwise implicitly
        return ``None``.
        )r:   r}   Úwrite)rD   rk   rL   s      r   r‡   zCliRawOutputBase.writeÉ   s:   € ð �i‰iˆØˆÐˆØ�y‰yÐ$Ð$Ð$Ø�y‰y�‰˜qÓ!Ð!r   c                ó0   — d}t        j                  |«      ‚)r\   zdetach() not supportedr]   )rD   r"   s     r   r`   zCliRawOutputBase.detachÜ   s   € à&ˆÜ×%Ñ% cÓ*Ð*r   ro   rr   rs   )rk   r   rp   rw   ru   )r   r   r   rx   r   r:   rE   rM   ry   rR   r   r„   rY   r‡   r`   r   r   r   r6   r6   �   sQ   … ñð
 ƒIØ+/€DÐ
(Ó/ókó	ð ò!ó ð!óó%óó"ô&+r   r6   )r    r   rp   r   )r,   r   r-   r   r.   r   rp   ú"CliRawInputBase | CliRawOutputBase)r,   r   r-   r   rp   r‰   )rx   Ú
__future__r   r^   Úloggingr@   Úurllib.parser   Útypingr   r   Úsmart_open.utilsr&   Ú	_typeshedr   r   Úsmart_open._typingr   Ú	getLoggerr   rH   r   ÚURI_EXAMPLESr   r#   r1   r)   Ú	RawIOBaser5   r6   r   r   r   ú<module>r”      s‡   ðñ kå "ã 	Û Û Û ß +ã áß9å2à	ˆ×	Ñ	˜8Ó	$€à
€ð€ôˆyô ó
>ó ó#ô*@�b—l‘lô @ôFB+�r—|‘|õ B+r   