
    ¼_i                         d dl 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 d dlmZ d dlZ ej                   e      Z ed	d
dd      defd       Z ed	d
dd      dd       Zy)    )shared_task)ExistsOuterRef)transaction)Call)BotType)CatchPhraseFillService)CallCatchPhraseNT      z/apps.calls.tasks.process_catch_phrases_for_call)bindmax_retriesdefault_retry_delaynamecall_idc                    	 t         j                  j                  |t        j                  j
                  d      j                         }|st        j                  d| d       yt        j                  j                  |      j                         rt        j                  d| d       yt        j                         5  t        j                  |      }ddd       t        j                  d| d	 d
       |S # 1 sw Y   'xY w# t        $ r2}t        j!                  d| d|        | j#                  |      d}~ww xY w)z_
    Process catchphrases for a SINGLE call.
    Safe to call multiple times (idempotent).
     )idbot_typetranscript__gtz[CatchPhrase] Call z skipped (not eligible)r   )callz already processedNz processed (phrases created=)z%[CatchPhrase] Failed processing call z: exc)r   objectsfilterr   SERVICE_BOTvaluefirstloggerinfor
   existsr   atomicr	   	fill_call	Exception	exceptionretry)selfr   r   createdr   s        O/var/www/html/dp2/backend_v2.1/server/apps/calls/tasks/process_catch_phrases.pyprocess_catch_phrases_for_callr+      s2   !"LLV ,,22!  
 UW 	 KK-gY6MNO""))t)4;;=KK-gY6HIJ!,66t<G " 	!' +  'y+	

  "!  "3G9BseD	
 jjSj!!	"s=   A#D
 &AD
 .D
 C>%D
 >DD
 
	E-E  E<   z1apps.calls.tasks.backfill_catch_phrases_for_callsc                 J   	 t         j                  j                  t        j                  j
                  d      j                  t        t        j                  j                  t        d                        j                  d      }|r|j                  |      }|j                         }t        j                  d| d       d	}d	}|j                  d
      D ]]  }t        j                         5  t!        j"                  |      }||z  }|dz  }t        j                  d| d| d| d       d d d        _ t        j                  d| d|        ||dS # 1 sw Y   xY w# t$        $ r/}t        j'                  d|        | j)                  |      d }~ww xY w)NF)r   transcript__isnullpk)r   )has_phrases)id__inz#Starting catch phrase backfill for z callsr   d   )
chunk_size   z
Processed /z calls (phrases created: r   z#Backfill complete. Calls processed=z, phrases created=)processed_callsphrases_createdzFailed to enqueue fill: r   )r   r   r   r   r   r   annotater   r
   r   countr    r!   iteratorr   r#   r	   r$   r%   r&   r'   )	r(   call_idsqstotal_calls	processedr)   r   r9   r   s	            r*    backfill_catch_phrases_for_callsr?   =   s   ,"\\  ((..$ ! 
 (''..x~.F  
 &  
 	 (+Bhhj9+fMN	KK3K/D##%.88>5 Q	 1[M :))0	4 &% 0 	(k);G9F	
  )&
 	
 &%(  "3C59:jjSj!!"s0   C3E* 5?E4)E* E'	#E* *	F"3*FF")N)celeryr   django.db.modelsr   r   	django.dbr   apps.calls.modelsr   apps.calls.constantsr    apps.calls.services.catch_phraser	   apps.companies.modelsr
   logging	getLogger__name__r    intr+   r?        r*   <module>rM      s     - ! " ( C 1  
		8	$ 		:	&"# &"&"P 		<	-"-"rL   