
    	]j                          d Z ddlZddlZddlmZ ddlZddlmZm	Z	m
Z
mZ ddlmZmZmZ  ej                   e      Z G d de      Zd	 Z G d
 de      Z G d de      Z G d de      Z G d de      Z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)deepcopy)delete_dir_content
iter_files	json_loadremove_file_or_dir   )BaseFormBaseStorageCloudStoragec                   |     e Zd ZdZ fdZd Zed        Zd Zd Z	d Z
d Zd	 Zd
 Zd Zd ZddZd Zd Z xZS )JSONStoragezJSON task filec                    t        t        | 
  di | i }t        j                  j                  | j                        rt        | j                  d      }t        |      dk(  ri | _        nTt        |t              r|| _        n<t        | j                  t              r"|D ci c]  }t        |d         | c}| _        | j                          y c c}w )NTint_keysr   id )superr   __init__ospathexistsr   lendata
isinstancedictlistint_save)selfkwargstaskstask	__class__s       M/root/env/lib/python3.12/site-packages/label_studio/io_storages/filesystem.pyr   zJSONStorage.__init__   s    k4)3F377>>$))$dii$7Eu:?DIt$DI		4(;@A4T$Z$.ADI

 Bs   #Cc                     t        | j                  dd      5 }t        j                  | j                  |d       d d d        y # 1 sw Y   y xY wNwutf8)modeencodingF)ensure_asciiopenr   jsondumpr   r   fouts     r$   r   zJSONStorage._save    =    $))#7 	;4IIdiiE:	; 	; 	;   #AAc                     | j                   S Nr   r   s    r$   readable_pathzJSONStorage.readable_path$       yy    c                 J    | j                   j                  t        |            S r5   )r   getr   r   r   s     r$   r<   zJSONStorage.get(   s    yy}}SW%%r:   c                 T    || j                   t        |      <   | j                          y r5   )r   r   r   )r   r   values      r$   setzJSONStorage.set+   s    "		#b'

r:   c                     || j                   v S r5   )r   r=   s     r$   __contains__zJSONStorage.__contains__/   s    TYYr:   c                 |    t        ||      D ]  \  }}|| j                  t        |      <    | j                          y r5   )zipr   r   r   )r   idsvaluesr   r?   s        r$   set_manyzJSONStorage.set_many2   s7    S&) 	'IB!&DIIc"g	'

r:   c                 6    | j                   j                         S r5   )r   keysr7   s    r$   rE   zJSONStorage.ids7   s    yy~~r:   c                 8    t        | j                         d      S N)defaultmaxrE   r7   s    r$   max_idzJSONStorage.max_id:       488:r**r:   c                 6    | j                   j                         S r5   )r   itemsr7   s    r$   rS   zJSONStorage.items=   s    yy  r:   c                 n    | j                   j                  t        |      d        | j                          y r5   )r   popr   r   )r   keys     r$   removezJSONStorage.remove@   s!    		c#h%

r:   c                     |i | _         n*|D cg c]  }| j                   j                  |d         c} | j                          y c c}w r5   )r   rU   r   )r   rE   is      r$   
remove_allzJSONStorage.remove_allD   s9    ;DI-01TYY]]1d#1

 2s   #Ac                 2    t        | j                        dk(  S )Nr   )r   r   r7   s    r$   emptyzJSONStorage.emptyK   s    499~""r:   c                      y r5   r   r7   s    r$   synczJSONStorage.syncN       r:   r5   )__name__
__module____qualname__descriptionr   r   propertyr8   r<   r@   rB   rG   rE   rP   rS   rW   rZ   r\   r^   __classcell__r#   s   @r$   r   r      s]    "K;  &
 +!#r:   r   c                 :    t        dj                  ||             )NzB{path} {what} already exists. Use "--force" option to recreate it.)r   what)RuntimeErrorformat)rh   r   s     r$   already_exists_errorrk   R   s$    
LSSY]dhSi r:   c                   v     e Zd ZdZ fdZed        Zd Zd Zd Z	d Z
d Zd	 Zd
 Zd Zd ZddZd Z xZS )DirJSONsStoragezDirectory with JSON task filesc                 |    t        t        | 
  di | t        j                  | j
                  d       i | _        y )NT)exist_okr   )r   rm   r   r   makedirsr   cache)r   r    r#   s     r$   r   zDirJSONsStorage.__init__\   s.    ot-77
DII-
r:   c                     | j                   S r5   r6   r7   s    r$   r8   zDirJSONsStorage.readable_patha   r9   r:   c                     || j                   v r| j                   |   S t        j                  j                  | j                  t	        |      dz         }t        j                  j                  |      rt        |      }|| j                   |<   |S y N.json)rq   r   r   joinstrr   r   )r   r   filenamer   s       r$   r<   zDirJSONsStorage.gete   sn    ::b>!ww||DIIs2w/@AHww~~h' *!%

2 (r:   c                 8    |t        | j                               v S r5   )r@   rE   r=   s     r$   rB   zDirJSONsStorage.__contains__o   s    S_$$r:   c                    t         j                  j                  | j                  t        |      dz         }t	        |dd      5 }t        j                  ||dd       d d d        || j                  |<   y # 1 sw Y   xY w)Nru   r'   r(   )r*      T)indent	sort_keys)r   r   rv   rw   r-   r.   r/   rq   )r   r   r?   rx   r1   s        r$   r@   zDirJSONsStorage.setr   se    77<<		3r7W+<=(C&1 	=TIIeT!t<	=

2	= 	=s   A77B c                 B    | j                   j                          t        r5   )rq   clearNotImplementedError)r   rI   rF   s      r$   rG   zDirJSONsStorage.set_manyx   s    

!!r:   c              #      K   t        | j                  d      D ]L  }t        t        j                  j	                  t        j                  j                  |            d          N y w)Nru   r   )r   r   r   r   splitextbasename)r   fs     r$   rE   zDirJSONsStorage.ids|   sP     DIIw/ 	@Abgg&&rww'7'7':;A>??	@s   A'A)c                 8    t        | j                         d      S rK   rN   r7   s    r$   rP   zDirJSONsStorage.max_id   rQ   r:   c                      y r5   r   r7   s    r$   r^   zDirJSONsStorage.sync   r_   r:   c              #      K   | j                         D ]d  }t        j                  j                  | j                  t	        |      dz         }||| j
                  v r| j
                  |   n
t        |      f f y wrt   )rE   r   r   rv   rw   rq   r   r   r   rx   s      r$   rS   zDirJSONsStorage.items   sc     ((* 	RBww||DIIs2w/@AHdjj(8djjni>QQQ	Rs   A9A;c                    t         j                  j                  | j                  t        |      dz         }t         j                  j	                  |      r2t        j
                  |       | j                  j                  |d        y y rt   )r   r   rv   rw   r   rW   rq   rU   r   s      r$   rW   zDirJSONsStorage.remove   sV    77<<		3r7W+<=77>>(#IIhJJNN2t$ $r:   c                    |0| j                   j                          t        | j                         y |D ]`  }| j                   j	                  |d        t
        j                  j                  | j                  t        |      dz         }	 t        |       b y # t        $ r t        j                  d|z          Y w xY w)Nru   zStorage file already removed: )rq   r   r   r   rU   r   rv   rw   r   OSErrorloggerwarning)r   rE   rY   r   s       r$   rZ   zDirJSONsStorage.remove_all   s    ;JJtyy) L

q$'ww||DIIs1v/?@L&t,	L
  LNN#Cd#JKLs   B!B=<B=c                 :    t        | j                         d       d u S r5   )nextrE   r7   s    r$   r\   zDirJSONsStorage.empty   s    DHHJ%--r:   r5   )r`   ra   rb   rc   r   rd   r8   r<   rB   r@   rG   rE   rP   r^   rS   rW   rZ   r\   re   rf   s   @r$   rm   rm   X   s[    2K
  %"@+R
%L.r:   rm   c                   &     e Zd ZeZdZ fdZ xZS )TasksJSONStorage,Local [loading tasks from "tasks.json" file]c                 l    t         t        |   |t        j                  j                  |d             y )N
tasks.json)project_pathr   )r   r   r   r   r   rv   )r   r   r   r    r#   s       r$   r   zTasksJSONStorage.__init__   s,    .%BGGLL|,T 	/ 	
r:   r`   ra   rb   r	   formrc   r   re   rf   s   @r$   r   r      s    D@K
 
r:   r   c                        e Zd ZeZdZd fd	Zd Zd Zd Z	e
d        Ze
d        ZddZd	 Z fd
Z fdZd Zd Zd Zd Zd ZddZ xZS )ExternalTasksJSONStorager   c                     t        t        | 
  d||t        j                  j                  |d      dd d ddd| i | _        y )Nr   F)namer   r   use_blob_urlsprefixregexcreate_local_copysync_in_threadr   )r   r   r   r   r   rv   r   )	r   r   r   r   r   r   r   r    r#   s	           r$   r   z!ExternalTasksJSONStorage.__init__   sR    &6 
	
%lL9# 
	
 
	
 	r:   c                     t        | j                  dd      5 }t        j                  | j                  |d       d d d        y # 1 sw Y   y xY wr&   r,   r0   s     r$   r   zExternalTasksJSONStorage._save   r2   r3   c                      y r5   r   r7   s    r$   _get_clientz$ExternalTasksJSONStorage._get_client   r_   r:   c                      y r5   r   r7   s    r$   validate_connectionz,ExternalTasksJSONStorage.validate_connection   r_   r:   c                      y)N r   r7   s    r$   
url_prefixz#ExternalTasksJSONStorage.url_prefix   s    r:   c                     | j                   S r5   r6   r7   s    r$   r8   z&ExternalTasksJSONStorage.readable_path   r9   r:   c                 x    |r| j                   t        |         S t        | j                   t        |               S r5   )r   r   r   )r   rV   inplaces      r$   
_get_valuez#ExternalTasksJSONStorage._get_value   s.    &-tyyS"P8DIIc#h<O3PPr:   c                 4    || j                   t        |      <   y r5   )r   r   )r   rV   r?   s      r$   
_set_valuez#ExternalTasksJSONStorage._set_value   s    #		#c(r:   c                     | j                   5  t        t        |   ||       | j	                          d d d        y # 1 sw Y   y xY wr5   )thread_lockr   r   r@   r   )r   r   r?   r#   s      r$   r@   zExternalTasksJSONStorage.set   s<     	*D5b%@JJL	 	 	s	   %<Ac                     | j                   5  t        ||      D ]  \  }}t        t        |   ||        | j                          | j                          d d d        y # 1 sw Y   y xY wr5   )r   rD   r   r   _pre_set	_save_idsr   )r   rE   rF   r   r?   r#   s        r$   rG   z!ExternalTasksJSONStorage.set_many   sb     	 f- J	E.>r5IJNNJJL		 	 	s   A	A  A)c                 R    t        |j                  | j                  d      d         S )Nr   rL   )r   split
key_prefix)r   full_keys     r$   _extract_task_idz)ExternalTasksJSONStorage._extract_task_id   s!    8>>$//15b9::r:   c                 6      fd j                         D        S )Nc              3   <   K   | ]  }j                   |z     y wr5   )r   ).0rV   r   s     r$   	<genexpr>z:ExternalTasksJSONStorage.iter_full_keys.<locals>.<genexpr>   s     E##%Es   )_get_objectsr7   s   `r$   iter_full_keysz'ExternalTasksJSONStorage.iter_full_keys   s    E1B1B1DEEr:   c                 `    t        | j                  d      | _        d | j                  D        S )NTr   c              3   2   K   | ]  }t        |        y wr5   )rw   )r   r   s     r$   r   z8ExternalTasksJSONStorage._get_objects.<locals>.<genexpr>   s     ,BB,s   )r   r   r   r7   s    r$   r   z%ExternalTasksJSONStorage._get_objects   s#    dii$7	,$)),,r:   c                 t   | j                   t        |      z   }|| j                  v sJ dt        |      z          | j                  |   d   |k(  sJ | j                  |   d   |f       | j                  j	                  |       | j                  j                  |       | j                  j                  |       y )NzNo such task id: rV   )r   rw   _ids_keys_map_selected_idsrW   rU   _keys_ids_map)r   r   r   s      r$   _remove_id_from_keys_mapz1ExternalTasksJSONStorage._remove_id_from_keys_map   s    ??SW,T'''F)<s2w)FF'!!"%e,8c4;M;Mb;QRW;XZb:cc8!!"%r"x(r:   c                    | j                   5  t        |      }t        j                  dt	        |      z   dz          | j                  |       | j                          t        j                  dt	        |      z   dz          | j                  j                  |d        | j                          d d d        y # 1 sw Y   y xY w)Nz
Remove id=z from ids.jsonz from tasks.json)
r   r   r   debugrw   r   r   r   rU   r   r=   s     r$   rW   zExternalTasksJSONStorage.remove   s     		RBLLB/2BBC))"-NNLLB/2DDEIIMM"d#JJL		 		 		s   B!B77C c           	         | j                   5  || j                  n|}t        j                  dt	        t        |            z   dz          |D ]  }| j                  |        | j                          t        j                  d       |i | _        n#|D ]  }| j                  j                  |d          | j                          d d d        y # 1 sw Y   y xY w)NzRemove z records from ids.jsonzRemove all data from tasks.json)
r   r   r   r   rw   r   r   r   rU   r   )r   rE   
remove_idsr   s       r$   rZ   z#ExternalTasksJSONStorage.remove_all  s     	&)ksJLLSZ%99<TTU  2--b12NNLL:;{	$ ,BIIMM"d+,JJL	 	 	s   B8CC)NFz.*)Fr5   )r`   ra   rb   r	   r   rc   r   r   r   r   rd   r   r8   r   r   r@   rG   r   r   r   r   rW   rZ   re   rf   s   @r$   r   r      s}    D@K;    Q$
;F-)
r:   r   c                   &     e Zd ZeZdZ fdZ xZS )AnnotationsDirStoragez2Local [annotations are in "annotations" directory]c                 n    t         t        |   ||t        j                  j                  |d             y )Nannotations)r   r   r   )r   r   r   r   r   rv   )r   r   r   r   r    r#   s        r$   r   zAnnotationsDirStorage.__init__  s/    #T3Lrww||LR_7` 	4 	
r:   r   rf   s   @r$   r   r     s    DFK
 
r:   r   )__doc__loggingr   copyr   ujsonr.   core.utils.ior   r   r   r   baser	   r
   r   	getLoggerr`   r   r   rk   rm   r   r   r   r   r:   r$   <module>r      s~     	   W W 5 5			8	$@+ @FG.k G.T
{ 
f| fR
O 
r:   