U
    {yd
N                     @   sB   d dl m Z  d dlT d dlmZ d dlmZ G dd dejZdS )    )copy)*)fields)cmf_plugin_asanac                       sb   e Zd Zdd Zdd fdd
Zdd Zd	d
 Zdd Zdd Zdd Z	dd Z
dd Z  ZS )CmfPluginAsanac                 C   s   | j r| jst | _d S )N)Zis_newpluginmodelsZ	CmfPlugin)self r
   #./common/models/cmf_plugin_asana.py_init_settings	   s    zCmfPluginAsana._init_settingsr   )depthc                   s   |    t j|d|i|S )Nr   )r   supersave)r	   r   argskwargs	__class__r
   r   r      s    zCmfPluginAsana.savec                 C   s  ddl }| dg |j| jjj}tg d}|j	 D ]}|d 
|j|d  q:|d D ]l}g |d< |jd|d iD ]}|d 
|j|d  qg |d	< |jd|d iD ]}|j|d g d
}|d	 
| |j|d D ]}	|j|	d g d}
|d 
|
 |j|	d D ]\}|j|d g d}|
d 
| |j|d D ] }|d 
|j|d  qhq0qqg |d< |jd|d iD ] }|d 
|j|d  qqb|S )u7   
        Грузим данные из апи
        r   Nplugin.ext_token)groupsr   gidusers	workspaceprojects)objsections)r   tasksr   )r   storiesr   r   tags)asanaload_fieldsClientaccess_tokenr   	ext_tokenvaluedict
workspacesget_workspacesappendget_workspacer   	get_usersget_userr   get_projectsget_projectr   get_sections_for_projectget_sectionr   Zget_tasks_for_sectionget_taskr   get_stories_for_task	get_storyr   get_tagsget_tag)r	   r   clientdatarowgroupuserprojectZprj_dictsectionZsection_dicttskZ	task_dictstorytagr
   r
   r   
_load_data   s4    
& zCmfPluginAsana._load_datac              	   C   s\   g }|D ]N}| |}tj|| dd}|r@||d< || q|||d d |d q|S )N   )indentfile_valtitlerB   model_fieldiconkey)getjsondumpsr(   )r	   ZobjsmappingresultrG   Zmap_valrB   r
   r
   r   _process_fields8   s    
  
zCmfPluginAsana._process_fieldsc                 O   s  ddl }| dg |j| jj }dddtj	dgd dddi}dg dd	}d
dtj
	dgd dddddtj
	dgd dddddddddd}dg dd	}ddtj	dgd dddddtj	dgd dddd}	dg dd	}
dddtj	dgd dddi}dg dd	}ddtj	dgd dddddtj	dgd dddddtj	dgd dd dddtj	dgd dddd!dtj	d"gd dd#dd$dtj	d%gd dd%dd&}d'g d(d	}d)dtj	dgd dddd*dtj	d+gd dd,dd-dtj	d.gd dd/dd0dtj	d1gd dd2dd3}d4g d5d	}ddtj	dgd dddddtj	dgd dddd}d$g d%d	}d}d}d}d}d}d}|jd6d7iD ]}|j|d8 }| |||d9< |sD|jd7|d8 d:D ],}|j|d8 }| |||d9<  qDq|s|jd7|d8 d:D ],}|j|d8 }| |||d9<  qq`|r|r|s|jd7|d8 d:D ]}|j|d8 }| ||	|
d9< |s$|jd7|d8 d;D ],}|j|d8 }| |||d9<  q$q|sn|rn|j !|d8 D ],}|j "|d8 }| |||d9<  qnq@|s|j#$|d8 D ],}|j#%|d8 }| |||d9<  qqq|r|r|r|r|r qސq|||
||||gS )<ui   
        Формируем пресет настроек импорта по умолчанию
        r   Nr   nameu   НазваниеrC   u'   Рабочее пространствоr   )rN   r   	data_pathu   ИмяZEmailloginemailu'   Рабочие пространстваr&   )rN   rQ   r&   u   Пользователиr   u   Описаниеtextnotes)rN   rS   u   Проектыr   u   Разделы проектовproject_sectionu   ИсполнительZresponsibleassigneeu   Срок выполненияZdeadlinedue_onu   Дата началаZ
alarm_datestart_onu   Тегиr   )rN   rU   rV   rS   rW   r   u   Задачиr   u
   Текстu
   АвторZ
cmf_author
created_byu   ДатаZcmf_created_at
created_atu)   Комментируемый объектparenttarget)rR   rX   rY   r[   u   История задачr   limit   r   r   )r\   r   )r\   r:   )&r   r    r!   r"   r   r#   Zdecryptr   
CmfProjectimport_shop_fields	CmfPersonCmfListCmfStatusOptCmfTask
CmfCommentCmfTagr&   r'   r)   rM   r   r*   r+   r   r3   r4   r   r,   r-   r   Z	get_tasksr0   r   r1   r2   r   r.   r/   )r	   r   r   r   r5   Zworkspace_mappingr   Zusers_mappingr   Zprojects_mappingr   Zproject_section_mappingrT   Ztasks_mappingr   Zstories_mappingr   Ztags_mappingr   r<   ZprjZusrr;   r=   r>   r7   Zwsr
   r
   r   calc_import_settingsE   s:                        




z#CmfPluginAsana.calc_import_settingsc                    st    fdd}t |j| t tjr4||}n0t tjrdt|}g }|D ]}||| qPt||| d S )Nc                    s^   d }t | tr$| dd}|S   D ],}|jddd| gdd| ggdgd}|  S |S )	Nr    ORrN   z==codez**)filterr   )
isinstancer%   rH   Zrelated_models)vrL   Z	rel_modelfieldimport_objsr
   r   cast   s    
z+CmfPluginAsana._process_field.<locals>.cast)	typer   rH   
issubclassZCmfRelationBaseZ
CmfM2MBaser   r(   setattr)r	   r   
field_namer$   ro   rp   Z	raw_valuerl   r
   rm   r   _process_field   s    
zCmfPluginAsana._process_fieldc                 O   sB  t ddd |jrRt|jd jd&}|jd jdrFt| }W 5 Q R X nF|  }t	j
|dd}|  t|jd	}|t| W 5 Q R X d
d |jd D }i }|d D ]}	t	 }
|d d D ]F}|d r|d d dd dkr| |
|d d |	|d  | qt	jj|
jdgd}|r:|}
n|
  |
||	d < |	d D ]}||d }|sVt	 }|d d D ]L}|d r|d d dd dkr| ||d d ||d  | q|  |||d < qV|	d D ]}||d }|st	jdd}|d d D ]L}|d r |d d dd dkr | ||d d ||d  | q t	jj|jd}|r|}n|  |||d < qg }|	d D ]}t	j|
|
d}|d d D ]P}|d r|d d dd d kr| ||d d |d! |d  | q|  |jD ]}|  q.|d" D ]p}t	j|d#}|d$ d D ]P}|d rd|d d dd d%krd| ||d d |d! |d  | qdt	jj|jd&}|st	j|jd&}|  ||_|  |d' D ]}||d! d }|s,t	 }|||d! d < |j| |j|_|d' d D ]P}|d rL|d d dd d(krL| ||d d |d! |d  | qL|  ||d) 7 }qqF|  q|D ]p}t	  }|d) d D ]L}|d r|d d dd d*kr| ||d d ||d  | q|  qqd+S ),u5   
        Импортируем данные
        um   Логика status_opt устарела обратитесь в техком или техподдержкуT)abortr   rz.jsonz
asana.json)rZ   rN   zw+c                 S   s   i | ]}|d  |qS )rO   r
   ).0settingsr
   r
   r   
<dictcomp>   s      z1CmfPluginAsana.process_import.<locals>.<dictcomp>Zimport_settingsr   r   rE   Zfield_qualname.r^   rt   rG   r   )rN   r   r   r   re   r   )Z
user_localr`   )rP   r   )Ztree_parentrZ   ra   r   r   )Z	work_listrT   rb   )rN   r   rc   r   rd   N)!Z	cmf_alertZattachmentsopenZ	file_pathZednswithrI   loadsreadr?   r   ZCmfAttachmentr   writerJ   Zjson_settingsr^   splitru   rH   rN   re   r`   rP   ra   Zstatus_optsdeleterb   Z	CmfStatusstatusrc   Zlistsr(   rd   )r	   Z
cmf_importr   r   fr6   Zattachry   ro   r8   Zcmf_projectrn   Zprev_projectr>   Zcmf_tagr9   ZpersonZexist_personr   r:   Zcmf_listZ
status_optr;   Z
opt_statusr   ZtaskZcmf_taskr=   Zcmf_commentr
   r
   r   process_import   s    "
 &
 &
 & 
& & 

 zCmfPluginAsana.process_importc                 O   s   g S )uB   
        Превью результата импорта
        r
   )r	   r   r   r
   r
   r   previewW  s    zCmfPluginAsana.previewc              
   O   s   dt j t jjddt j t jjddt j t jjddt j t jjddt j t jjddt j t jjddt j	 t j	jdg}|S )	uM   
        Магазин полей для сопостовления
        u#   Поля пользователей)Zcaptionr   rF   u   Поля задачu!   Поля комментариевu   Поля проектовu"   Поля списков задачu   Поля группu   Поля тегов)
r   r`   r_   rF   rc   rd   r^   ra   ZCmfPersonGroupre   )r	   r   r   ry   r
   r
   r   calc_models_settings]  s<    z#CmfPluginAsana.calc_models_settings)__name__
__module____qualname__r   r   r?   rM   rf   ru   r   r   r   __classcell__r
   r
   r   r   r      s   ' nr   N)r   Zcmf.includeZcmfr   Zcommon.fieldsr   r   r
   r
   r
   r   <module>   s   