B
    bEf
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}x,|j	 D ]}|d 
|j|d  q<W x|d D ]}g |d< x6|jd|d iD ]}|d 
|j|d  qW g |d	< x|jd|d iD ]}|j|d g d
}|d	 
| x|j|d D ]}	|j|	d g d}
|d 
|
 xt|j|	d D ]`}|j|d g d}|
d 
| x4|j|d D ] }|d 
|j|d  q|W qBW qW qW g |d< x8|jd|d iD ] }|d 
|j|d  qW qjW |S )u7   
        Грузим данные из апи
        r   Nz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    
0$zCmfPluginAsana._load_datac          	   C   s`   g }xV|D ]N}| |}tj|| dd}|rB||d< || q
|||d d |d q
W |S )N   )indentfile_val)titler@   model_fieldiconkey)getjsondumpsr&   )r	   ZobjsmappingresultrD   Zmap_valr@   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}x|jd6d7iD ]}|j|d8 }| |||d9< |sHxB|jd7|d8 d:D ](}|j|d8 }| |||d9< P qW |sxB|jd7|d8 d:D ](}|j|d8 }| |||d9< P qfW |r|r|sx|jd7|d8 d:D ]}|j|d8 }| ||	|
d9< |s,xB|jd7|d8 d;D ](}|j|d8 }| |||d9< P q W |sv|rvx<|j !|d8 D ](}|j "|d8 }| |||d9< P qJW |sx<|j#$|d8 D ](}|j#%|d8 }| |||d9< P qW qW |r|r|r|r|rP qW |||
||||gS )<ui   
        Формируем пресет настроек импорта по умолчанию
        r   Nzplugin.ext_tokennameu   Название)rA   r@   rB   rC   rD   u'   Рабочее пространствоr   )rK   r   	data_pathu   ИмяZEmailloginemailu'   Рабочие пространстваr$   )rK   rN   r$   u   Пользователиr   u   Описаниеtextnotes)rK   rP   u   Проектыr   u   Разделы проектовproject_sectionu   ИсполнительZresponsibleassigneeu   Срок выполненияZdeadlinedue_onu   Дата началаZ
alarm_datestart_onu   Тегиr   )rK   rR   rS   rP   rT   r   u   Задачиr   u
   Текстu
   АвторZ
cmf_author
created_byu   ДатаZcmf_created_at
created_atu)   Комментируемый объектparenttarget)rO   rU   rV   rX   u   История задачr   limit   r   r   )rY   r   )rY   r8   )&r   r   r   r    r   r!   Zdecryptr   
CmfProjectimport_shop_fields	CmfPersonCmfListCmfStatusOptCmfTask
CmfCommentCmfTagr$   r%   r'   rJ   r   r(   r)   r   r1   r2   r   r*   r+   r   Z	get_tasksr.   r   r/   r0   r   r,   r-   )r	   r   r   r   r3   Zworkspace_mappingr   Zusers_mappingr   Zprojects_mappingr   Zproject_section_mappingrQ   Ztasks_mappingr   Zstories_mappingr   Ztags_mappingr   r:   ZprjZusrr9   r;   r<   r5   Zwsr
   r
   r   calc_import_settingsE   s    z#CmfPluginAsana.calc_import_settingsc                sx    fdd}t |j| t tjr4||}n4t tjrht|}g }x|D ]}||| qRW t||| d S )Nc                s^   d }t | tr$| dd}|S x4  D ](}|jddd| gdd| ggdgd}|S W |S )	Nr    ORrK   z==codez**)filterr   )
isinstancer#   rE   Zrelated_models)vrI   Z	rel_model)fieldimport_objsr
   r   cast   s    
z+CmfPluginAsana._process_field.<locals>.cast)	typer   rE   
issubclassZCmfRelationBaseZ
CmfM2MBaser   r&   setattr)r	   r   
field_namer"   rk   rl   Z	raw_valueri   r
   )rj   rk   r   _process_field   s    

zCmfPluginAsana._process_fieldc             O   s  t ddd |jrRt|jd jd&}|jd jdrFt| }W dQ R X nF|  }t	j
|dd	}|  t|jd
}|t| W dQ R X dd |jd D }i }x|d D ]}	t	 }
xV|d d D ]F}|d r|d d dd dkr| |
|d d |	|d  | qW t	jj|
jdgd}|rB|}
n|
  |
||	d < x|	d D ]}||d }|s`t	 }x\|d d D ]L}|d r|d d dd dkr| ||d d ||d  | qW |  |||d < q`W x|	d D ]}||d }|st	jdd}x\|d d D ]L}|d r4|d d dd dkr4| ||d d ||d  | q4W t	jj|jd}|r|}n|  |||d < qW g }x<|	d D ].}t	j|
|
d }x`|d d D ]P}|d r|d d dd d!kr| ||d d |d" |d  | qW |  x|jD ]}|  qPW x|d# D ]|}t	j|d$}x`|d% d D ]P}|d r|d d dd d&kr| ||d d |d" |d  | qW t	jj|jd'}|st	j|jd'}|  ||_|  x|d( D ]}||d" d }|sZt	 }|||d" d < |j| |j|_x`|d( d D ]P}|d r||d d dd d)kr|| ||d d |d" |d  | q|W |  ||d* 7 }q&W qnW |  qW x||D ]t}t	  }x\|d* d D ]L}|d r|d d dd d+kr| ||d d ||d  | qW |  qW qW dS ),u5   
        Импортируем данные
        um   Логика status_opt устарела обратитесь в техком или техподдержкуT)abortr   rz.jsonNz
asana.json)rW   rK   zw+c             S   s   i | ]}||d  qS )rL   r
   ).0settingsr
   r
   r   
<dictcomp>   s    z1CmfPluginAsana.process_import.<locals>.<dictcomp>Zimport_settingsr   r   rB   Zfield_qualname.r[   rp   rD   r   )rK   r   r   r   rb   r   )Z
user_localr]   )rM   r   )Ztree_parentrW   r^   r   r   )Z	work_listrQ   r_   )rK   r   r`   r   ra   )!Z	cmf_alertZattachmentsopenZ	file_pathZednswithrF   loadsreadr=   r   ZCmfAttachmentr   writerG   Zjson_settingsr[   splitrq   rE   rK   rb   r]   rM   r^   Zstatus_optsdeleter_   Z	CmfStatusstatusr`   Zlistsr&   ra   )r	   Z
cmf_importr   r   fr4   Zattachru   rk   r6   Zcmf_projectrj   Zprev_projectr<   Zcmf_tagr7   ZpersonZexist_personr   r8   Zcmf_listZ
status_optr9   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   rC   u   Поля задачu!   Поля комментариевu   Поля проектовu"   Поля списков задачu   Поля группu   Поля тегов)
r   r]   r\   rC   r`   ra   r[   r^   ZCmfPersonGrouprb   )r	   r   r   ru   r
   r
   r   calc_models_settings]  s,    





z#CmfPluginAsana.calc_models_settings)__name__
__module____qualname__r   r   r=   rJ   rc   rq   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   