
    	]jw              !          d Z ddlZddlmZmZ ddlmZ ddlmZm	Z	 ddl
mZmZ ddlmZ ddlmZmZmZ dd	lmZmZ dd
lmZ ddlmZ ddlmZmZmZ ddlmZm Z 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-m.Z. ddl/m0Z0m1Z1m2Z2m3Z3 ddl4m5Z5 ddl6m7Z7 ddl8m9Z9m:Z: ddl;m<Z< ddl=m>Z> ddl?m@Z@ ddlAmBZB ddlCmDZDmEZEmFZF  ej                  eH      ZIddddeed d!d"d#d$d%d&iZJ e*d' e3d(gd)d* e1d+e.j                  d,d#-      gd.d'd/gd01      2       e*d3 e3d(gd4d5eJd6e"id.d3d/gd07      2       e*d8 e3d(gd9d: e1d;e.j                  d<d=-      gd.d>d/gd01      2       e*d? e3d(gd@dAeJ e1d;e.j                  d<d=-      gdBdCgiD      2       e*dE e3d(gdFdG e1d;e.j                  d<d=-      geJdHe"id.d?d/gd0I      2       e*dJ e3d(gdKdL e1d;e.j                  d<d=-      gd.dMd/gd01      2       G dN dOe:j                                                                  ZN G dP dQe>      ZO G dR dSe9j                        ZQ e*d> e3d(gdTdU e1d+e.j                  d,d#dVW      g e2dX e0dYdZd;d[d\d]d^dVd_d`d_dadbdcddd^dedVd_d`d_dfgidg      gh       e2dij       e2dkj      dldBdCgim      2       G dn doeB             ZR e*d> e3d(gdpdqdBdCgir      2       G ds dteB             ZS e*d> e3d(gdudv e1d+e.j                  d,d#dVW      gdH e2dwdxdydzdd{d|d}d~d|dd~d"dd~ddd|idxdd|iddgiddd~ddd|ddVdd|ddVdd|ddVddxdddidVdddddd e0dYddddd_ddddddgdg      g      idd'd/gd0m      2       e*d e3d(gdddei e1d;e.j                  d,dg ddV       e1d+e.j                  d,d#dVW       e1de.j                  d,d-      gdH e2dj      idd3d/gd0      2       G d deB                    ZT e*d> e3d(gdd e1d+e.j                  d,d#dVW      gdH e2dddd$      idBdCgim      2       G d deB             ZUy)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)async_to_syncsync_to_async)flag_set)ViewClassPermissionall_permissions)int_from_request	load_func)bool_from_request)get_action_formget_all_actionsperform_action)evaluate_predictionsget_prepare_params)get_fields_for_evaluation)View)filters_schemaordering_schemaprepare_params_schema)DataManagerTaskSerializerViewOrderSerializerViewResetSerializerViewSerializer)settings)Sum)Coalesce)method_decorator)DjangoFilterBackend)OpenApiTypes)OpenApiExampleOpenApiParameterOpenApiResponseextend_schema)Project)ProjectSerializer)genericsviewsets)action)PageNumberPagination)Response)APIView)
Annotation
PredictionTaskzapplication/jsonobjectzCustom view data)filtersordering)typedescription
propertiesinteger
Project ID)r1   r2   )dataproject)r1   r3   listData Managerz
List viewsz&List all views for a specific project.r7   query)namer1   locationr2   viewspubliczx-fern-sdk-group-namezx-fern-sdk-method-namex-fern-audiencestagssummaryr2   
parameters
extensions)r;   	decoratorcreatezCreate viewz%Create a view for a specific project.   rB   rC   r2   request	responsesrE   retrievezGet view detailsz9Get the details about a specific view in the data manageridpathzView IDgetupdatezPut viewzVOverwrite view data with updated filters and other information for a specific project.r@   internal)rB   rC   r2   rJ   rD   rE   partial_updatezUpdate viewzVUpdate view data with additional filters and other information for a specific project.   )rB   rC   r2   rD   rJ   rK   rE   destroyzDelete viewzDelete a specific view by ID.deletec                      e Zd ZeZegZdgZ ee	j                  e	j                  e	j                  e	j                  e	j                        Zd Z edgdd edej&                  ddd	
      gdddgd       eddge	j*                        d               Z edgdded ed      idddgd       eddgd      d               Zd Zy )!ViewAPIr7   GETPOSTPATCHPUTDELETEc                 P    |j                  | j                  j                         y )N)user)saverJ   r_   )self
serializers     G/root/env/lib/python3.12/site-packages/label_studio/data_manager/api.pyperform_createzViewAPI.perform_create   s    T\\../    r9   zDelete all project viewsz(Delete all views for a specific project.r:   r5   Tr;   r1   r<   r2   requiredr=   
delete_allr>   r?   rA   FrU   )detailmethodspermission_requiredc                    t        d|j                  v r|j                  nd|j                  j                  d      i      }|j	                  d       t        j                  t        j                  j                  |j                        |j                  d   j                        }| j                  | j                               j                  |      }|j!                         j#                          t%        d      S )	Nr7   r6   Traise_exceptionpkr7      status)r   r6   query_paramsrO   is_validr%   get_object_or_404r#   objectsfor_userr_   validated_datarM   filter_querysetget_querysetfilterallrU   r)   )ra   rJ   rb   r7   querysets        rc   resetzViewAPI.reset   s    0 )!*gll!:GL`L`LdLdenLo@p

 	D1,,OO$$W\\2z7P7PQZ7[7^7^
 ''(9(9(;<CCGCTs##re   zUpdate order of viewszFUpdate the order field of views based on the provided list of view IDsrS   zView order updated successfullyr2   update_orderrI   postorder)ri   rj   url_pathc                 z   t        |j                        }|j                  d       |j                  d   }|j                  d   }t	        j
                  t        j                  j                  |j                        |      }| j                  | j                               j                  |      }t        |j                  |            }|D ci c]  }|j                  | }	}t        |      D ]  \  }
}||	v s|
|	|   _         t"        j                  j%                  |d	g       t'        d
      S c c}w )Nrm   Trn   r7   idsrp   rr   id__inr   rS   rt   )r   r6   rw   r{   r%   rx   r#   ry   rz   r_   r|   r}   r~   r8   rM   	enumerater   r   bulk_updater)   )ra   rJ   rb   
project_idview_idsr7   r   r=   view	view_dictr   view_ids               rc   r   zViewAPI.update_order   s    )gll;
D1..y9
,,U3,,W__-E-Egll-SXbc''(9(9(;<CCGCTX__H_56 055tTWWd]5	5'1 	1NE7)#+0	'"(	1
 	  	2s## 6s   D8c                     t         j                  j                  | j                  j                  j
                        j                  dd      S )N)project__organizationr   rM   )r   ry   r~   rJ   r_   active_organizationorder_by)ra   s    rc   r}   zViewAPI.get_queryset   s9    ||""9J9J9^9^"_hhiprvwwre   N)__name__
__module____qualname__r   serializer_classr   filter_backendsfilterset_fieldsr   r   
views_viewviews_createviews_changeviews_deleterk   rd   r"   r    r   INTr'   views_resetr   r   r!   r   r}    re   rc   rW   rW   6   s.   B &*+O!{-&&))**((++0 *>!%% (
 &-&2!)

& 58*/B]B]^$ _'($ '\#4UVW%,&4!)

 56(W=$ >$.xre   rW   c                   ~     e Zd ZdZdZdZdZej                  Z	e
d
 fd	       Zd
 fd	Zd
 fd	Zd
dZd Zd	 Z xZS )TaskPaginationd   	page_sizer   c                   K   t         j                  j                  |      } t        |j                  d              d {   | _        t        j                  j                  |d      } t        |j                  d              d {   | _        |j                  d      } t        t        | (  d      |||       d {   S 7 7 A7 w)Ntask_id__inT)thread_sensitiveFr   was_cancelledrM   )r,   ry   r~   r   counttotal_predictionsr+   total_annotationsonlysuperpaginate_queryset)ra   r   rJ   r   predictions_count_qsannotations_count_qsid_only_queryset	__class__s          rc   async_paginate_querysetz&TaskPagination.async_paginate_queryset   s     )1188X8N'g}5I5O5Obf'g'i!i)1188X]b8c'g}5I5O5Obf'g'i!i $==.T]57#<tTUegnptuuu "j "j vs7   A CCA	CC:CC	CCCc                    t         j                  j                  |      j                         | _        t
        j                  j                  |d      j                         | _        |j                  d      }t        | %  |||      S )Nr   Fr   rM   )
r,   ry   r~   r   r   r+   r   r   r   r   )ra   r   rJ   r   r   r   s        rc   sync_paginate_querysetz%TaskPagination.sync_paginate_queryset  sv    !+!3!3!:!:x!:!P!V!V!X!+!3!3!:!:x_d!:!e!k!k!m $==.w()97DIIre   c                     |j                  d      j                  t        t        d      d      t        t        d      d            }|d   | _        |d   | _        |j                  d      }t        | !  |||      S )NrM   r   r   r   )r   r   )	values	aggregater   r   r   r   r   r   r   )ra   r   rJ   r   totalsr   r   s         rc   paginate_totals_querysetz'TaskPagination.paginate_totals_queryset  s    &00&s+>'?C&s+>'?C 1 
 "((;!<!'(;!< $==.w()97DIIre   c                 d    t        d      r| j                  |||      S | j                  |||      S )N>fflag_fix_back_optic_1407_optimize_tasks_api_pagination_counts)r   r   r   )ra   r   rJ   r   s       rc   r   z TaskPagination.paginate_queryset  s5    TU007DII**8WdCCre   c                 4    d|ddddddddddd	dd
g d
dS )Nr.   r4   zTotal number of tasks{   )r1   r2   examplezTotal number of annotationsi  zTotal number of predictionsN   )taskstotalr   r   )r1   r3   rg   r   )ra   schemas     rc   get_paginated_response_schemaz,TaskPagination.get_paginated_response_schema  sK    %#:" &#@"& &#@!&$ U)
 	
re   c                     t        | j                  | j                  | j                  j                  j
                  |d      S )N)r   r   r   r   )r)   r   r   page	paginatorr   )ra   r6   s     rc   get_paginated_responsez%TaskPagination.get_paginated_response4  s<    %)%;%;%)%;%;,,22	
 	
re   )N)r   r   r   r   page_size_query_paramr   r   r   TASK_API_PAGE_SIZE_MAXmax_page_sizer   r   r   r   r   r   r   __classcell__)r   s   @rc   r   r      sU    I'33M	v 	vJ
JD

0
re   r   c                       e Zd ZeZ eej                  ej                  ej                  ej                  ej                        Z
eZd Zd Zed        Zd Zy)TaskListAPIrX   c                 |    |j                   j                  dd       dk(  }t        |j                   dd      |||||dS )Nfieldsr   resolve_uriT)r   rJ   r7   draftspredictionsannotations)rY   rO   r
   )ra   rJ   r7   r   
all_fieldss        rc   get_task_serializer_contextz'TaskListAPI.get_task_serializer_contextJ  sF    [[__Xt4=
 -W[[-N %%
 	
re   c                 B    t         j                  j                  |      S )Nprepare_params)r-   preparedonly_filtered)ra   rJ   r   s      rc   get_task_querysetzTaskListAPI.get_task_querysetV  s    }}**.*IIre   c                 6    | j                  ddddddddd	d

      S )Nr   r   annotations__completed_byr7   &io_storages_azureblobimportstoragelink io_storages_gcsimportstoragelink'io_storages_localfilesimportstoragelink"io_storages_redisimportstoragelinkio_storages_s3importstoragelinkfile_upload)prefetch_related)r   s    rc   prefetchzTaskListAPI.prefetchY  s3    (('4.50-
 	
re   c                    t        |j                  dd      xs t        |j                  dd      }t        |j                  dd      xs t        |j                  dd      }|r.t        j                  t
        |      }| j                  ||       nK|r:t        j                  t        |      }|j                  }| j                  ||       nt        ddid      S t        ||      }| j                  ||      }| j                  |      }|j                  j                  d	d       d
k(  rd
nd }	t        ||j                        }
t!        | j"                  j                  dd      }|rddg}
d }	|<|D cg c]  }|j$                   }}| j'                  t(        j*                  j-                  t(        j.                  j1                  |      |
|	|            }|D ci c]  }|j$                  | }}|D cg c]  }||   	 }}|sY|j2                  rMt(        j.                  j1                  |d      }t5        |       |D cg c]  }||   j7                          c} | j9                  | j"                  ||      }| j;                  |d|      }| j=                  |j                        S |j2                  rt5        |j1                  d             t(        j*                  j-                  ||
|	|      }| j9                  | j"                  ||      }| j;                  |d|      }t        |j                        S c c}w c c}w c c}w c c}w )Nr   r   r7   rp   ri   z%Neither project nor view id specified  rt   r   r   reviewF
annotatorsreviewedr   )fields_for_evaluationr   rJ   T)r   predictions__isnull)manycontext)r   )r   rY   r6   r%   rx   r#   check_object_permissionsr   r7   r)   r   r   r   rO   r   r_   r
   rJ   rM   r   r-   r   annotate_querysetry   r~   "evaluate_predictions_automaticallyr   refresh_from_dbr   task_serializer_classr   )ra   rJ   view_pk
project_pkr7   r   r   r   r   r   r   r   taskr   r   tasks_by_ids_idtasks_for_predictionsr   rb   s                       rc   rO   zTaskListAPI.geth  s   "7;;:g>Nw||]cef>g%gkk9a@pDTU\UaUaclnoDp
00ZHG))'7;--dw?DllG))'7;X'NOX[\\+GW=))'>B %%h/ &kkooh=FUD
 9.',, W"4<<#3#3XuE%1:$>!J'+,t477,C,MM//LL''s'3*?)#	 0 E 7<<dDGGTM<L<145#L%5D5 gHH
 )-(;(;3\`(;(a%$%:;@CDc"224D66t||WeTG33DtW3UJ..z??55 T!JK==22,Ajbi 3 
 224<<(S//tW/U

((G - =5 Es   4L<M7MMN)r   r   r   r   r   r   r   
tasks_viewtasks_changetasks_deleterk   r   pagination_classr   r   staticmethodr   rO   r   re   rc   r   r   ?  sm    5-&&))**((++ &

J 
 
@)re   r   zGet data manager columnszRetrieve the data manager columns available for the tasks in a specific project. For more details, see [GET api/actions](#/Data%20Manager/get_api_actions).Trf   zColumns retrieved successfullyresponsecolumnsIDNumberzTask IDr   F)explorelabeling)rM   titler1   helptargetvisibility_defaultsproject_definedcompleted_at	CompletedDatetimezLast annotation date)rM   r
  r1   r  r  r  r  )r;   value
media_type)r2   exampleszInvalid project ID suppliedr   zProject not found)rS   i  r   )rB   rC   r2   rD   rK   rE   c                   *    e Zd Zej                  Zd Zy)ProjectColumnsAPIc                     t        |j                  dd      }t        j                  t        |      }| j                  ||       t        t        j                        } |||j                        }t        |      S )Nr7      rp   )r   rY   r%   rx   r#   r   r	   r   DATA_MANAGER_GET_ALL_COLUMNSr_   r)   )ra   rJ   rq   r7   GET_ALL_COLUMNSr6   s         rc   rO   zProjectColumnsAPI.get  s`    gkk9a8,,W<%%gw7#H$I$IJw5~re   Nr   r   r   r   projects_viewrk   rO   r   re   rc   r  r    s    x *77re   r  zGet project statez0Retrieve the project state for the data manager.)rB   rC   r2   rE   c                   *    e Zd Zej                  Zd Zy)ProjectStateAPIc                    t        |j                  dd      }t        j                  t        |      }| j                  ||       t        |      j                  }|j                  ddddd|j                  j                         t        j                  j                  |      j                         t        |j                               dkD  d       t!        |      S )	Nr7   r  rp   TFrr   r   )can_delete_taskscan_manage_annotationscan_manage_taskssource_syncingtarget_syncing
task_countannotation_countconfig_has_control_tags)r   rY   r%   rx   r#   r   r$   r6   rP   r   r   r+   ry   r~   lenget_parsed_configr)   )ra   rJ   rq   r7   r6   s        rc   rO   zProjectStateAPI.get   s    gkk9a8,,W<%%gw7 )..$(*.$("'"'%mm113$.$6$6$=$=g$=$N$T$T$V+.w/H/H/J+Ka+O		
 ~re   Nr  r   re   rc   r  r    s     *77re   r  zGet actionszPRetrieve all the registered actions with descriptions that data manager can use.zActions retrieved successfullyarrayzAction listzList of available actionsActionstringz	Action ID)r1   r
  TitleOrderoneOfr1   z0List of permissions (user needs any all of them))r1   itemsr2   booleanExperimentalDialog)r1   r
  nullableTextTypeForm)r1   r
  r0  r4  )r
  textr1   form)r1   r
  r3   )rM   r
  r   
permissionexperimentaldialog)r1   r
  r2   r0  predictions_to_annotationsz#Create Annotations From Predictions[   ztasks.changezCreate annotations from predictions using selected predictions set for each selected task. Your account will be assigned as an owner to those annotations.confirm)r2   r  r  actionsr   zPost actionszPerform a Data Manager action with the selected tasks and filters. Note: More complex actions require additional parameters in the request body. Call `GET api/actions?project=<id>` to explore them. <br>Example: `GET api/actions?id=delete_tasks&project=1`zMAction name ID, see the full list of actions in the `GET api/actions` request)
retrieve_tasks_predictionsr=  remove_duplicatesdelete_tasksdelete_ground_truthsdelete_tasks_annotationsdelete_tasks_reviewsdelete_tasks_predictionsdelete_reviewersdelete_annotators)r;   r1   r<   r2   enumrg   r   zqView ID (optional, it has higher priority than filters, selectedItems and ordering from the request body payload)zAction performed successfully)rB   rC   r2   rJ   rD   rK   rE   c                   T    e Zd Z eej
                  ej
                        Zd Zd Zy)ProjectActionsAPI)rY   rZ   c                     t        |j                  dd      }t        j                  t        |      }| j                  ||       t        t        |j                  |            S Nr7   r   rp   )	r   rY   r%   rx   r#   r   r)   r   r_   )ra   rJ   rq   r7   s       rc   rO   zProjectActionsAPI.get  sL    gkk9a8,,W<%%gw7g>??re   c                 |   t        |j                  dd      }t        j                  t        |      }| j                  ||       |j                  j                  dd       }t        ||      }t        d|j                        r|dv r!t        j                  j                  |      }n7g |_        t        j                  j                  |      }|j                         }| d	d
t        |      z   dz   i}t!        |d      S d|i}t#        ||||j$                  fi |}	|	j'                  dd      }
t!        |	|
      S )Nr7   r   rp   rM   *fflag_root_223_optimize_delete_predictions)organization)	next_taskrB  r   ri   zNo action id "z", use ?id=<action-id>i  rt   rJ   response_coderS   )r   rY   r%   rx   r#   r   rO   r   r   rQ  r-   r   r   r0   r   strr)   r   r_   pop)ra   rJ   rq   r7   	action_idr   r   r  kwargsresultcodes              rc   r   zProjectActionsAPI.post  s)   gkk9a8,,W<%%gw7 KKOOD$/	+GW=8wG[G[
<<}}22.2QH&(N#}}22.2QH((*H  "2S^"CF^"^_HHS11 W%	7HgllUfUzz/3/t,,re   N)	r   r   r   r   r   r  rk   rO   r   r   re   rc   rL  rL    s-    d .))**
@-re   rL  zGet action formz1Get the form configuration for a specific action.z/Action form configuration returned successfullyzForm configuration object)r2   r  c                   8    e Zd Z eej
                        Zd Zy)ProjectActionsFormAPI)rY   c                     t        |j                  dd      }t        j                  t        |      }| j                  ||       t        |||j                        }t        |      S rN  )	r   rY   r%   rx   r#   r   r   r_   r)   )ra   rJ   rV  rq   r7   r9  s         rc   rO   zProjectActionsFormAPI.get  sR    gkk9a8,,W<%%gw7y'7<<@~re   N)r   r   r   r   r   r  rk   rO   r   re   rc   r[  r[    s    < .))re   r[  )V__doc__loggingasgiref.syncr   r   core.feature_flagsr   core.permissionsr   r   core.utils.commonr   r	   core.utils.paramsr
   data_manager.actionsr   r   r   data_manager.functionsr   r   data_manager.managersr   data_manager.modelsr   data_manager.prepare_paramsr   r   r   data_manager.serializersr   r   r   r   django.confr   django.db.modelsr   django.db.models.functionsr   django.utils.decoratorsr   django_filters.rest_frameworkr   drf_spectacular.typesr   drf_spectacular.utilsr   r    r!   r"   projects.modelsr#   projects.serializersr$   rest_frameworkr%   r&   rest_framework.decoratorsr'   rest_framework.paginationr(   rest_framework.responser)   rest_framework.viewsr*   tasks.modelsr+   r,   r-   	getLoggerr   logger_view_request_bodyr   STRModelViewSetrW   r   ListCreateAPIViewr   r  r  rL  r[  r   re   rc   <module>r     s    5 ' A 9 / Q Q K ; $ ^ ^  !   / 4 = . b b # 2 - , : , ( 5 5			8	$  !1*8oV
 !*,G

  	<),2B2BWbno
 &-&,!)

  	;"'%,&.!)

 	"O$\-=-=\ef
 &-&+!)

  	l"$\-=-=\ef
 
 	l$\-=-=\ef
 #'%,&.!)

$ 	3$\-=-=\ef
 &-&.!)

 Wxh## Wx!%!!@WxtL
) L
^i)(,, i)X 	*Y !%% (
 !<"'%*.-1,4,5.5GKY^;_7<!" +9-8,6.5,BGKY^;_7<!"(. $63@ !-JK -@AE#
J 
i7:v	 	w:v	 	#F
	
g 
0 	f!%% (
 <#*#> (!)+3k"J.6%I.7'%J '%+X$60728(1C7i%&*"	+ 6?,X(0)16>^b-c5=\`,a5=\`,a071728(1C48	-&	
/"''"	'R #' 'C)N)+.<05-R -I,5,0	+" $6#U?A
F &/&,!)

_TWp 	C  5
 !%% k #& !%% ( !%% L	7"
F 4STU%.&.!)

a58r'- '-s8qWb'-T 	!G!%% (
 M$#>
 
-:G ;:re   