§
    dŠtjµD  ã                   óÚ   — d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZ d dlmZ d dl	m
Z
 d dlZddlmZmZ ddlmZmZ  e j        d¦  «        Z G d	„ d
e¦  «        Z G d„ de¦  «        ZdS )é    N)Úsuppress)Údatetime)Úquoteé   )ÚAbstractBufferedFileÚAbstractFileSystem)Úinfer_storage_optionsÚtokenizeÚwebhdfsc                   óh  ‡ — e Zd ZdZ e ej        ¦   «         ¦  «        ZdZ	 	 	 	 	 	 	 	 	 	 	 d%ˆ fd„	Z	e
d„ ¦   «         Zd	„ Zd&d„Z	 	 	 	 	 d'd„Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zd„ Zd„ Zd„ Zd(d„Zd„ Zd„ Zd„ Zd)d„Zd„ Zd„ Zd„ Zd*d„Zd„ Z d„ Z!d(d„Z"d „ Z#d(d!„Z$d"„ Z%d#„ Z&d$„ Z'ˆ xZ(S )+ÚWebHDFSaà  
    Interface to HDFS over HTTP using the WebHDFS API. Supports also HttpFS gateways.

    Four auth mechanisms are supported:

    insecure: no auth is done, and the user is assumed to be whoever they
        say they are (parameter ``user``), or a predefined value such as
        "dr.who" if not given
    spnego: when kerberos authentication is enabled, auth is negotiated by
        requests_kerberos https://github.com/requests/requests-kerberos .
        This establishes a session based on existing kinit login and/or
        specified principal/password; parameters are passed with ``kerb_kwargs``
    token: uses an existing Hadoop delegation token from another secured
        service. Indeed, this client can also generate such tokens when
        not insecure. Note that tokens expire, but can be renewed (by a
        previously specified user) and may allow for proxying.
    basic-auth: used when both parameter ``user`` and parameter ``password``
        are provided.

    )r   ÚwebHDFSé–Ã  FNTc                 ó   •— | j         rdS  t          ¦   «         j        di |¤Ž |
rdnd› d|› d|› d�| _        || _        |pi | _        i | _        |	pi | _        |�|€|�t          d¦  «        ‚|| j        d<   || _	        || _
        |�|€t          d	¦  «        ‚n|�
|| j        d
<   |�
|| j        d<   |r|�t          d¦  «        ‚|| _        || _        |                      ¦   «          dt          ||¦  «        › �| _        dS )a¢  
        Parameters
        ----------
        host: str
            Name-node address
        port: int
            Port for webHDFS
        kerberos: bool
            Whether to authenticate with kerberos for this connection
        token: str or None
            If given, use this token on every call to authenticate. A user
            and user-proxy may be encoded in the token and should not be also
            given
        user: str or None
            If given, assert the user name to connect with
        password: str or None
            If given, assert the password to use for basic auth. If password
            is provided, user must be provided also
        proxy_to: str or None
            If given, the user has the authority to proxy, and this value is
            the user in who's name actions are taken
        kerb_kwargs: dict
            Any extra arguments for HTTPKerberosAuth, see
            `<https://github.com/requests/requests-kerberos/blob/master/requests_kerberos/kerberos_.py>`_
        data_proxy: dict, callable or None
            If given, map data-node addresses. This can be necessary if the
            HDFS cluster is behind a proxy, running on Docker or otherwise has
            a mismatch between the host-names given by the name-node and the
            address by which to refer to them from the client. If a dict,
            maps host names ``host->data_proxy[host]``; if a callable, full
            URLs are passed, and function must conform to
            ``url->data_proxy(url)``.
        use_https: bool
            Whether to connect to the Name-node using HTTPS instead of HTTP
        session_cert: str or Tuple[str, str] or None
            Path to a certificate file, or tuple of (cert, key) files to use
            for the requests.Session
        session_verify: str, bool or None
            Path to a certificate file to use for verifying the requests.Session.
        kwargs
        NÚhttpsÚhttpz://ú:z/webhdfs/v1z_If passing a delegation token, must not set user or proxy_to, as these are encoded in the tokenÚ
delegationzQIf passing a password, the user must also beset in order to set up the basic-authz	user.nameÚdoaszJIf using Kerberos auth, do not specify the user, this is handled by kinit.Úwebhdfs_© )Ú_cachedÚsuperÚ__init__ÚurlÚkerbÚkerb_kwargsÚparsÚproxyÚ
ValueErrorÚuserÚpasswordÚsession_certÚsession_verifyÚ_connectr
   Ú_fsid)ÚselfÚhostÚportÚkerberosÚtokenr!   r"   Úproxy_tor   Ú
data_proxyÚ	use_httpsr#   r$   ÚkwargsÚ	__class__s                 €ú\/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/fsspec/implementations/webhdfs.pyr   zWebHDFS.__init__.   ss  ø€ ðr Œ<ð 	ØˆFØ�‰ŒÔÐ"Ð"˜6Ð"Ð"Ð"Ø!*Ð6�g�g°ÐSÐS¸4ÐSÐSÀ$ÐSÐSÐSˆŒØˆŒ	Ø&Ð,¨"ˆÔØˆŒ	ØÐ% 2ˆŒ
ØÐØÐ 8Ð#7Ý ðñô ð ð
 ',ˆDŒI�lÑ#ØˆŒ	Ø ˆŒàÐØˆ|Ý ð<ñô ð ð ð ÐØ)-�”	˜+Ñ&àÐØ (ˆDŒI�fÑØð 	˜Ð(Ýð2ñô ð ð
 )ˆÔØ,ˆÔà�Š‰Œˆà6¥¨¨tÑ 4Ô 4Ð6Ð6ˆŒ
ˆ
ˆ
ó    c                 ó   — | j         S ©N)r&   ©r'   s    r1   ÚfsidzWebHDFS.fsid“   s
   € àŒzÐr2   c                 ó@  — t          j        ¦   «         | _        | j        r| j        | j        _        | j        | j        _        | j        rddlm	}  |di | j
        ¤Ž| j        _        | j        �/| j        �*ddlm}  || j        | j        ¦  «        | j        _        d S d S d S )Nr   )ÚHTTPKerberosAuth)ÚHTTPBasicAuthr   )ÚrequestsÚSessionÚsessionr#   Úcertr$   Úverifyr   Úrequests_kerberosr8   r   Úauthr!   r"   Úrequests.authr9   )r'   r8   r9   s      r1   r%   zWebHDFS._connect—   sÁ   € ÝÔ'Ñ)Ô)ˆŒàÔð 	2Ø $Ô 1ˆDŒLÔà"Ô1ˆŒÔàŒ9ð 	EØ:Ð:Ð:Ð:Ð:Ð:à 0Ð 0Ð DÐ D°4Ô3CÐ DÐ DˆDŒLÔàŒ9Ð  T¤]Ð%>Ø3Ð3Ð3Ð3Ð3Ð3à - ¨d¬i¸¼Ñ GÔ GˆDŒLÔÐÐð !Ð Ð%>Ð%>r2   Úgetc                 ó  — |�|                       |¦  «        nd}|                      | j        t          |d¬¦  «        z   ¦  «        }|                     ¦   «         }|                     | j        ¦  «         |                     ¦   «         |d<   t           	                    d||¦  «         | j
                             |                     ¦   «         ||||¬¦  «        }	|	j        dv r�	 |	                     ¦   «         }
|
d         d	         }|
d         d
         }|dv rt          |¦  «        ‚|dv rt          |¦  «        ‚|dv rt!          |¦  «        ‚t#          |¦  «        ‚# t          t$          f$ r Y nw xY w|	                     ¦   «          |	S )NÚ z/=)ÚsafeÚopzsending %s with %s)Úmethodr   ÚparamsÚdataÚallow_redirects)i�  i‘  i“  i”  iô  ÚRemoteExceptionÚmessageÚ	exception)ÚIllegalArgumentExceptionÚUnsupportedOperationException)ÚSecurityExceptionÚAccessControlException)ÚFileNotFoundException)Ú_strip_protocolÚ_apply_proxyr   r   ÚcopyÚupdater   ÚupperÚloggerÚdebugr<   ÚrequestÚstatus_codeÚjsonr    ÚPermissionErrorÚFileNotFoundErrorÚRuntimeErrorÚKeyErrorÚraise_for_status)r'   rF   rG   ÚpathrI   Úredirectr/   r   ÚargsÚoutÚerrÚmsgÚexps                r1   Ú_callzWebHDFS._call©   s   € Ø-1Ð-=ˆt×#Ò# DÑ)Ô)Ð)À2ˆØ×Ò ¤­5°¸DÐ+AÑ+AÔ+AÑ AÑBÔBˆØ�{Š{‰}Œ}ˆØ�Š�D”IÑÔÐØ—X’X‘Z”ZˆˆT‰
Ý�ŠÐ)¨3°Ñ7Ô7Ð7ØŒl×"Ò"Ø—<’<‘>”>ØØØØ$ð #ñ 
ô 
ˆð Œ?Ð7Ð7Ð7ð,Ø—h’h‘j”j�ØÐ+Ô,¨YÔ7�ØÐ+Ô,¨[Ô9�ð ÐWÐWÐWÝ$ S™/œ/Ð)ØÐKÐKÐKÝ)¨#Ñ.Ô.Ð.ØÐ5Ð5Ð5Ý+¨CÑ0Ô0Ð0å& sÑ+Ô+Ð+øõ ¥Ð)ð ð ð Ø�ðøøøð 	×ÒÑÔÐØˆ
s   Ã"0E ÅE.Å-E.Úrbc           
      óL   — |p| j         }t          | |||| j        |||¬¦  «        S )a^  

        Parameters
        ----------
        path: str
            File location
        mode: str
            'rb', 'wb', etc.
        block_size: int
            Client buffer size for read-ahead or write buffer
        autocommit: bool
            If False, writes to temporary file that only gets put in final
            location upon commit
        replication: int
            Number of copies of file on the cluster, write mode only
        permissions: str or int
            posix permissions, write mode only
        kwargs

        Returns
        -------
        WebHDFile instance
        )ÚmodeÚ
block_sizeÚtempdirÚ
autocommitÚreplicationÚpermissions)Ú	blocksizeÚ	WebHDFilern   )r'   rb   rl   rm   ro   rp   rq   r/   s           r1   Ú_openzWebHDFS._openÊ   sB   € ðB  Ð1 4¤>ˆ
ÝØØØØ!Ø”LØ!Ø#Ø#ð	
ñ 	
ô 	
ð 		
r2   c                 óV   — | d                               ¦   «         | d<   | d         | d<   | S )NÚtypeÚlengthÚsize)Úlower)Úinfos    r1   Ú_process_infozWebHDFS._process_info÷   s-   € à˜F”|×)Ò)Ñ+Ô+ˆˆV‰Ø˜H”~ˆˆV‰Øˆr2   c                 ó,   — t          |¦  «        d         S )Nrb   )r	   )Úclsrb   s     r1   rS   zWebHDFS._strip_protocolý   s   € å$ TÑ*Ô*¨6Ô2Ð2r2   c                 ó´   — t          | ¦  «        }|                     dd ¦  «         |                     dd ¦  «         d|v r|                     d¦  «        |d<   |S )Nrb   ÚprotocolÚusernamer!   )r	   Úpop)Úurlpathre   s     r1   Ú_get_kwargs_from_urlszWebHDFS._get_kwargs_from_urls  s\   € å# GÑ,Ô,ˆØ�Š�˜ÑÔÐØ�Š�
˜DÑ!Ô!Ð!Ø˜ÐÐØŸ'š' *Ñ-Ô-ˆC�‰KØˆ
r2   c                 ó˜   — |                       d|¬¦  «        }|                     ¦   «         d         }||d<   |                      |¦  «        S )NÚGETFILESTATUS©rb   Ú
FileStatusÚname)ri   r\   r{   )r'   rb   re   rz   s       r1   rz   zWebHDFS.info
  sF   € Ø�jŠj˜¨tˆjÑ4Ô4ˆØ�xŠx‰zŒz˜,Ô'ˆØˆˆV‰Ø×!Ò! $Ñ'Ô'Ð'r2   c                 ó¨   — |                       |¦  «        }|                     dd¦  «        }|�t          j        |dz  ¦  «        S t	          d¦  «        ‚)z=Return the created timestamp of a file as a datetime.datetimeÚmodificationTimeNéè  z5Could not retrieve creation time (modification time).©rz   rB   r   Úfromtimestampr_   ©r'   rb   rz   Úmtimes       r1   ÚcreatedzWebHDFS.created  sQ   € ð �yŠy˜‰ŒˆØ—’Ð+¨TÑ2Ô2ˆØÐÝÔ)¨%°$©,Ñ7Ô7Ð7ÝÐRÑSÔSÐSr2   c                 ó¨   — |                       |¦  «        }|                     dd¦  «        }|�t          j        |dz  ¦  «        S t	          d¦  «        ‚)z>Return the modified timestamp of a file as a datetime.datetimerŠ   Nr‹   z%Could not retrieve modification time.rŒ   rŽ   s       r1   ÚmodifiedzWebHDFS.modified  sO   € à�yŠy˜‰ŒˆØ—’Ð+¨TÑ2Ô2ˆØÐÝÔ)¨%°$©,Ñ7Ô7Ð7ÝÐBÑCÔCÐCr2   c                 óF  — |                       d|¬¦  «        }|                     ¦   «         d         d         }|D ];}|                      |¦  «         |                     d¦  «        dz   |d         z   |d<   Œ<|rt	          |d„ ¬	¦  «        S t	          d
„ |D ¦   «         ¦  «        S )NÚ
LISTSTATUSr†   ÚFileStatusesr‡   ú/Ú
pathSuffixrˆ   c                 ó   — | d         S )Nrˆ   r   )Úis    r1   ú<lambda>zWebHDFS.ls.<locals>.<lambda>(  s
   € ¨q°¬y€ r2   )Úkeyc              3   ó&   K  — | ]}|d          V — ŒdS )rˆ   Nr   )Ú.0rz   s     r1   ú	<genexpr>zWebHDFS.ls.<locals>.<genexpr>*  s&   è è € Ð9Ð9¨4˜$˜vœ,Ð9Ð9Ð9Ð9Ð9Ð9r2   )ri   r\   r{   ÚrstripÚsorted)r'   rb   Údetailr/   re   Úinfosrz   s          r1   Úlsz
WebHDFS.ls!  sµ   € Ø�jŠj˜¨DˆjÑ1Ô1ˆØ—’‘
”
˜>Ô*¨<Ô8ˆØð 	Gð 	GˆDØ×Ò˜tÑ$Ô$Ð$ØŸ;š; sÑ+Ô+¨cÑ1°D¸Ô4FÑFˆD�‰LˆLØð 	:Ý˜%Ð%8Ð%8Ð9Ñ9Ô9Ð9åÐ9Ð9°5Ð9Ñ9Ô9Ñ9Ô9Ð9r2   c                 ód   — |                       d|¬¦  «        }|                     ¦   «         d         S )z8Total numbers of files, directories and bytes under pathÚGETCONTENTSUMMARYr†   ÚContentSummary©ri   r\   )r'   rb   re   s      r1   Úcontent_summaryzWebHDFS.content_summary,  s,   € à�jŠjÐ,°4ˆjÑ8Ô8ˆØ�xŠx‰zŒzÐ*Ô+Ð+r2   c                 óp  — |                       d|d¬¦  «        }d|j        v rh|                      |j        d         ¦  «        }| j                             |¦  «        }|                     ¦   «          |                     ¦   «         d         S |                     ¦   «          |                     ¦   «         d         S )z/Checksum info of file, giving method and resultÚGETFILECHECKSUMF)rb   rc   ÚLocationÚFileChecksum)ri   ÚheadersrT   r<   rB   ra   r\   )r'   rb   re   ÚlocationÚout2s        r1   ÚukeyzWebHDFS.ukey1  s    € à�jŠjÐ*°ÀˆjÑFÔFˆØ˜œÐ$Ð$Ø×(Ò(¨¬°ZÔ)@ÑAÔAˆHØ”<×#Ò# HÑ-Ô-ˆDØ×!Ò!Ñ#Ô#Ð#Ø—9’9‘;”;˜~Ô.Ð.à× Ò Ñ"Ô"Ð"Ø—8’8‘:”:˜nÔ-Ð-r2   c                 ó`   — |                       d¦  «        }|                     ¦   «         d         S )zGet user's home directoryÚGETHOMEDIRECTORYÚPathr§   )r'   re   s     r1   Úhome_directoryzWebHDFS.home_directory=  s'   € à�jŠjÐ+Ñ,Ô,ˆØ�xŠx‰zŒz˜&Ô!Ð!r2   c                 óÆ   — |r|                       d|¬¦  «        }n|                       d¦  «        }|                     ¦   «         d         }|€t          d¦  «        ‚|d         S )zÒRetrieve token which can give the same authority to other uses

        Parameters
        ----------
        renewer: str or None
            User who may use this token; if None, will be current user
        ÚGETDELEGATIONTOKEN)ÚrenewerÚTokenNz1No token available for this user/security contextÚ	urlString)ri   r\   r    )r'   r·   re   Úts       r1   Úget_delegation_tokenzWebHDFS.get_delegation_tokenB  sf   € ð ð 	3Ø—*’*Ð1¸7�*ÑCÔCˆCˆCà—*’*Ð1Ñ2Ô2ˆCØ�HŠH‰JŒJ�wÔˆØˆ9ÝÐPÑQÔQÐQØ�Œ~Ðr2   c                 óf   — |                       dd|¬¦  «        }|                     ¦   «         d         S )z/Make token live longer. Returns new expiry timeÚRENEWDELEGATIONTOKENÚput©rG   r+   Úlongr§   )r'   r+   re   s      r1   Úrenew_delegation_tokenzWebHDFS.renew_delegation_tokenS  s-   € à�jŠjÐ/¸ÀUˆjÑKÔKˆØ�xŠx‰zŒz˜&Ô!Ð!r2   c                 ó6   — |                       dd|¬¦  «         dS )z Stop the token from being usefulÚCANCELDELEGATIONTOKENr¾   r¿   N©ri   )r'   r+   s     r1   Úcancel_delegation_tokenzWebHDFS.cancel_delegation_tokenX  s!   € à�
Š
Ð*°5Àˆ
ÑFÔFÐFÐFÐFr2   c                 ó8   — |                       dd||¬¦  «         dS )a  Set the permission at path

        Parameters
        ----------
        path: str
            location to set (file or directory)
        mod: str or int
            posix epresentation or permission, give as oct string, e.g, '777'
            or 0o777
        ÚSETPERMISSIONr¾   )rG   rb   Ú
permissionNrÄ   )r'   rb   Úmods      r1   ÚchmodzWebHDFS.chmod\  s$   € ð 	�
Š
�?¨5°tÈˆ
ÑLÔLÐLÐLÐLr2   c                 óF   — i }|�||d<   |�||d<    | j         dd|dœ|¤Ž dS )zChange owning user and/or groupNÚownerÚgroupÚSETOWNERr¾   ©rG   rb   )rÎ   rÄ   )r'   rb   rÌ   rÍ   r/   s        r1   ÚchownzWebHDFS.chowni  sJ   € àˆØÐØ#ˆF�7‰OØÐØ#ˆF�7‰OØˆŒ
ÐA e°$ÐAÐA¸&ÐAÐAÐAÐAÐAr2   c                 ó8   — |                       d|d|¬¦  «         dS )a9  
        Set file replication factor

        Parameters
        ----------
        path: str
            File location (not for directories)
        replication: int
            Number of copies of file on the cluster. Should be smaller than
            number of data nodes; normally 3 on most systems.
        ÚSETREPLICATIONr¾   )rb   rG   rp   NrÄ   )r'   rb   rp   s      r1   Úset_replicationzWebHDFS.set_replicationr  s%   € ð 	�
Š
Ð#¨$°uÈ+ˆ
ÑVÔVÐVÐVÐVr2   c                 ó6   — |                       dd|¬¦  «         d S )NÚMKDIRSr¾   rÏ   rÄ   ©r'   rb   r/   s      r1   ÚmkdirzWebHDFS.mkdir€  s    € Ø�
Š
�8 E°ˆ
Ñ5Ô5Ð5Ð5Ð5r2   c                 ó€   — |du r$|                       |¦  «        rt          |¦  «        ‚|                      |¦  «         d S )NF)ÚexistsÚFileExistsErrorr×   )r'   rb   Úexist_oks      r1   ÚmakedirszWebHDFS.makedirsƒ  sD   € Ø�uÐÐ §¢¨TÑ!2Ô!2ÐÝ! $Ñ'Ô'Ð'Ø�
Š
�4ÑÔÐÐÐr2   c                 ó8   — |                       dd||¬¦  «         d S )NÚRENAMEr¾   )rG   rb   ÚdestinationrÄ   )r'   Úpath1Úpath2r/   s       r1   Úmvz
WebHDFS.mvˆ  s"   € Ø�
Š
�8 E°À5ˆ
ÑIÔIÐIÐIÐIr2   c                 ó@   — |                       dd||rdnd¬¦  «         d S )NÚDELETEÚdeleteÚtrueÚfalse)rG   rb   Ú	recursiverÄ   )r'   rb   rè   r/   s       r1   Úrmz
WebHDFS.rm‹  s<   € Ø�
Š
ØØØØ )Ð6�f�f¨wð	 	ñ 	
ô 	
ð 	
ð 	
ð 	
r2   c                 ó0   — |                       |¦  «         d S r4   )ré   rÖ   s      r1   Úrm_filezWebHDFS.rm_file“  s   € Ø�Š�‰Œˆˆˆr2   c                 ó8  — |                       |¦  «        5 }d                     |                      |¦  «        dt          j        d¦  «        › �g¦  «        }	 |                       |d¦  «        5 }t          j        ||¦  «         d d d ¦  «         n# 1 swxY w Y   |                      ||¦  «         nP# t          $ rC t          t          ¦  «        5  |                      |¦  «         d d d ¦  «         n# 1 swxY w Y   ‚ w xY w	 d d d ¦  «         d S # 1 swxY w Y   d S )Nr–   z.tmp.é   Úwb)ÚopenÚjoinÚ_parentÚsecretsÚ	token_hexÚshutilÚcopyfileobjrâ   ÚBaseExceptionr   r^   ré   )r'   ÚlpathÚrpathr/   ÚlstreamÚ	tmp_fnameÚrstreams          r1   Úcp_filezWebHDFS.cp_file–  sÚ  € Ø�YŠY�uÑÔð 	 ØŸš $§,¢,¨uÑ"5Ô"5Ð7V½wÔ?PÐQSÑ?TÔ?TÐ7VÐ7VÐ!WÑXÔXˆIðØ—Y’Y˜y¨$Ñ/Ô/ð 9°7ÝÔ& w°Ñ8Ô8Ð8ð9ð 9ð 9ñ 9ô 9ð 9ð 9ð 9ð 9ð 9ð 9øøøð 9ð 9ð 9ð 9à—’˜	 5Ñ)Ô)Ð)Ð)øÝ ð ð ð ÝÕ/Ñ0Ô0ð 'ð 'Ø—G’G˜IÑ&Ô&Ð&ð'ð 'ð 'ñ 'ô 'ð 'ð 'ð 'ð 'ð 'ð 'øøøð 'ð 'ð 'ð 'àðøøøð *ð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	sr   –A DÁB1Á-BÂB1ÂB	ÂB1ÂB	ÂB1Â0DÂ1C>ÃC1Ã%C>Ã1C5Ã5C>Ã8C5Ã9C>Ã>DÄDÄDc                 óâ   — | j         r*t          | j         ¦  «        r|                       |¦  «        }n=| j         r6| j                              ¦   «         D ]\  }}|                     ||d¦  «        }Œ|S )Né   )r   ÚcallableÚitemsÚreplace)r'   r®   ÚkÚvs       r1   rT   zWebHDFS._apply_proxy¤  sy   € ØŒ:ð 	5�( 4¤:Ñ.Ô.ð 	5Ø—z’z (Ñ+Ô+ˆHˆHØŒZð 	5àœ
×(Ò(Ñ*Ô*ð 5ð 5‘��1Ø#×+Ò+¨A¨q°!Ñ4Ô4��Øˆr2   )r   FNNNNNNFNT)rB   NNT)rj   NTNN©Fr4   )NN))Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚstrÚtempfileÚ
gettempdirrn   r   r   Úpropertyr6   r%   ri   rt   Ústaticmethodr{   ÚclassmethodrS   rƒ   rz   r�   r’   r£   r¨   r°   r´   r»   rÁ   rÅ   rÊ   rÐ   rÓ   r×   rÜ   râ   ré   rë   rü   rT   Ú__classcell__©r0   s   @r1   r   r      s§  ø€ € € € € ðð ð* ˆcÐ%�(Ô%Ñ'Ô'Ñ(Ô(€GØ#€Hð
 ØØØØØØØØØØðc7ð c7ð c7ð c7ð c7ð c7ðJ ðð ñ „XððHð Hð Hð$ð ð ð ðH ØØØØð+
ð +
ð +
ð +
ðZ ðð ñ „\ðð
 ð3ð 3ñ „[ð3ð ðð ñ „\ðð(ð (ð (ðTð Tð TðDð Dð Dð	:ð 	:ð 	:ð 	:ð,ð ,ð ,ð

.ð 
.ð 
.ð"ð "ð "ð
ð ð ð ð""ð "ð "ð
Gð Gð GðMð Mð MðBð Bð Bð BðWð Wð Wð6ð 6ð 6ðð ð ð ð
Jð Jð Jð
ð 
ð 
ð 
ðð ð ðð ð ðð ð ð ð ð ð r2   r   c                   óB   ‡ — e Zd ZdZˆ fd„Zd	d„Zd„ Zd„ Zd„ Zd„ Z	ˆ xZ
S )
rs   z"A file living in HDFS over webHDFSc                 óH  •—  t          ¦   «         j        ||fi |¤Ž |                     ¦   «         }|                     dd ¦  «        €|                     dd ¦  «         |                     dd ¦  «        €|                     dd ¦  «         |                     dd¦  «        | _        |                     d¦  «        }|                     dd¦  «        du rQ| j        | _        t          j         	                    |t          t          j        ¦   «         ¦  «        ¦  «        | _        d S d S )Nrq   rp   iÿ  rn   ro   F)r   r   rU   rB   r�   rq   rb   ÚtargetÚosrð   r	  ÚuuidÚuuid4)r'   Úfsrb   r/   rn   r0   s        €r1   r   zWebHDFile.__init__±  sû   ø€ Ø�‰ŒÔ˜˜TÐ,Ð, VÐ,Ð,Ð,Ø—’‘”ˆØ�:Š:�m TÑ*Ô*Ð2Ø�JŠJ�} dÑ+Ô+Ð+Ø�:Š:�m TÑ*Ô*Ð2Ø�JŠJ�} dÑ+Ô+Ð+Ø!Ÿ:š: m°SÑ9Ô9ˆÔØ—*’*˜YÑ'Ô'ˆØ�:Š:�l EÑ*Ô*¨eÐ3Ð3Øœ)ˆDŒKÝœŸš W­cµ$´*±,´,Ñ.?Ô.?Ñ@Ô@ˆDŒIˆIˆIð 4Ð3r2   Fc                 ó®   — | j         j                             | j        | j                             ¦   «         ddi¬¦  «        }|                     ¦   «          dS )zÔWrite one part of a multi-block file upload

        Parameters
        ==========
        final: bool
            This is the last block, so should complete file, if
            self.autocommit is True.
        úcontent-typeúapplication/octet-stream)rI   r­   T)r  r<   Úpostr®   ÚbufferÚgetvaluera   )r'   Úfinalre   s      r1   Ú_upload_chunkzWebHDFile._upload_chunk¾  sZ   € ð ŒgŒo×"Ò"ØŒMØ”×%Ò%Ñ'Ô'Ø#Ð%?Ð@ð #ñ 
ô 
ˆð
 	×ÒÑÔÐØˆtr2   c                 óü  — | j                              ¦   «         }d| j        v rd\  }}n
d\  }}d|d<    | j        j        ||| j        fddi|¤Ž}| j                             |j        d         ¦  «        }d	| j        v r| j        j         	                    |d
di¬¦  «        }| 
                    ¦   «           | j        j        dd| j        fddi|¤Ž}| j                             |j        d         ¦  «        | _        dS dS )zCreate remote file/uploadÚa)ÚAPPENDÚPOST)ÚCREATEÚPUTræ   Ú	overwriterc   Fr«   Úwr  r  )r­   r"  r#  N)r/   rU   rl   r  ri   rb   rT   r­   r<   r¾   ra   r®   )r'   r/   rF   rG   re   r®   r¯   s          r1   Ú_initiate_uploadzWebHDFile._initiate_uploadÏ  s  € à”×!Ò!Ñ#Ô#ˆØ�$”)ÐÐØ)‰JˆB��à(‰JˆB�Ø"(ˆF�;ÑØˆdŒgŒm˜B ¨¬	ÐLÐL¸EÐLÀVÐLÐLˆØ”7×'Ò'¨¬°JÔ(?Ñ@Ô@ˆØ�$”)ÐÐà”7”?×&Ò&Ø >Ð3MÐ"Nð 'ñ ô ˆDð ×!Ò!Ñ#Ô#Ð#à �4”7”= ¨6°4´9ÐWÐWÀuÐWÐPVÐWÐWˆDØ œG×0Ò0°´¸jÔ1IÑJÔJˆDŒMˆMˆMð Ðr2   c                 óž  — t          |d¦  «        }t          | j        |¦  «        }||k    s|| j        k    rdS | j                             d| j        |||z
  d¬¦  «        }|                     ¦   «          d|j        v rK|j        d         }| j        j         	                    | j         
                    |¦  «        ¦  «        }|j        S |j        S )Nr   r2   ÚOPENF)rb   Úoffsetrw   rc   r«   )ÚmaxÚminrx   r  ri   rb   ra   r­   r<   rB   rT   Úcontent)r'   ÚstartÚendre   r®   r¯   s         r1   Ú_fetch_rangezWebHDFile._fetch_rangeã  sÉ   € Ý�E˜1‘”ˆÝ�$”)˜SÑ!Ô!ˆØ�CŠ<ˆ<˜5 D¤IÒ-Ð-Ø�3ØŒg�mŠmØ˜œ¨5¸¸u¹Èuð ñ 
ô 
ˆð 	×ÒÑÔÐØ˜œÐ$Ð$Ø”{ :Ô.ˆHØ”7”?×&Ò& t¤w×';Ò';¸HÑ'EÔ'EÑFÔFˆDØ”<Ðà”;Ðr2   c                 óP   — | j                              | j        | j        ¦  «         d S r4   )r  râ   rb   r  r5   s    r1   ÚcommitzWebHDFile.commitó  s"   € ØŒ�
Š
�4”9˜dœkÑ*Ô*Ð*Ð*Ð*r2   c                 óD   — | j                              | j        ¦  «         d S r4   )r  ré   rb   r5   s    r1   ÚdiscardzWebHDFile.discardö  s   € ØŒ�
Š
�4”9ÑÔÐÐÐr2   r  )r  r  r  r  r   r  r(  r1  r3  r5  r  r  s   @r1   rs   rs   ®  s–   ø€ € € € € Ø,Ð,ðAð Að Að Að Aðð ð ð ð"Kð Kð Kð(ð ð ð +ð +ð +ðð ð ð ð ð ð r2   rs   )Úloggingr  rò   rô   r
  r  Ú
contextlibr   r   Úurllib.parser   r:   Úspecr   r   Úutilsr	   r
   Ú	getLoggerrX   r   rs   r   r2   r1   ú<module>r<     s1  ðð €€€Ø 	€	€	€	Ø €€€Ø €€€Ø €€€Ø €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à €€€à ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3à	ˆÔ	˜9Ñ	%Ô	%€ðVð Vð Vð Vð VÐ ñ Vô Vð VðrIð Ið Ið Ið IÐ$ñ Iô Ið Ið Ið Ir2   