
    Je                         d Z ddlZddlmZ ddlmZmZmZmZ ddl	Z	ddl
mZmZ ddl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j0                  e      Ze G d dee             Zy)zKite completions HTTP client.    N)quote)QObjectQThreadSignalQMutex)_running_under_pytest)KITE_ENDPOINTSKITE_REQUEST_MAPPING)class_register)KiteMethodProviderMixIn)status)
TEXT_TYPESc                       e Zd Z eee      Z ee      Z e       Z	 eee
e      Z ee
      Z ee
fef      Z e       Z ee
      Z ee
e      ZddZd Zd Zd Zd Zd Zd Zd Zd	 ZddZd Zd Zy
)
KiteClientc                 B   t        j                  | |       d | _        i | _        g | _        t               | _        i | _        i | _        d| _	        || _
        t        d       | _        | j                  | j                         | j                  j                  j                  | j                         | j                   j                  | j"                         | j$                  j                  | j&                         | j(                  j                  | j*                         y )NF)r   __init__endpointrequests	languagesr   mutexopened_filesopened_files_statusthread_startedenable_code_snippetsr   threadmoveToThreadstartedconnectsig_perform_requestperform_requestsig_perform_status_request
get_statussig_perform_onboarding_requestget_onboarding_file)selfparentr   s      Q/usr/lib/python3/dist-packages/spyder/plugins/completion/providers/kite/client.pyr   zKiteClient.__init__+   s    v&X
#% #$8!dm$++&##DLL1  (()=)=>''//@++33D4L4LM    c                     | j                   s| j                  j                          t        j	                  d       t        j                         | _        | j                         | _	        | j                  j                  | j                         y )NzStarting Kite HTTP session...)r   r   startloggerdebugr   Sessionr   get_languagesr   sig_client_startedemitr&   s    r(   r+   zKiteClient.start<   s`    ""KK45 ((*++-$$T^^4r)   c                     d| _         y )NT)r   r2   s    r(   r   zKiteClient.startedD   s
    "r)   c                     | j                   rJt        j                  d       | j                  j	                          | j
                  j                          y y )NzClosing Kite HTTP session...)r   r,   r-   r   closer   quitr2   s    r(   stopzKiteClient.stopG   s=    LL78MM!KK r)   c                     t         j                  \  }}| j                  ||      \  }}|sg S |t        |t              rdg}|S )Npython)r
   LANGUAGES_ENDPOINTperform_http_request
isinstancer   r&   verburlsuccessresponses        r(   r/   zKiteClient.get_languagesM   sK    "55	c 55dC@Iz(J? zHr)   c                 V    t         j                  \  }}| j                  ||      \  }}|S )z0Perform a request to get kite's onboarding file.)r
   ONBOARDING_ENDPOINTr;   r=   s        r(   _get_onboarding_filezKiteClient._get_onboarding_fileW   s-    "66	c 55dC@r)   c                 Z    | j                         }| j                  j                  |       y)zGet onboarding file.N)rD   sig_onboarding_response_readyr1   )r&   onboarding_files     r(   r%   zKiteClient.get_onboarding_file]   s$    335**//@r)   c                 t    t         j                  \  }}|rd|i}nddi}| j                  |||      \  }}||fS )z0Perform a request to get kite status for a file.filenamefiletyper9   )
url_params)r
   STATUS_ENDPOINTr;   )r&   rI   r>   r?   rK   r@   rA   s          r(   _get_statuszKiteClient._get_statusb   sT    "22	c$h/J$h/J 55#* 6 .  r)   c                    | j                  |      \  }}|r|-t               }| j                  t           j	                  |       yt        |t              rPt        d      }t        d      j                  |      }|||d}| j                  t           j	                  |       y| j                  t           j	                  |       y)z%Get kite status for a given filename.Nz with errors)extra_statuszt<code>{error}</code><br><br>Note: If you are using a VPN, please don't route requests to localhost/127.0.0.1 with it)error)r   shortlong)
rM   r   sig_status_response_readystrr1   r<   r   r   formatdict)r&   rI   success_statuskite_status
status_strlong_strkite_status_dicts          r(   r#   zKiteClient.get_statusm   s    &*&6&6x&@#;. (K**3/44[AZ0^<J 7 8 9?#. 9? 90  %#  " **40556FG**4055kBr)   Nc                 
   d }t        | j                  |      }	  ||||      }|j                  dk(  }|r	 |j	                         }||fS ||fS # t        $ r Y yw xY w# t        $ r |j
                  }|dk(  rd n|}Y ||fS w xY w)N)paramsjson)FN    )getattrr   	Exceptionstatus_coder^   text)	r&   r>   r?   rK   r]   rA   http_methodhttp_responser@   s	            r(   r;   zKiteClient.perform_http_request   s    dmmT2	'JVLM  ++s2@(--/   w    		  @(--#+r>4x  @s"   A A 	AABBc           	      X   d }| j                   ~|t        v rvt        |   \  }}|j                         D ci c]#  \  }}|t        |t              rt        |      n|% }	}} |j                  di |	}	 | j                  |||      \  }
}|S |S c c}}w # t        t        f$ r |cY S w xY w)N)r]    )
r   r   itemsr<   r   r   rU   r;   ConnectionRefusedErrorConnectionError)r&   methodr]   rK   rA   	http_verbpathkeyvalueencoded_url_paramsr@   s              r(   sendzKiteClient.send   s    ==$3G)G26:OIt %/$4$4$6"8 S% Zz%BU5\M"8 "8 4;;4!34D $($=$=tF %> %4! x"8 +O<   s   (B4B B)(B)c                    d }|| j                   v r{t        j                  dj                  ||             | j                   |   }t	        | |      } ||      }|| j
                  v r%| j
                  |   }t	        | |      }| ||      }t        |t        t        d       f      s(t               s| j                  j                  ||       y y | j                  j                  ||xs i        y )NzPerform request {0} with id {1})sender_registryr,   r-   rU   ra   handler_registryr<   rV   typer	   sig_client_wrong_responser1   sig_response_ready)	r&   req_idrl   r]   rA   handler_namehandlerconverter_name	converters	            r(   r!   zKiteClient.perform_request   s    T)))LL:AA  !//7LdL1GvH...!%!6!6v!>#D.9	'(2H(T4:$67')..33FHE * ##((R@r)   )T)NN)__name__
__module____qualname__r   intrV   rx   listr0   sig_client_not_respondingrT   objectr    r"   rS   r$   rF   rw   r   r+   r   r7   r/   rD   r%   rM   r#   r;   rr   r!   rh   r)   r(   r   r      s    T* & c62!' &vw 7%+X"$*3K! &sF 3N"5#A
	!C*! Ar)   r   )__doc__loggingurllib.parser   qtpy.QtCorer   r   r   r   r   spyder.config.baser   r	   (spyder.plugins.completion.providers.kiter
   r   3spyder.plugins.completion.providers.kite.decoratorsr   2spyder.plugins.completion.providers.kite.providersr   5spyder.plugins.completion.providers.kite.utils.statusr   spyder.py3compatr   	getLoggerr~   r,   r   rh   r)   r(   <module>r      sm    $   9 8  7* N H ' 
		8	$ RA1 RA RAr)   