U
    Įwh\C                     @   sJ   d dl m Z  d dlmZ d dlT d dlmZ d dlZG dd dejZdS )    )cached_property)fields)*)cmf_plugin_evaNc                   @   s\   e Zd Zejjdg Zdd Zdd Zdd Zdd	 Z	d
d Z
dd Zdd ZdddZdS )CmfPluginEvaget_all_projectsc          
      O   s   dd l }g }tjj|dgd| _|  \}|d  D ]H}t|d d0}||}	|	t
|	d |	d |	d	 d
 W 5 Q R X q6W 5 Q R X |S )Nr   json_settings)idr   projects	info.jsonrr	   task_code_prefixname)ext_idr   r   )jsonmodelsZ	CmfImportget
cmf_import_extract_dumpiterdiropenloadappenddict)
selfZcmf_import_idargskwargsr   resdump_dirproject_dirfobj r"   +./modules/settings/models/cmf_plugin_eva.pyr      s    

6zCmfPluginEva.get_all_projectsc                 C   s   g S Nr"   )r   r"   r"   r#   calc_models_settings   s    z!CmfPluginEva.calc_models_settingsc                    sB   dd l dd lddlm  G  fddd}|| jjd S )Nr   )Pathc                       s2   e Zd ZddddZ fddZdd ZdS )	z9CmfPluginEva._extract_dump.<locals>.TempDirContextManagerN)returnc                 S   s
   || _ d S r$   )backup_attach_id)r   r(   r"   r"   r#   __init__    s    zBCmfPluginEva._extract_dump.<locals>.TempDirContextManager.__init__c              	      sN     | _tjj| jd}|jd}|| jj	 W 5 Q R X  | jj	S )N)r	   r   )
ZTemporaryDirectorytmp_dirr   CmfAttachmentr   r(   ZipFileZfull_path_file
extractallr   )r   attachZzip_refr&   tempfilezipfiler"   r#   	__enter__"   s
    
zCCmfPluginEva._extract_dump.<locals>.TempDirContextManager.__enter__c                 S   s   | j   d S r$   )r*   Zcleanup)r   exc_typeZexc_valZexc_tbr"   r"   r#   __exit__)   s    zBCmfPluginEva._extract_dump.<locals>.TempDirContextManager.__exit__)__name__
__module____qualname__r)   r2   r4   r"   r/   r"   r#   TempDirContextManager   s   r8   r(   )r0   r1   pathlibr&   r   r   )r   r8   r"   r/   r#   r      s    zCmfPluginEva._extract_dumpc                 C   st   |sd S t |d }|jddd|d gdd|d ggd}|sV|jdd|d gd}|sp|jdd|d gd}|S )Nr	   OR==r   filtercoder   )cmfutilget_model_by_idr   )r   Z	obj_querymodelr!   r"   r"   r#   _search_obj/   s    &zCmfPluginEva._search_objc              
   C   sP   |d }|  sd S | D ].}t|d}t|}W 5 Q R X | | qd S )NZusersr   )existsr   r   r   r   _process_person)r   r   Z	users_dirZ	user_pathr    Z	user_jsonr"   r"   r#   _process_users:   s    zCmfPluginEva._process_usersc                    sX  ddl m   fddfddd_|_jjd _jd d	 d }|d
 sntddd |d D _	 }j
  t  t }jD ]}jjd|d   |d |d  }t|d dT}t|}|d  D ]6\}	}
|	|kr|
||	 7 }
|
||	< jj|	|
d qW 5 Q R X | t|d d}t|}W 5 Q R X ddd|d gdd|d gg}tjj|dds tj|d |d |d |d |d |d  |d! |d" |d# jd$

  t  |d% }| r6| D ]}t|d d}t|}W 5 Q R X jd&d' jjd(|d  d)|d*  d+ ddd|d gdd|d gg}tjj|d,gd-}|s"tj|d |d |d |d. |d  |d! |d/ |d" |d# jd0}|j
dd1 t  |d2 || q |d3 }| qW 5 Q R X d S )4Nr   )BeautifulSoupc              
      s6  |d }| D ]}t jj|d d}|sPt j|d ||d jd}|jdd ||d  }| rt|d}|| W 5 Q R X |jj	r|jj	
|d |jj	} |d	}	|	jd
|jj	idD ]}
|jj	|
jd< qddd |	jjD |_njjd| d|d jdd t  q|jdd t  d S )Nattachmentsr	   )r   r   )r   parentr   r   TZsave_importrbZlxmlzdata-attach-id)attrssrc c                 S   s   g | ]}t |qS r"   )str).0xr"   r"   r#   
<listcomp>X   s     zKCmfPluginEva.process_import.<locals>.import_attachments.<locals>.<listcomp>u&   Вложения нет в дампе zERR-0109)Z
error_coder!   Z
attachment	processed)r   r+   r   r   saverC   r   Zupload_stream_filetextvaluereplacer	   Zfind_allurlrK   joinZbodychildren	log_errorinc_stat
cmf_commit)rG   r   rH   Zattachments_dirZattach_metar.   Zattach_pathr    rT   Zsouptag)rF   r   r"   r#   import_attachmentsE   s6    

 z7CmfPluginEva.process_import.<locals>.import_attachmentsc                    s  |   sd S |  D ]}t|d d}t|}W 5 Q R X jjd|d  d|d  d t	|d }|j
d	krjd
d njdd ddd|d gdd|d gdd|d gg}|j|d}|s|jdd|d gdd|ggd}|sb||d |d ||d |d |d |d |d |d |d jd}|jdd |jr|j
d	kr|d |_|jdd t   |d || |d | qd S )Nr   r   u"   Обработка обьекта r   (r>   )r	   ZCmfDocumentZdocumentrR   Zfolderr:   r   r;   r<   tree_parentrT   status
cmf_author	cmf_ownerresponsiblecmf_created_atcmf_modified_at)r   rT   rH   ra   r   rb   rc   rd   re   rf   rg   r   TrI   rG   rY   )rC   r   r   r   r   r   loggerinfor?   r@   
class_namer[   r   rB   rS   import_originalZ
text_draftr\   )r   ra   Zobj_dirr    Zobj_jsonrA   _filterr!   )r^   import_documentsprojectr   r"   r#   rm   d   sN    $
 
z5CmfPluginEva.process_import.<locals>.import_documentsZimport_settingsZselectedObjectsrU   	isCheckedu5   Не выбрали ни одного проекта!c                 S   s$   g | ]}|d  r|d r|d  qS )r!   ro   r"   )rO   valr"   r"   r#   rQ      s       z/CmfPluginEva.process_import.<locals>.<listcomp>rY   u"   Обработка проекта r   r
   r   zdump_info.jsonr   Zstats)rU   r   r:   r;   r	   T)r=   Zinclude_deletedrT   r   
logic_typerc   rd   rf   rg   )
r   rT   r   r   rq   rc   rd   rf   rg   r   ZtaskstaskrR   u    Обработка задачи r_   r>   r`   r   r=   r   rb   re   )r   rT   rH   r   rb   rc   rd   re   rf   rg   r   rI   rG   Z	documents)Zbs4rF   
has_errorsr   Z_normalize_settingsr   settings	ExceptionZselected_projectsr   rS   r\   r   rh   ri   r   r   r   itemsr[   rE   r   Z
CmfProjectr   rB   rC   r   ZCmfTask)r   r   rootr   Zprev_dump_infor!   r   r    Z	dump_infokeyrp   Zproject_jsonrl   Z	tasks_dirZtask_dirZ	task_jsonrr   Zdocs_dirr"   )rF   r^   rm   rn   r   r#   process_importC   s    (





$
zCmfPluginEva.process_importc                 C   s&   |j | _|jstd dg d}|gS )Nu+   Добавьте файл с бекапомZEvaTeam)r   r   )rh   Z_loggerrG   Z	cmf_alert)r   r   ru   r"   r"   r#   calc_import_settings   s
    
z!CmfPluginEva.calc_import_settingsTNc              	   C   s^  |sd S |rd| dnd}| j jd|d  d|d   |d rXtjj|d	 d
S d| j jjj d|d	  d}ddg}tjjdd|d g|d}|sFtjjddd| dg|d}|sFtjjdd|d g|d}	t	|	dkr(| j j
d|d  dt	|	 d| ddd |  jd7  _g }	|	s| j jd|d  d|  dd|d g}
tjj|
|d}	|	sddd|d gdd|d ggdd|d gdd|d ggg}
tjj|
|d}	t	|	dkr|  jd7  _| j j
d |d  d!|d  d"t	|	 d| ddd |	r|	d# }n*| j d$|d  d!|d  d%| tj d&}|s|rd'}d}|d }tjjdd| g|dr| j d(| d)tj |d d*\}}| d+| d*| }|d7 }qftj||| j d'd,}nd |fS |rZ|jrd-D ]}t||||  q|jr:||jkr@|j | |_n||_tj }|j| d'|_|dg D ]}d| j jjj d|d.  d}tjjddd| dgdgd}|stjjdd|d gdgd}|stj|| j d'|d |d/}|jr|d |_|js||_n||jkr*|j | |_|jd'd0 |j| qh|jrZ|jd'd0 |S )1Nr_   r`   rM   u0   Импортируем пользователя r   z, login=loginsystemr>   )r>   z::r   rg_member_ofZILIKErs   r   ZLIKE%email   u+   Пользователей с почтой z >  zERR-0037	CmfPerson)Zobj_typeuH   Не удалось найти пользователя с почтой r;   r:   
first_name	last_nameu+   Пользователей с именем z (z) > r   uM   Не нашли пользователя среди существующих z) FTuQ   Обнаружена учетная запись с дублирующим email u   , добавляем цифру@+)r   r|   r   rk   )r   r   r   Zsecond_namer   Zphone_mobiler	   )r   r   rk   r   Zimport_raw_jsonrI   )r   rh   ri   r   r   r   Zpluginsource_hashlistlenrZ   rt   ZwarninglogZloggingINFOlowerZWARNINGsplitrk   setattrr   ZCmfPersonGroup
user_groupr~   r   Z
user_localr   rS   Z
is_changed)r   Z	user_dictZcreateupdater!   Zobj_msgr   r   ZpersonZpersonsrl   Z
is_creatednr|   Zprefix_emaildomainry   r   Z
group_infogroupr"   r"   r#   rD      s    "" &
 
   
zCmfPluginEva._process_person)TTN)r5   r6   r7   r   r   Zapi_methodsr   r%   r   rB   rE   rz   r{   rD   r"   r"   r"   r#   r      s   	 r   )r   Zcmfr   Zcmf.includeZmodules.settings.fieldsr   r   r   r"   r"   r"   r#   <module>   s
   