
    	]j1                        U d 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
 ddlmZ ddlmZ ddlmZ dd	lmZmZ dd
lmZ  ej,                  e      Z e       Zd Zd Zd Zd Zd Zd ZdZ d Z!d Z"eejF                  dddde z   de"ddeejH                  dddddeddeejH                  dddddeddgZ%e&e
   e'd<   y) zThis 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)AllPermissions)
fast_first)DataManagerAction)DataManagerException)settings)ValidationError)
AnnotationTask)TaskSerializerBulkc                 f   |d   }|j                   }|j                  j                  d      }t        j                  j                  | |      }|st        d| d      |j                         }t        |j                  dd            }	 |j                  |j                  j                         g }	|D ]d  }
|
|j                  |j                  |j                  |j                  | d	}t!        j"                  ||d
      }|	j%                  t        di |       f t        j                  j'                  |	t(        j*                        }	t!        j,                  ||	d
       | j/                  t0        j                  j                  |             ddt3        |	       ddS # t        $ r Y w xY w)Nrequestsource_annotation_id)projectidzSource annotation z! not found in the current projectr   Tflat)task_idcompleted_by_idresultresult_countparent_annotation_idr   propagated_annotation)
batch_size)id__in)tasks_queryset   zCreated z annotationsresponse_codedetail )userdatagetr	   objectsfilterr   firstsetvalues_listremovetaskr   KeyErrorr   r   r   add_annotation_fieldsappendbulk_creater   
BATCH_SIZEpost_process_annotations$update_tasks_counters_and_is_labeledr
   len)r   querysetkwargsr   r!   r   annotationssource_annotationtasksdb_annotationsibodys               X/root/env/lib/python3.12/site-packages/label_studio/data_manager/actions/experimental.pypropagate_annotationsr<      s   YG<<D"<<++,BC$$++G@T+UK"%78L7MMn#opp#))+$$T$56E&++../
 N 
2#ww'..-::$5$8$8
 "77dD[\j0401
2  ''33NxObOb3cN//nF]^00@S@S[`@S@a0bS01> +  s   %F$ $	F0/F0c                     t        t        j                  j                  |            }ddd|rdt	        |j
                         dndz   d}d	|gd
gS )Nr   numberr   zEnter source annotation IDz [first ID: ] typenamelabel   columnCountfields)r   r	   r$   r%   strr   )r!   r   first_annotationfields       r;   propagate_annotations_formrM   <   sf    !*"4"4";";G";"LM&-9I\#.112315rSE %122    c                    |d   }|j                   j                  d      }|j                   j                  d      }|j                   j                  d      }| j                         }||vrt        d|z         ||   d   j	                         }t
        j                  j                  |       }	t        j                  t        j                  k(  r#|	j                  |      j                  |      }	n+|	j                  d	|ig
      j                  d||giig
      }	d}
d}|	D ]  }d}|j                  D ]  }|j                  d	d       |k(  s||j                  di       j                  |g       v s>g }|d   |   D ]1  }||k(  r|j                  |       |
dz  }
d}!|j                  |       3 ||d   |<    |s|j                  dg       |dz  } t        j                  d| j                    d       | j"                  j%                          | j"                  j'                  | j(                  j+                                t
        j                  j                  |       }	| j"                  j-                  |	       dd|
 d| dS )Nr   old_label_namenew_label_namecontrol_tagz6Wrong old label name, it is not from labeling config: rC   r>   )result__icontains	from_name)result__containsvaluer   FrF   Tr   )update_fieldszcalling reset project_id=z rename_labels()r   Updated z labels in r   )r"   r#   get_parsed_configr   lowerr	   r$   r%   r   	DJANGO_DBDJANGO_DB_SQLITEr   r-   saveloggerinfor   summaryresetupdate_data_columnsr7   all%update_created_annotations_and_labels)r   r3   r4   r   rP   rQ   rR   labels
label_typer5   label_countannotation_count
annotationchangedsub
new_labelsrE   s                    r;   rename_labelsrm   G   s   YG\\%%&67N\\%%&67N,,""=1K&&(F& VYgghh$V,224J$$++G+<KX666!((;(GNNaoNp!((K;U:V(W^^&n5E(FGH _ 
 K! "
$$ 	6Cww{D)[8^swwW^`bOcOgOgBP >  
 \*5 1E.")).9#q("&"))%01 ,6GZ(	6  OO8*O5!)". KK+GJJ<7GHIOOOO''(9(9(;<$$++G+<KOO99+F [M5E4FG rN   c           
          |j                         }g }g }|j                         D ]+  \  }}||j                  dg       z  }|j                  |       - dddd|ddddt	        t        |            dd	d
ddgdgS )Nre   rF   selectrR   zChoose a label control tagrC   rD   rE   optionsrP   zOld label nameinputrQ   zNew label namerB   rG   )rY   itemsr#   r-   listr'   )r!   r   re   	old_namescontrol_tagskeyrE   s          r;   rename_labels_formrx      s    &&(FILlln !
UUYYx,,	C !  %)9+	 %,-#C	N3	 !*:EUV	
 rN   c                    ddl m}m}m}m} |d   }|j
                  j                  d      }|j
                  j                  d      }	|j
                  j                  d      }
|j                         }|j                  dd	      j                         }t        t        t        d
}|	|j                         v sJ  ||	   |
      }
|	dk(  rt        |||
|       nt        j                  t        j                   k(  rTt#        |j%                  d            }|D ]  }|
|j
                  |<    t&        j(                  j+                  |dgd       n5|j-                   | |d       ||g       ||
 |             d             |Lt&        j(                  j/                  |      j                         }|| j0                  j3                  |g       dd| ddS )Nr   )FFunc	JSONFieldValuer   
value_name
value_typerV   r   Tr   StringNumber
Expressionr   r"     rI   r   	jsonb_set)function)r"   )r   r   rX   z tasksr   )django.db.modelsrz   r{   r|   r}   r"   r#   countr(   r&   rJ   floatkeysadd_expressionr   r[   r\   rt   onlyr
   r$   bulk_updateupdater%   r`   rb   )r   r3   r4   rz   r{   r|   r}   r   r~   r   rV   sizefirst_task_idcastr7   r*   
first_tasks                    r;   add_data_fieldr      s   ::YG!!,/J!!,/JLLW%E>>D ((D(9??AMU#>D$$$DU#E\!xuj9
 !:!::v./E .(-		*%.LL$$UF8$M OOfI:,'%-(	    \\((M(:@@B
!OO//= htfF,CDDrN   c                     | j                  d      d}}||k7  r[|| |d  j                  d      z   dz   }| d| | || j                  dd      z   | |d  z   } || |d  j                  d      z   dz   }||k7  r[| S )N[r@   rF   r   ,;)findreplace)paramsstartends      r;   process_arraysr      s    S!23E
3,fUVn))#..2%6%#4#<#<S##FFPSPTUfSTl'',,q0 3, MrN   zrange(2) or sample() or random(<min_int>, <max_int>) or choices(["<value1>", "<value2>", ...], [<weight1>, <weight2>, ...]) or replace("old-string", "new-string")c                    |j                  d      \  }}t        |      }|j                  dd      j                  d      }t        |      dk(  r
|d   dk(  rg n|}t	        |      D ]*  \  }}|j                  dd      j                  dd	      ||<   , t        | j                  d
            }|dk(  rYt        |      dk(  sJ d       t        |d         }	t        |	|	|z         }
t	        |
      D ]  \  }}|||   j                  |<    n|dk(  r\t        |      dk(  sJ d       t        j                  t        d|      |      }
t	        |
      D ]  \  }}|||   j                  |<    n|dk(  rit        |      dk(  sJ d       t        |d         t        |d         }}t        |      D ](  }t        j                  ||      ||   j                  |<   * nC|dk(  rdt        |      cxk  rdk  sJ d        J d       t        |      dk(  rt        j                  |d         nd }t        j                  t        j                  |d         ||      }
t	        |
      D ]  \  }}|||   j                  |<    n|dk(  rt        |      dk(  sJ d       t        j                  |d         t        j                  |d         }}|D ]=  }||j                  v s|j                  |   j                  ||      |j                  |<   ? nt!        dt"        z         t$        j&                  j)                  |d
gd       y )N()rA   r   rF   r   r   '"r"   rangez,range(start:int) should have start argument samplezsample() doesn't have argumentsrandom   z.random(min, max) should have 2 args: min & maxchoices   z[choices(values:list, weights:list) should have 1 or 2 args: values & weights (default=None))
populationweightskr   zOreplace(old_value:str, new_value:str) should have 2 args: old value & new valuez#Undefined expression, you can use: r   r   )splitr   r   r2   	enumeratert   r   intr   r"   r   r   randintjsonloadsr   r   add_data_field_examplesr
   r$   r   )r3   r   rV   r~   commandargsr9   argr7   r   valuesvminimummaximumr   	old_value	new_valuer*   s                     r;   r   r      s,   KK$MGT$D<<R &&s+DTaDGrM2tDD/ :3++c3'//S9Q: v&'E '4yA~MMM~DGuedl+f% 	*DAq()E!HMM*%	* 
H	4yA~@@@~uQ~t4f% 	*DAq()E!HMM*%	* 
H	4yA~OOO~tAw<T!Wt 	IA(.w(HE!HMM*%	I 
I	3t9 q  	
l	
  	
l	
  *-Ta$**T!W%T4::d1g+>SWXf% 	*DAq()E!HMM*%	* 
I	4yA~ppp~#zz$q'2DJJtAw4G9	 	\DTYY&(,		*(=(E(EiQZ([		*%	\
 CF]]^^LLUF8ErN   c                 2    ddddddddg d	d
ddddgdgS )NrF   rr   r~   NamerB   ro   r   Typer   rp   rV   r}   rG   r    )r!   r   s     r;   add_data_field_formr     sB      ,H$(#A	 !'GD		
 rN   zAdd Or Modify Data FieldrF   TzConfirm that you want to add a new field in tasks. After this operation you must refresh the Data Manager page fully to see the new column! You can use the following expressions: confirm)textrC   form)entry_point
permissiontitleorderexperimentaldialogzPropagate AnnotationszConfirm that you want to copy the source annotation to all selected tasks. Note: this action can be applied only for similar source objects: images with the same width and height, texts with the same length, audios with the same durations.zRename LabelszConfirm that you want to rename a label in all annotations. Also you have to change label names in the labeling config manually.actions)(__doc__loggingr   ujsonr   core.permissionsr   core.utils.dbr   data_manager.actionsr   data_manager.functionsr   django.confr   rest_framework.exceptionsr   tasks.modelsr	   r
   tasks.serializersr   	getLogger__name__r^   all_permissionsr<   rM   rm   rx   r   r   r   r   r   projects_changetasks_changer   rt   __annotations__r    rN   r;   <module>r      s%      + $ 2 7   5 ) 0			8	$ "$N36r>/Ed* 7Ft( &%55+68OP '
 -%22(.
 .
" %%22 S&	
?,$	  ,rN   