§
    ½Ë”j8  ã                   ó†  — d Z ddlZddlmZ ddlmZmZmZ ddlm	Z	 ddl
mZ ddlmZ dd	lmZ  ej        e¦  «        Z G d
„ d¦  «        Zd„ Zd„ Z G d„ de¦  «        Z G d„ d¦  «        Zej                             ¦   «         D ]\  ZZ eee¦  «        r eeee¦  «         Œ G d„ de¦  «        Z G d„ de¦  «        Z dS )z*Stubs for patching HTTP and HTTPS requestsé    N)Úsuppress)ÚHTTPConnectionÚHTTPResponseÚHTTPSConnection)ÚBytesIO)Ú(CannotOverwriteExistingCassetteException)ÚRequesté   )Úcompatc                   ó$   — e Zd ZdZd„ Zd„ Zd„ ZdS )ÚVCRFakeSocketz{
    A socket that doesn't do anything!
    Used when playing back cassettes, when there
    is no actual open socket.
    c                 ó   — d S ©N© ©Úselfs    ú@C:\Projects\DSCons\.venv\Lib\site-packages\vcr/stubs/__init__.pyÚclosezVCRFakeSocket.close   ó   € Øˆó    c                 ó   — d S r   r   ©r   ÚargsÚkwargss      r   Ú
settimeoutzVCRFakeSocket.settimeout   r   r   c                 ó   — dS )z¨
        This is kinda crappy.  requests will watch
        this descriptor and make sure it's not closed.
        Return file descriptor 0 since that's stdin.
        r   r   r   s    r   ÚfilenozVCRFakeSocket.fileno   s	   € ð ˆqr   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r   r   r      sK   € € € € € ðð ðð ð ðð ð ðð ð ð ð r   r   c                 óÔ   — d}|                       ¦   «         D ]>\  }}|D ]6}||                     d¦  «        dz   |                     d¦  «        z   dz   z  }Œ7Œ?t          j        |¦  «        S )z[
    Convert headers from our serialized dict with lists for keys to a
    HTTPMessage
    r   zutf-8ó   :s   
)ÚitemsÚencoder   Úget_httpmessage)Úheader_listÚheader_stringÚkeyÚvaluesÚvs        r   Úparse_headersr,   &   s…   € ð
 €MØ"×(Ò(Ñ*Ô*ð Vð V‰ˆˆVØð 	Vð 	VˆAØ˜SŸZšZ¨Ñ0Ô0°4Ñ7¸!¿(º(À7Ñ:KÔ:KÑKÈgÑUÑUˆMˆMð	VåÔ! -Ñ0Ô0Ð0r   c                 óÊ   — | j         €| j        n| j         }i }t          j        |¦  «        D ]6\  }}|                     |g ¦  «         ||                              |¦  «         Œ7|S r   )ÚmsgÚheadersr   Úget_headersÚ
setdefaultÚextend)Úresponser/   Úoutr)   r*   s        r   Úserialize_headersr5   2   sm   € Ø"*¤,Ð"6ˆhÔÐ¸H¼L€GØ
€CÝÔ)¨'Ñ2Ô2ð  ð  ‰ˆˆVØ�Š�s˜BÑÔÐØˆCŒ�Š˜ÑÔÐÐØ€Jr   c                   óÞ   — e Zd ZdZdd„Zed„ ¦   «         Zddœd„Zd„ Zd„ Z	d	„ Z
d
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zdd„Zd„ Zed„ ¦   «         Zd„ Zed„ ¦   «         Zd„ Zdd„ZdS )ÚVCRHTTPResponsezJ
    Stub response class that gets returned instead of a HTTPResponse
    Nc                 óÐ  — d | _         |r|| _        || _        |d         d         | _        |d         d         x| _        | _        d | _        d | _        t          | j        d         d         ¦  «        | _	        d| _
        | | _        | j        d         }d„ |D ¦   «         }|r	||d	         = t          |¦  «        x| _        | _        t          j        | j        d
¦  «        pd | _        d S )NÚstatusÚmessageÚcodeÚbodyÚstringFr/   c                 óB   — g | ]}|                      ¦   «         d k    ¯|‘ŒS )zTRANSFER-ENCODING)Úupper)Ú.0Úhs     r   ú
<listcomp>z,VCRHTTPResponse.__init__.<locals>.<listcomp>S   s+   € ÐIÐIÐI˜¨¯ª©	¬	Ð5HÒ(HÐ(H�!Ð(HÐ(HÐ(Hr   r   zcontent-length)ÚfpÚurlÚrecorded_responseÚreasonr9   r;   ÚversionÚversion_stringr   Ú_contentÚ_closedÚ_original_responser,   r/   r.   r   Ú
get_headerÚlength)r   rE   Úrequest_urlr/   Úte_keys        r   Ú__init__zVCRHTTPResponse.__init__@   sð   € ØˆŒØð 	#Ø"ˆDŒHØ!2ˆÔØ'¨Ô1°)Ô<ˆŒØ"3°HÔ"=¸fÔ"EÐEˆŒ�d”iØˆŒØ"ˆÔÝ Ô 6°vÔ >¸xÔ HÑIÔIˆŒØˆŒØ"&ˆÔàÔ(¨Ô3ˆð JÐI˜WÐIÑIÔIˆØð 	#Ø˜˜qœ	Ð"Ý"/°Ñ"8Ô"8Ð8ˆŒ�t”xåÔ'¨¬Ð2BÑCÔCÐKÀtˆŒˆˆr   c                 ó   — | j         S r   ©rJ   r   s    r   ÚclosedzVCRHTTPResponse.closedZ   s   € ð
 Œ|Ðr   )Údecode_contentc                ó&   —  | j         j        |i |¤ŽS r   ©rI   Úread)r   rT   r   r   s       r   rW   zVCRHTTPResponse.reada   ó   € Ø!ˆtŒ}Ô! 4Ð2¨6Ð2Ð2Ð2r   c                 ó&   —  | j         j        |i |¤ŽS r   )rI   Úread1r   s      r   rZ   zVCRHTTPResponse.read1d   s   € Ø"ˆtŒ}Ô" DÐ3¨FÐ3Ð3Ð3r   c                 ó4   — | j                              ¦   «         S r   )rI   Úreadallr   s    r   r\   zVCRHTTPResponse.readallg   s   € ØŒ}×$Ò$Ñ&Ô&Ð&r   c                 ó&   —  | j         j        |i |¤ŽS r   )rI   Úreadintor   s      r   r^   zVCRHTTPResponse.readintoj   ó   € Ø%ˆtŒ}Ô% tÐ6¨vÐ6Ð6Ð6r   c                 ó&   —  | j         j        |i |¤ŽS r   )rI   Úreadliner   s      r   ra   zVCRHTTPResponse.readlinem   r_   r   c                 ó&   —  | j         j        |i |¤ŽS r   )rI   Ú	readlinesr   s      r   rc   zVCRHTTPResponse.readlinesp   s   € Ø&ˆtŒ}Ô&¨Ð7°Ð7Ð7Ð7r   c                 ó4   — | j                              ¦   «         S r   )rI   Úseekabler   s    r   re   zVCRHTTPResponse.seekables   ó   € ØŒ}×%Ò%Ñ'Ô'Ð'r   c                 ó4   — | j                              ¦   «         S r   )rI   Útellr   s    r   rh   zVCRHTTPResponse.tellv   s   € ØŒ}×!Ò!Ñ#Ô#Ð#r   c                 ó4   — | j                              ¦   «         S r   )rI   Úisattyr   s    r   rj   zVCRHTTPResponse.isattyy   s   € ØŒ}×#Ò#Ñ%Ô%Ð%r   c                 ó&   —  | j         j        |i |¤ŽS r   )rI   Úseekr   s      r   rl   zVCRHTTPResponse.seek|   rX   r   c                 ó   — d| _         dS )NTrR   r   s    r   r   zVCRHTTPResponse.close   s   € ØˆŒØˆtr   c                 ó   — | j         S r   )r9   r   s    r   ÚgetcodezVCRHTTPResponse.getcodeƒ   ó
   € ØŒ{Ðr   c                 ó   — | j         S r   )rS   r   s    r   ÚisclosedzVCRHTTPResponse.isclosed†   rp   r   c                 ó6   — t          | j        d         ¦  «        S ©Nr/   )r,   rE   r   s    r   ÚinfozVCRHTTPResponse.info‰   s   € Ý˜TÔ3°IÔ>Ñ?Ô?Ð?r   c                 óx   — t          | j        d         ¦  «        }t          t          j        |¦  «        ¦  «        S rt   )r,   rE   Úlistr   Úget_header_items)r   r:   s     r   Ú
getheaderszVCRHTTPResponse.getheadersŒ   s0   € Ý Ô 6°yÔ AÑBÔBˆÝ•FÔ+¨GÑ4Ô4Ñ5Ô5Ð5r   c                 óv   ‡— ˆfd„|                       ¦   «         D ¦   «         }|rd                     |¦  «        S |S )Nc                 ón   •— g | ]1\  }}|                      ¦   «         ‰                      ¦   «         k    ¯/|‘Œ2S r   )Úlower)r@   Úkr+   Úheaders      €r   rB   z-VCRHTTPResponse.getheader.<locals>.<listcomp>‘   s7   ø€ ÐSÐSÐS™˜˜A°q·w²w±y´yÀFÇLÂLÁNÄNÒ7RÐ7R�!Ð7RÐ7RÐ7Rr   z, )ry   Újoin)r   r~   Údefaultr*   s    `  r   Ú	getheaderzVCRHTTPResponse.getheader�   sE   ø€ ØSÐSÐSÐS $§/¢/Ñ"3Ô"3ÐSÑSÔSˆàð 	Ø—9’9˜VÑ$Ô$Ð$àˆNr   c                 ó4   — | j                              ¦   «         S r   )rI   Úreadabler   s    r   rƒ   zVCRHTTPResponse.readable˜   rf   r   c                 ór   — | j                              ¦   «         j        | j                              ¦   «         z
  S r   )rI   Ú	getbufferÚnbytesrh   r   s    r   Úlength_remainingz VCRHTTPResponse.length_remaining›   s,   € àŒ}×&Ò&Ñ(Ô(Ô/°$´-×2DÒ2DÑ2FÔ2FÑFÐFr   c                 óX   — d| j         cxk    rdk    sn dS |                      d¦  «        S )a(  
        Returns (a) redirect location string if we got a redirect
        status code and valid location, (b) None if redirect status and
        no location, (c) False if not a redirect status code.
        See https://urllib3.readthedocs.io/en/stable/reference/urllib3.response.html .
        i,  i�  FÚLocation)r9   r�   r   s    r   Úget_redirect_locationz%VCRHTTPResponse.get_redirect_locationŸ   s<   € ð �t”{Ð)Ð)Ò)Ð) cÒ)Ð)Ð)Ð)Ø�5Ø�~Š~˜jÑ)Ô)Ð)r   c                 óX   — | j                              ¦   «                              ¦   «         S r   )rI   r…   Útobytesr   s    r   ÚdatazVCRHTTPResponse.dataª   s"   € àŒ}×&Ò&Ñ(Ô(×0Ò0Ñ2Ô2Ð2r   c                 ó   — d S r   r   r   s    r   Ú
drain_connzVCRHTTPResponse.drain_conn®   r   r   é   c              #   óN   K  — 	 | j                              |¦  «        }|V — |sd S Œ#r   rV   )r   ÚamtrT   Úbs       r   ÚstreamzVCRHTTPResponse.stream±   s;   è è € ð	Ø”×"Ò" 3Ñ'Ô'ˆAØˆGˆGˆGØð Ø�ð		r   r   )r�   N)r   r   r    r!   rP   ÚpropertyrS   rW   rZ   r\   r^   ra   rc   re   rh   rj   rl   r   ro   rr   ru   ry   r�   rƒ   r‡   rŠ   r�   r�   r”   r   r   r   r7   r7   ;   sÒ  € € € € € ðð ðLð Lð Lð Lð4 ðð ñ „Xðð *.ð 3ð 3ð 3ð 3ð 3ð4ð 4ð 4ð'ð 'ð 'ð7ð 7ð 7ð7ð 7ð 7ð8ð 8ð 8ð(ð (ð (ð$ð $ð $ð&ð &ð &ð3ð 3ð 3ðð ð ðð ð ðð ð ð@ð @ð @ð6ð 6ð 6ðð ð ð ð(ð (ð (ð ðGð Gñ „XðGð	*ð 	*ð 	*ð ð3ð 3ñ „Xð3ðð ð ðð ð ð ð ð r   r7   c                   ó¼   ‡ — e Zd ZdZd„ Zd„ Zd„ Zd„ Zdd„Zd„ Z	d„ Z
d	„ Zd
„ Zdd„Zdd„Zd„ Zd„ Zed„ ¦   «         Zej        d„ ¦   «         Zd„ Zˆ fd„Zˆ fd„Zˆ xZS )ÚVCRConnectionNc                 ó„   — | j         j        s| j         j        n| j         j        }dddœ| j                 }||k    rd|› �ndS )zQ
        Returns empty string for the default port and ':port' otherwise
        i»  éP   )ÚhttpsÚhttpú:Ú )Úreal_connectionÚ_tunnel_hostÚportÚ_tunnel_portÚ	_protocol)r   r    Údefault_ports      r   Ú_port_postfixzVCRConnection._port_postfix½   s[   € ð Ô'Ô4ð3ˆDÔ Ô%Ð%àÔ%Ô2ð 	ð
 "%¨bÐ1Ð1°$´.ÔAˆØ! \Ò1Ð1ˆz�4ˆzˆzˆz°rÐ9r   c                 óJ   — | j         j        r| j         j        S | j         j        S )zReturns the request host)rž   rŸ   Úhostr   s    r   Ú
_real_hostzVCRConnection._real_hostÉ   s(   € àÔÔ,ð 	-àÔ'Ô4Ð4àÔ'Ô,Ð,r   c                 óÖ   — |r|                      d¦  «        s|S | j        › d|                      ¦   «         › |                      ¦   «         › |› �}t                               d|¦  «         |S )zReturns request absolute URIú/ú://zAbsolute URI: %s)Ú
startswithr¢   r§   r¤   ÚlogÚdebug)r   rD   Úuris      r   Ú_urizVCRConnection._uriÑ   sq   € àð 	�s—~’~ cÑ*Ô*ð 	àˆJØ”ÐRÐR D§O¢OÑ$5Ô$5ÐR°t×7IÒ7IÑ7KÔ7KÐRÈSÐRÐRˆÝ�	Š	Ð$ cÑ*Ô*Ð*Øˆ
r   c                 ó”   — | j         › d|                      ¦   «         › |                      ¦   «         › �}|                     |dd¦  «        S )z.Returns request selector url from absolute URIrª   r�   r
   )r¢   r§   r¤   Úreplace)r   r®   Úprefixs      r   Ú_urlzVCRConnection._urlÚ   sH   € à”NÐPÐP t§¢Ñ'8Ô'8ÐP¸$×:LÒ:LÑ:NÔ:NÐPÐPˆØ�{Š{˜6 2 qÑ)Ô)Ð)r   c                 óÊ   — t          ||                      |¦  «        ||pi ¬¦  «        | _        t                               d| j        › �¦  «         t          ¦   «         | _        dS )z1Persist the request metadata in self._vcr_request©Úmethodr®   r<   r/   úGot N)r	   r¯   Ú_vcr_requestr¬   r­   r   Ú_sock)r   r¶   rD   r<   r/   r   r   s          r   ÚrequestzVCRConnection.requestß   s[   € å#¨6°t·y²yÀ±~´~ÈDÐZaÐZgÐegÐhÑhÔhˆÔÝ�	Š	Ð,˜Ô*Ð,Ð,Ñ-Ô-Ð-õ #‘_”_ˆŒ
ˆ
ˆ
r   c                 ó    — t          ||                      |¦  «        di ¬¦  «        | _        t                               d| j        › �¦  «         dS )z±
        httplib gives you more than one way to do it.  This is a way
        to start building up a request.  Usually followed by a bunch
        of putheader() calls.
        r�   rµ   r·   N)r	   r¯   r¸   r¬   r­   )r   r¶   rD   r   r   s        r   Ú
putrequestzVCRConnection.putrequestë   sL   € õ $¨6°t·y²yÀ±~´~ÈBÐXZÐ[Ñ[Ô[ˆÔÝ�	Š	Ð,˜Ô*Ð,Ð,Ñ-Ô-Ð-Ð-Ð-r   c                 ó$   — || j         j        |<   d S r   )r¸   r/   )r   r~   r*   s      r   Ú	putheaderzVCRConnection.putheaderô   s   € Ø,2ˆÔÔ! &Ñ)Ð)Ð)r   c                 óT   — | j         j        r| j         j        |z   n|| j         _        dS )zÙ
        This method is called after request(), to add additional data to the
        body of the request.  So if that happens, let's just append the data
        onto the most recent request in the cassette.
        N©r¸   r<   )r   r�   s     r   ÚsendzVCRConnection.send÷   s3   € ð CGÔBSÔBXÐ!b Ô!2Ô!7¸$Ñ!>Ð!>Ð^bˆÔÔÐÐr   c                 ó8   — | j                              ¦   «          d S r   )rž   r   r   s    r   r   zVCRConnection.closeÿ   s   € ð 	Ô×"Ò"Ñ$Ô$Ð$Ð$Ð$r   c                 ó&   — |�|| j         _        dS dS )zØ
        Normally, this would actually send the request to the server.
        We are not sending the request until getting the response,
        so bypass this part and just append the message body, if any.
        NrÀ   )r   Úmessage_bodys     r   Ú
endheaderszVCRConnection.endheaders  s#   € ð Ð#Ø%1ˆDÔÔ"Ð"Ð"ð $Ð#r   Fc                 ó
  — | j                              | j        ¦  «        r\t                               d| j        › d�¦  «         | j                              | j        ¦  «        }t          || j        j        ¦  «        S | j         j        r:| j          	                    | j        ¦  «        rt          | j         | j        ¬¦  «        ‚t                               | j        › d�¦  «         ddlm}  |¦   «         5  | j                             | j        j        |                      | j        j        ¦  «        | j        j        | j        j        ¬¦  «         ddd¦  «         n# 1 swxY w Y   | j                             ¦   «         }t)          |d	¦  «        r|j        n|                     ¦   «         }|j        |j        d
œt3          |¦  «        d|idœ}| j                              | j        |¦  «         t          || j        j        ¦  «        S )zRetrieve the responsezPlaying response for z from cassette)ÚcassetteÚfailed_requestz( not in cassette, sending to real serverr   ©Úforce_reset)r¶   rD   r<   r/   Nr�   )r;   r:   r=   )r9   r/   r<   )rÇ   Úcan_play_response_forr¸   r¬   ru   Úplay_responser7   r®   Úwrite_protectedÚfilter_requestr   Ú	vcr.patchrÊ   rž   rº   r¶   r³   r<   r/   ÚgetresponseÚhasattrr�   rW   r9   rF   r5   Úappend)r   Ú_r   r3   rÊ   Úresponse_datas         r   rÐ   zVCRConnection.getresponse  s7  € ð Œ=×.Ò.¨tÔ/@ÑAÔAð %	>Ý�HŠHÐN¨TÔ->ÐNÐNÐNÑOÔOÐOØ”}×2Ò2°4Ô3DÑEÔEˆHÝ" 8¨TÔ->Ô-BÑCÔCÐCàŒ}Ô,ð °´×1MÒ1MÈdÔN_Ñ1`Ô1`ð Ý>Ø!œ]Ø#'Ô#4ðñ ô ð õ �HŠH˜Ô)ÐSÐSÐSÑTÔTÐTð .Ð-Ð-Ð-Ð-Ð-à�‘”ð ð ØÔ$×,Ò,ØÔ,Ô3ØŸ	š	 $Ô"3Ô"7Ñ8Ô8ØÔ*Ô/Ø Ô-Ô5ð	 -ñ ô ð ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð Ô+×7Ò7Ñ9Ô9ˆHÝ-4°X¸vÑ-FÔ-FÐ[˜HœM˜MÈHÏMÊMÉOÌOˆMð $,¤?¸x¼ÐOÐOÝ,¨XÑ6Ô6Ø! =Ð1ðð ˆHð
 ŒM× Ò  Ô!2°HÑ=Ô=Ð=Ý˜x¨Ô):Ô)>Ñ?Ô?Ð?s   Ã4AEÅEÅ!Ec                 ó*   —  | j         j        |i |¤Ž d S r   )rž   Úset_debuglevelr   s      r   rÖ   zVCRConnection.set_debuglevel9  s#   € Ø+ˆÔÔ+¨TÐ<°VÐ<Ð<Ð<Ð<Ð<r   c                 ó  — t          | d¦  «        r!| j                             | j        ¦  «        rdS | j        j        rdS ddlm}  |¦   «         5   | j        j        |i |¤Žcddd¦  «         S # 1 swxY w Y   t          ¦   «         | _
        dS )z¹
        httplib2 uses this.  Connects to the server I'm assuming.

        Only pass to the baseclass if we don't have a recorded response
        and are not write-protected.
        r¸   Nr   rÉ   )rÑ   rÇ   rË   r¸   rÍ   rÏ   rÊ   rž   Úconnectr   r¹   ©r   r   r   rÊ   s       r   rØ   zVCRConnection.connect<  sý   € õ �4˜Ñ(Ô(ð 	¨T¬]×-PÒ-PÐQUÔQbÑ-cÔ-cð 	ð ˆFàŒ=Ô(ð 	àˆFà)Ð)Ð)Ð)Ð)Ð)àˆ[‰]Œ]ð 	Að 	AØ/�4Ô'Ô/°Ð@¸Ð@Ð@ð	Að 	Að 	Að 	Añ 	Aô 	Að 	Að 	Að 	Að 	Að 	Að 	Aøøøð 	Að 	Að 	Að 	Aõ #‘_”_ˆŒ
ˆ
ˆ
s   ÁA/Á/A3Á6A3c                 ó@   — | j         j        r| j         j        S | j        S r   )rž   Úsockr¹   r   s    r   rÛ   zVCRConnection.sockT  s$   € àÔÔ$ð 	-ØÔ'Ô,Ð,ØŒzÐr   c                 ó:   — | j         j        r|| j         _        d S d S r   )rž   rÛ   )r   Úvalues     r   rÛ   zVCRConnection.sockZ  s+   € àÔÔ$ð 	.Ø(-ˆDÔ Ô%Ð%Ð%ð	.ð 	.r   c                 ó´   — |                      dd ¦  «         ddlm}  |¦   «         5   | j        |i |¤Ž| _        d d d ¦  «         n# 1 swxY w Y   d | _        d S )NÚstrictr   rÉ   )ÚpoprÏ   rÊ   Ú
_baseclassrž   r¹   rÙ   s       r   rP   zVCRConnection.__init___  sÂ   € Ø�
Š
�8˜TÑ"Ô"Ð"ð
 	*Ð)Ð)Ð)Ð)Ð)àˆ[‰]Œ]ð 	Dð 	DØ#2 4¤?°DÐ#C¸FÐ#CÐ#CˆDÔ ð	Dð 	Dð 	Dñ 	Dô 	Dð 	Dð 	Dð 	Dð 	Dð 	Dð 	Døøøð 	Dð 	Dð 	Dð 	Dð ˆŒ
ˆ
ˆ
s   §AÁA
ÁA
c                 óÐ   •— t          t          ¦  «        5  t          | j        ||¦  «         ddd¦  «         n# 1 swxY w Y   t	          ¦   «                              ||¦  «         dS )aø  
        We need to define this because any attributes that are set on the
        VCRConnection need to be propagated to the real connection.

        For example, urllib3 will set certain attributes on the connection,
        such as 'ssl_version'. These attributes need to get set on the real
        connection to have the correct and expected behavior.

        TODO: Separately setting the attribute on the two instances is not
        ideal. We should switch to a proxying implementation.
        N)r   ÚAttributeErrorÚsetattrrž   ÚsuperÚ__setattr__)r   ÚnamerÝ   Ú	__class__s      €r   ræ   zVCRConnection.__setattr__l  sŸ   ø€ õ •nÑ%Ô%ð 	7ð 	7Ý�DÔ(¨$°Ñ6Ô6Ð6ð	7ð 	7ð 	7ñ 	7ô 	7ð 	7ð 	7ð 	7ð 	7ð 	7ð 	7øøøð 	7ð 	7ð 	7ð 	7õ 	‰Œ×Ò˜D %Ñ(Ô(Ð(Ð(Ð(s   –9¹=Á =c                 ó¤   •— | j                              d¦  «        rt          | j        |¦  «        S t	          ¦   «                              |¦  «        S )zw
        Send requests for weird attributes up to the real connection
        (counterpart to __setattr above)
        rž   )Ú__dict__ÚgetÚgetattrrž   rå   Ú__getattr__)r   rç   rè   s     €r   rí   zVCRConnection.__getattr__}  sK   ø€ ð
 Œ=×ÒÐ.Ñ/Ô/ð 	7õ ˜4Ô/°Ñ6Ô6Ð6å‰wŒw×"Ò" 4Ñ(Ô(Ð(r   )NNr   )F)r   r   r    rÇ   r¤   r§   r¯   r³   rº   r¼   r¾   rÁ   r   rÅ   rÐ   rÖ   rØ   r•   rÛ   ÚsetterrP   ræ   rí   Ú__classcell__)rè   s   @r   r—   r—   ¹   sw  ø€ € € € € à€Hð
:ð 
:ð 
:ð-ð -ð -ðð ð ð*ð *ð *ð

%ð 
%ð 
%ð 
%ð.ð .ð .ð3ð 3ð 3ðcð cð cð%ð %ð %ð
2ð 2ð 2ð 2ð*@ð *@ð *@ð *@ðX=ð =ð =ð%ð %ð %ð0 ðð ñ „Xðð
 
„[ð.ð .ñ „[ð.ðð ð ð)ð )ð )ð )ð )ð"
)ð 
)ð 
)ð 
)ð 
)ð 
)ð 
)ð 
)ð 
)r   r—   c                   óP   — e Zd ZdZeZdZej        Zej        Z e	edd¦  «        Z
dS )ÚVCRHTTPConnectionz A Mocked class for HTTP requestsr›   Ú_http_vsn_strN)r   r   r    r!   r   rá   r¢   Ú
debuglevelÚ	_http_vsnrì   rò   r   r   r   rñ   rñ   �  sA   € € € € € Ø*Ð*à€JØ€IØÔ&€JØÔ$€IØ�G˜J¨¸Ñ>Ô>€M€M€Mr   rñ   c                   óT   — e Zd ZdZeZdZdZej        Zej	        Z	 e
edd¦  «        ZdS )ÚVCRHTTPSConnectionz!A Mocked class for HTTPS requestsrš   Trò   N)r   r   r    r!   r   rá   r¢   Úis_verifiedró   rô   rì   rò   r   r   r   rö   rö   ™  sF   € € € € € Ø+Ð+à €JØ€IØ€KØÔ&€JØÔ$€IØ�G˜J¨¸Ñ>Ô>€M€M€Mr   rö   )!r!   ÚloggingÚ
contextlibr   Úhttp.clientr   r   r   Úior   Ú
vcr.errorsr   Úvcr.requestr	   r�   r   Ú	getLoggerr   r¬   r   r,   r5   r7   r—   rê   r$   r}   r+   Ú
isinstanceÚstaticmethodrä   rñ   rö   r   r   r   ú<module>r     só  ðØ 0Ð 0à €€€Ø Ð Ð Ð Ð Ð Ø EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EØ Ð Ð Ð Ð Ð à ?Ð ?Ð ?Ð ?Ð ?Ð ?Ø Ð Ð Ð Ð Ð à Ð Ð Ð Ð Ð à€gÔ˜Ñ!Ô!€ðð ð ð ð ñ ô ð ð,	1ð 	1ð 	1ðð ð ð{ð {ð {ð {ð {�lñ {ô {ð {ð|N)ð N)ð N)ð N)ð N)ñ N)ô N)ð N)ðb Ô#×)Ò)Ñ+Ô+ð %ð %�D€A€qØ€z�!�\Ñ"Ô"ð %Øˆ�˜q !Ñ$Ô$Ð$øð?ð ?ð ?ð ?ð ?˜ñ ?ô ?ð ?ð?ð ?ð ?ð ?ð ?˜ñ ?ô ?ð ?ð ?ð ?r   