
    h<                         S r SSKrSSKrSSKrSSKrSSKJr  \R                  " \	5      r
SrSrS rS rS r " S	 S
\R                   5      r " S S\R                   5      rg)z,Implements reading and writing to/from HDFS.    N)utils)hdfsviewfs)zhdfs:///path/filezhdfs://path/filezviewfs:///path/filezviewfs://path/filec                    [         R                  R                  U 5      nUR                  [        ;   d   eUR
                  UR                  -   nSUR                  S5      -   nU(       d  [        SU -  5      e[        UR                  US9$ )N/zinvalid HDFS URI: %r)schemeuri_path)
urllibparseurlsplitr   SCHEMESnetlocpathlstripRuntimeErrordict)uri_as_string	split_urir	   s      I/home/james-whalen/.local/lib/python3.13/site-packages/smart_open/hdfs.py	parse_urir      sx    %%m4Iw&&&)..0HX__S))H1MABBy''(;;    c                     [         R                  " [        U5        [        U 5      n[        US   U5      nUS   R	                  S5      S   Ul        U$ )Nr	   r   )r   check_kwargsopenr   splitname)urimodetransport_params
parsed_urifobjs        r   open_urir#   *   sN    	t-.3J
:&-D:&,,S1"5DIKr   c                 b    US:X  a  [        U 5      $ US:X  a  [        U 5      $ [        SU-  5      e)Nrbwbz(hdfs support for mode %r not implemented)CliRawInputBaseCliRawOutputBaseNotImplementedError)r   r   s     r   r   r   3   s7    t|s##	$$!"Lt"STTr   c                   d    \ rS rSrSrSrS rS r\S 5       r	S r
S rS	 rSS
 jrSS jrS rSrg)r'   <   zReads bytes from HDFS via the "hdfs dfs" command-line interface.

Implements the io.RawIOBase interface of the standard library.
Nc                     Xl         [        R                  " SSSU R                   /[        R                  S9U l        S U l        g )Nr   dfsz-cat)stdout_uri
subprocessPopenPIPE_subrawselfr   s     r   __init__CliRawInputBase.__init__C   s8    	$$feVTYY%GPZP_P_`	
 r   c                     [         R                  S5        U R                  (       d"  U R                  R	                  5         SU l        gg)zFlush and close this stream.close: calledN)loggerdebugclosedr4   	terminater7   s    r   closeCliRawInputBase.closeO   s1    _%{{II!DI r   c                     U R                   S L $ Nr4   r@   s    r   r>   CliRawInputBase.closedV       yyD  r   c                     U R                   SL$ )z+Return True if the stream can be read from.NrE   r@   s    r   readableCliRawInputBase.readableZ       yy$$r   c                     gz;If False, seek(), tell() and truncate() will raise IOError.F r@   s    r   seekableCliRawInputBase.seekable^       r   c                 "    [         R                  e)zUnsupported.ioUnsupportedOperationr@   s    r   detachCliRawInputBase.detache   s    %%%r   c                 L    U R                   R                  R                  U5      $ )z6Read up to size bytes from the object and return them.)r4   r.   readr7   sizes     r   rY   CliRawInputBase.readi   s    yy$$T**r   c                      U R                  US9$ )zThis is the same as read().)r[   )rY   rZ   s     r   read1CliRawInputBase.read1m   s    yydy##r   c                 v    U R                  [        U5      5      nU(       d  gX!S[        U5      & [        U5      $ )zDRead up to len(b) bytes into b, and return the number of bytes
read.r   N)rY   len)r7   bdatas      r   readintoCliRawInputBase.readintoq   s3     yyQ *3t94yr   r4   r0   r5   )r   )__name__
__module____qualname____firstlineno____doc__r4   r8   rA   propertyr>   rI   rO   rV   rY   r^   rd   __static_attributes__rN   r   r   r'   r'   <   sJ     D ! !%&+$r   r'   c                   V    \ rS rSrSrSrS rS r\S 5       r	S r
S rS	 rS
 rS rSrg)r(   {   zWrites bytes to HDFS via the "hdfs dfs" command-line interface.

Implements the io.RawIOBase interface of the standard library.
Nc                     Xl         [        R                  " SSSSSU R                   /[        R                  S9U l        S U l        g )Nr   r-   z-putz-f-)stdinr/   r6   s     r   r8   CliRawOutputBase.__init__   s<    	$$feVT3		%R+5??<	 r   c                     [         R                  S5        U R                  (       dV  U R                  5         U R                  R
                  R                  5         U R                  R                  5         S U l        g g )Nr;   )r<   r=   r>   flushr4   rr   rA   waitr@   s    r   rA   CliRawOutputBase.close   sL    _%{{JJLIIOO!!#IINNDI	 r   c                     U R                   S L $ rD   rE   r@   s    r   r>   CliRawOutputBase.closed   rG   r   c                 L    U R                   R                  R                  5         g rD   )r4   rr   ru   r@   s    r   ru   CliRawOutputBase.flush   s    		r   c                     U R                   SL$ )z(Return True if this object is writeable.NrE   r@   s    r   	writeableCliRawOutputBase.writeable   rK   r   c                     grM   rN   r@   s    r   rO   CliRawOutputBase.seekable   rQ   r   c                 N    U R                   R                  R                  U5        g rD   )r4   rr   write)r7   rb   s     r   r   CliRawOutputBase.write   s    		a r   c                 .    [         R                  " S5      e)Nzdetach() not supportedrS   r@   s    r   rV   CliRawOutputBase.detach   s    %%&>??r   rf   )rg   rh   ri   rj   rk   r4   r8   rA   rl   r>   ru   r}   rO   r   rV   rm   rN   r   r   r(   r(   {   sF     D ! ! %!@r   r(   )rk   rT   loggingr1   urllib.parser
   
smart_openr   	getLoggerrg   r<   r   URI_EXAMPLESr   r#   r   	RawIOBaser'   r(   rN   r   r   <module>r      sh    3 	    			8	$
	<U<bll <~/@r|| /@r   