
    bEf
N                     X    d dl m Z  d dlT d dlmZ d dlmZ  G d dej                  ZdS )    )copy)*)fields)cmf_plugin_asanac                   T     e Zd Zd Zdd fd
Zd Zd Zd Zd Zd	 Z	d
 Z
d Z xZS )CmfPluginAsanac                 f    | j         r'| j        s"t                                          | _        d S d S d S )N)is_newpluginmodels	CmfPlugin)selfs    #./common/models/cmf_plugin_asana.py_init_settingszCmfPluginAsana._init_settings	   s@    ; 	-t{ 	- **,,DKKK	- 	- 	- 	-    r   )depthc                b    |                                    t                      j        |d|i|S )Nr   )r   supersave)r   r   argskwargs	__class__s       r   r   zCmfPluginAsana.save   s5    uww|T99&999r   c                    ddl }|                     dg           |j                            | j        j        j                  }t          g           }|j        	                                D ];}|d         
                    |j                            |d                              <|d         D ]Q}g |d<   |j                            d|d         i          D ];}|d         
                    |j                            |d                              <g |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                              <ag |d<   |j                            d|d         i          D ];}|d         
                    |j                            |d                              <S|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"   get_tasks_for_sectionget_taskr#   get_stories_for_task	get_storyr$   get_tagsget_tag)r   r%   clientdatarowgroupuserprojectprj_dictsectionsection_dicttsk	task_dictstorytags                  r   
_load_datazCmfPluginAsana._load_data   s(    	,-...**4;+@+FGG2$3355 	O 	OCN!!&"3"A"A#e*"M"MNNNN (^ 	F 	FEE'N..U5\/JKK J Jg%%fl&;&;DK&H&HIIII !#E*!?77eEl8STT 
` 
`#)?#>#>wu~#N#N\^__j!((222%GGPUWW ` `G+1?+F+Fwu~+V+Vac#d#dLZ(//===%|AA'%.QQ ` `,2L,A,A#e*,M,MZ\$]$]	$W-44Y???%+^%H%HU%T%T ` `E%i0778P8PQVW\Q]8^8^____``` E&M{++[%,,GHH F Ff$$V[%8%8U%D%DEEEEF r   c           	          g }|D ]q}|                     |          }t                              ||         d          }|r||d<   |                    |           V|                    ||d d |d           r|S )N   )indentfile_valtitlerM   model_fieldiconkey)getjsondumpsr.   )r   objsmappingresultrR   map_valrM   s          r   _process_fieldszCmfPluginAsana._process_fields8   s     	O 	OCkk#&&Gzz$s)Az66H O&.
#g&&&&.2DN N O O O Or   c                    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<   |s_|j                            d7|d8         d:          D ];}|j                            |d8                   }|                     ||          |d9<    |s_|j                            d7|d8         d:          D ];}|j                            |d8                   }|                     ||          |d9<    |r|r|s|j                            d7|d8         d:          D ][}|j                            |d8                   }|                     ||	          |
d9<   |s_|j                            d7|d8         d;          D ];}|j                            |d8                   }|                     ||          |d9<    |s^|r\|j         !                    |d8                   D ];}|j         "                    |d8                   }|                     ||          |d9<    |s\|j#        $                    |d8                   D ];}|j#        %                    |d8                   }|                     ||          |d9<    ]|r
|r|r|r|r n|||
||||gS )<ui   
        Формируем пресет настроек импорта по умолчанию
        r   Nr   nameu   НазваниеrN   u'   Рабочее пространствоr   )r\   r   	data_pathu   ИмяEmailloginemailu'   Рабочие пространстваr,   )r\   r`   r,   u   Пользователиr   u   Описаниеtextnotes)r\   rb   u   Проектыr   u   Разделы проектовproject_sectionu   Исполнительresponsibleassigneeu   Срок выполненияdeadlinedue_onu   Дата начала
alarm_datestart_onu   Тегиr$   )r\   re   rg   rb   ri   r$   u   Задачиr"   u
   Текстu
   Автор
cmf_author
created_byu   Датаcmf_created_at
created_atu)   Комментируемый объектparenttarget)ra   rk   rm   ro   u   История задачr#   limit   r   r   )rp   r   )rp   rA   )&r%   r&   r'   r(   r   r)   decryptr   
CmfProjectimport_shop_fields	CmfPersonCmfListCmfStatusOptCmfTask
CmfCommentCmfTagr,   r-   r/   rZ   r   r0   r1   r$   r:   r;   r   r2   r3   r"   	get_tasksr7   r#   r8   r9   r!   r4   r5   )r   r   r   r%   r<   workspace_mappingr   users_mappingr   projects_mappingr   project_section_mappingrc   tasks_mappingr"   stories_mappingr#   tags_mappingr$   rE   prjusrrC   rG   rH   r>   wss                              r   calc_import_settingsz#CmfPluginAsana.calc_import_settingsE   s    	,-...**4;+@+H+H+J+JKK0d$*$5$H$H&$R$RST$U!&2 2

 GRT"*, ,	 'D$*$4$G$G$Q$QRS$T!&2 2  'D%+%5%H%H'%S%STU%V"74 4 %N[_)-"&|= =

 

 4rPWXX 1d$*N$E$Evh$O$OPQ$R!&2 2  2t%+^%F%Fx%P%PQR%S"74 4	
 
 -TT 0d$*$7$J$JF8$T$TUV$W!&2 2#
 $EPRarss 1d$*N$E$Evh$O$OPQ$R!&2 2 #;(.(I(I=/(Z(Z[\(]!%j: : !@T&,n&G&G&U&UVW&X#H6 6  2t%+^%F%Fx%P%PQR%S"74 4 #:t(.(I(I<.(Y(YZ[(\!%j: : )d$*N$E$Evh$O$OPQ$R!&2 2!
 
* (2GLL +$*$5$H$H&$R$RST$U!&2 2 %1d*0*;*N*NP\~*^*^_`*a#'> > %/D*0*;*N*NP`Oa*b*bcd*e#'> > !LY]&,&7&J&JH:&V&VWX&Y#H6 6
 
 7"S\]] 1d$*M$D$DfX$N$Nq$Q!&2 2  2t%+]%E%Evh%O%OPQ%R"74 4	
 
 #bvFF$33WaLAA !	 !	C"00U<<B"&"6"6r;L"M"MIh !<11ABuI2V2VWW  C ,//E
;;C&*&:&:3&N&NE(O !;//!"U)0T0TUU  C +--c%j99C%)%9%9#|%L%LDN "c " "!?77!RTUZR[8\8\]] " "C /55c%jAAC)-)=)=cCS)T)THX& "#)<#9#9ARUV[R\:]:]#^#^ " "C"(,"7"7E
"C"CC.2.B.B3.V.VE(O!  "S "%+^%H%HU%T%T " "E$*N$<$<U5\$J$JE040D0DUO0\0\GH-!" "'-'O'OPSTYPZ'['[ " "G&,o&A&A'%.&Q&QG8<8L8LWVm8n8nOH5! s s w 5 5(OUGTRRr   c                 n   fd}t          |          j                            |          t          t          j                  r ||          }nNt          t          j                  r4t          |          }g }|D ] }|                     ||                     !t          |||           d S )Nc                    d }t          | t                    r+                    |                     dd                    }|S                                 D ]&}|                    ddd| gdd| ggdg          }|c S |S )	Nr    ORr\   z==codez**)filterr   )
isinstancer+   rS   related_models)vrX   	rel_modelfieldimport_objss      r   castz+CmfPluginAsana._process_field.<locals>.cast   s    F!T"" 	"$ub)9)9:: "'!5!5!7!7 " "I&]]4&$9J5;T14E3GPTv + W WF!MMMMr   )	typer   rS   
issubclassCmfRelationBase
CmfM2MBaser   r.   setattr)	r   r    
field_namer*   r   r   	raw_valuer   r   s	       `   @r   _process_fieldzCmfPluginAsana._process_field   s    	 	 	 	 	 	 S		 $$Z00eV344 	&DKKEEv011 	&UIE & &TT!WW%%%%Z'''''r   c                    t          dd           |j        rt          |j        d         j        d          5 }|j        d         j                            d          r,t
                              |                                          }ddd           n# 1 swxY w Y   n|                                 }t          
                    |d	          }|                                 t          |j        d
          5 }|                    t
                              |                     ddd           n# 1 swxY w Y   d |j        d         D             }i }|d         D ]q}	t                                          }
|d         d         D ]e}|d         r[|d         d                             d          d         dk    r0|                     |
|d         d         |	|d                  |           ft          j                            |
j        dg          }|r|}
n|
                                 |
||	d         <   |	d         D ]}|                    |d                   }|st                                          }|d         d         D ]e}|d         r[|d         d                             d          d         dk    r0|                     ||d         d         ||d                  |           f|                                 |||d         <   |	d         D ]}|                    |d                   }|st                              d          }|d         d         D ]e}|d         r[|d         d                             d          d         dk    r0|                     ||d         d         ||d                  |           ft          j                            |j                  }|r|}n|                                 |||d         <   g }|	d         D ]}t                              |
|
          }|d         d         D ]k}|d         ra|d         d                             d          d         d k    r6|                     ||d         d         |d!         |d                  |           l|                                 |j        D ]}|                                 |d"         D ]'}t                              |#          }|d$         d         D ]k}|d         ra|d         d                             d          d         d%k    r6|                     ||d         d         |d!         |d                  |           lt          j                            |j        &          }|s4t                              |j        &          }|                                 ||_        |                                 |d'         D ]}|                    |d!         d                   }|s*t                                          }|||d!         d         <   |j                            |           |j        |_        |d'         d         D ]k}|d         ra|d         d                             d          d         d(k    r6|                     ||d         d         |d!         |d                  |           l|                                 ||d)         z  })|                                 |D ]}t                                           }|d)         d         D ]e}|d         r[|d         d                             d          d         d*k    r0|                     ||d         d         ||d                  |           f|                                 sdS )+u5   
        Импортируем данные
        um   Логика status_opt устарела обратитесь в техком или техподдержкуT)abortr   rz.jsonNz
asana.json)rn   r\   zw+c                      i | ]}|d          |S )r]    ).0settingss     r   
<dictcomp>z1CmfPluginAsana.process_import.<locals>.<dictcomp>   s    pppH[)8pppr   import_settingsr   r   rP   field_qualname.rs   r   rR   r   )r\   r   r   r$   rz   r   )
user_localru   )r_   r   )tree_parentrn   rv   r    r!   )	work_listrc   rw   )r\   r"   rx   r#   ry   )!	cmf_alertattachmentsopen	file_pathednswithrT   loadsreadrI   r   CmfAttachmentr   writerU   json_settingsrs   splitr   rS   r\   rz   ru   r_   rv   status_optsdeleterw   	CmfStatusstatusrx   listsr.   ry   )r   
cmf_importr   r   fr=   attachr   r   r?   cmf_projectr   prev_projectrH   cmf_tagr@   personexist_personr#   rA   cmf_list
status_optrC   
opt_statusr   taskcmf_taskrG   cmf_comments                                r   process_importzCmfPluginAsana.process_import   s    	  B  JN  	O  	O  	O  	O! 
	*j,Q/93?? 01)!,6??HH 0::affhh//D0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ??$$D)),)OOFKKMMMf&-- *

4(()))* * * * * * * * * * * * * * * qpJD\]nDoppp(^ W	# W	#E ++--K!(+H5 J J' JE-,@AQ,R,X,XY\,],]^_,`dp,p,p''U=5I,5W(-eEl(;[J J J ",00k6FPSu0UUL #*  """(3Ke%V} 	6 	6%//#e*55 6$mmooG!)&!1(!; P P / PE-4HIY4Z4`4`ad4e4efg4hlt4t4t //}9Ml9[03E%L0A;P P PLLNNN.5KE
+g 6 6$e55 6#--->>F!)'!28!< Q Q / QE-4HIY4Z4`4`ad4e4efg4hlw4w4w //m8L\8Z04U5\0BKQ Q Q $*#3#7#7fl#7#K#KL# &!-/5KU,G , $  $ !>>k+>VV%j1(; W WE]+ Wm0DEU0V0\0\]`0a0abc0dhq0q0q++HeM6J<6X,3EN5<,H+W W W"*"6 ( (J%%''''&z2 3 3G!'!4!4x!4!H!HJ!)*;!<X!F [ [ / [E-4HIY4Z4`4`ad4e4efg4hlz4z4z //
E-<PQ]<^07uU|0Lk[ [ [ $-11z1GGF! &!'!1!1z!1!G!G(.J%OO%%% ' 0 3 3#.??4;u3E#F#F' G'-~~'7'7H>FKUE(:; --h777*4*;%-g%6x%@ \ \E$]3 \m8LM]8^8d8deh8i8ijk8lpy8y8y $ 3 3HeM>RS_>`48Ke4M{!\ !\ !\ 4	?23   # #$//11%i0: N NE]+ N %m 45E F L LS Q QRS TXd d d++K}9Ml9[,1%,,?N N N  """"#aW	# W	#s$   ABBB<.D66D:=D:c                     g S )uB   
        Превью результата импорта
        r   )r   r   r   s      r   previewzCmfPluginAsana.previewW  s	     	r   c           
         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#   Поля пользователей)captionr   rQ   u   Поля задачu!   Поля комментариевu   Поля проектовu"   Поля списков задачu   Поля группu   Поля тегов)
r   ru   rt   rQ   rx   ry   rs   rv   CmfPersonGrouprz   )r   r   r   r   s       r   calc_models_settingsz#CmfPluginAsana.calc_models_settings]  s3    !F%/BBDD#-24 4 !6%~@@BB#^02 2 !D%0CCEE#.35 5 !<%0CCEE#.35 5 !E%~@@BB#^02 2 !6%4GGII#279 9 !6%}??AA#]/1 1%, r   )__name__
__module____qualname__r   r   rI   rZ   r   r   r   r   r   __classcell__)r   s   @r   r   r      s        - - - !" : : : : : : :% % %N  HS HS HST( ( (4l# l# l#\        r   r   N)r   cmf.includecmfr   common.fieldsr   r   r   r   r   <module>r      s                    * * * * * *o o o o o%4 o o o o or   