
    #Xi                     L    d dl  d dlmZmZ d dlmZ d dlmZ  G d de      Zy)    )*)BaseDataDriverMapper)RDisk)cmfutilc                       e Zd ZddddZddZd Zd Zd Zd Zd	 Z	d
 Z
d Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zy)RDiskDataDriverN)	ds_confignamec                4    || _         |d   | _        || _        y )Nuri)configr   r   )selfr
   r   _args_kwargss        $./modules/rdisk/data_driver/rdisk.py__init__zRDiskDataDriver.__init__   s    U#	    c           	      b   d }|du r6d }t         j                  r$t         j                  j                  j                  }t        j
                  rt        j                  rdnd }t        || j                  t        j                  j                         || j                  |t        j                        S )N.T)loginr   
ha_enabledha_file_markers)gcurrent_userr   valuer   HA_COMPANIONHA_ROLEr   r   APPrsa_public_key
export_keyHA_FILE_MARKERS)r   access_tokenr   r   s       r   get_rdzRDiskDataDriver.get_rd!   s    3  L~~,,22#00V^^T
$((C$6$6$A$A$C5Y]YdYd!63I3I
 	
r   c                    |j                  dd      }| j                         }|r|d   }n%|j                  d      r|d   }|d   d   }nt        t        |t        j
                  j                        r|j                  }|j                  j                  ||      }|sy |j                  d      }	t               j                  ||	|      }
d	D ]&  }||	v st        |
|      j                  |	|   
       ( |
S )NmkdirFr   filter   r%   full_fields_load)r)   modelparentparentschildrenfields)getr#   NotImplementedError
isinstancecmfr0   CmfTyper   rootfind_child_by_idr   object_to_cmfgetattrload)r   r*   argskwargsr%   rd_id_filterobjfflmobj
field_names               r   r1   zRDiskDataDriver.get6   s    

7E*[[]q'CZZ!X&G!*Q-C%%c3::--.))Cgg&&s%&8jj+,x%%cCu%M; 	GJS j)..c*o.F	G r   c                    | j                         }|j                  j                  }|j                  j	                  |d      }t        j                  |j                  j                        }|j                  ||j                  j                        }|j                  |j                  _        |j                  dk(  s8|j                  j                  d      s|j                  |j                  _        y y y )NTr(   /objz/obj/zobj/)r#   	parent_idr   r6   r7   r   safe_filenamer   	add_childis_dirid_value
startswithperm_str)	r   instancer;   r<   r=   rG   parent_f	safe_namer@   s	            r   createzRDiskDataDriver.createW   s    [[]&&,,	77++IT+B))(--*=*=>	  HOO,A,AB VV& CFF$5$56G$H'*||H$ %I r   c                     | j                         }|j                  j                  |j                  j                        }|j                          |S N)r#   r6   r7   rK   r   deleter   rO   r;   r<   r=   r@   s         r   rU   zRDiskDataDriver.deletee   s9    [[]gg&&x{{'8'89

r   c                    | j                         }|j                  j                  |j                  j                        }|rE|j                  dk(  s6|j                  j                  d      s|j                  j                  |_        |S )NrE   rF   )r#   r6   r7   rK   r   rM   rN   rV   s         r   updatezRDiskDataDriver.updatek   sc    [[]gg&&x{{'8'89&(CFF,=,=>O,P#,,22CLr   c                    | j                         }|d   }|st        d      |d   d   dk(  r|d   d   }|j                  j                  |      }|j	                  d      }|j
                  sg S t               j                  |j
                  ||      }	i }
dD ]  }||v s||   |
|<    |
r;|	D ]6  }|
j                         D ]!  \  }}t        ||      j                  |	       # 8 |	S t        )
Nr&   uE   Укажите filter, например ['parent_id', '==', '/Trash']r   rG   r'   r)   )r*   r+   r/   )r#   	Exceptionr6   r7   r1   r.   r   list_to_cmfitemsr9   r:   r2   )r   r*   r;   r<   r=   r?   rG   rfrA   obj_listload_fieldsrC   r@   	field_ffls                 r   listzRDiskDataDriver.listr   s   [[]"cdd1:a=K'
1I)))4B**/0C;;	x++BKKE+JHK? >
$.1*oK
+> # HC1<1B1B1D H-
IZ055Y5GHH O%%r   c                 ^    | j                         }|j                  ||      }|j                  S rT   )r#   create_rfile_from_templaterK   )r   dirnamefilenamer;   r<   r=   ress          r   rc   z*RDiskDataDriver.create_rfile_from_template   s(    [[]++GX>vvr   c                     | j                         }|j                  j                  |j                  j                        }|j                  |       y rT   )r#   r6   r7   rK   r   rename)r   rO   	target_idr;   r<   r=   r@   s          r   rh   zRDiskDataDriver.rename   s7    [[]gg&&x{{'8'89

9r   c                      y rT    r   s    r   commitzRDiskDataDriver.commit       r   c                      y rT   rk   rl   s    r   rollbackzRDiskDataDriver.rollback   rn   r   c                      y rT   rk   rl   s    r   before_requestzRDiskDataDriver.before_request   rn   r   c                      y rT   rk   )r   	cmf_models     r   dp_modelzRDiskDataDriver.dp_model   rn   r   c                      y rT   rk   )r   sa_models     r   rt   zRDiskDataDriver.cmf_model   rn   r   c                      y rT   rk   )r   dp_instances     r   is_instancezRDiskDataDriver.is_instance   rn   r   c                      y rT   rk   )r   models_s     r   make_modelszRDiskDataDriver.make_models   rn   r   c                      y)u,   Вернём кастомный запросNrk   )r   r;   r<   s      r   query_deprecatedz RDiskDataDriver.query_deprecated   s    r   c                 `    | j                  d       }|j                  j                  dd       y )NT)rJ   exist_ok)r#   r6   rR   )r   r=   s     r   init_dbzRDiskDataDriver.init_db   s$    [[
dT2r   c                     | j                         j                  j                  |      }|s3| j                         j                  |      }|j	                  ddd        |j
                  |i | y NFT)rJ   r   r-   )r#   r6   r7   	get_rfilerR   write)r   rK   r;   r<   r@   s        r   r   zRDiskDataDriver.write   s\    kkm  11"5++-))"-CJJedDJA		4"6"r   c                     | j                         }|j                  j                  |      }|s%|j                  |      }|j	                  ddd        |j
                  |i | y r   )r#   r6   r7   r   rR   stream_write)r   rK   r;   r<   r=   r@   s         r   r   zRDiskDataDriver.stream_write   sY    [[]gg&&r*,,r"CJJedDJA$)&)r   c                 p    | j                         }|j                  j                  |      }|j                  S rT   )r#   r6   r7   tmp_readonly_path)r   rK   r=   r@   s       r   r   z!RDiskDataDriver.tmp_readonly_path   s-    [[]gg&&r*$$$r   ).)__name__
__module____qualname__r   r#   r1   rR   rU   rX   ra   rc   rh   rm   rp   rr   ru   rt   rz   r}   r   r   r   r   r   rk   r   r   r	   r	      sq    )-D 2
*B	4&0

;3#*%r   r	   N)	cmf.includecmf.data_providers.baser   r   rdiskr   cmf.utilr   r	   rk   r   r   <module>r      s     :  {%n {%r   