
    	]j5                     
   d Z ddlZddlZddlZddlZddlZddlZddlm	Z	 ddl
mZ ddlmZmZmZ d Zej"                  j%                  ddd	g      ej"                  j%                  d
ddg      ej"                  j%                  ddddiigddfdddiigdz  ddfddddigddfddiddgddfdddiigdz  ddfdi igddfddigddfdddigddfi i gddfi gddfi ddfg ddfddigdz  ddfddiddfdddgdz  ddfdddgdz  ddfg      ej"                  j&                  d                             Zej"                  j%                  dddidd d!igigd"gdz  dddfddid d!igd#d$gd"gdddfddidd!igd"gdddfddid%d&gdz  dddfddid%d"gdz  dddfddid'd!igd"gdz  dddfg      ej"                  j&                  d(               Zej"                  j%                  d)ddid!d*dd+d,d-gid.gd%d/gd0gdddfddid1d!igd0gdddfg      ej"                  j&                  d2               Zej"                  j%                  ddd	g      ej"                  j%                  d3d4g      ej"                  j%                  d
dg      ej"                  j%                  dddidd d!igidd d5igigd"gdz  ddd6fddid'd!igd"gdz  dddfg      ej"                  j&                  d7                                    Zej"                  j%                  ddd	g      ej"                  j%                  d3d4g      ej"                  j%                  d
d8d9g      ej"                  j%                  dg d:      ej"                  j&                  d;                                    Zej"                  j%                  ddd	g      ej"                  j%                  d
d<g      ej"                  j%                  dd=d>g      ej"                  j&                  d?                             Zej"                  j%                  d@ddidd d!igigd"gdAz  ddAdBfg      ej"                  j&                  dC               Zej"                  j%                  dddidd d!igigd"gdDz  ddDfg      ej"                  j&                  dE               Zej"                  j%                  dFddigdz  dddGfddigdz  dHdd#fg      ej"                  j&                  dI               Zy)JzThis file and its contents are licensed under the Apache License 2.0. Please see the included NOTICE for copyright information and LICENSE for a copy of the license.
    N)Project)Token)
Annotation
PredictionTaskc           	      J   |dk(  r(| j                  | j                  j                  |d      S |dk(  r2t        d|      D ci c]  }d| dt	        j
                  |       }}n|dk(  r2t        d|      D ci c]  }d| d	t	        j
                  |       }}ny|d
k(  r2t        d|      D ci c]  }d| dt	        j
                  |       }}nB|dk(  r2t        d|      D ci c]  }d| dt	        j
                  |       }}nt        d      d|v rt	        j                         }t        j                  |dt        j                        }|j                         D 	cg c]%  \  }	}|j                  |	|j                               ' c}}	 |j                          |j                  dd       d|i}d|k(  r&|j!                  dt#        j$                  |      i       | j                  | j                  j                  |      S c c}w c c}w c c}w c c}w c c}}	w )N	json_dataapplication/jsondatacontent_type	json_filer   upload_filez.jsoncsv_filez.csvtsv_filez.tsvtxt_filez.txtz"Incorrect task data format to postzipw)modecompressionzupload_file.zipzip_x2zupload_file2.zip)posturls	task_bulkrangeioStringIO	ExceptionBytesIOzipfileZipFileZIP_DEFLATEDitemswritestrreadcloseseekupdatecopydeepcopy)
setupformat_typebodyarchivemultiply_filesifilesfilerefnames
             N/root/env/lib/python3.12/site-packages/label_studio/tests/test_tasks_upload.pypost_data_as_formatr6      s   k!zz%**..THZz[[ k!DI!^D\]q;qc'T)::]]	
	"CHNC[\a;qc&D(99\\	
	"CHNC[\a;qc&D(99\\	
	"CHNC[\a;qc&D(99\\<== zz|ood':N:NO;@;;=IZT4dDIIK	(I				!Q"D) wLL,dmmD.ABC::ejj**E221 ^\\\ 	Js   !H8!H/!H&!H&*Hr/         r,   r   r	   ztasks, status_code, task_countr   dialogsome   
   )another_fieldr9   {   )r   
created_atr=     )Nr@   r   string)r9   second_field)nonerB   c                    |dk(  r|dkD  rt        j                  d       t        | |t        j                  |      d|      }t        d| d|j                         |j                  |k(  sJ d|j                          t        j                  j                  | j                  j                        j                         ||z  k(  sJ y	)
zUpload JSON as file and data with one task to project.
    Decorator pytest.mark.django_db means it will be clean DB setup_project_dialog for this test.
    r	   r7   zSenseless parameter combinationrC   zCreate json  tasks result:z$Upload tasks failed. Response data: projectN)pytestskipr6   jsondumpsprintcontentstatus_coder   r   objectsfilterrG   idcount)setup_project_dialogr,   tasksrN   
task_countr/   rs          r5   test_json_task_uploadrW   1   s    : k!nq&8560+tzz%?PRXZhiA	L^
4aii@==K'X+OPQPVPVx)XX'<<';'C'C'F'FGMMOS]`nSnnnn    z0tasks, status_code, task_count, annotation_countTestresultrQ   123)r   annotationsT)rZ   ground_truthtest)r   metatrashc                 N   d}d}t        | |t        j                  |      d|      }t        d|j                         |j
                  |k(  sJ d       t        j                  j                  | j                  j                        }|j                         ||z  k(  sJ |D ]  }	|	j                  rJ d        t        j                  j                  | j                  j                        }
|
j                         ||z  k(  sJ t        |
      D ]  \  }}|j                  rJ  y	)
+Upload JSON task with annotation to projectr   r7   rC   *Create json tasks with annotations result:&Upload one task with annotation failedrF   Task should be labeledtask__projectN)r6   rJ   rK   rL   rM   rN   r   rO   rP   rG   rQ   rR   
is_labeledr   	enumerater]   )rS   rT   rN   rU   annotation_countr,   r/   rV   tasks_dbtaskr\   r0   
annotations                r5   )test_json_task_annotation_and_meta_uploadrn   W   s    & KN0+tzz%?PRXZhiA	
6		B==K'Q)QQ' ||""+?+G+G+J+J"KH>>zN:::: 98 889 $$++:N:V:V:Y:Y+ZK"2^"CCCC";/ ':&&&&'rX   z0tasks, status_code, task_count, prediction_countanswertextareatextzTest prediction)rQ   	from_nameto_nametypevalue)rZ   model_version)r   predictionsWRONG_FIELDc                 N   t        | dt        j                  |      dd      }|j                  |k(  sJ d       t        j
                  j                  | j                  j                        }|j                         |k(  sJ t        |      D ]  \  }}|j                  dk(  rJ  y)z,Upload JSON task with predictions to projectr   rC   r7   z&Upload one task with prediction failedrF   r^   N)r6   rJ   rK   rN   r   rO   rP   rG   rQ   rR   ri   rv   )rS   rT   rN   rU   prediction_countrV   rw   r0   s           r5   test_json_task_predictionsr{   ~   s    B 	0+tzz%?PRXZ[\A==K'Q)QQ' $$++4H4P4P4S4S+TK"2222#K0 3;((F2223rX   r.   rC   456   c                 F   d|k(  rdnd|z  }t        | |t        j                  |      ||      }	t        d|	j                         |	j
                  |k(  sJ d       t        j                  j                  | j                  j                        }|j                         ||z  k(  sJ |D ]  }
|
j                  rJ d        t        j                  j                  | j                  j                        }|j                         ||z  k(  sJ |D ]  }|j                  rJ  y	)
rb   r      r7   rc   rd   rF   re   rf   N)r6   rJ   rK   rL   rM   rN   r   rO   rP   rG   rQ   rR   rh   r   r]   )rS   r,   rT   rN   rU   rj   r.   r/   
multiplierrV   rl   r\   rm   s                r5   test_archivesr      s   *  7*!^CJ0+tzz%?PRY[ijA	
6		B==K'Q)QQ' LL(<(D(D(G(GHE;;=J3333 98 889 $$++:N:V:V:Y:Y+ZK"2Z"????! '
&&&&'rX   r   r   ))z1dialog,second
dialog 1,second 1
dialog 2,second 2r;   r   )z/dialog,second,class
dialog 1, second 2, class 1r;   r7   )z@here_is_error_in_column_count,second
dialog 1, second 1, class 1r@   r   )zempty_rows
r@   r    r@   r   c                    d|k(  rdnd|z  }|dk(  r|n|j                  dd      }t        | ||||      }t        d| d|j                         |j                  |k(  sJ d	| d
|j
                          t        j                  j                  | j                  j                        j                         ||z  k(  sJ y)'Upload CSV/TSV with one task to projectr   r   r7   r   ,	Create rE   Upload one task  failed. Response data: rF   N)replacer6   rL   rM   rN   r   r   rO   rP   rG   rQ   rR   )	rS   r,   rT   rN   rU   r.   r/   r   rV   s	            r5   test_csv_tsv_task_uploadr      s    $  7*!^CJ J.EEMM#t4LE0+ug~^A	GK=
/;==K'i+;K=H`abagag`h)ii'<<';'C'C'F'FGMMOS]`jSjjjjrX   r   )zmy text 1
my text 2
my text 3r;      r   c                 :   |}t        | ||d|      }t        d| d|j                         |j                  |k(  sJ d| d|j                          t
        j                  j                  | j                  j                        j                         ||z  k(  sJ y)r   rC   r   rE   r   r   rF   N)r6   rL   rM   rN   r   r   rO   rP   rG   rQ   rR   )rS   r,   rT   rN   rU   r/   r   rV   s           r5   test_txt_task_uploadr      s      J0+ufn]A	GK=
/;==K'i+;K=H`abagag`h)ii'<<';'C'C'F'FGMMOS]`jSjjjjrX   z,tasks, status_code, task_count, max_durationi     c                    t        | dt        j                  |      dd      }t        d|j                         |j
                  |k(  sJ d|j                  f       t        j                  j                  | j                  j                        }|j                         |k(  sJ |D ]  }|j                  rJ d        t        j                  |j                        }|d   |k  sJ d	       y
)rb   r	   rC   r7   rc   rd   rF   re   durationz(Max duration of adding tasks is exceededN)r6   rJ   rK   rL   rM   rN   r   rO   rP   rG   rQ   rR   rh   loads)rS   rT   rN   rU   max_durationrV   rl   rZ   s           r5   test_upload_durationr      s     	0+tzz%?PRXZ[\A	
6		B==K'^*RTUT]T])^^' LL(<(D(D(G(GHE;;=J&&& 98 889 ZZ		"F*,X.XX,rX   d   c                 &   t        j                  d      5 }d}|j                  |t        j                  |      ddi       |j                  |j                  j                  d|z   d	      }|j                  |k(  sJ d
t        |j                        z          t        j                  j                  |j                  j                        }|j!                         |k(  sJ |D ]  }|j"                  rJ d        	 ddd       y# 1 sw Y   yxY w)zUpload tasks from URLT)	real_httpzhttp://localhost:8111/test.jsonzContent-Length100)rq   headerszurl=z!application/x-www-form-urlencodedr   zUpload URL failed: rF   z7Task should be labeled since annotation is ground_truthN)requests_mockMockergetrJ   rK   r   r   r   rN   strrM   r   rO   rP   rG   rQ   rR   rh   )	mockerrS   rT   rN   rU   murlrV   rl   s	            r5   test_url_uploadr     s    
			- ^/	c

5)4De3LM %% %%//fslQt & 
 }}+S-BS^-SS+ ##,@,H,H,K,K#L{{}
*** 	^D??]$]]?	^^ ^ ^s   CD5DDz)tasks, status_code, task_count, bad_tokenFi  c                    | }t         j                  j                  |j                        }dt	        |      z   }d}|j
                  }|j                  j                  |d<   |j                  |j                  j                  ||      }	t        d|	j                  |	j                         |	j                  dk(  sJ dt	        |	j                        z          t        j                  j                  |j
                  d	   
      j!                         }
|j                  j#                  |
j                         |j                  |j                  j$                  t'        j(                  |      d|r|n|      }	|	j                  |k(  sJ dt	        |	j                        z          t*        j                  j                  |
j,                        }|j/                         |k(  sJ y)zUpload with Django Token)userzToken zToken brokenorganization_pk)r   HTTP_AUTHORIZATIONz Project create with status code:r;   z;Create project result should be redirect to the next page: title)r   r
   )r   r   r   zCreate json tasks result: rF   N)r   rO   r   r   r   project_configorgpkr   r   project_createrL   rN   rM   r   rP   firstset_projectr   rJ   rK   r   rQ   rR   )setup_project_for_tokenrT   rN   rU   	bad_tokenr+   tokenbroken_tokenr   rV   rG   s              r5   test_upload_with_tokenr   (  s    $EMM5::.Es5z!E!LD#iillD	

5::,,4E
RA	
,ammQYYG==Co!^adefenenao!oooo$$5+?+?+H$IOOQG	JJ7::&



ZZ'+4<%	 	 	A ==K'V)EAII)VV' LL

3E;;=J&&&rX   )__doc__r)   r   r    rH   r   ujsonrJ   projects.modelsr   rest_framework.authtoken.modelsr   tasks.modelsr   r   r   r6   markparametrize	django_dbrW   rn   r{   r   r   r   r   r   r    rX   r5   <module>r      s$    	     # 1 5 53D )Aq62k(BC$Hf%
&	'a0Hf%
&	'"	,c26Vv>
?	@#qIc?#
6	7a@OV,
-	.	3S!<2,a 4.	3"8
	sA&
b3
sA	S!	S!V
		"C,
F	S!$S
1	2R	7bA3
/	02	5sA>#, 
o - D 32
o 6f%D%=/7R6S
T	UXZ	Z\_acegh(tUm_fj:k9lmn		
 f%%7H6I
J	KSRSUVWf%v
6	7"	<c1aHf%f
=	>	CS!QOf%7G6H
I	JR	OQTVWYZ[  ' !"', 6
 &v.
 +019/7,6.47H6I-J!"' .4$& -	
0 f%u7M6N
O	PRUWXZ[\3< 	3 =>	3 )Aq62VH-66  (8tUm_:UX`dhjocpbqWr9stu	
 f%7G6H
I	JR	OQTVWYZ[	 '  7 . 3"'. )Aq62VH-Z(@A$	 k 	 B . 3k )Aq6259<giu;vwk  x 6 3k 26"Xu4O3PQRUYY[^`dfhij Y 	
Y" $6"Xu4O3PQRUXXZ]_bcd ^ 	
^" /&QQ.8V2D1E1I3PQSW0XY ' 	
'rX   