
    B
d
N                     \    d dl m Z  d dl d dlmZ d dlmZ  G d dej                        Zy)    )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                 j    | j                   r'| j                  st        j                         | _        y y y )N)is_newpluginmodels	CmfPlugin)selfs    #./common/models/cmf_plugin_asana.py_init_settingszCmfPluginAsana._init_settings	   s&    ;;t{{ **,DK  +;    r   )depthc                F    | j                          t        |   |d|i|S )Nr   )r   supersave)r   r   argskwargs	__class__s       r   r   zCmfPluginAsana.save   s(    w|T99&99r   c                    ddl }| j                  dg       |j                  j                  | j                  j
                  j                        }t        g       }|j                  j                         D ]2  }|d   j                  |j                  j                  |d                4 |d   D ]  }g |d<   |j                  j                  d|d   i      D ]2  }|d   j                  |j                  j                  |d                4 g |d	<   |j                  j!                  d|d   i      D ];  }|j                  j#                  |d         g d
}|d	   j                  |       |j$                  j'                  |d         D ]  }	|j$                  j)                  |	d         g d}
|d   j                  |
       |j*                  j-                  |	d         D ]  }|j*                  j/                  |d         g d}|
d   j                  |       |j0                  j3                  |d         D ]2  }|d   j                  |j0                  j5                  |d                4   > g |d<   |j6                  j9                  d|d   i      D ]2  }|d   j                  |j6                  j;                  |d                4  |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+FG2$$335 	OCN!!&"3"3"A"A#e*"MN	O (^ 	FEE'N..U5\/JK Jg%%fll&;&;DK&HIJ
 !#E*!??77eEl8ST 
`#)??#>#>wu~#N\^_j!((2%GGPUW `G+1??+F+Fwu~+Vac#dLZ(//=%||AA'%.Q `,2LL,A,A#e*,MZ\$]	$W-44Y?%+^^%H%HU%T `E%i0778P8PQVW\Q]8^_```
` E&M{{++[%,,GH Ff$$V[[%8%8U%DEF+	F0 r   c           	          g }|D ]]  }|j                  |      }t        j                  ||   d      }|r||d<   |j                  |       G|j                  ||d d |d       _ |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   sz     	OCkk#&Gzz$s)Az6H&.
#g&.2DN O	O r   c                 ,   ddl }| j                  dg       |j                  j                  | j                  j
                  j                               }dddt        j                  j                  dg      d   dddi}dg dd	}d
dt        j                  j                  dg      d   dddddt        j                  j                  dg      d   dddddddddd}dg dd	}ddt        j                  j                  dg      d   dddddt        j                  j                  dg      d   dddd}	dg dd	}
dddt        j                  j                  dg      d   dddi}dg dd	}ddt        j                  j                  dg      d   dddddt        j                  j                  dg      d   dddddt        j                  j                  dg      d   dd dddt        j                  j                  dg      d   dddd!dt        j                  j                  d"g      d   dd#dd$dt        j                  j                  d%g      d   dd%dd&}d'g d(d	}d)dt        j                  j                  dg      d   dddd*dt        j                  j                  d+g      d   dd,dd-dt        j                  j                  d.g      d   dd/dd0dt        j                  j                  d1g      d   dd2dd3}d4g d5d	}ddt        j                  j                  dg      d   dddddt        j                  j                  dg      d   dddd}d$g d%d	}d}d}d}d}d}d}|j                   j#                  d6d7i      D ]v  }|j                   j%                  |d8         }| j'                  ||      |d9<   |sZ|j(                  j+                  d7|d8   d:      D ]6  }|j(                  j-                  |d8         }| j'                  ||      |d9<    n |sZ|j.                  j1                  d7|d8   d:      D ]6  }|j.                  j3                  |d8         }| j'                  ||      |d9<    n |r|r|sm|j4                  j7                  d7|d8   d:      D ]H  }|j4                  j9                  |d8         }| j'                  ||	      |
d9<   |sZ|j:                  j=                  d7|d8   d;      D ]6  }|j:                  j?                  |d8         }| j'                  ||      |d9<    n |sY|rW|j@                  jC                  |d8         D ]6  }|j@                  jE                  |d8         }| j'                  ||      |d9<    n |r|jF                  jI                  |d8         D ]7  }|jF                  jK                  |d8         }| j'                  ||      |d9<    H K |sg|sk|so|ss|sw 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K0d$*$5$5$H$H&$RST$U!&2

 GRT"*,	 'D$*$4$4$G$G$QRS$T!&2  'D%+%5%5%H%H'%STU%V"74 %N[_)-"&|=

 4rPWX 1d$*NN$E$Evh$OPQ$R!&2  2t%+^^%F%Fx%PQR%S"74	
 -T 0d$*$7$7$J$JF8$TUV$W!&2#
 $EPRars 1d$*NN$E$Evh$OPQ$R!&2 #;(.(I(I=/(Z[\(]!%j: !@T&,nn&G&G&UVW&X#H6  2t%+^^%F%Fx%PQR%S"74 #:t(.(I(I<.(YZ[(\!%j: )d$*NN$E$Evh$OPQ$R!&2!
* (2GL +$*$5$5$H$H&$RST$U!&2 %1d*0*;*;*N*NP\~*^_`*a#'> %/D*0*;*;*N*NP`Oa*bcd*e#'> !LY]&,&7&7&J&JH:&VWX&Y#H6
 7"S\] 1d$*MM$D$DfX$Nq$Q!&2  2t%+]]%E%Evh%OPQ%R"74	
 #bvF$$33WaLA !	C""00U<B"&"6"6r;L"MIh!<<11ABuI2VW C ,,//E
;C&*&:&:3&NE(O !;;//!"U)0TU C ++--c%j9C%)%9%9#|%LDN c!??77!RTUZR[8\] "C //55c%jAC)-)=)=cCS)THX&#)<<#9#9ARUV[R\:]#^ "C"(,,"7"7E
"CC.2.B.B3.VE(O!" !S%+^^%H%HU%T "E$*NN$<$<U5\$JE040D0DUO0\GH-!" #'-'O'OPSTYPZ'[ "G&,oo&A&A'%.&QG8<8L8LWVm8nOH5!""$ ssw5C!	F 5(OUGTRRr   c                 F   fd}t        |      j                  j                  |      t        t        j                        r	 ||      }nEt        t        j
                        r+t        |      }g }|D ]  }|j                   ||              t        |||       y )Nc                     d }t        | t              r#j                  | j                  dd            }|S j                         D ]"  }|j                  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: "'!5!5!7 "I&]]4&$9J5;T14E3GPTv + WF!M" 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eV334KEv001UIE &T!W%&Z'r   c                    t        dd       |j                  rxt        |j                  d   j                  d      5 }|j                  d   j                  j	                  d      r#t
        j                  |j                               }ddd       nz| j                         }t        j                  |d	      }|j                          t        |j                  d
      5 }|j                  t
        j                  |             ddd       |j                  d   D ci c]  }|d   |
 c}}i }d   D ]  }	t        j                         }
|d   d   D ]F  }|d   s	|d   d   j!                  d      d   dk(  s'| j#                  |
|d   d   |	|d      |       H t        j                  j%                  |
j&                  dg      }|r|}
n|
j                          |
||	d   <   |	d   D ]  }|j%                  |d         }|rt        j)                         }|d   d   D ]F  }|d   s	|d   d   j!                  d      d   dk(  s'| j#                  ||d   d   ||d      |       H |j                          |||d   <    |	d   D ]  }|j%                  |d         }|rt        j+                  d      }|d   d   D ]F  }|d   s	|d   d   j!                  d      d   dk(  s'| j#                  ||d   d   ||d      |       H t        j*                  j%                  |j,                        }|r|}n|j                          |||d   <    g }|	d   D ]r  }t        j/                  |
|
      }|d   d   D ]I  }|d   s	|d   d   j!                  d      d   d k(  s'| j#                  ||d   d   |d!   |d      |       K |j                          |j0                  D ]  }|j3                           |d"   D ]  }t        j5                  |#      }|d$   d   D ]I  }|d   s	|d   d   j!                  d      d   d%k(  s'| j#                  ||d   d   |d!   |d      |       K t        j6                  j%                  |j&                  &      }|s0t        j7                  |j&                  &      }|j                          ||_        |j                          |d'   D ]  }|j%                  |d!   d         }|st        j;                         }|||d!   d   <   |j<                  j?                  |       |j8                  |_        |d'   d   D ]I  }|d   s	|d   d   j!                  d      d   d(k(  s'| j#                  ||d   d   |d!   |d      |       K |j                          ||d)   z  }  |j                          u |D ]w  }t        jA                         }|d)   d   D ]F  }|d   s	|d   d   j!                  d      d   d*k(  s'| j#                  ||d   d   ||d      |       H |j                          y  y# 1 sw Y   NxY w# 1 sw Y   [xY wc c}w )+u5   
        Импортируем данные
        um   Логика status_opt устарела обратитесь в техком или техподдержкуT)abortr   rz.jsonNz
asana.json)rn   r\   zw+import_settingsr]   r   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=   attachsettingsr   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!!j,,Q/993? 01))!,66??H::affh/D0 0 ??$D)),)OFKKMf&&- *

4()* EOD\D\]nDopH[)83p(^ W	#E ++-K!(+H5 J'E-,@AQ,R,X,XY\,]^_,`dp,p''U=5I,5W(-eEl(;[JJ
 ",,00k6F6FPSu0UL*  "(3Ke%V} 	6%//#e*5$mmoG!)&!1(!; P /E-4HIY4Z4`4`ad4efg4hlt4t //}9Ml9[03E%L0A;PP LLN.5KE
+	6 g 6$e5#--->F!)'!28!< Q /E-4HIY4Z4`4`ad4efg4hlw4w //m8L\8Z04U5\0BKQQ
 $*#3#3#7#7fll#7#KL#!-/5KU,6 G , $ !>>k+>V%j1(; WE]+m0DEU0V0\0\]`0abc0dhq0q++HeM6J<6X,3EN5<,H+WW "*"6"6 (J%%'(  'z2 3G!'!4!4x!4!HJ!)*;!<X!F [ /E-4HIY4Z4`4`ad4efg4hlz4z //
E-<PQ]<^07uU|0Lk[[
 $--11z1GF!!'!1!1z!1!G(.J%OO% ' 0 3#.??4;u3E#F''-~~'7H>FKUE(:; --h7*4*;*;%-g%6x%@ \E$]3m8LM]8^8d8deh8ijk8lpy8y $ 3 3HeM>RS_>`48Ke4M{!\\ !4	?2334 I$ L ! #$//1%i0: NE]+ %m 45E F L LS QRS TXd d++K}9Ml9[,1%,,?NN
   "#aW	#0 0* * qs   AY%YY*YY'c                     g S )uB   
        Превью результата импорта
         )r   r   r   s      r   previewzCmfPluginAsana.previewW  s	     	r   c           
      (   dt         j                  j                         t         j                  j                  ddt         j                  j                         t         j                  j                  ddt         j
                  j                         t         j
                  j                  ddt         j                  j                         t         j                  j                  ddt         j                  j                         t         j                  j                  ddt         j                  j                         t         j                  j                  ddt         j                  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]  s4    !F%//BBD#--224 !6%~~@@B#^^002 !D%00CCE#..335 !<%00CCE#..335 !E%~~@@B#^^002 !6%44GGI#22779 !6%}}??A#]]//1%, r   )__name__
__module____qualname__r   r   rI   rZ   r   r   r   r   r   __classcell__)r   s   @r   r   r      s;    - !" :%NHST(4l#\r   r   N)r   cmf.includecmfr   common.fieldsr   r   r   r   r   <module>r      s&       *o%44 or   