
    ;i6                        d dl Z d dlZd dlmZ d dlZd dlZd dlmZ d dlm	Z	m
Z
 d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlmZ d dlZ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)    N)deepcopy)Path)DictIterator)cached_property)ParserError)*)cmf_plugin_csvcmf_contextc                   R   e Zd ZU dZej                         ed<   dZed        Z	de
fdZedee   fd       Zd Zedeeef   fd	       Zed
ede
fd       Zd ZdededefdZd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d Z#dFdefdZ$dFdefd Z%d! Z&d" Z'd#efd$Z(d% Z)d& Z*d' Z+d( Z,d) Z-d* Z.d+ Z/d, Z0 e1jd                  e1jf                  e4d-d./      d0        Z5d1 Z6d2 Z7d3 Z8d4 Z9d5 Z:d6 Z;d7 Z<d8 Z=dGd9Z>d: Z?d; Z@d< ZAi dfd=ZBd> ZCd? ZDd@ ZEdA ZFdB ZGdC ZHdD ZIdE ZJy)HCmfPluginCsvN_loggerr   c                     dt         j                  j                         t         j                  j                  g dddt         j                  j                         t         j                  j                  dgddt         j
                  j                         t         j
                  j                  dgddt         j                  j                         t         j                  j                  dgddt         j                  j                         t         j                  j                  dgdd	t         j                  j                         t         j                  j                  g ddd
t         j                  j                         t         j                  j                  g dddt         j                  j                         t         j                  j                  dgddt         j                  j                         t         j                  j                  dgddt         j                  j                         t         j                  j                  g dddt         j                  j                         t         j                  j                  ddgddt         j                  j                         t         j                  j                  ddgddt         j                   j                         t         j                   j                  ddt         j"                  j                         t         j"                  j                  dddt         j$                  j                         t         j$                  j                  ddg} | S )uR   Собственный магазин при выборе импорта из Jirau#   Поля пользователей)CmfTaskCmfTestplanCmfTestcase)captionfieldsiconavailable_foru!   Поля контрагентовr   u   Поля задачu,   Оперативная гант-задачаu   Журнал работu!   Поля комментариевu   Поля проектовu"   Поля списков задачu   Поля компонентовu   Поля группu   Поля активовr   r   u   Поля локацийu   Поля тесткейсов)r   r   r   u2   Поля тесткейсов тестплановT)r   r   r   hiddenu*   Поля выполнения тестов)models	CmfPersonimport_shop_fieldsr   
CmfCompanyr   CmfGanttTaskCmfTimeTrackerHistoryCmfTimeTracker
CmfComment
CmfProjectCmfListCmfComponentCmfPersonGroupCmfAssetCmfLocationr   CmfTestplanTestcaseCmfTestcaseRun)ress    +./modules/settings/models/cmf_plugin_csv.pycalc_models_settingsz!CmfPluginCsv.calc_models_settings   s    >IYIYIlIlIn%%**=fh;vGXGXGkGkGm&&++ykK-9Z9Z9\^^((I;HFRXReReRxRxRz((--M1V=Y=Y=l=l=n**//9+O;vGXGXGkGkGm&&++>gi3v?P?P?c?c?e&&++>gi<HiHiHk^^((I;H9VEXEXEkEkEm((--M-9N9N9a9a9c**//Bkm1V__=_=_=a__))]M<Z\1V=O=O=b=b=d'',,}?]_76CUCUChChCj'',,.LX^XrXr  YF  YF  YH//44FDPVPePePxPxPz**//4A;
@ 
    returnc                    |j                   }d}d}	 | j                  |      }t        |      D ]  \  }} 	 |S # t        $ r6 d| d| }| j                  j                  |       t        |d       d}Y |S t        $ r' | j                  j                  d| d|        d}Y |S t        t        f$ r' | j                  j                  d| d|        d}Y |S w xY w)	NFr   uK   Не корректный формат загружаемого файла :T)abort*   Приложен пустой файл CSVu5   Не удаётся прочитать строчку)
full_path_file	_get_file	enumerateUnicodeDecodeErrorr   	exception	cmf_alertStopIterationIOError
ValueError)self
attachment	file_path
have_errornum	file_read_msgs           r*   _check_filezCmfPluginCsv._check_fileD   s   --	
	z2I#I. Q  " 	_`i_jjklokpqCLL""3'c&J   	LL""#OT]S^^_`c_dQefJ  $ 	LL""#Z_h^iijknjo\pqJ	s   $9 ;C7+C%1CCc              #     K   t        | j                        }|j                  dk(  rat        j                  t        |            }|j                  d      }|j                         D ]  }|D cg c]  }|j                   c}   y |j                  dk(  rFt        j                  t        |            }|j                  }|j                  d      D ]  }|  y |j                  dk(  rMt        j                  d       t        |d      5 }t        j                   |d	d
      D ]  }|  	 d d d        y y c c}w # 1 sw Y   y xY ww)N.xlsr   .xlsxT)values_only.csvi r;")	delimiter	quotechar)r   r2   suffixxlrdopen_workbookstrsheet_by_indexget_rowsvalueopenpyxlload_workbookactive	iter_rowscsvfield_size_limitopenreader)r<   attachment_file_pathworkbook	worksheetelitemfiles          r*   r3   zCmfPluginCsv._get_fileY   s=    #J$=$=>&&&0))#.B*CDH //2I((* 2.01dtzz112 	 "((G3--c2F.GHH I))d);  	 "((F2  -*C0 D**TSCH BH 	 2 	s+   A+E-D: BE"D?0E?EEc           	      ^   |j                   | _        |j                  sy t        j                  j                  dgdd|j                  gdg      }dg d}t        j                  j                  |dd	g d
gdgdg      }| j                  |      }|rg S | j                  |      }| j                         }t        |      D ]A  \  }}	|dkD  r|j                  d   s n'|dkD  r nt        |	      D ]  \  }
}d}t        |t        j                        r|j                  d      }|dk(  r|r|j                  d   rut!        |j                  d         D ]Z  }d|vrd|vr nP|d   dk7  r|d   D ]=  }|d   |k(  s|d   }|r*| j#                  |d         s|d   j%                  |       d} Z \ |r|d   j%                  |d d d d       |d   |
   }|j                  |d         }||d<   |s||d<   |d   |d<    D |d   s| j                  j'                  d       g S d|d<   |gS )N-cmf_modified_atidz!=json_settings)order_byfilterr   CSVnamer   	file_typeINrH   rE   rF   urlparentrh   rg   r   r   	first_row   Fz%Y-%m-%d %H:%M:%Simport_settingsrk   r   titlemodel_fieldfield_qualnameT)ru   file_valrv   r   rx   r   r1   r   entity)loggerr   attachmentsr   	CmfImportgetre   CmfAttachmentrC   r3   _default_mapping_csvr4   rf   
isinstancedatetimestrftimer   _is_backref_fieldappendr6   )r;   
cmf_importprev_settingssettingsr<   r>   r@   default_mappingirowjvalfoundprev_set
prev_fieldrv   row_settingss                    r*   calc_import_settingsz!CmfPluginCsv.calc_import_settingsm   s   !((%%((,,7I6JTXZ^`j`m`mSn5D4E - G!R0))--'@A()7	 . 

 %%j1
INN:.	335	* *	CFAs1uZ55kBQ#C. %C3 c8#4#45,,':;C6$)D)DEV)W(01L1LM^1_(` *H%X5((:R %'/58 (.6x.@ *
#-g#6##=2<]2KK'24;Q;QR]^nRo;p(0(:(A(A*(M04$)** ! *11CTBFPT3X Y $,H#5a#8L"1"5"5l76K"LK/2L,"6A]3/:6/BV,K%C*	CX !LL""#OPI 'zr,   c                  \   d} d}d}d}i dd| ddd	| dd
d| ddd| ddd| ddd| ddd| ddd| ddd| ddd| ddd| ddd| ddd| dd d!| dd"d#| dd$d%| dd&d'| di d(d)| dd*d+| dd,d-| dd.d	|dd/d|dd0d1|dd2d|dd3d4|dd5d	|dd6d7| dd8d7| dd9d|dd:d;d<dd=d>d<dd?d@d<ddAdBd<ddCdDd<ddEd<ddFd<ddGd<ddHd<dddIddJ}|j                  i dKdHd<ddLddddMd	dddNdOd<ddPdQdRddSd>d<ddTd@d<ddUdFd<ddVdWd<ddXdGd<ddYdZd<dd[d\d<dd]dddd^dBd<dd_d;d<dd`dadddbddcdd	|dd	dcddddcddedcddfdcdddcdd	|dd	dgddhdgddi	       i }t        j                  j                         D ]
  }|||dj   <    |j	                         D ]^  \  }}|j                  dkdl      }	|j                  dmdl      }
t        t        |	      }||
|	 dn|
 |j                  do|j                  dp||<   ` |S )qug    Структура сопоставления полей из файла CSV по умолчанию. r   r!   r"   r#   u/   Ид внешней системы задачиext_id)
field_name
model_nameu   Тема задачиrk   u   Тип задачи
logic_typeu(   Дата изменения задачиcmf_modified_atu&   Дата создания задачиcmf_created_atu*   ФИО изменившего задачуcmf_modified_byu   Код задачиcodeu   Описание задачиtextu   Статус задачиstatusu   Будильник задачи
alarm_dateu$   Крайний срок задачиdeadlineu   Важностьpriorityu   ФИО исполнителяzresponsible.nameu   Email исполнителяzresponsible.emailu   ФИО автораzcmf_author.nameu   Email автораzcmf_author.emailu!   ФИО соисполнителяzexecutors.nameu    Email соисполнителяzexecutors.emailu%   Родительская задачаparent_tasku$   Код основной задачиzparent_task.codeu   Название проектаu   Код проектаu   Префикс задачtask_code_prefixu   Тип проектаu   Вид деятельностиactivityu   Список задачu   Компонент
componentsu   Компонентыu   Код компонентаu/   Фактические трудозатратыactual_workr   u&   Плановая дата началаsched_start_dateu,   Плановая дата окончанияsched_finish_dateu/   Планируемые трудозатраты
sched_worku2   Сумма дочерних трудозатратagregat_workactual_myself_workactual_completeactual_finish_dateoutline_numberr    )ui   Фактические трудозатраты по собственным ресурсам задачиu-   Фактический % завершенияu   Дата финишаu]   Структурный номер (для поиска родительской задачи)u   Комментарийu   СДРu   ИДu   Название_задачиu   Длительностьsched_durationu   Предшественникиin_linkCmfRelationOptionu   Дата_началаu   Дата_окончанияu#   Процент_завершенияu#   Фактическое_началоactual_start_dateu)   Фактическое_окончаниеu   Тип_ограниченияconstrain_start_typeu   Дата_ограниченияconstrain_start_dateu   Дата_созданияu7   Запланированные_трудозатратыu/   Фактические_трудозатратыu   Вехаis_milestoneIDr   folder	cmf_ownersignificancer'   testplan_testcase_folder)	   Расположениеu   Наименование   Набор тестовu
   Авторu   Приоритетu   Статусr   u   Названиеr   r   r    r   .T)r   r   rw   r   requiredverbose_name)	updater   r   r   itemsr}   getattrr   r   )name_cmf_taskname_cmf_projectname_cmf_epicname_cmf_componentr   default_local_attrs_mappingshop_fru   value_modelr   	name_attrmodels               r*   r   z!CmfPluginCsv._default_mapping_csv   sI   
 "'!+)
=hfs?t)
#F-%X)
 ",m#\)
 7GXhu8v	)

 5EUer6s)
 9IZjw:x)
 "&#V)
 ,FR_-`)
 (P])^)
 .lZg/h)
 3:]j4k)
 z W)
 ,<N^k-l)
 +;N^k,l)
 "2CS`#a)
  !1CS`"a!)
" 0@P`m1n#)
$ /?P`m0n%)
& 4Man5o')
( 3CUer4s))
* .fTd/e+)
, $FJZ%[-)
. (8JZj)k/)
0 $LP`%a1)
2 .jXh/i3)
4 &fM'Z5)
6 !]"[7)
8 #<}$]9)
: *&Pb+c;)
< >mky?z=)
> 5EWgu6v?)
@ ;K^n|<}A)
B >ljx?yC)
D AQ_o}B~E)
F I]VdzfL]m{=|4HXf%g }M  ]k  nl5;<&XQ)
T 	 : 
%5^T: 
()D: 

 ,FR[-\: 
 '7GWe(f: 
 -YVi.j: 
 $4FVd%e: 
 *:M]k+l: 
* 2BScq3r+: 
, 2BUes3t-: 
. 8H\lz9{/: 
4 ,<Rbp-q5: 
6 .>Tdr/s7: 
< (8HXa)b=: 
> FVb  sA  HB?: 
B >mky?zC: 
P ~YOQ: 
Z G[: 
\ 8>M](^7=]([6>m'\)4MR1?}"]+3=Q 8>M](^/5EZ [6P`u'vq: 
 :	v ')#nn779 	DF=C'y(9:	D"1"7"7"9 		VE;$r:J#b9IFJ/E=B@IGQlRST]S^D_:?**>BBGBTBT2V'.			V +*r,   rw   c                 8   | j                  d      ^}}t        j                  |      }|D ]m  }t        ||      }t	        |t
        j                  j                        r yt        |d      r|j                  s yt        j                  |j                        }o y)Nr   Tr   F)
splitcmfutilget_model_by_namer   
issubclasscmfr   
CmfBackrefhasattrr   )rw   r   attrsr   attrfields         r*   r   zCmfPluginCsv._is_backref_field5  s    +11#6
U))*5 		;DE4(E%!6!67E7+  --ekk:E		; r,   c                    g }ddg g d}d}t         j                  j                  |ddg dgdg	      }|s%| j                  j                  j                  d
       | j                  |      }|j                  d   rt        |       t        |      D ]  \  }}|dk(  r ng }	|d   j                  |	       t        |j                        D ]f  \  }
}|d   s|d   d   j                  d      d   }|s|dk(  rd}|dv s4|dk(  r|d   j                  |d   d          |	j                  ||
          h  |d   r|j                  |       |s
d|d<   d|d<   |S )Nu   Сделки	handshake)ru   r   titlesrowsFrl   rm   rn   rd   )rq   rh   rg   u)   Не найден файл импортаrr   rs   r   rv   rw   r   r   CmfDealT)r   r   r   r   u   Задачиru   zcalendar-todayr   )r   r~   r}   r   rz   errorr3   rf   nextr4   r   csv_import_settings_fieldsr   )r;   r   resultdealsis_dealattachr@   r   r   data_rowr   r   r   s                r*   previewzCmfPluginCsv.previewG  s   (+UWX%%))'@A() * 

 OO""(()TUNN6*	##K0O	* 	,FAsAvH&M  *()N)NO 	,8.%m45EFLLSQRST
:#:"G!77Avh..x/Fy/QROOCF+	,	,  ?MM% +E'N,E&Mr,   	row_arrayr   c                    t               }t        |d   d         D ]  \  }}||   s|d   s|d   d   |j                  k7  r)|d   d   j                  d      }t	        ||d         }|j
                  j                  d      r|j                  dv rd	||   i||d   <   t        |t        j                  j                        r-t        |      d
kD  r|d
   ||   i||d   <   d||   i||d   <   |j
                  dk(  rt        ||         ||d   <   |j
                  dk(  r| j                  ||         ||d   <   &t        |d      r'| j!                  ||   |j"                        ||d   <   Yt        |t        j                  j$                        rA||   j'                         }	h d}
h d}|	|
v r
d||d   <   |	|v r
d||d   <   d ||d   <   ||   ||d   <    |S )Nr   r   rv   r   r   r   cf_)CmfM2MCmfCascadeChoicerk   rs   r   r   choices>      да1yestrue+>   0nofalse   нет-TF)dictr4   r   r   r   
class_name
startswithwidgetr   r   r   
CmfRelBaselenrQ   calc_priorityr   calc_choicesr   CmfBoollower)r;   r   r   r   r)   idxfield_settingsfield_partsr   rT   true_valuesfalse_valuess               r*   _map_objectzCmfPluginCsv._map_objectl  s   f#,Xa[-B#C %	5CS>!-0.~>%BTBTT(7EKKCPKE;q>2E  ++E2LL$BB'-y~&>KN#E3::#8#89{#a'+6q>9S>*JCA'+3Ys^*DCA'!!X-&))C.&9KN#!!Z/&*&8&83&HKN#	*&*&7&7	#&VKN#E3::#5#56!#,,.?BK'*.CA'l**/CA'*.CA'&/nKN#K%	5L 
r,   c                 p   d }| j                  || j                  j                  d   t        j                        }|ryg }g d}|D ]L  }|j                  |d      }|s|dk(  r|j                  d|d|gdd|gg       n|j                  |d|g        n |r t        j                  j                  |      }|S )	Nrt   r   r   rk   r   r   OR==r   rh   )r  r   rf   r   r!   r}   r   )r;   r   project_objproject_filteruniq_fields
uniq_fielduniq_field_values           r*   _get_projectzCmfPluginCsv._get_project  s    ""3(E(EFW(XZ`ZkZklG4K) 
#*;;z2#> #!X-z4AQ.RU[]acsTt'uv
D:J'KL $//3373Cr,   c                    d }| j                  || j                  j                  d   t        j                        }|rg }g d}|D ]L  }|j                  |d      }|s|dk(  r|j                  d|d|gdd|gg       n|j                  |d|g        n |rZt        j                  j                  |d	      }	|j                  d
d|gdd|	gg       t        j                  j                  |      }|S )Nrt   r  r   r   r  r  r   sprinttree_parentsys_typerq   r  r  )	r  r   rf   r   r"   r}   r   	CmfFolderextend)
r;   r   r	  
sprint_objr  r  r  r  r  sprint_folders
             r*   _get_sprintzCmfPluginCsv._get_sprint  s   
!!#t'D'DEV'WY_YgYghG4K) 
#)::j"#= #!X-z4AQ.RU[]acsTt'uv
D:J'KL  & 0 0 4 4W_ 4 `4 =tUb?cde#^^//w/?
r,   c                    dt         j                  j                   d}g }t        j                  d|      D cg c]"  }|j                         r|j                         $ }}|D ]  }t        j                  ||      rdd|g}ndd|g}d|d	d|ggd
d|gg}t         j                  j                  |      }	|	r|j                  |	       e| j                  j                  d| ddd        |S c c}w )u  
        Получает список компонентов, найденных по идентификатору(код, название)

        Args:
            component_identifiers (str): любой идентификатор(код, название)
            project (CmfProject): проект

        Returns:
            list: список компонентов
        ^z-(\d+)$z[^,;]+r   =rk   ILIKEr  r   rq   r  u   Компонент 'u   ' не найденzERR-0089r#   obj_type)r   r#   code_prefixrefindallstripmatchr}   r   r   	log_error)
r;   component_identifiersr
  code_patternr   
identifieridentifiersidentifier_filtercomponent_filter	components
             r*   _get_componentszCmfPluginCsv._get_components  s,    F//;;<GD

 !jj4IJ
! 
 

 & 	Jxxj1%+S*$=!%+Wj$A! %sJ/
 3(  ++//7G/HI!!),))*:,6IJ+ * #	. 9
s   'C/c                 N   t         j                  j                  dd|g      }|st         j                  j                  dd|j	                         g      }t        |      dkD  r9| j                  j                  d| dt        |       d	d
d       t        d      |r|d   }|S )Nr   r  r  rk   r  rs   u<   Компаний с одинаковым названием z > uF   , укажите код компании вместо названияzERR-0071r   r  u]   Найдено несколько компаний с одинаковым названиемr   )	r   r   r}   listr#  r   r   r%  	Exception)r;   r   company	companiess       r*   _get_companyzCmfPluginCsv._get_company  s    ##''f/E'F))..vw6W.XI9~!))RSYRZZ]^abk^l]m n[ \)	 *      A  A#A,r,   c                    d }|rg }g d}|D ]h  }|j                  |d      j                         }|s&|dk(  r|j                  d|d|gdd|gg       n"|j                  |d|j                         g        n |r t        j
                  j                  |      }|st        d| d	      |S t        j
                  j                  g d
      }| j                  j                  j                  d       |S )N)r   r   asset_code_prefixr   r   r  r  r   r  u/   Не найдена схема активов "uf   ", создайте схему и укажите префикс кода активов в файле.)systemr  Tu   Не указана схема активов. Установлена схема активов по-умолчанию (системная))
r}   r#  r   upperr   CmfAssetSchemer0  r   rz   warning)r;   asset_schemeasset_scheme_objr  r  r  r  s          r*   _get_asset_schemezCmfPluginCsv._get_asset_scheme  s   GAK) 
#/#3#3J#C#I#I#K #!X-z3@P.QTZ\_aqSr'st
C9I9O9O9Q'RS #)#8#8#<#<G#<#L #El^ Tz {     &4488@U8VOO""** _  r,   c           	      8   d }|r|j                  d      xs$ |j                  d      xs |j                  d      }|rH|j                         }t        j                  j                  dd|gdddd| dgdd|gdd	|gggdg
      }|st	        d| d| d      |S )Nr   r   rk   rq   r  r  LIKE%r  rh   r   u1   Не найдена группа активов "u   " в схеме uY   , создайте группу и укажите ID, код или имя в файле.)r}   r#  r   CmfAssetCatr0  )r;   	asset_catr;  asset_cat_objr  s        r*   _get_asset_catzCmfPluginCsv._get_asset_cat"  s    (}}X6h)--:OhS\S`S`agSh#3#9#9#;  & 2 2 6 6!3(89 %v3C2DA/FG#S*:;#W.>?	 %: !7 ! !G	{Rbcsbt un o 
 r,   c                 D   d }|rg }g d}|D ]Z  }|j                  |d      j                         }|s&|dk(  r|j                  d|d|gdd|gg       n|j                  |d|g        n |r4|j                  dd|g       t        j                  j                  |      }|S 	Nr  r   r   r  r  r   rq   r  )r}   r#  r   r   CmfAssetType)r;   
asset_typer;  asset_type_objr  r  r  r  s           r*   _get_asset_typezCmfPluginCsv._get_asset_type>  s    G4K) 
#->>*b#A#G#G#I #!X- $!+S2B C!'.> ?  
C9I'JK #/?@A!'!4!4!8!8!8!Hr,   c                 D   d }|rg }g d}|D ]Z  }|j                  |d      j                         }|s&|dk(  r|j                  d|d|gdd|gg       n|j                  |d|g        n |r4|j                  dd|g       t        j                  j                  |      }|S rF  )r}   r#  r   r   CmfAssetTypeCat)r;   asset_type_catr;  asset_type_cat_objr  r  r  r  s           r*   _get_asset_type_catz CmfPluginCsv._get_asset_type_catY  s    !G4K) 
#1#5#5j"#E#K#K#M #!X- $!+S2B C!'.> ?  
C9I'JK #/?@A%+%;%;%?%?w%?%O"!!r,   c           
         t         j                  j                  j                  |      }|j                  }|s|S |j
                  }|j                         D ci c]  \  }}|j                         | }}}|j                         j                         }|j                  |      }	|	sR||vrN|j                         D cg c]  }d| d
 }
}t        d| d|j                   ddj                  |
             |	xs |xs |S c c}}w c c}w NrK   u&   Не найдено значение "u
   " для "u2   ". Укажите одно из значений: , )r   r%   r   r}   defaultr   r   r   r#  valuesr0  r   join)r;   r   rT   r   field_defaultfield_choiseskvr   field_valuerT  s              r*   _get_asset_field_choisesz%CmfPluginCsv._get_asset_field_choisest  s   &&**:6   &++-
1 GGIqL
 

 ##%kk%(uM9(5(<(<(>?1!Ah?F?8z%-- YBBF))FBSATV 
 4e4}4
 @s   D>D
c           	      n   d }|r|j                  d      r|d   j                         }t        j                  j                  dddd| dgdd|gdd|gdd|gg	      }|s1t        j                  j                  dddd| dgd
d|gdd|gg	      }|s"| j
                  j                  d| ddd       |S )Nr   r  r>  r?  loginr  emailrk   r  r   r  u7   Не найдена группа владельцев "rK   zERR-0085r%   r  )r}   r#  r   r   r$   r   r%  )r;   responsibleresponsible_objresponsible_ext_ids       r*   _get_asset_responsiblez#CmfPluginCsv._get_asset_responsible  s   ;??84!,X!6!<!<!>$..22v+=*>a'@Ag'9:g'9:W&89 3 O #"("7"7";";!6Q/A.B!+DE&89*<=	 #< # #))MN`Maabc' *  r,   c           
         g }|r|j                  d      r|d   }|j                  d      D ]  }|j                         }t        j                  j                  dddd| dgdd|gdd|gd	d|gg
      }|s1t        j
                  j                  dddd| dgdd|gd	d|gg
      }|s#| j                  j                  d| ddd       |j                  |        |S )Nr   rJ   r  r>  r?  r]  r  r^  rk   r  r   r  u5   Не найдена группа поддержки "rK   zERR-0086r%   r  )	r}   r   r#  r   r   r$   r   r%  r   )r;   support_group_datasupport_group_objssupport_groupssupport_groupsupport_group_ext_idsupport_group_objs          r*   _get_asset_support_groupz%CmfPluginCsv._get_asset_support_group  sG   "4"8"8"B/9N!/!5!5c!: A'4':':'<$$*$4$4$8$8!6Q/C.DA+FG '+?@ '+?@*>? %9 %! )(.(=(=(A(A %v3G2H/JK#S*>?#W.BC	  )B )% )OO--OPdOeefg"!+ .  '--.?@9A< "!r,   c                     d }|ry|j                  d      rh|d   j                         }t        j                  j                  dddd| dgdd|gdd|gg	      }|s"| j                  j                  d
| ddd       |S )Nr   r  r>  r?  r   r  rk   r  r  u/   Не найдена локация/адрес "rK   ERR-0087r%   r  )r}   r#  r   r&   r   r%  )r;   locationlocation_objlocation_ext_ids       r*   _get_asset_locationz CmfPluginCsv._get_asset_location  s    X.&x0668O!--11v?*;1'=>S/2Wo6	 2 L  ))EoEVVWX' *  r,   c                    t         j                  j                  |dddg      }|D ]B  }	 ||d<   ||d<   | j                  | j                  t         j
                  |       t                D t         j
                  j                  dd|gdg      }t        |      |_        |j                  r|j                  d       t                y# t        $ r8}t                | j                  j                  d| d| d	d
       Y d}~d}~ww xY w)u   
        Создает/обновляет компоненты проекта

        Args:
            components (list): список сырых данных компонентов
            project (CmfProject): проект
        r   Ttree_node_is_branch)r  r  include_systemr   rq   r  uG   Не удалось создать/обновить компонент . zERR-0088r#   r  Nr  --r@  save_import)r   r  r}   process_any_table_fieldsr   r#   
cmf_commitr0  cmf_rollbackr%  sgetboolrr  
is_changedsave)r;   r   r
  component_foldercomponent_dataexchas_components          r*   _process_componentsz CmfPluginCsv._process_components  s+    "++//!)*	 0 
 ) 	N+2x(0@}---OO''"
 	$ ++00!3(896 1 
 04M/B,&&!!d!3!  ))]^l]mmopsotu+ *  s   ?C

	D.DDr2  c                     |D ]  }d|d<   | j                   j                  j                  d|        | j                  | j                   t        j
                  |      \  }}|j                  j                          |s{t        |j                  j                        dk(  st        j                  j                  dd|j                  gg dg      }|j                  j                  |       |j                           y )	NTservicedesk_allowu1   Пытаемся создать компанию project.servicedesk:defaultzparent.coder  )zproject_role.coder  zsdesk-client:defaultr  )r   rz   inforx  r   r   dpcommitrQ   r   r   CmfProjectRoleAssignr}   membersr   r~  )r;   r2  r
  r1  company_objis_newrole_assigns          r*   _process_companieszCmfPluginCsv._process_companies  s      	#G+/G'(OO""''*[\c[d(ef"&"?"?QWQbQbdk"lKNN!!#3w11667;XX$99==&gll;J >  ##**;7  "	#r,   personsc                 *   |D ]  }d }|j                  d      r(|d   j                  d      }| j                  |      |d<   | j                  j                  j	                  d|        | j                  | j                  t        j                  |      \  }}|j                  j                          |rMt        |j                  j                        dk(  r+|j                  j                  st        |j                        }| j                   j#                  |t%                     }|s&|j&                  s4|j&                  j                  j)                  t*        j,                        ri|j/                  |j&                  j                          y )Nr1  r   u9   Пытаемся создать пользователя r  )r}   r3  r   rz   r  rx  r   r   r  r  rQ   r   r   
user_localrT   re   person_emails
setdefaultsetr^  endswithconfig
ORG_DOMAINadd)	r;   r  r
  person
project_idcompany_ext_id
person_objperson_is_newproject_person_emailss	            r*   _process_personszCmfPluginCsv._process_persons&  s?    	BFJzz)$!'	!2!6!6x!@$($5$5n$Ey!OO""''*cdjck(lm(,(E(EdooW]WgWgio(p%JMM  "G..3348UU&1177 _
$($6$6$A$A*ce$T!"((&,,22;;F<M<MN%))**:*:*@*@A)	Br,   c                    d|d   j                    d|d   j                    }d|d   j                   d|d   j                   }t        j                  j	                  dd|g	      }|s| j
                  j                  j                  d
       t        j                  j	                  dd|d   j                  j                  d      d    dg	      }|s t        j                  j	                  d      }t        j                  ||| j
                  d      }||_        |j                  r|j                  d       t        j                  j	                  |d   d         }|s/dd|d   d   gg dg}t        j                  j	                  |	      }|s(t        j                  |d   d   | j
                  d      }|d   d   |_        |j	                  d      }|s|d   d   }| j                  |      }	|	|_        |d   d   |_        |j                  r|j                  d       |j                    d|d   d    }
t        j                   j	                  |
      }|s(t        j                   j	                  dd|gdd|gg	      }|s.t        j                   j	                  dd|d   d   gdd|gg	      }|sH| j
                  j                  j                  d       t        j!                  || j
                  |d      }|
|_        |d   d   |_        ||_        |	|_        |j                  r|j                  d       d|d   j                    }d |d   d    }t        j$                  j	                  |      }|sCt        j$                  j	                  d!      }t        j%                  ||| j
                  d      }||_        t'        |d   j                        d"v r||_        |j                  r|j                  d       t        j*                  j	                  |d   ||d#$      }|s=|d   |d#|| j
                  dd%}t        j*                  d&i |}|j                  d       |||fS )'NzCSV::rq   ::r   u   БП для проекта u    и типа r   r  r  u/   Не нашли БП, создаем новыйr   r>  r/   r   r?  zdefault.system:defaultr   T)r   templater   import_originalrv  r   r   rk   r  r   r  N)rk   r   r  cache_status_typeworkflowstatus_codeu7   Не нашли статус, создаем новый)r  r   r  r  u%   CSV-схема для проекта softdev:default)task.agile:defaulttask.base:defaultr   )r   targer_workflow	scheme_wfcmf_model_name)r   target_workflowr  r  r   r   )re   rk   r   CmfWorkflowr}   r   rz   r  r   r   r}  r~  CmfStatusCoder   calc_status_typestatus_type	CmfStatusr  CmfSchemeWfrQ   default_task_workflowCmfSchemeWfRule)r;   taskr   rk   r  r  cmf_status_coder  r  r  status_ext_idtask_statusscheme_ext_idscheme_nameschemerule	rule_dicts                    r*   _process_workflowzCmfPluginCsv._process_workflow=  s   h**+2d<.@.C.C-DE,T(^-@-@,AtT`OaOfOfNgh%%))(C1H)IOO""''(YZ))--fflI[I`I`IfIfgjIklmInHoopFq5r-sH!--117O1P))!?? $	 * H MMdM+ ..22$x.:R2Sd8nX&>?AWXG$2266g6FO$22(^H-?? $ 3 O
 "&h!9 HH%89  $Xx 8))*;<&1##H~h7%%  T 2#;;-r$x.*B)CD&&**-*@ **..S(+_57. K
  **..d8nU]F^7_3=tX2N7P. QKOO""''(ab **!??+ $	 + K +>(3"1"-!!.X 1 123=d8nV>T=UV##''}'=))--3D-EH''$!?? $	 ( F "tL!&&'+VV+3F(KKDK)%%))T,5GYa4:9 * V"<0#+"+#"oo#'I ))6I6DII$I'x,,r,   c                    d }d }d }d }|j                  d      r*|d   j                  d      r|d   d   j                         }|r!t        j                  j                  ddd| dg      }|s| j                  j
                  j                  d| d       t        j                  j                  d	d
|gdg      }|sN| j                  j
                  j                  d| d       t        j                  j                  dd|gdg      }|r@|j                  rd| |j                   |_        nd| d|_        |j                  d       |r|d   d   j                         }| j                  j
                  j                  d| d       d	d
|gg dg}t        j                  j                  |      }|r*dd
|gdd
|gg}t        j                  j                  |      }|s*dd
|gd	d
|gg}t        j                  j                  |      }|sS| j                  j
                  j                  d| d       dd
|gdd|gg}t        j                  j                  |      }|sL|j                  d      r| j                  |      \  }}}n%| j                  j
                  j                  d       ||d<   ||d<   |S )Nr  r   r>  %::::%r  u   Ищем БП по коду "rK   r   r  r@  u   Ищем БП по имени "rk   r  r  Trv  r   u-   Ищем статус в БП по коду "r  r  u/   Ищем статус в БП по имени "r   ut   Невозможно создать БП и статус, не указан логический тип задачи)r}   r#  r   r  r   rz   r  r   r~  r  r  r  r9  )	r;   r  workflow_schemeworkflow_ext_idr  r  r  filter_r  s	            r*   _calc_workflowzCmfPluginCsv._calc_workflow  s   88JD$4$8$8$B":.x8>>@O))--h#oM^^aHb5c-dH&&++.KOK\\],^_!--11&#9W:B 2 E  OO**//2QRaQbbc0de%1155fg=_>FZ  6  IH ,..??P*Q,..?r*BMMdM3 $Xx 8 > > @&&++.[\i[jjk,lm"C79OP$2266g6F *C:]CQ\<]^G"("2"2"6"6g"6"FK" *C:VS-<X[G"("2"2"6"6g"6"FK"OO**//2aboappq0rs *C:VWm<\_G"("2"2"6"6g"6"FKxx%9=9O9OPT9U6;&&..  0f  g#Z$Xr,   projectsc                    |j                         D ]  }|d   }|j                  d      sd|d<   |j                  d      s$t        j                  j                  d      |d<   n| j	                  |d      |d<   |j                  d      s#t        j
                  j                  d	      |d<   |j                  d
      r| j                  |      |d
<   | j                  | j                  t        j                  |      \  }}|j                  j                          |s| j                  |d   |      }|r||_        |j                          | j                  |d   |       | j!                  |d   |       | j#                  |d   |       | j%                  |d   |       | j&                  j)                  |j*                  j-                         j.                  j0                          y )Ndataproject_typer
  r   project.agile:defaultr  r!   r  r  r   	workflowssprintsr   r2  r  )rT  r}   r   CmfLogicType_process_logic_typer  _process_activityrx  r   r!   r  r  _process_workflowsr  r~  _process_sprintsr  r  r  gantt_project_idsr  main_gantt_projectloadre   rT   )r;   r  r
  project_datar	  r  r  s          r*   _process_projectszCmfPluginCsv._process_projects  s   ( 	[G"6?L##N3/8^,##L1-3-@-@-D-DJa-D-b\*-1-E-ElT`-a\*##K0,2,>,>,B,BHY,B,Z[)
++/+A+A,+OZ("&"?"?QWQbQbdp"qKNN!!#"&"9"9'+:NP["\",;K)$$&%%gi&8+F(()>L''(<kJ%%gi&8+F&&**;+I+I+N+N+P+S+S+Y+YZ3	[r,   c                 f   t         j                  j                  d      }t         j                  j                  |d      }|D ]J  }	 ||d<   ||d<   ||d<   | j	                  | j
                  t         j                  |      \  }}t                L t         j                  j                  dd|gdg      }	t        |	      |_        |j                  r|j                  d       t                y # t        $ r8}t                | j
                  j                  d| d	| d
d       Y d }~d }~ww xY w)Nzlist.agile_sprint:defaultr  r  r  rq   r  r   uA   Не удалось создать/обновить спринт rt  zERR-0090r"   r  r  ru  r@  Trv  )r   r  r}   r  rx  r   r"   ry  r0  rz  r%  r{  r|  rr  r}  r~  )
r;   r  r
  sprint_logic_typer  r  r  r  r  has_sprintss
             r*   r  zCmfPluginCsv._process_sprints  s:   "//339T3U((,,8,T 	F#*x (5}%'8|$%)%B%B4??TZTbTbdj%k"
F	 nn))!366 * 
 -1,=)##40!  ))WX^W__abeafg& *  s   AC//	D08.D++D0c                     d }|D ]P  }||d<   |j                  d      r| j                  |d      |d<   |j                  d      s@| j                  |      }R |S )Nrq   r   r   r   )r}   r  r  )r;   r  r
  r  r  s        r*   r  zCmfPluginCsv._process_workflows  si    ! 	@H!(HX||L))-)A)A(I)V&||H%"&"5"5h"?	@ r,   c                 t   | j                  || j                  j                  d   t        j                        }d|v r|d= |r	 i ddddddd	d
dddddd
dddddddddddddddddd
ddddd}dddddddddd	}|j                  d      r|j                  d      }|d   j                         j                         }|j                  |      }|dv r||d<   n|d v rd|d<   d |d<   ||d!<   ||d"<   n|dk(  r|d#v r||d<   nd|d<   d |d<   ||d!<   ||d"<   nd|d<   t        j                  j                  j                  j                         D 	cg c]  }	d$|	 d$
 }
}	| j                  j                  d%| d&d'j                  |
       d(d)*       | xj                  d+z  c_        |j                  d!      r|d!   d,vr|d!   j                         j                         }|j                  |      |d!<   |d!   d,vrt        j                  j                  j                  j                         D 	cg c]  }	d$|	 d$
 }
}	| j                  j                  d-| d&d'j                  |
       d.d)*       | xj                  d+z  c_        d/D ]m  }|j                  |      s|j                  |      j                  d0      r%|j                  |      d d1 j                         ||<   t!        ||         d2z  ||<   o d3D ]  }|j                  |      s||   j                         j                  d4      r||= ;d5}t#        j$                  |||   t"        j&                        }|sh|j)                  d+      j+                  d6d7      }t!        |      d8z  d2z  ||<    |j-                  |D cg c]  }d9| 	 c}       d:D ]  }||vs||   s||   }t/        |t0        j0                        r-d;d<d=d>d?d@dAdBdCdDdEdFdG}|j3                         D ]<  \  }}||j                         v s|j                         j+                  ||      ||<    n |dHk(  sd ||<    dID ]*  }||vs||   s||   }t5        t!        |            }|||<   , |D ]&  }t7        |j8                  j:                  |||          ( |j                  dJ      s|j-                  g dK       |j8                  j<                  r|j8                  j>                  rt        j@                  jC                  |j8                  jE                         |j8                  j<                  j:                  |j8                  j>                  j:                  |j8                  jF                  j:                  L      }||j8                  _$        |j8                  jK                  dMN       y y c c}	w c c}	w c c}w # tL        $ rM}tO                | j                  j                  dO| dP| dQd)*       | xj                  d+z  c_        Y d }~y d }~ww xY w)RNrt   r      фиксированная0-constu   как можно раньше1-earlyu   как можно позже2-latter   не раньше3-after   не позже4-beforeu    начало не позднееu   начало не ранее&   окончание не позднее2-before"   окончание не ранее1-after'   фиксированное начало-   фиксированное окончание   фн   фоu   кмрu   кмпu   ннрu   ннп)   онр   онп)	u   фиксированныйr  r  r  r  r  r  r  r  r   r   )r  r  r  r  )r  r  constrain_finish_typeconstrain_finish_date)r  r  r  rK   uG   Не найден тип ограничения даты начала "u,   ". Укажите один из типов: rR  zERR-0082r   r  rs   )r  r  r  uM   Не найден тип ограничения даты окончания "zERR-0083)r   
const_workr   r   r      ч<   )r   actual_duration?u*   (\d+[\.,]?\d*)\s*(?:д|дней|день)?,r      zop_gantt_task.)r   r   r   r   r   r  janfebmaraprmayjunjulaugsepoctnovdec)u   январьu   февральu   мартu   апрельu   майu   июньu   июльu   августu   сентябрьu   октябрьu   ноябрьu   декабрьu   НД)r   r   )zop_gantt_task.sched_start_datezop_gantt_task.sched_finish_datezop_gantt_task.sched_durationzop_gantt_task.is_manual)calendarfrom_dtto_dtforce_include_endsTfrom_importu:   Не удалось импортировать Гантт u    для задачи zERR-0072)(r  r   rf   r   r   r}   r#  r   r   r   rT  r%  rU  _has_errorsr  r  floatr!  search
IGNORECASEgroupreplaceload_fieldsr   r   r   intsetattrop_gantt_taskrT   r   r   CmfCalendarget_duration_minutes_get_calendar	is_manualr   check_gantt_projectr0  commit_with_event)r;   r   task_objganttconstrain_start_type_mappingconstrain_finish_type_mappingr   constrain_start_type_rawr   ttypesconstrain_finish_type_rawkeypatternr$  r   _vmappingmonth_rumonth_encalendar_durationes                         r*   _process_ganttzCmfPluginCsv._process_gantt"  sd     doo&C&CDU&VX^XkXklu$&'m&00)0 5i0 3J	0
 (0 &z0 7
0 3I0 =j0 9)0 >y0 DY0 I0  I!0" i#0$ j%0& i'0( j)0* ((-0,6 3<)2'1EN:C>H%'(1- 9934+0995K+L(/45K/L/R/R/T/Z/Z/\,+G+K+KLd+e(+/]]8L45-1HH8A458<459M569M56-:3  8I  I<PE"89<EE"89<@E"89=QE"9:=QE"9:8A45393F3F3[3[3c3c3j3j3l ma1QCq m m11ef~e @HHL		RWHXGY[&%3	 2  ((A-( II5656>``056M0N0T0T0V0\0\0^-5R5V5VWp5qE1245=__393F3F3\3\3d3d3k3k3m na1QCq n n11k  mF  lG GHHL		RWHXGY[&%3	 2  ((A-(l <Cyy~ 99S>2248).3)<)B)B)DE#J%*5:%6%;c
< C =Cyy~ :++-66s; !&c
$"O "		'5:r}} M "'++a."8"8c"BC).sa")<E#J= $$%Nse&<%NO a *C%'uSz sB!"h&7&78 (-*/$)(-"'$)$)(-,1*/(-*/G /6mmo "*(#rxxz1)+););Hh)OE#J!" V|%)c
5*8 1 $C%'uSz sBU2YB!#E#J$ ! KCH2288#uSzJKyy!12((  -->>8CYCYCkCk,2,>,>,S,S%-%;%;%I%I%K$,$:$:$K$K$Q$Q"*"8"8"J"J"P"P/7/E/E/O/O/U/U	 -T -) AR..=&&::t:LM B !n  !o6 &Ov  &!#))PQVPWWlmulvw+ * 
   A%  &si   DW! W,CW! >WA W! ,A1W! AW! 1AW! 7WA-W! 1+W! E3W! W! !	X7*AX22X7c                 2   i ddddddddddddddddd	dddd
dddddddddddddddddddddddddddddddddddddddddd dd!d!d"dd#d#d$di}|d%k7  rd&nd'}| j                   j                  j                  d(||           ||   j                  d)||   j                  d*            j	                         }|j                  |      }|rt
        j                  j                  d+d,|d+   gd)g-      }|j                  r%||j                  vr"d.| |j                   |_        nd.| d.|_        |j                  r|j                  d/0       |S t
        j                  j                  d)d1d2| d3g4      }|r|S | j                   j                  j                  d5| d6       t
        j                  j                  d+d,|gd)g-      }|s%t
        j                  j                  d*d7|gd)g-      }|r\|j                  r%||j                  vr"d.| |j                   |_        nd.| d.|_        |j                  r|j                  d/0       |S | j                   j                  j                  d8       |d9k(  rd}n|d:k(  rd}n|d;v rd }t
        j                  j                  d+d,g4      }	t        d.| d.|||	<      }
| j                  | j                   t
        j                  |
      \  }}t                |S )=NzSub-tasku   Подзадачаztask.sub:defaultrk   r   SubtaskStory	UserStoryztask.userstory:defaultu   ИсторияTaskz
Task Agiler  u   Задачаr  Bugztask.bug:defaultu   Багu   ЭпикEpicztask.epic:defaultu   Классическийu&   Проект. Классическийzproject.base:defaultAgileu   Проект. Agiler  zService Desku   Проект. Service Deskr  ServiceDeskDeviceasset.device:defaultSoftwarezasset.software:defaultVMzasset.vm:defaultrA  r   default_logic_typeu   Логический тип r   rk   r   r  r@  r  Trv  r>  r  r  r  uF   Ищем логический тип по коду или имени ''r  uF   Не нашли, создаем новый логический типr   r!   )r%   rA  )r   rk   r  r  )r   rz   r  r}   r#  r   r  r   r}  r~  r   rx  r  )r;   objr   	name2codelogic_type_fieldr   logic_type_dictr   template_coder  logic_type_paramsr  s               r*   r  z CmfPluginCsv._process_logic_type  s   
!5?QR
 4>PQ
 !+?I["\
 k3KL	

 {<TU
 \3GH
 ^=PQ
 E+=>
 u.@A
 1DE
 V-@A
 '1Ycy(z
 3=TU
 %AKhi
 $@Jgh
  x1GH!
" 5MN#
$ 4);<%
	( ,6+F<L`##&B3GWCXBY$Z[%&**8S9I5J5N5Nv5VW]]_#--/,,00W]G^8_iqhr0sJ  !2!22*,VHZ5F5F4G(HJ%&(O
!$$D1((,,XvVHTWGX4Y,Z
 	##&lmslttu$vw((,,VT64JT\S],^
,,00&8Q[cZd0eJ  !2!22*,VHZ5F5F4G(HJ%&(O
!$$D1##$lm"0M<'3M662M&&**642O*P "VHB&,0:*24 "::4??;A;N;N;LN
F 	r,   c                 R   ddddddddddd	dd
ddddddddddddddd	}| j                   j                  j                  d|d           |d   j                  d|d   j                  d            }|j                  |      }|rt        j
                  j                  dd|d   gdg      }|j                  r%||j                  vr"d| |j                   |_        nd| d|_        |j                  r|j                  d       |S t        j
                  j                  ddd | d!g"      }|r|S | j                   j                  j                  d#| d$       t        j
                  j                  dd|j                         gdg      }|s3t        j
                  j                  dd%|j                         gdg      }|r\|j                  r%||j                  vr"d| |j                   |_        nd| d|_        |j                  r|j                  d       |S | j                   j                  j                  d&       t        d| d|j                         '      }| j                  | j                   t        j
                  |      \  }}t                |S )(u"    Виды деятельности   Бизнесbusinessr2     Продажиsales   Маркетинг	marketing   Производство
production   Поддержкаhelpdesk   Бухгалтерияfinance!   ИТ инфраструктураservicedesk%   Хозяйственная часть	household   Разработка ПОsoftdev)	rH  rJ  rL  rN  rP  rR  rT  rV  rX  u    Вид деятельности r   r   rk   r   r  r@  r  Trv  r>  r  r  r  uJ   Ищем вид деятельности по коду или имени 'r@  r  uJ   Не нашли, создаем новый вид деятельности)r   rk   )r   rz   r  r}   r   CmfActivityr   r}  r~  r#  r   rx  r  )r;   r
  rB  r   activity_dictr   activity_paramsr  s           r*   r  zCmfPluginCsv._process_activity   s    &4ZH'7I+?"U1KUa(b+?"T/GQZ&[:]gt1u>eoz5{2MW`)a

	 	##&FwzGZF[$\]$((7:3F3J3J63RS!f-))--fdMRXDY5Zdlcm-nH0(*6(8??2C&DHO$&vhb/""$/O%%))(Fc&QTDU1V)WO 	##&pqwpxxy$z{%%))&$1OYaXb)c))--fgv||~5V`h_i-jH0(*6(8??2C&DHO$&vhb/""$/O##$pq 6("oFLLNK889?9K9K9HJ& 	r,   c                    | j                   j                  j                  d       t        | j                        }d}t        j                         }| j                  D ]~  }| j                   j                         r y | j                   j                  j                  | d|        |dz  }ddd|gdd|gg}t        j                  j                  |dd	g
      }|s7| j                   j                  d| dd       | xj                  dz  c_        | j                  |   D ]1  }	 ddd|gdd|gg}t        j                  j                  |g d
      }	||	_        |	j                  j                  j!                  d      s%|	j                  j                  j!                  d      r|	j                  |	_        |	j%                  d       |	j&                  j)                  |	j&                  j+                                |	j&                  j-                  d       |	j&                  j.                  j0                  r|	j&                  j%                  d       4 |j                  j                  j!                  d      s!t        j                  j5                  dg dg dgdd|ggdg
      }t7        |      |_        |j0                  sm|j%                  d        t        j                         |z
  }| j                   j                  j                  d|dd       y # t2        $ rA}
| j                   j                  d| dd       | xj                  dz  c_        Y d }
~
Dd }
~
ww xY w) Nu5   Привяжем подзадачи к задачамrs       из r  r   r  r   r   rr  r@  uE   Не удалось найти родительскую задачу zERR-0073r   r  )r   r  r   task.subproject	task.epicTrv  r  u4   Не удалось привязать задачу zERR-0074)r_  r`  )logic_type.coder>  ztask.subproject%)ra  r>  z
task.epic%r  r  ru  u<   Обработка подзадач выполнена за .3f    сек.)r   rz   r  r   subtaskstime	monotonic	is_cancelr   r   r}   r%  r  r   r   r   r   r  r~  r  r  save_preload_fieldsr  rT   r}  r0  r{  r|  rr  )r;   totalr   t1parent_ext_idr  r   child_ext_id_filter_childr  r/  rd  t2s                r*   _process_subtaskszCmfPluginCsv._process_subtasksX  s2   ##$[\DMM"^^!]] 9	7M((*OO""''1#VE7(;<FAhm<vt]>[\G ..,, ) - K ))[\i[jk& * 
   A%  $m < **%)HdL+IFTXZfKg$hM!>>--]Kw-xD'2D$++667HI#33>>{K+/+;+;(II$I/&&2243E3E3Y3Y3[\&&::t:L))//::**//D/A*, %%**556VW!>>.. !KE
 '[9 !6 / 
 37x./))$$$6s9	7v ^^"##&bcefibjjr$st3 ! *OO--N|n]"!* . 
 $$)$$*s   'D-L!!	M+*6M&&M+c                    | j                   j                  j                  d       t        | j                        }d}t        j                         }| j                  D ]  }	 | j                   j                         r y | j                   j                  j                  | d|        |dz  }t        j                  j                  |d         }|s&t        j                  j                  dd|d   g      }|s;| j                   j                  d	|d    d
dd       | xj                  dz  c_        t        j                  j                  dd|d   g      }|s;| j                   j                  d|d    dd       | xj                  dz  c_        ;t        j                  j                  dd|d   g      }|s;| j                   j                  d|d    dd       | xj                  dz  c_        t        j                  j                  |||      }|sRt        j                  |||| j                   d      }d|v r
|d   |_        d|v r
|d   |_        |j#                  d        t        j                         |z
  }	| j                   j                  j                  d|	d d!       y #  | j                   j                  d| dd       | xj                  dz  c_        Y xY w)"Nu&   Создадим связи задачrs   r^  typer  rk   r  r  u2   Не удалось найти тип связи "rK   zERR-0075CmfRelationTyper  r   r   u=   Не удалось найти входящую задачу zERR-0076r   out_linku?   Не удалось найти исходящую задачу zERR-0077)relation_typer   rs  T)rt  r   rs  r   r  constrain_lagconstrain_lag_pctrv  u.   Не удалось создать связь zERR-0078r   u8   Обработка связей выполнена за rb  rc  )r   rz   r  r   	relationsre  rf  rg  r   rr  r}   r%  r  r   r   ru  rv  r~  )
r;   ri  r   rj  relation_datart  r   rs  relation_optionrn  s
             r*   _process_relationszCmfPluginCsv._process_relations  s   ##$LMDNN#^^!^^ @	&M?&??,,.&&++qcw,?@Q & 6 6 : :f@U : V$$*$:$:$>$>vsTabhTiFj$>$kM$OO--Mm\bNcMddfg"!2 . 
 $$)$ ..,,XsMR[D\4],^OO--WXefoXpWqr"!* . 
 $$)$!>>--h]S]E^5_-`OO--YZghrZsYtu"!* . 
 $$)$"(":":">">"/#% #? #
 '&,&>&>&3 '!)#'??(, '? 'O '-78Eo8V5*m;<IJ]<^9#((T(:s@	&D ^^"##&^_abe^ffn$op&))D]OT0 * 
   A%  s(   "J6>B6J65A!J6A!J6;A6J668K1c                    | j                  || j                  j                  d   t        j                        }|r>| j                  j
                  j                  d|        d|d<   | j                  |d<   d|d<   |j                  d      r,t        j                  j                  d	d
|d   d   g      |d<   |j                  d      r)t        j                  j                  |d   d         |d<   t        j                  di |}|j                  rR|j                  rF|j                  j                  t        j                  |j                  j                        z   |_        |j!                  d       y y )Nrt   u   Грузим журнал closedr   r   Tr  
cmf_authorr]  r  r   r  rq   r  )minutesrv  r  )r  r   rf   r   r   rz   r  r}   r   r   
start_date
time_spentrT   r   	timedeltaend_dater~  )r;   r   timetracker_historyhistorys       r*   _process_timetrackerz!CmfPluginCsv._process_timetracker  sm   "..s/3/L/LM^/_/5/K/KM OO""''*DEXDY(Z[,4)04-59 12"&&|44:4D4D4H4H#W.A,.OPX.YZ 5I 5#L1 #&&x0060B0B.x8B 1C 1#H- 22I5HIG!!g&8&8#*#5#5#;#;h>P>PY`YkYkYqYq>r#r LLTL*' r,   
      )	max_triesmax_timec                    | j                   j                  d   }| j                  ||t        j                        }| j                   j                  j
                  j                  d      rNt        j                  j                  | j                   j                  j
                  j                  d            }n| j                  |      }|r|r|j                  d      st        d      ||d<   |j                  d      rW| j                  |d      |d<   |d   j                  j                  d	      r$t        j                  j                  |d
      |d<   |j                  d      r| j                  |       |j                  d
      r|d
   |d<   |j                  d      r|j                  d
      s|d= dD ]u  }|j                  |      }|s|j                  d      r't        j                  j                  dd|d   g      }nt        j                  j                  d;i |}|sq|||<   w dD ]7  }|j                  |      }|st!        |      j#                         dv s3d||<   9 | j                   j%                  d|        |j'                  dd       }dd| j                   j(                  gg ddd|d   gg}	| j                   j                  j
                  j                  dd       }
| j                   j                  j
                  j                  dd      }|rp|j                  d      r_|j                  d      j                  | j                   j*                  j
                        s!| j                   j*                   d|d    |d<   |j                  d      rd}
dd|d   g}	n$|j                  d      rd}
d dd|d   gdd|d   gg}	|
st-        j.                  |j                  d      |j                  dd!      z   |j                  dd!      z   d"z   j1                               j3                         }| j4                  j6                  j9                  |d#$      }|5  | j;                  | j                   t        j                  ||	|
%      \  }}d d d        n1| j;                  | j                   t        j                  ||	|
%      \  }}rt        j=                  d&| j>                  j@                   d'| j>                  jB                   d(| j                   j                   d)d*| j                   d+,      }|jE                  d+-       |jF                  jI                          | j                   j%                  d.| d/|j                  d       d0|j                  d       d1|j                  d       d2	       nU| j                   j%                  d3 d/|j                  d       d0|j                  d       d1|j                  d       d2	       | jK                  ||       | j                   j                  j
                  j                  d4      rNt        jL                  j                  | j                   j                  j
                  j                  d4            }n| jO                  ||      }|r5|jP                  jS                          |jP                  jU                  |       |r| jW                  |d   |      |_,        n| j                  || j                   j                  d   t        jZ                        }|rN|j                  d      xs$ |j                  d      xs |j                  d      }| jW                  ||      |_,        |j\                  r|jE                  d+-       |j^                  j
                  j\                  r|j^                  jE                  d+-       |jF                  jI                          | j                  ||t        j<                        }|r|j                  d5      rz|j                  d6      ri||d<   | j;                  | j                   t        j<                  |      \  }}n5|r3| j                   ja                  d7d8d9       | xjb                  d:z  c_1        | je                  |       | j                   jF                  jI                          y # 1 sw Y   "xY w)<Nrt   target_project_idre   rk   u:   Не указано наименование задачи!rq   r   r   r`  epicr  r  r   r   )r}  r   r   r_  waiting_forr   r]  r  r  )r   )r   Fu_   Пытаемся создать или обновить задачу по параметрам r   cmf_import.pluginr  r  r  Tmerge_identic_namesext_id_per_importr/   r   r  r   .lockx   timeout
filter_objdont_updateuB   Задача импортирована из файла: <a href="" target="_blank"></a> ()   Tr   	log_levelrq   r   r  rv  u'   Создали новую задачу  ext_id= code= name='r@  u   Нашли задачу target_list_idr   r   u   Невозможно импортировать задачу без проекта, создайте проект и укажите ID в файлеERR-0079r  rs   r  )3r   rf   r  r   r   rT   r}   r!   r  r0  r  r   r   r  r  r   rQ   r   logpoppluginre   hashlibsha256encode	hexdigestredis_dbredislockrx  r    import_filero   rk   r~  r  r  r0  r"   r  listsr  r   r-  r   r#   r}  r  r%  r  r  )r;   r   rt   r  r	  r(  r   r  task_componentsr  r  r  lock_keyr  r   task_is_newcommentr  r  component_identifiercomment_objcomment_is_news                         r*   _process_taskzCmfPluginCsv._process_task  s/   
 //778IJ_fnnE??((..223FG ++//4??3P3P3V3V3Z3Z[n3o/pK ++C0K488F# \]](DNxx%%)%=%=dI%N\"%**55kB*0*:*:*>*>;ag*>*hD'xx!##D)xx&*6l]#xx&txx/?'c +hhsmwwx(!'!1!1!5!5gwPST\P]=^!5!_!'!1!1!5!5!<!<$*S	+ ) &hhsm3s8>>+|; %DI&
 OO  #B  CG  BH  !I  J #hh|T:O %dDOO,B,BC/tF|,G #oo;;AAEEF[]bccK $ = = C C G GH[]b c TXXh%7@R@]@]^b^m^m^p^p^v^v@w$(OO$6$6#7qh8H!IXxx#!4f6(##T4>2tT(^4  #>>XXf%(<<txxRT?UUX__ggi)+  }}**//#/F ,0,I,I#*$/ -J -)Hk  )-(E(EOONN& + )F )%+  ++%%)%5%5%9%9$::LTM]M]MbMbLc d!__112!5  ##$( , 
 .

!!###=hZxPTPXPXYaPbOc d HHV,-WTXXf5E4FaI
 ##.xj(AS@T U HHV,-WTXXf5E4FaI
 X.,,22667GH#^^//4??3P3P3V3V3Z3Z[k3l/m
!--c;?
##%%%j1 &*&:&:?8;TVa&b#!%!1!1OO112CD''"
 "&**84 6)--f56)--f5 )
 +/*>*>?SU`*aH'""$/%%++66&&+++=KK &&sOV=N=NOG7;;'78W[[=P$,!.2.K.KDOOLRL]L]LS/U+^ OO%% g" & 
 !!!#&!!#} s   )2c--c7c                 "   | j                   j                  d   }	 | j                  ||t        j                        }|sy |j                  d      st        d      | j                  ||t        j                        }|s|j                  d      }| j                  |      }| j                  ||t        j                        }|s|j                  d      }| j                  ||      }||d<   |r|j                  n||d<   |j                  d      r| j                  |d      |d<   dd	i|d
<   |j                  d      r| j                  |       |j                  d      r| j                  |      |d<   | j                  d|j                  d            |d<   | j                  d|j                  d            |d<   | j                  d|j                  d            |d<   | j                  d|j                  d            |d<   | j!                  |j                  d            |d<   | j#                  |j                  d            |d<   |j                  d      }|r|d= | j                   j%                  d|        dd| j                   j&                  gg ddd|d   gg}	| j                   j                  j(                  j                  dd       }
|j                  d      rd}
dd|d   g}	n\|j                  d      rd}
dd|d   g}	n@|j                  d      rd}
dd|d   g}	n$|j                  d      rd}
ddd|d   gdd|d   gg}	|
stt+        j,                  t/        |j                  d            t/        |j                  dd            z   t/        |j                  dd            z   t/        |j                  dd            z   t/        |j                  d d            z   t/        |j                  d!d            z   t/        |j                  dd            z   t/        |j                  dd            z   d"z   j1                               j3                         }| j4                  j6                  j9                  |d#$      }|5  | j;                  | j                   t        j                  ||	|
%      \  }}d d d        n1| j;                  | j                   t        j                  ||	|
%      \  }}rV| j                   j%                  d& d'|j                  d       d(|j                  d       d)|j                  d       d*	       nU| j                   j%                  d+ d'|j                  d       d(|j                  d       d)|j                  d       d*	       |j                  }| j                  ||t        j<                        }|s|j                  d,      }| j?                  ||      }|r5|j@                  jC                          |j@                  jE                  |       | jG                  |      }|r!|jH                  jC                          ||_$        |jJ                  r|jM                  d-.       |jN                  jQ                          | j                   jN                  jQ                          y # 1 sw Y   xY w# t        $ r@}| xjR                  d/z  c_)        | j                   jU                  d0| d1d2       Y d }~vd }~ww xY w)3Nrt   rk   u2   Не указано название актива.rq   rB  r   r%   r   zasset.system:defaultr  r   r   ownership_typedevice_typeenabled_statusoperational_statusrm  r_  rg  u[   Попытка создать или обновить актив по параметрам r  r  r  r  Fr   serial_numberimeir  r   inv_nophone_numbermarkcoder  r  r  r  u#   Создан новый актив r  r  r  r@  u   Найден актив asset_typesTrv  rs   u*   Ошибка импорта актива. zERR-0084r  )+r   rf   r  r   r%   r}   r0  r8  r<  rA  rD  rq   r  r  r  r[  rp  rb  r  r  rT   r  r  rQ   r  r  r  r  r  rx  rG  rJ  r  r  r   rj  rg  r}  r~  r  r  r  r%  )r;   r   rt   assetr:  r;  rB  rC  support_group_tmpr  r  r  r  	asset_objasset_is_newrH  rI  re  r  s                      r*   _process_assetzCmfPluginCsv._process_asset  s   //778IJn	$$S/6??KE99V$ TUU  ++C&BWBWXL$yy2#55lC ((ov?Q?QRI!IIk2	 //	;KLM!.E+6Cm22IYE(O yy&&*&>&>uj&Ql# "*+A BE*yy"##E* yy$$($:$:5$Aj! '+&C&C 		*+'E"# $(#@#@		-($E-  '+&C&C 		*+'E"# +/*G*G$		./+E&' !% 8 8:9N OE* $(#>#>uyy?W#XE-  %		/ : /*OO"}  D  ~E  !F  G
 %dDOO,B,BC/uV}-G #oo;;AAEEF[]bccKyy #!4v7?+#*D%2HI6"#!4v78$#T5?3tU8_5  #>>EIIf-.eii<=>eii345 eii"567 eii;<	=
 eii
B789 eii345 eii"567 "" VX )+  }}**//#/F .2.K.K#*$/ /L /+I|  +/*G*GOOOO& + +H +'	< ##9)HUYYW_M`La b!IIf-.geii6G5HK
 ##.yk%))HBUAV W!IIf-.geii6G5HK  -33))#@S@STJ"YY}5
!11*>NON%%**,%%,,^< "&!>!>?P!Q!'',,.*<	'##40LL! 	!!#s b  	!OO%%<SEB# &  	s6   #[ Q[ 2Z87G[ 8[=[ 	\6\		\c                    d }|r|j                  d      rq|d   j                         }|j                  dddd| dgdd|gdd|gg	      }|s9| j                  j                  d
|j                   d| dd|j                         |S )Nr   r  r>  r?  r   r  rk   r  r  u   Не найден z "rK   rl  r  )r}   r#  r   r%  r   )r;   r   obj_datarA  r   s        r*   _get_objectzCmfPluginCsv._get_objecti  s    X.h'--/F))v6(!}5S&)Wf-	  C ))()9)9(:"VHAF"-- *  
r,   c                 D   | j                   j                  d   }|d   }| j                   j                  j                  j                  d      rNt        j
                  j                  | j                   j                  j                  j                  d            }n| j                  |      }|s3| j                   j                  ddd       | xj                  d	z  c_        | j                  ||t        j                        }|r||d
<   | j                  ||d	d  |       y y )Nrt   r   r  r  u   Невозможно импортировать тесткейс без проекта: создайте проект или укажите ID в файлеr  r   r  rs   rq   )r   rf   rT   r}   r   r!   r  r%  r  r  r   _process_testcase_rows)r;   r   rt   main_rowr	  testcases         r*   _process_testcasezCmfPluginCsv._process_testcase  s   //778IJ7??((..223FG ++//4??3P3P3V3V3Z3Z[n3o/pK ++H5KOO%% o& & 
 !##Hov?Q?QR!,HX''$qr(OL r,   c                 h   fdj                  d      st        d      j                  d      rt        j                  j                  d   d      }d   d   j	                  d	      }|j                          t        j                  d
t        |d         z   dz   j                               j                         }| j                  j                  j                  |d      }|5   ||      d<   d d d        t        j                  j                  d      d<   t        j                  j                  d      d<   j                  d      rcdgdgdgd}d   d   j!                         }	d }
|D ]8  }|	||   v s|}t        j"                  j                  ddd   gdd|gg      }
 n |
d<   j                  d      r9dgdgdgd gd!gd"}d   j!                         }d }|D ]  }|||   v s|} n |d<   j                  d#      r3| j%                  t        j&                  d#j                  d#            d#<   d$D ]  }j                  |      }|s|j                  d      rI|d   j!                         }t        j(                  j                  d%dd&d'| d'gd(d)|gd*d)|gdd)|gg      }nt        j(                  j                   dLi |}|s||<    | j*                  j-                  d+        d,d| j*                  j.                  gg d-ddd   gg}j                  d      r	ddd   g}n"j                  d      rd%ddd   gddd   gg}| j1                  | j*                  t        j&                  |d./      \  }}|rt        j3                  d0| j4                  j6                   d1| j4                  j8                   d2| j*                  j:                   d3d4|| j*                  d56      }|j=                  d57       |j>                  jA                          | j*                  j-                  d8| d9j                  d       d:j                  d       d;j                  d       d<	       nU| j*                  j-                  d=| d9j                  d       d:j                  d       d;j                  d       d<	       d>d?d@idAd>d?dBidAd>d?dCidAdDdEidDdFidDdGidH}|D ]s  }d|i}tC        |dI   dJ         D ]H  \  }}||   r|dK   |v s||dK      }||   ||dD   <   |dJ   jE                         D ]  }|dJ   |   ||<    J | jG                  |       u |jH                  r|j=                  d57       |j>                  jA                          y # 1 sw Y   xY w)MNc                    |j                         }t        j                  j                  d   | |      }|s<t        j                  d   | d|      }|j	                          | j	                          |r	 ||      S |S )Nrq   )rq   r  rk   abstractrq   r  r  rk   )r  r   CmfTestcaseFolderr}   r~  )r  
subfoldersfolder_namer   
get_folderr  s       r*   r  z7CmfPluginCsv._process_testcase_rows.<locals>.get_folder  s    $..*K--11)'  2 F
 11#H- +'$	 2    "!&*55Mr,   rk   9   Не указано название тест-кейса.r   rq   u   Тест-кейсыrq   rk   r   /r  r  r  r  r  ztestcase.base:defaultr  r   r  r   u%   Требуется доработкаu
   Готовu   Не готов)draftapprovedfailr  r   r  r  r   u   Самый высокийu   Высокийu   Среднийu   Низкийu   Самый низкий)   r  rs   r   r  rq  r}  r   r   r_  r  r>  r?  r]  r  r^  ua   Попытка создать или обновить тесткейс по параметрам r  r  Fr  uD   Тесткейс импортирован из файла: <a href="r  r  r  r  Tr  rv  *   Создан новый тест-кейс r  r  r  r@     Найден тест-кейс r   step_sectionpre)r   r   mainpostr   expected_result	test_datar  )u   Предусловияu   Шагиu   Постусловияu%   Ожидаемый результатu   Тестовые данныеu   Комментарииr   r   ru   r  )%r}   r0  r   CmfRegistryr   reverser  r  rQ   r  r  r  r  r  r  r  r#  r  _get_field_choisesr   r   r   r  r  rx  r    r  ro   rk   r   r~  r  r  r4   keys_process_stepr}  ) r;   r  r   rt   registryr  r  r  statusesr  r   variantr  significancessignificance_ext_idr   r(  r   r   r  r  rA  r  r  testcase_step_fieldsr   testcase_stepr   r   r   other_fieldr  s     `                             @r*   r  z#CmfPluginCsv._process_testcase_rows  s   	( ||F#WXX<<!))--Xh5GNc-dH!(+H5;;C@J  ~~$s:b>'::WD ik  ==&&++Hc+BD F%/*%E"F "(!4!4!8!8>U!8!V%1155;R5S<<!#J"M%1N!2 36H %X.x8>>@MF#  HW$55")K#--11#S(:*>?{3:71 8F  "(HX<<'/0$%$%"#./M #+>":"@"@"BL( &-*@@#*L (4H^$ <<#66v7I7I4:HLL<P RHV Q 	+C,,s#C778$ ]002F#--11 %v6(!}=$gv6$gv6#Wf5  2 F $--118C8F$*HSM!	+$ 	  AI  @J  K  	L
 !$(>(>?+T8F+,
 <<tXf%56G\\(#x124(!34G 33OO 4 
V ''!!%!1!1!5!5 66HIYIYI^I^H_ `--.a1 ?? $ ( 
G LLTL*JJOO<SE(,,W_J`Ia b V,-WX\\&5I4J!M
 OO1#hx||H?U>V W V,-WX\\&5I4J!M 6<X]G^&_'-.&9QR5;X^G_&`6BDU5V.:K-H'3Y&? 
  		.C&-M%oa&8&BC W5A5>5I#I!5eGn!E>A!fn\:;#1(#;#@#@#B WK1?1I+1VM+.WW }-		. >>HHH&OF Fs   -V''V1c           
      h   dD ]  }|j                  |      }|s|d   j                  |      }|s-|j                  d      rI|d   j                         }t        j                  j                  dddd| dgdd|gd	d|gd
d|gg      }nt        j                  j                   di |}|s|||<    d }|j                  d      r	dd|d   g}n"|j                  d      rddd|d   gdd|d   gg}| j	                  | j
                  t        j                  ||d      \  }}|r2| j
                  j                  d| d|j                  d       d       n1| j
                  j                  d| d|j                  d       d       |j                  d       |j                  j                          y )N)r}  r   r   rq   r   r  r>  r?  r]  r  r^  rk   r  r   r  Fr  u   Создан новый шаг r  r@  u   Найден шаг Trv  r  )r}   r#  r   r   rx  r   CmfTestcaseStepr  r~  r  r  )	r;   r  r(  r   r   r  r  rA  r  s	            r*   r  zCmfPluginCsv._process_stepE  s   A 	0C##C(C#H-11#6778$ ]002F#--11 %v6(!}=$gv6$gv6#Wf5  2 F $--118C8F)/M#&%	0( V$t]6%:;Gx(}X674x!89G 33OO"" 4 
V OO"A#f]M^M^_eMfLggh ijOO"6se6-BSBSTZB[A\\] ^_T"r,   c                    | j                   j                  d   }|d   }| j                   j                  j                  j                  d      rNt        j
                  j                  | j                   j                  j                  j                  d            }n| j                  |      }|s3| j                   j                  ddd       | xj                  d	z  c_        | j                  ||t        j                        }|r"t        j                  j                  |d
      }t        j                  j                  |d      }|st        j                  d|j                  z   dz   j!                               j#                         }| j$                  j&                  j)                  |d      }	|	5  t        j                  ||dd      }|j+                          |j+                          d d d        t        j,                  j                  ||      }
|
st        j                  d|j                  z   dz   j!                               j#                         }| j$                  j&                  j)                  |d      }	|	5  t        j-                  ||d      }
|
j+                  d       d d d        | j                  ||t        j.                        }| j1                  t        j.                  |      |d<   ||d<   | j3                  |
||d	d         |j+                  d       y y # 1 sw Y   =xY w# 1 sw Y   xY w)Nrt   r   r  r  u   Невозможно импортировать тест-кейс тест-плана без проекта: создайте проект или укажите ID в файлеr  r   r  rs   u   Тест-планыr  u0   Импортированный тест-планtestplanr  r  r  r  r  )rq   tree_parent_foldertestplan_root_folderu2   Импортированные тест-кейсыrq   r  rk   Trv  r  rq   )r   rf   rT   r}   r   r!   r  r%  r  r  r'   r  r   r  r  re   r  r  r  r  r  r~  CmfTestplanTestcaseFolderr   r  _process_testplan_testcase_rows)r;   r   rt   r  r	  testplan_testcaser  r  r  r  r  r  s               r*   _process_testplan_testcasez'CmfPluginCsv._process_testplan_testcases  s   //778IJ7??((..223FG ++//4??3P3P3V3V3Z3Z[n3o/pK ++H5KOO%% D& & 
 ! ,,XHbHbc))--[G\-]H))--")[ . H ">>(++-7??A)+  }}**//#/F $%11*$,!+O	  2  H MMOMMO$ $*#C#C#G#GH $H $> '">>+hkk9GCKKM)+  }}**//#/F @+1+K+K'HQ ,L ,( )--$-?@ ''/6CUCUVH,0,<,<V=O=OQY,Zj)*2h'001EGXZ^_`_aZbcMMdM+I $ $ @ @s   4:L)+L6)L36L?c                 >   fdj                  d      st        d      j                  d      rd   d   j                  d      }|j                          t	        j
                  dt        |d         z   d	z   j                               j                         }| j                  j                  j                  |d
      }|5   ||      d<   d d d        dD ]  }d   j                  |      }|s|j                  d      rI|d   j                         }	t        j                  j                  dddd|	 dgdd|	gdd|	gdd|	gg      }
nt        j                  j                   d$i |}
|
s|
|<    | j                  j!                  d        dd| j                  j"                  gg dddd   gg}j                  d      r	ddd   g}n"j                  d      rdddd   gddd   gg}| j%                  | j                  t        j&                  |d      \  }}|rV| j                  j!                  d| dj                  d       dj                  d       dj                  d       d 	       nU| j                  j!                  d!| dj                  d       dj                  d       dj                  d       d 	       |j(                  r|j+                  d"#       |j,                  j/                          y # 1 sw Y   >xY w)%Nc                    |j                         }t        j                  j                  d   | |      }|s<t        j                  d   | d|      }|j	                          | j	                          |r	 ||      S |S )Nrq   r  r  )rq   r  r  rk   )r  r   r  r}   r~  )r  r  r  r   r  r  s       r*   r  z@CmfPluginCsv._process_testplan_testcase_rows.<locals>.get_folder  s    $..*K5599(2#.  : F
 99,X6'2'$	 :    "!&*55Mr,   rk   r  r   r   r  r  r  r  r  r  r  r  r  r>  r?  r]  r  r^  r  uv   Попытка создать или обновить тест-кейс тест-плана по параметрам r  r  r  r   Fr  r  r  r  r  r@  r  Trv  r  )r}   r0  r   r  r  r  rQ   r  r  r  r  r  r#  r   r   r   r  r  rx  r'   r}  r~  r  r  )r;   r  r  r   r  r  r  r(  r   r   r  r  rA  r  r  s     `           @r*   r  z,CmfPluginCsv._process_testplan_testcase_rows  s   	( !$$V,WXX  !;<*+EFxPVVWZ[J  ~~,s:b>/BBWL ik  ==&&++Hc+BD 6@J(*A6!"<=6 Q 	4C#J/33C8C778$ ]002F#--11 %v6(!}=$gv6$gv6#Wf5  2 F $--118C8F-3%c*!	4$ 	  U  Vg  Uh  i  	j
 !$(>(>?+T,V45
   (t%6v%>?G""8,0:;4!28!<=G 33OO&& 4 
V OO<SEJ[J_J_`hJiIj k)--f56g>O>S>STZ>[=\\]_
 OO1#h?P?T?TU]?^>_ `)--f56g>O>S>STZ>[=\\]_
 >>HHH&}6 6s   	LLc           
         |j                   j                  |      }|j                  }|s|S |j                  }|j	                         D ci c]  \  }}|j                         | }	}}|j                         j                         }|	j                  |      }
|
sR||vrN|j                         D cg c]  }d| d
 }}t        d| d|j                   ddj                  |             |
xs |xs |S c c}}w c c}w rQ  )r   r}   rS  r   r   r   r#  rT  r0  r   rU  )r;   r   r   rT   r   rV  rW  rX  rY  r   rZ  rT  s               r*   r  zCmfPluginCsv._get_field_choises	  s     ,   &++-
1 GGIqL
 

 ##%kk%(uM9(5(<(<(>?1!Ah?F?8z%-- YBBF))FBSATV 
 4e4}4
 @s   C60C<c           
      B   d}| j                   j                  j                  j                  d      }t	        d      5  t
        j                  | _        	 | j                   j                         rn|j                         \  }}||j                  ||f       n|	 | j                   j                  j                  d| d|        |dk(  r| j                  |       |dk(  r| j                  |       n"| j                  |       | j                  |       d d d        |j                  |       y # t         $ rZ}| j                   j"                  j%                          |d	z  }| j                   j'                  d
| d| d| dd       Y d }~yd }~ww xY w# 1 sw Y   xY w)Nr   ry   F)init_views_and_dsu   Импорт строки r^  r   r   rs   u<   Не удалось импортировать строку z: rt  zERR-0041r   r  )r   rf   rT   r}   r   APPREDIS_DBr  rg  putrz   r  r  r   r  r  r0  r  rollbackr%  )	r;   	row_queuerow_queue_errors
total_rowserrorswhatrow_numrow_datar  s	            r*   _process_row_workerz CmfPluginCsv._process_row_worker'	  s   ,,2266x@51 	LLDM??,,.$-MMO!#MM7H"56OO**//2LWIU[\f[g0hi},..x8},77A**84++H5# 	< 	V$ ! OO&&//1aKFOO--VW^V__abjakkmnqmrs"!* .  +	 	s8   AFA:D/F/	F8AFFFFFc                    ddl m} d}t        j                         5  t        j	                         5  t
        j                  j                  |dg      }|| _        t
        j                  j                  |ddg dgdgd	g
      | _
        t        | j                  | j                        D cg c]  }d c}      }t        j                  d      }	t        j                         }
g }t        | j                         D ]w  }t#        j$                  | j&                  d|dz    |	|
|d      }|j)                  |       |j+                          | j                  j,                  j/                  d|        y | j                  j0                  d   }| j                  j0                  j2                  j                  d      }g }d}t5        | j                  | j                              D ]  \  }}| j                  j7                         r n|j0                  d   r|dk(  r7||k  r=||kD  r n|dv rd }|dk(  r"| j9                  ||t
        j:                        }n&|dk(  r!| j9                  ||t
        j<                        }|r.|r|	j?                  |dz   |f       g }|j)                  |       |}|j)                  |       |	j?                  |dz   |f        |r|dv r|	j?                  |dz   |f       g }|	j?                  d       |D ]  }|jA                           |
jC                         s$||
j                         z  }|
jC                         s$d d d        d d d        |S c c}w # 1 sw Y   xY w# 1 sw Y   |S xY w)Nr   r   r	   )re   r   rl   rm   rn   rd   ro   rp   rs   i  )maxsizez_process_row_worker )r
  r  r  )targetrk   kwargsu.   Параллельный обработчик rt   ry   rr   r   r   r   r   )NN)"cmf.appr   r   disable_acldisable_notifyr   r|   r}   r   r~   r  r   r3   queueQueuerangethreading_max_forks	threadingThreadr  r   startrz   r  rf   rT   r4   rg  r  r   r'   r  rU  empty)r;   cmf_import_idstart_index	end_indexr   r  r   rA   r  r
  r  threadsr   threadrt   r  r   i_headr   rA  s                       r*   process_rows_forkzCmfPluginCsv.process_rows_forkK	  sS   '  " H	1G$:$:$< H	1))--u-MJ(DO%3377!#T+DE,-w	  8  D 8H8H)IJAaJKJD1I${{}G4334 g"))33/Aw7%.,<&0 v&&&++.\]c\d,efg #oo;;<MNO??0066::8DDDF#DNN43C3C$DE 03??,,.++K8Q!V{?y=99C},"..sOVEWEWX."..sOVE_E_`%MM6A:t*<=#%DC(!"C(MM1q5#,/708  >>vz401MM,'!  ',,.*..00 ',,.OH	1 H	1T  KH	1 H	1 H	1T s6   M6A;M*-	M%6JM*M6%M**M3	/M66N c                 x   dd l }|j                  dddd| j                  j                  j                   d| j                  j                   d| d| d		gd
d
t        dd      t        dd            }| j                  j                  d|j                   d| d|        | j                  j                          |S )Nr   z/usr/bin/python3z	manage.pyshellz%plugin = models.CmfPluginCsv.get(id="z'");retcode = plugin.process_rows_fork("z", rR  z);Tz"/var/log/eva-import-subprocess.logza+z&/var/log/eva-import-subprocess.err.log)	close_fdsstart_new_sessionstdoutstderru,   Запустили подпроцесс PID u)    для обработки строк с u    по )	
subprocessPopenr   r  re   r[   r  pid
log_detail)r;   r#  r$  r/  procs        r*   _execute_rowszCmfPluginCsv._execute_rows	  s    "K78N8N8Q8Q7R S77;7I7I6J#k]Z\]f\ggik
 "<dC@$G   

 	J488*T}  J  ~K  KQ  R[  Q\  ]  	^""$r,   c                 (   | j                   j                  j                  j                  d      }|dv rd}n| j                  }t        | j                  | j                        D cg c]  }d c}      }||z  }||z  }| j                   j                  j                  d       t        j                         }g }t        |      D ]B  }	|	|z  }
|
|z   }|	dz   |k  r|dz  }n||z  }| j                  |
|      }|j                  |       D |D ]>  }|j                          |j                   s | xj"                  |j                   z  c_        @ t        j                         |z
  }| j                   j                  j                  d|dd       y c c}w )Nry   r  rs   u5   Запуск обработки строк файлаuA   Обработка строк файла выполнена за rb  rc  )r   rf   rT   r}   max_processesr   r3   r  rz   r  re  rf  r  r4  r   communicate
returncoder  )r;   r  r6  rA   r  
chunk_size	remainderrj  	processesr   r#  r$  r3  rn  s                 r*   _process_rowszCmfPluginCsv._process_rows	  s   ,,2266x@11 M ..MT^^D4D4D%EF!FG
=0
.	##&[]^^	}% 
	#Aj.K#j0I1u}$Q	Y&	%%k9=DT"
	#  	4D  DOO3 	4
 ^^"##&ghjkngoow$xy5 Gs   %	Fc                 @   |j                         D ]  \  }}i }|j                  |       d }|r?|||d   <   | j                  j                  j	                  d|        t
        j                  | j                  d      }|j                         D ]  \  }	}
t        ||	|
        |j                          t
        j                  j                  t        |j                        ddg      }|r|n|}|j                  rq|j                  re||_        |j                  d       |j                   j#                          | j                  j                  j	                  d	|j                          |j                  d
      sq| j%                  |d
   ||xs |        y )Nrq  u"   Обработка локации T)r   r  r	   rq   rj   rv  u   Создана локация children)r   r   r   rz   r  r   r&   r  
_calc_namer}   rQ   rk   r}  r  rq   r~  r  r  _process_locations)r;   	locationsparent_location_dataparent_location_objrk   r  current_locationrm  new_locationr   rT   existing_locations               r*   r@  zCmfPluginCsv._process_locations	  s   #//+ 	mJD$!##$89H15 f.&&++.PQaPb,cd%11#$(  2   *:)?)?)A =%JL*e<='')$*$6$6$:$:\../? %; %!
 1B,|&&8+C+C&9HOMMdM3KK&&(OO**//2PQYQ^Q^P_0`axx
#''Z(8:JHLkXkl=	mr,   c                     t         j                  |d      }|D ]T  }||d<   ||d<   | j                  | j                  t         j                  |      \  }}|j
                  j                          V y )Nr  rq   r  rq   r  )r   r  rx  r   rL  r  r  )r;   asset_type_catsr;  asset_types_folderrM  rN  rA   s          r*   _process_asset_type_catsz%CmfPluginCsv._process_asset_type_cats	  sz    #--5EP]-^- 	+N'7N8$,>N=)$($A$A&&%!
 !!((*	+r,   c                     |D ]g  }||d<   | j                  |d   |      |d<   | j                  | j                  t        j                  |      \  }}|j
                  j                          i y )Nrq   rM  )rO  rx  r   r   rG  r  r  )r;   r  r;  rH  rI  rA   s         r*   _process_asset_typesz!CmfPluginCsv._process_asset_types
  sv    % 	'J#3Jx +/+C+CJO_D`br+sJ'( $ = =##!NA
 $$&	'r,   c                 P   t         j                  j                  |d      }|j                         D ]  }|d   }||d<   ||d<   |j                  d      r| j	                  |d      |d<   n#t         j
                  j                  d	      |d<   | j                  | j                  t         j                  |      \  }}|j                  j                          |s|d
   D ]2  }| j                  ||      }	|	s|j                  j                  |	       4 |j                  d        y )NassetsrH  r  rq   r  r?  rA  r<  r  rI  Trv  )r   r  r}   rT  r  r  rx  r   rA  r  r  rO  asset_types_catr   r~  )
r;   
asset_catsr;  assets_folderrB  asset_cat_datarC  rA   rM  rN  s
             r*   _process_asset_catsz CmfPluginCsv._process_asset_cats
  s2   ((,,4Dx,X#**, 	5I&v.N'7N8$,9N=)!!"677;7O7OP^`m7n347=7J7J7N7NTj7N7k34#<<"" M1
 ##%&/0A&B QN)-)A)A.Rb)c&)%55<<=OPQ ""t"4+	5r,   c                    |j                         D ]  }|d   }|j                  d      st        d      |j                  d      s|d   |d<   dd|d   g}| j                  | j                  t
        j                  ||      \  }}|j                  j                          |s| j                  |d   |       | j                  |d   |       | j                  |d	   |        y )
Nr  r5  uI   У схемы не указан префикс кодов активов.r   r  )r  rI  r  rQ  )rT  r}   r0  rx  r   r   r8  r  r  rK  rM  rT  )r;   asset_schemesr:  asset_scheme_datar  r;  rA   s          r*   _process_asset_schemesz#CmfPluginCsv._process_asset_schemes&
  s    )002 	WL ,V 4$(()<= kll$((2.?@S.T!(+*C1BCV1WXG"&"?"?%%!"	 #@ #a &&(--l;L.MO_`)),}*EGWX((l)CEUV+	Wr,   c                    |j                  d      }|j                  d      }|j                  d      }|j                  d      }|j                  d      }|j                  d      }|j                  d      }|j                  d      }	| j                  j                  |d|i d	      }
|
d
   j                  |d|i d	      }|d
   j                  |d|i d	      }|d
   j                  |d|i d	      }|d
   j                  |d|i d	      }|d
   j                  |d|i d	      }|d
   j                  |d|i d	      }|	rd|	d|d
   |	<   y y )Ncountryareacitystreethouse_numberfloorflatroom)rq  rk   r>  r>  )rq  rk   )r}   rA  r  )r;   location_datacountry_name	area_name	city_namestreet_namer^  floor_numberflat_numberroom_numberrZ  r[  r\  r]  s                 r*   _prepare_location_dataz#CmfPluginCsv._prepare_location_data>
  s   $((3!%%f-	!%%f-	#''1$((8$((1#''/#''/..++!$
 z"--!
 J**!
 j!,, #
 j)44&$
 $J/::$
 #:.99#
 #4K
#K0 r,   c                    | j                   j                  d   }| j                  ||t        j                        }|rg d}|D ]9  }|j                  |d      }|s| j                  j                  |i       }||d<    n j                  dg       }| j                  ||t        j                        }	|	r|	|vr|j                  |	       ||d<   |j                  dg       }
| j                  ||t        j                        }|r|	|d<   ||
vr|
j                  |       |
|d<   |j                  di       }| j                  ||t        j                        }|rfg d	}|D ]/  }|j                  |d      }|s|j                  |i       }||d<    n j                  dg       }|	r|	|vr|j                  |	       ||d<   ||d<   y y )
Nrt   )r   r5  r   r   r  rI  r  rM  rQ  r  )r   rf   r  r   r8  r}   rV  r  rL  r   rG  rA  )r;   r   rt   rW  r  r  r  r:  rI  asset_type_cat_datar  asset_type_datarQ  rS  rB  s                  r*   _prepare_asset_dataz CmfPluginCsv._prepare_asset_data
  s   //778IJ !,,S/6CXCXYAK) 
#4#8#8R#H ##'#5#5#@#@AQSU#VL+<L( +../@"EO"&"2"23I_I_"`"':/'Q&&':;.=L*+ '**="=K"..sOVEXEXYO4G 01"+5&&7*5L' &)),;J!--c?FDVDVWN8"- J'5'9'9*b'I$'$.$9$9:JB$O	,:	&) #,--0A2"F&+>o+U#**+>?/>	+,)3L&S r,   c                 F   | j                   j                  d   }| j                   j                  j                  j                  dd      }t	        | j                  | j                              D ]0  \  }}| j                   j                         r y!| j                   j                  d   r|dk(  rB| j                  ||t        j                        }| j                  ||t        j                        }| j                  ||t        j                        }|rg d}|D ]9  }	|j                  |	d      }
|
s| j                  j                  |
i       }||d<    n j                  d	g       }| j                  ||t        j                        }|r||vr|j!                  |       ||d	<   |j                  d
g       }| j                  ||t        j"                        }|r||vr|j!                  |       ||d
<   |j                  dg       }| j                  ||t        j$                        }|rR|j                  d      }|rT|rR|j'                  | j                   j(                  j                        s#| j                   j(                   d|d    }||d<   |s|j                  d      }|j                  d      r|d   |d<   |j                  d      }|r|j                  d      s|d= |j                  d      }|s|d   }| j*                  j                  |g       }|r|j!                  |       n:| xj,                  dz  c_        | j                   j/                  d|dz    ddd       || j*                  |<   | j                  ||t        j0                        }|r|r^d}|j                  d      r|d   d   }|j                  d      r|d   d   }|j3                  d      D ]  }|||d}|}d|v sd|v rd}d|v rd}t5        j2                  d|      \  }}|j7                  d       rt9        |d!d       }||z  d"z  d#z  |d$<   nz|j7                  d%      rt9        |d!d       }||z  d"z  |d$<   nO|j7                  d&      rt9        |d!d       }||z  |d$<   n'|j7                  d'      rt9        |d!d       }||z  |d(<   |j7                  d)      r
|d!d* }d|d+<   |j7                  d,      r|d!d* }|j7                  d-      r
|d!d* }d|d+<   |j7                  d.      r|d!d* }||d/<   |r!| j                   j(                   d|d/    |d/<   || j:                  vsw| j:                  j!                  |        |j                  d/      r|d/   d   }|j3                  d      D ]U  }|||d}|r!| j                   j(                   d|d/    |d/<   || j:                  vs;| j:                  j!                  |       W n:| xj,                  dz  c_        | j                   j/                  d|dz    d0d1d       |j                  d2      |j                  d3      |j                  d4      d5}||vr|j!                  |       ||d<   | j                  || j                   j                  d   t        j<                        }|r|j                  d6      r|d6   } |d6= |j                  d      st5        j2                  d7|       }!d8j?                  |!      } d8j?                  |!d!d       }"|j                  d      | j@                  | <   |"| j@                  v rY| j@                  |"   }|| j*                  vrg | j*                  |<   | j*                  |   j!                  |j                  d             |j                  d9g       }#|r||#vr|#j!                  |       |#|d9<   |j                  d:g       }$|r||$vr|$j!                  |       |$|d:<   nV|r)|| jB                  vr| jB                  j!                  |       |r)|| jD                  vr| jD                  j!                  |       | j                  ||t        jF                        }%|%r| jI                  |%       | jK                  |       3 y!);u   
        Из строк файла собирает данные проектов, спринтов, БП, компаний и пользователей для последующего импорта
        rt   r  Frr   r   r  r   r  r  r   r  r   r/   r   r  r   rs   u   Строка u   : Невозможно создать связь с Epic или родительской задачей. Укажите код или ИД задачи в файлеzERR-0080r   r  zsystem.finish:startrt  r   rJ   )rq  r   rs  r   r   r  z[+-]u   дNr  r  ru  r  u   мr?  rv  u   ОНrq  u   ООu   НОu   ННrs  uy   : Невозможно создать связи задач. Укажите код или ИД задачи в файлеzERR-0081r  r   r   )r  r   r   r   z[,./+-]r   r2  r  )&r   rf   rT   r}   r4   r3   r  rg  r  r   r   r   r!   r  r  r"   r   r#   r   r   re   rd  r  r%  r   r   r!  r  r  rw  r   rU  subtasks_outliner2  r  r&   rj  rn  )&r;   rt   r  r   r   company_dataperson_datar  r  r  r  r
  project_sprintssprint_dataproject_componentsr  project_workflowsr  task_ext_idr   rk  rd  rx  rt  related_tasksrelated_taskrelation	task_linkminuslagr  r!  r   outline_listparent_outlineproject_companiesproject_personsrb  s&                                         r*   _prepare_import_dataz!CmfPluginCsv._prepare_import_data
  s    //778IJ OO99??CCDWY^_t/?/? @A |	*FAs((*,,[9a1f++C&BSBSTL**3AQAQRK++C&BSBSTL8"- J'3'7'7
B'G$'"&--":":;KR"P*6 #*++i"<"..sOV^^T;o#E#**;7%4	" &-[[r%B"!%!1!1#H[H[!\!n<N&N&--n=(:%$+KKR$@!''_fnnM"&((8"4K"'8AWAWX\XgXgXjXjXpXpAq)-););(<Ad8n=M&N)4X&&*hhv&6xx'.26l]+"&((="9K"488F+; /(3(A,,7,?M#'==#4#4]B#G&$OOK8 ,,1, OO55"/Aw 7_ !` *)2	 6  8@m4$($4$4S/6KcKc$dM$&,AM,00A0=o0Nx0X,00;0=i0H0R4A4G4G4L +!HL0=3>4@0&H 1=I'*l':c\>Q01+.,+>46E9;&,9W	3+.<<+=25c#2h-CHMPSVXHX[\H\H_,E-0\\$-?25c#2h-CHMPSVXHXH_,E-0\\$-?25c#2h-CHMPSH_,E-0\\#->25c#2h-CLQTWKH5H,I'0'9'9&'A4=crN	;P(8'0'9'9&'A4=crN	'0'9'9&'A4=crN	;P(8'0'9'9&'A4=crN	;DHZ$8'8BF//BTBTAUUVW_`jWkVl?m(<'/t~~'E(,(=(=h(GW+!HZ  -00<0=j0I(0S4A4G4G4L 	!HL0=3?4?0&H
 (9BF//BTBTAUUVW_`jWkVl?m(<'/t~~'E(,(=(=h(G	!H !,,1, OO55"/Aw 7_ !` *)2	 6  %)HHZ$8"&((8"4&*hh|&< H
  '88)00:'8$((doo.K.KL].^`f`s`styy!12)./?)@!"23#xx6+-88I~+NL-0XXl-CN-0XXl3B6G-HNDHHHXDVD11.A-1F1FF040E0En0U#0#ECEDMM-$@ $m < C CDHHXDV W$+KKR$@!L8I$I%,,\:'8$")++i"<;o#E#**;7%4	"L$FNN)),7;dll#BLL''4 !,,S/6CUCUVM++M: $$S)y|	*r,   c                    || _         | j                   j                         | _        g | _        g | _        i | _        i | _        i | _        i | _        g | _	        t               | _        i | _        i | _        t        j                  j!                  |ddg dgdgdg      | _        | j%                          | j'                  | j                         | j)                  | j                         | j+                  | j
                         | j-                  | j                         | j/                  | j                         t1                | j3                          | j5                          | j7                          | j                  D ](  }t9        t        j:                  j<                  |g       * | j                   j>                  j@                  j!                  dd	      r| j                  jC                         D ]  \  }}|s	| j                   jD                  jG                  d
tI        |       d|        |r1t9        t        jJ                  jL                  |tO        |      g       pt9        t        jJ                  jP                  tO        |      g        | jR                  r(| j                   jU                  d| jR                          | jR                   S )Nrl   rm   rn   rd   ro   rp   )argssend_invitesTu,   Отправляем приглашения u    пользователям: u#   Ошибок обнаружено: )+r   get_max_processesr6  r2  r  r  r  rd  rq  rw  r  r  rA  rV  r   r~   r}   r  r  r  r  r  r@  rX  ry  r<  ro  rz  schedule_deferred_jobr   _outline_force_recalcrf   rT   r   rz   r  r   r   register_sdesk_clientr/  register_personsr  r  )r;   r   gantt_project_idr
  r  s        r*   process_importzCmfPluginCsv.process_import  sr   $!__>>@ "!$!//33'@A()7	 4 
 	!!#/dll+t}}-/##D$6$67 	 	 ! !% 6 6 	f!&"5"5"K"KScRde	f ??((..22>4H*.*<*<*B*B*D &$&&++.Z[^_l[mZn.KM?-\ ])((>>%tM':;
 *((99"=12" OO"EdFVFVEW XY####r,   )N)NNr   )K__name__
__module____qualname__r   logginggetLoggerClass__annotations__r  staticmethodr+   r|  rC   r   r/  r3   r   r   rQ   r   r   r   r   r  r  r  r-  r3  r<  rD  rJ  rO  r[  rb  rj  rp  r  r  r  r  r  r  r  r  r0  r  r  ro  rz  r  backoffon_exceptionexpor0  r  r  r  r  r  r  r   r  r  r  r(  r4  r<  r@  rK  rM  rT  rX  rj  rn  r  r  r  r,   r*   r   r      s3   (,GW##%,K" "H * $  &FP }+$sDy/ }+ }+~ # $  "#J(T (T (T (T*.+Z( >86"650B#"J0)V#D #"B B.`-D<|[$ [88s&jGR6pCuJJqX+4 W',,#$&#%(j$	(j$Xs$l0M.jZ+\6,r`F50"%HN`($zL BDY] mB
+	'52W0M^.4`C*JE$r,   r   )rY   mathcopyr   r   r  pathlibr   typingr   r   r  multiprocessingr  r  psutilre  rU   rO   r!  r   dateutildateutil.parserr   cmf.includemodules.settings.fieldsr
   r  r   r   r  r,   r*   <module>r     s[    
      !         	 +  '  2 l.$>.. l.$r,   