
    	]j;                         d dl mZ d dlZd dlmZ d dlmZ d dlmZ d dl	m
Z
 ej                  j                   G d d             Zy)	    )patchN)OperationalError)ProjectFactory)Task)TaskFactoryc                   $    e Zd Zd Zd Zd Zd Zy)TestBatchUpdateWithRetryc                 \   t        dd      }t        j                  d|      }|D cg c]  }|j                   }}t        j
                  j                  |      }|j                  |dd       t        j
                  j                  |d	      }|j                         dk(  sJ y c c}w )
N2      overlap_cohort_percentagemaximum_annotations
   projectid__in   
batch_sizeoverlapr   r   	r   r   create_batchidr   objectsfilter_batch_update_with_retrycountselfr   taskstasktask_idstasks_qsupdated_taskss          W/root/env/lib/python3.12/site-packages/label_studio/tests/test_batch_update_deadlock.py*test_batch_update_success_without_deadlockzCTestBatchUpdateWithRetry.test_batch_update_success_without_deadlock   s     2STU((W=(-.DGG..<<&&h&7((a(K++8Q+G""$*** /s   B)c                   	 t        dd      }t        j                  d|      }|D cg c]  }|j                   }}t        j
                  j                  |      }d|j                  		fd}t        j                  |d	|
      5  |j                  |dd       d d d        dk\  sJ t        j
                  j                  |d      }|j                         dk(  sJ y c c}w # 1 sw Y   LxY w)Nr   r   r      r   r   r   c                     dz  dk(  r1t        d      5 }t        d      |_        	  | g|i | d d d         | g|i |S # t        $ r Y w xY w# 1 sw Y   $xY w)N   django.db.transaction.atomicdeadlock detected)r   r   side_effect)querysetargskwargsmock_atomic
call_countoriginal_batch_updates       r(   mock_batch_updatezYTestBatchUpdateWithRetry.test_batch_update_with_deadlock_retry.<locals>.mock_batch_update$   s    !OJQ9: k.>?R.SK+-hHHH )CDCFCC , 	 s(   AA			AAAAA!r   r0   r   r   r-   r   )r   r   r   r   r   r   r   r   r   objectr    )
r"   r   r#   r$   r%   r&   r7   r'   r5   r6   s
           @@r(   %test_batch_update_with_deadlock_retryz>TestBatchUpdateWithRetry.test_batch_update_with_deadlock_retry   s     2STU((G<(-.DGG..<<&&h&7
 ' @ @	D \\'#=K\] 	P,,X!Q,O	P Q++8Q+G""$)))7 /*	P 	Ps   C'C,,C5c                 `   t        dd      }t        j                  d|      }|D cg c]  }|j                   }}t        j
                  j                  |      }|j                  |ddd	       t        j
                  j                  |dd
      }|j                         dk(  sJ y c c}w )Nr   r   r      r   r   r+   T)r   r   
is_labeled)r   r   r=   r   r!   s          r(   'test_batch_update_with_multiple_batchesz@TestBatchUpdateWithRetry.test_batch_update_with_multiple_batches9   s     2STU((W=(-.DGG..<<&&h&7((aW[(\++8QSW+X""$*** /s   B+c                    t        dd      }t        j                  d|      }|D cg c]  }|j                   }}t        j
                  j                  |      }d }t        j                  |d|	      5  t        j                  t        d
      5  |j                  |dd       d d d        d d d        y c c}w # 1 sw Y   xY w# 1 sw Y   y xY w)Nr   r   r   r+   r   r   c                     t        d      5 }t        d      |_        ddlm}  || fddi| d d d        y # 1 sw Y   y xY w)Nr.   r/   r   )batch_update_with_retrymax_retriesr   )r   r   r0   core.utils.dbrA   )r1   r2   r3   r4   rA   s        r(   !mock_batch_update_always_deadlockziTestBatchUpdateWithRetry.test_batch_update_exceeds_max_retries.<locals>.mock_batch_update_always_deadlockM   sI    56 K+*:;N*O'A'JaJ6J	K K Ks	   "7A r   r8   r/   )matchr   r   )r   r   r   r   r   r   r   r   r9   pytestraisesr   r   )r"   r   r#   r$   r%   r&   rD   s          r(   %test_batch_update_exceeds_max_retriesz>TestBatchUpdateWithRetry.test_batch_update_exceeds_max_retriesE   s     2STU((G<(-.DGG..<<&&h&7	K \\'#=Klm 	T/7JK T00aQR0ST	T 	T /T T	T 	Ts)   B;9CC *C C		CCN)__name__
__module____qualname__r)   r:   r>   rH        r(   r	   r	   
   s    
+*B
+TrM   r	   )unittest.mockr   rF   	django.dbr   projects.tests.factoriesr   tasks.modelsr   tasks.tests.factoriesr   mark	django_dbr	   rL   rM   r(   <module>rU      s@      & 3  - LT LT LTrM   