
    >i                          d Z ddlmZ ddlmZ ddlmZ ddlmZ ddlm	Z	 ddl
mZ 	 dd	lZd
ZdZ G d de      Zy	# e$ r d	ZY w xY w)z#Elasticsearch result store backend.    )datetime)bytes_to_str)
_parse_url)states)ImproperlyConfigured   )KeyValueStoreBackendN)ElasticsearchBackendzVYou need to install the elasticsearch library to use the Elasticsearch result backend.c                        e 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 fd	Zd Zd Zd Zd Zd Zd Zd Z fdZ fdZd Zd Zd Zed        Z xZS )r
   zElasticsearch Backend.

    Raises:
        celery.exceptions.ImproperlyConfigured:
            if module :pypi:`elasticsearch` is not available.
    celerybackendhttp	localhosti#  NF
      c                 
   t        |   |i | || _        | j                  j                  j
                  }t        t        t              d x}x}x}x}x}	x}
}|rBt        |      \  }}}	}
}}}|dk(  rd }|r&|j                  d      }|j                  d      \  }}}|xs | j                  | _        |xs | j                  | _        |xs | j                  | _        |xs | j                  | _        |	xs | j                   | _        |
xs | j"                  | _        |xs | j$                  | _         |d      xs | j&                  | _         |d      }||| _         |d      }||| _         |dd      | _        d | _        y )Nelasticsearch/elasticsearch_retry_on_timeoutelasticsearch_timeoutelasticsearch_max_retrieselasticsearch_save_meta_as_textT)super__init__urlappconfgetr   r   E_LIB_MISSINGr   strip	partitionindexdoc_typeschemehostportusernamepasswordes_retry_on_timeout
es_timeoutes_max_retrieses_save_meta_as_text_server)selfr   argskwargs_getr"   r#   r$   r%   r&   r'   r(   path_r*   r+   	__class__s                   y/var/www/html/wine-match-dev/backend/winematch-backend/venv/lib/python3.12/site-packages/celery/backends/elasticsearch.pyr   zElasticsearchBackend.__init__,   s   $)&)xx}}   &}55HLLLL6LDL4L(X>Ho;FD$(D!(zz#%)^^C%8"q((djj
 1DMM+%DII	%DII	 1DMM 1DMM 12Nd6N6N 	  12
!(DO9:%"0D$()JD$Q!    c                 j    t        |t        j                  j                        r|j                  dv ryy)N>               N/A  TF)
isinstancer   
exceptionsTransportErrorstatus_code)r.   excs     r5   exception_safe_to_retryz,ElasticsearchBackend.exception_safe_to_retryU   s-    cM44CCE "LLr6   c                     	 | j                  |      }	 |d   r|d   d   S y # t        t        f$ r Y y w xY w# t        j                  j
                  $ r Y y w xY w)Nfound_sourceresult)r1   	TypeErrorKeyErrorr   rA   NotFoundError)r.   keyress      r5   r   zElasticsearchBackend.getc   sh    	))C.Cw<y>(33  x( ''55 		s#   7 " 47 47 AAc                 f    | j                   j                  | j                  | j                  |      S N)r"   r#   id)serverr   r"   r#   r.   rM   s     r5   r1   zElasticsearchBackend._getn   s-    {{**]]  
 	
r6   c                    |dj                  t        j                         j                         d d       d}	 | j	                  ||       y # t
        j                  j                  $ r | j                  |||       Y y w xY w)Nz{}Z)rI   z
@timestamp)rQ   body)	formatr   utcnow	isoformat_indexr   rA   ConflictError_update)r.   rM   valuestaterV   s        r5   _set_with_statez$ElasticsearchBackend._set_with_stateu   s{    ,,!++-cr2
	+KK   ''55 	+LLdE*	+s   A 0B ?B c                 (    | j                  ||d       S N)r_   )r.   rM   r]   s      r5   setzElasticsearchBackend.set   s    ##C55r6   c           	          |j                         D ci c]  \  }}t        |      | }}} | j                  j                  dt        |      | j                  | j                  |ddid|S c c}}w )Nop_typecreaterQ   r"   r#   rV   params )itemsr   rR   r"   r#   )r.   rQ   rV   r0   kvs         r5   rZ   zElasticsearchBackend._index   sv    /3zz|<tq!Q"<< t{{   
B**]]x(
 
 	
 =s   A.c           
      P   |j                         D ci c]  \  }}t        |      | }}}	 | j                  |      }|j                  d      s | j                  ||fi |S 	 	 | j                  |d   d         }|d   t        j                  k(  rddiS |d   t        j                  v r|t        j                  v rddiS |j                  dd      }	|j                  d	d      }
 | j                  j                   dt        |      | j"                  | j$                  d
|i|
|	dd|}|d   dk(  r!t
        j                  j'                  ddi       |S c c}}w # t
        j                  j                  $ r  | j                  ||fi |cY S w xY w# t        t        f$ r Y w xY w)au  Update state in a conflict free manner.

        If state is defined (not None), this will not update ES server if either:
        * existing state is success
        * existing state is a ready state and current state in not a ready state

        This way, a Retry state cannot override a Success or Failure, and chord_unlock
        will not retry indefinitely.
        )rM   rG   rH   rI   statusnoop_seq_nor   _primary_termdoc)if_primary_term	if_seq_norf   r?   z(conflicting update occurred concurrentlyrh   )ri   r   r1   r   rZ   r   rA   rL   decode_resultr   SUCCESSREADY_STATESUNREADY_STATESrJ   rK   rR   updater"   r#   r[   )r.   rQ   rV   r^   r0   rj   rk   res_getmeta_present_on_backendseq_no	prim_termrN   s               r5   r\   zElasticsearchBackend._update   s    04zz|<tq!Q"<<	3iiBi'G;;w'"t{{2t6v66 (
	*&*&8&89KH9U&V# 'x0FNNB &))(2f6I6IIeW]WlWlNl &)) Y*KK3	 !dkk   
B**]]'0vF
 
 x=F"**88>hjlmm
S = ''55 	34;;r42622	3
 8$ 		s(   E6E 'F 1FFF%$F%c                 (   | j                   rt        | 	  |      S t        |t              st        | 	  |      S |j                  d      r| j                  |d         d   |d<   |j                  d      r| j                  |d         d   |d<   |S )NrI      	traceback)r,   r   encoder@   dictr   _encode)r.   datar4   s     r5   r   zElasticsearchBackend.encode   s    $$7>$''dD)w~d++xx!!%d8n!=a!@Xxx$$(LLk1B$CA$F[!Kr6   c                    | j                   rt        | 	  |      S t        |t              st        | 	  |      S |j                  d      rt        | 	  |d         |d<   |j                  d      rt        | 	  |d         |d<   |S )NrI   r   )r,   r   decoder@   r   r   )r.   payloadr4   s     r5   r   zElasticsearchBackend.decode   s    $$7>'**gt,w~g..{{8$$)GN783D$E!{{;'',w~gk6J'K$Nr6   c                 J    |D cg c]  }| j                  |       c}S c c}w ra   )r   )r.   keysrM   s      r5   mgetzElasticsearchBackend.mget   s    )-.#...s    c                 h    | j                   j                  | j                  | j                  |       y rP   )rR   deleter"   r#   rS   s     r5   r   zElasticsearchBackend.delete   s#    dmmLr6   c                    d}| j                   r$| j                  r| j                   | j                  f}t        j                  | j                   d| j
                   | j                  | j                  | j                  | j                  |      S )z$Connect to the Elasticsearch server.N:)retry_on_timeoutmax_retriestimeoutr$   	http_auth)
r'   r(   r   Elasticsearchr%   r&   r)   r+   r*   r$   )r.   r   s     r5   _get_serverz ElasticsearchBackend._get_server   sr    	==T]]6I**yyk499+&!55++OO;;
 	
r6   c                 \    | j                   | j                         | _         | j                   S ra   )r-   r   )r.   s    r5   rR   zElasticsearchBackend.server   s&    <<++-DL||r6   ra   )__name__
__module____qualname____doc__r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r   rE   r   r1   r_   rb   rZ   r\   r   r   r   r   r   propertyrR   __classcell__)r4   s   @r5   r
   r
      s     EHFDDHHJN'R	
+ 6	
3j

/M
  r6   r
   )r   r   kombu.utils.encodingr   kombu.utils.urlr   r   r   celery.exceptionsr   baser	   r   ImportError__all__r   r
   rh   r6   r5   <module>r      sU    )  - &  2 & $_/ _  Ms   < AA