3 ] @sddlZddlmZy ddlZWnek r<ddlZYnXddlmZmZddl m Z ej dZ dej jjkZej dZesde_Gd d d eZdS) N)python_version)TransportErrorHTTP_EXCEPTIONS)__versionstr__Z elasticsearchzelasticsearch.traceFc@sdeZdZdZdddZd d Zd d Zd dZddZddZ ddZ dddZ ddZ ddZ dS) Connectionz Class responsible for maintaining a connection to an Elasticsearch node. It holds persistent connection pool to it and it's main interface (`perform_request`) is thread-safe. Also responsible for logging. localhost#F cKsX|jdd}|s|dkr d}d}||_d|||f|_|rHd|jd}||_||_dS)a :arg host: hostname of the node (default: localhost) :arg port: port to use (integer, default: 9200) :arg url_prefix: optional url prefix for elasticsearch :arg timeout: default timeout in seconds (float, default: 10) schemehttphttpsTz %s://%s:%s/N)getuse_sslhoststrip url_prefixtimeout)selfrportrrrkwargsr rF/tmp/pip-build-z81i1n8o/elasticsearch/elasticsearch/connection/base.py__init__ s  zConnection.__init__cCsd|jj|jfS)Nz<%s: %s>) __class____name__r)rrrr__repr__;szConnection.__repr__cCst|tstd||fdS)Nz(Unsupported equality check for %s and %sT) isinstancer TypeError)rotherrrr__eq__>s zConnection.__eq__cCst|S)N)id)rrrr__hash__EszConnection.__hash__c Cs>y tjtj|ddddjddSttfk r8|SXdS) NTr,: ) sort_keysindent separators'z\u0027)r%r&)jsondumpsloadsreplace ValueErrorr )rdatarrr _pretty_jsonHs zConnection._pretty_jsoncCstjtj stj rdSd|kr0|jdddn|d}|jrN|j|jdd}tjd|r\dnd|||rp|j|ndtjtj rtj d|||r|j|jd d nddS) N?z?pretty&z?prettyr z-curl %s-X%s 'http://localhost:9200%s' -d '%s'z$-H 'Content-Type: application/json' z#[%s] (%.3fs) #%s z #) tracer isEnabledForloggingINFOhandlersr.rinfor1DEBUGdebug)rmethodpathbody status_coderesponsedurationrrr _log_traceRs"  zConnection._log_tracecCsl|r*y|jdd}Wntk r(YnXtjd||||tjd|tjd||j||||||dS)z Log a successful API call. zutf-8ignorez%s %s [status:%s request:%.3fs]z> %sz< %sN)decodeAttributeErrorloggerr:r<rC)rr=full_urlr>r?r@rArBrrrlog_request_successjs  zConnection.log_request_successNc Cs|dkr|dkrdStjd|||p$d||dk d|r\y|jdd}Wntk rZYnXtjd ||j|||||||dk rtjd |dS) z Log an unsuccessful API call. HEADiNz%s %s [status:%s request:%.3fs]zN/A)exc_infozutf-8rDz> %sz< %s)rGwarningrErFr<rC) rr=rHr>r?rBr@rA exceptionrrrlog_request_fails$   zConnection.log_request_failcCs|}d}y8|r>tj|}|jd|}t|tr>d|kr>|d}Wn2ttfk rr}ztjd|WYdd}~XnXt j|t |||dS)z, Locate appropriate exception and raise it. Nerrortypez.Undecodable raw error response from server: %s) r+r-rrdictr/r rGrLrr)rr@Zraw_data error_messageZadditional_infoerrrrr _raise_errors    zConnection._raise_errorcCsdttfS)Nzelasticsearch-py/%s (Python %s))rr)rrrr_get_default_user_agentsz"Connection._get_default_user_agent)rr Fr r )NNN)r __module__ __qualname____doc__rrr"r$r1rCrIrNrTrUrrrrrs"   r)r7platformrZ simplejsonr+ ImportError exceptionsrrr r getLoggerrGLoggermanager loggerDictZ_tracer_already_configuredr5 propagateobjectrrrrrs