U
    r;d                     @   s  d dl Z d dlmZmZ d dlmZ d dlmZmZ d dlmZ d dl	Z	d dl
mZ d dlmZm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T d dlmZ d dlmZ d dlmZ d dlZd dlZd dlmZ G dd dej Z dd Z!G dd dZ"dS )    N)copydeepcopy)Decimal)datetimetimezone)LoggerPath)DictIterator)cached_property)commit_all_ds)*)fields
cmf_import
log_configwrapsc                       s|  e Zd Zejjd ZdZdZee	dddZ
ejdfeedd	d
Zdd ZedddZdd Zdd Z fddZdd Zdd Zdd ZedGddZedd Zed d! Zed"d# Zd$d% ZdHed&d'd(Zd)d* Z e!dd+d,Z"d-d. Z#d/d0 Z$d1d2 Z%d3d4 Z&ed5d6 Z'eddd7d8Z(d9d: Z) fd;d<Z* fd=d>Z+d?d@ Z,e-ddAdBZ.dCdD Z/dEdF Z0  Z1S )I	CmfImport)CSV_SETTING_NAMEcsv_import_settings_fieldslogger_last_statsZCSVNreturnc           	      C   s  G dd dt j}t j}tjr$t j}|  }t |}|| d|_|j	st
tj|}|jddd |d}tj|ddd	d
d}|| |t tj || |d}tj|ddd	d
d}|| |t tj ||  || tj|d
d	|dS )uE    Журнал логирования процесса импорта c                   @   s   e Zd Zdd ZdS )z)CmfImport.logger.<locals>.AnonymousFilterc                 S   s   t |ddS )N	anonymousF)getattr)selfrecord r!   ./common/models/cmf_import.pyfilter    s    z0CmfImport.logger.<locals>.AnonymousFilter.filterN)__name__
__module____qualname__r#   r!   r!   r!   r"   AnonymousFilter   s   r'   FT)parentsexist_okzdata.logzutf-8Di@KL    )filenameencodingZwhenmaxBytesbackupCountzanonymous_data.log)r/   r.   level)loggingZFilterINFOconfigDEBUGget_files_dir	getLoggerZsetLevelZ	propagatehandlersr	   
UPLOAD_DIRjoinpathmkdirr   ZMyLogsHandlerZsetFormatterZ	FormatterZ	FORMATTERZ
addHandlerZ	addFilterZ
get_logger)	r   r'   r0   log_pathZapp_logZpath_logZfile_name_logZfile_handlerZanonymous_handlerr!   r!   r"   r      sB    







zCmfImport.loggerF)msgr0   c                 K   s"   | j j||fdd|ii| dS )uI  Логируем как обычные лог для веб так и со скрытыми данными для возможности отправки в СТП

        Args:
            msg (str): сообщение
            level (int, optional): уровень логирования. Defaults to logging.INFO.
        Zextrar   N)r   log)r   r<   r0   r   kwargsr!   r!   r"   r=   B   s    zCmfImport.logc                 O   sF   t j|  tj}t jt jtj|s8| j	
d t jd|S )uK   
        Возвращает путь текущему файлу
        initfiles)ospathjoinr5   r   LOG_NAMEexistsr3   r8   r   info)r   argsr>   	file_pathr!   r!   r"   get_log_filenameK   s    zCmfImport.get_log_filenamec                    s`   t j tj}t jt jtj|s8j	
d d  fddt  D }|S )u   
        Список файлов после logrotate, чтобы можно было загрузить историю
        r?   Tc                    sB   g | ]:}t jt j |rtd |rt jd |qS )z%(?:data|anonymous_data)\.log(\.\d+)?$r@   )rA   rB   isfilerC   rematchr5   ).0fdir_pathr   r!   r"   
<listcomp>\   s    z/CmfImport.get_log_filenames.<locals>.<listcomp>)rA   rB   rC   r5   r   rD   rE   r3   r8   r   rF   listdir)r   rG   r>   rH   Z	file_listr!   rO   r"   get_log_filenamesT   s    
zCmfImport.get_log_filenamesc              	   O   s   dd l }t| d}|d}tj|r6t| ||d,}| 	 D ]}|
dtj}|| qLW 5 Q R X tjd|  dS )Nr   Tall_logs.zipw/filesr@   )zipfiler	   r5   r9   rA   rB   rE   removeZipFilerS   replacer3   r8   writerC   )r   rG   r>   rW   rP   zip_pathmyziprH   r!   r!   r"   get_all_logs_by_zipa   s    

zCmfImport.get_all_logs_by_zipc           
   	   O   s   dd l }ddlm} || d}|t d d}|  }|r|	|d6}|  D ]&}	|	
dtj}	||	 t|	 q^W 5 Q R X tjd|  d	S d S )
Nr   r   Tz
%Y%m%d%H%Mz_all_logs.ziprU   rV   r@   rT   )rW   pathlibr	   r5   r9   r   nowstrftimerS   rY   rZ   r3   r8   r[   rA   rX   rB   rC   )
r   rG   r>   rW   r	   rP   r\   Zlog_file_pathsr]   rH   r!   r!   r"   zip_all_logsm   s    
zCmfImport.zip_all_logsc                    s(   | j  s| jjdd| _ t   d S )NZOPENstatus_type)statusloadworkflowget_default_statussuper_calc_statusr   	__class__r!   r"   rj   |   s    
zCmfImport._calc_statusc                 C   s  | j d rd S | jr(| j | j d< d S | jdkr6d S | j d dtj tjjd | j d dtj	 tj	jd | j d dtj
 tj
jd | j d dtj tjjd | j d dtj tjjd | j d d	tj tjjd d S )
NZmodels_fieldsexcelu   Поля контактов)Zcaptionr   iconu   Поля задачu   Поля заметокu   Поля проектовu"   Поля списков задачu   Поля групп)json_settingspluginZcalc_models_settingstypeappendmodels	CmfPersonZimport_shop_fieldsro   CmfTaskZ
CmfComment
CmfProjectCmfListZCmfPersonGrouprk   r!   r!   r"   _calc_models_settings   s>    

zCmfImport._calc_models_settingsc                 K   sH   |  ddddg | jd r d S | jj| d| jd< | j| _|   d S Nrp   attachmentsrr   rq   import_settingsr   )load_fieldsrp   rq   calc_import_settingssaver   r>   r!   r!   r"   r~      s    
zCmfImport.calc_import_settingsc                 K   sH   |  ddddg | jd r d S | jj| d| jd< | j| _|   d S rz   )r}   rp   rq   tmplt_import_settingsr   r   r!   r!   r"   r      s    
zCmfImport.tmplt_import_settings c                 C   s4   d|  d d} td|  d|  t|  d S )Nu1   Ошибка при импорте данных. .ue   . Проверьте загружаемый файл и повторите попытку снова.zCmfImportError: : )stripr1   errorZ	cmf_alert)r<   er!   r!   r"   
_log_error   s    zCmfImport._log_errorc                 C   s:   |  dg | jd D ]}|d | jkr|d   S qg S )Nrp   r|   namer   )r}   rp   r   )r   settingsr!   r!   r"   r      s
    z$CmfImport.csv_import_settings_fieldsc                 O   s   t jd|  dS )uJ   
        Запускаем в фоне импорт данных
        startNrt   r   
run_worker	import_id_args_kwargsr!   r!   r"   r      s    zCmfImport.startc                 O   s   t jd|  dS )uR   
        Останавливаем в фоне импорт данных
        stopNr   r   r!   r!   r"   r      s    zCmfImport.stopc                 O   s&   dd l }|  }| r"|| d S )Nr   )shutilget_download_pathrE   rmtree)r   rG   r>   r   download_pathr!   r!   r"   delete_dump   s    zCmfImport.delete_dump)rowc              	   C   s4  d}|dkr|j }|sg }i }t| jD ]Z\}}|d r(|| r(|d d dd |jkr^q(|d d |kr(|| ||d d < q(|s|S || d}	tt|	d	}
|D ]}|j|}t	|tj
st	|tjr,d}| D ]8}|jd
dd|| gd	d|| ggdgd}|r qq|r,t|	|| qt	|tjr<qt|	|||  || }t	|tjr~t|d}t|tjj}t	|tjrq||d|g q| jd r|j|dgd}|s0|d	}|r|j|dgdd}|r|
|	_|j|	jdgd}|r$|	j dttjd|	_|	}|  |S )u  
        Импортируем объект

        :param list row: Строка из файла
        :param models.* model: Модель для создания объекта
        :param list _filter: Для фильтрации объекта
        :param str key: Ключевое имя для сопоставления модели

        :return: Новый или найденный объект
        :rtype: Optional[models.*]
        Nmodel_fieldfield_qualnamer   r   verbose_name
field_namer   codeORr   ==z**r#   r   ZRUunionT)r   r   include_deleted)r   r   _z%Y%m%d-%H%M%S)r   	enumerater   split
class_namestrr   r   get
issubclassZCmfRelationZCmfGenericRelationZrelated_modelssetattrZ
CmfRelBaseZCmfPhonephonenumbersparseZformat_numberZPhoneNumberFormatZINTERNATIONALZ
CmfNumericrs   rp   r   r   r   r`   r   utcr   )r   r   model_filterkeyresult_fieldsisettingZnew_objZnew_coder   ZfieldZrel_objZ	rel_modelvalZphoner   r!   r!   r"   _process_obj   sp    

zCmfImport._process_objc              
   C   s  |  dddddg | jrzDt 2 | jjtjj| jdddgd	d
W  5 Q R  W S Q R X W n t	k
r } zl| dt
  }t| t| dt
|jd  }| j| || _| jjdd| _|   W Y dS d}~X Y nX | jdk r|  S dS )u9   
        Импортируем файл в бд
        rn   r|   	first_rowrq   r{   r   plugin.plugin.*zplugin.*idr   r   r   
import-errorstatus_codeFN)r}   rq   cmfutilenable_import_modeprocess_importrt   r   r   r   	Exception	traceback
format_excr   r   	format_tb__traceback__r   	exception	error_msgrg   rh   re   r   rr   _process_import_excel)r   errerr_msg
error_textr!   r!   r"   r     s$    
"zCmfImport.process_importc           4      C   sf  ddl m} | jr| jd s dS d}zi }i }i }i }i }i }i }	|  }
t|
D ](\}}|dkrr| jd rrqTi }i }d}d}t| jD ],\}}|d r|| sq|d d d	d }||i }|d d
 d	}|d }|| }|dkr|}qn|dkr|}qt	|dkrP|dkr2|||d < q||i }|| ||d < nZ|dkrt|dkrt|
|| }n6|dkr||| }n|dkrd||| i}|||< |||< q|di }|dd}||d}|s|| tj|\}}|||d< || tj|\}}|di }|drD|d |d< |di }|r|	|}|s|dkrtjjddtjjddd}ntjjddtjjddd}||	|< ||d < ||d< ||d!< ||d"< d#d$d%|jgdd%|d gg}|| tj||\} }| j| |   | ||d < |rH||g }!|!|  |!||< |rt||d g }"|"| |"||d < |d&i d'd}#|#r|# d(|jj }$||$i }%||%d!< |#|%d'< |%d)g }&|&|  |&|%d)< |%||$< ||d}'|'sftjjd#d*d%|jgd'd%d+ggd,}(d#d*d%|(jgd'd%d-gg})d-||(d.d/}*|j| tj|*|)d0\}'}|'||d< || jtj|'| d1 qT|  D ]\}$}+tjjd#d*d%|+d! jgd'd%d2ggd,}(d#d*d%|(jgd'd%|+d' gdd3d4gg})tjj|)d,},|,stj|+d! |(|+d' tj!jd5dd6},|,  |+d) D ]} |,| _"| jd7d8 q"q|  D ]>\}}-||}.|.rH|-D ]}/|/j"#  |.|/_"|/  qdqH|  D ]N\}}0||}.|.r|0D ].}1||1}/|/r|/j"#  |.|/_"|/  qqW n~ t$k
r` }2 z^t%|2 d9| d:|2 d;t&'|2j(d<  }3| j)*|3 |3| _+| j,j-d=d>| _.|   W Y dS d?}2~2X Y nX d7S )@u   
        Запуск импорта из CSV

        :return: Истина в случае успешного импорта
        r   )CmfPluginImportMixinr|   Fr   r   r   r   r   r   parent_taskZchild_tasks   	executorslogic_prefixrw   priorityre   rd   zproject.agiler   rv   Z
cmf_authorZ	cmf_ownerzproject.basez
task.base%baser   )Z	cmf_modelprefixZactivityztask.agile:softdev%Zsoftdevrg   projectparentZANDZ	parent_idr   rx   r   r   tasksZtree_parent_idZSprints)r#   u
   ДоскаZkanban)r   r   tree_parentZ	list_type)r   r   
obj_fields
filter_obj)leftrightZEpics=z	task.epicztask.epic:default)r   r   r   Z
logic_typeT)Z	only_datau   Строка r   r   r   r   r   N)/Z%common.models.cmf_plugin_import_mixinr   r{   rp   Z	_get_filer   r   r   r   lenZget_logic_prefixZget_priorityZget_status_type
setdefaultZprocess_any_table_fieldsrt   rw   ru   CmfWorkflowZcalc_workflowZCmfActivityr   rv   r   rs   r   r   valueZ	CmfFolderrx   r   ZCmfListCmfTaskitemsZCmfLogicTyper   rf   r   r   r   r   r   r   r   r   rg   rh   re   )4r   r   Z
number_rowZall_parent_taskZall_child_tasksZall_epic_tasksZ	all_tasksZ
cash_boardZcash_projectZcash_workflow_taskZ	file_readr   executorr   Zparent_task_codeZchild_tasks_codeidxr   Z
model_nameZ_rowZfields_namer   r   Zproject_fieldsr   r   r   Zexecutor_objZtask_fieldsZvalue_statusrg   Zfilter_taskZtask_objZtmp_parent_tasksZtmp_child_tasksZ	epic_nameZepic_keyZtmp_dataZ	tmp_tasksZlist_objZparent_folderr   r   dataZepic_objr   r   Zsub_taskZ
tasks_codeZsub_task_coder   r   r!   r!   r"   r   6  sL   








 



 




"zCmfImport._process_import_excelc                 C   s>  |  |tj}|r|sdS d}| jD ] }|d r$|d d dkr$|}q$|dg tjj|jt|d |j	jdgd}|stj|t|d |j	| d	}|
  |jjd
d t|jjD ]*}|jj| jkrq|  |jj| q| j |tjtjjdd|jgdd|jggd}|ddg ||_||_|jr:|
  |S )u;   
        Импорт товара в сделку
        Nr   r   zCmfProduct.pricescurrencyfile_valprice)
product_idr   Zcurrency_idr   )productr   r   r   T)forceZdeal_idr   r   )r   r   r   Zsales_order)r   rt   Z
CmfProductr   r}   ZCmfPricer   r   r   r   r   Zpricesrf   r   Z
deal_itemsr   r   deleterX   ZCmfDealItemsr   dealr   
is_changed)r   r   r   r   Zprice_settingr   r   itemr!   r!   r"   _process_product  s@    
 zCmfImport._process_productc           	      C   s  |s|r|j sd S d }| jD ] }|d r|d d dkr|}q|sFd S g }tjj|d d}|sxtj|d d}|  |dd|jg |r|dd|jg n|dd|j jg | |tj	|}|
d	d
g |j s|r||_ n|j |_ |js||_|jr
|  |S )Nr   r   zCmfDeal.pipeliner   )r   Zpipeline_idr   Z
company_idcompanypipeline)r   r   rt   ZCmfPipeliner   r   rs   r   r   ZCmfDealr}   r   r   )	r   r   Zcontactr   Zpipeline_settingr   r   r   r   r!   r!   r"   _process_deal  s8    
zCmfImport._process_dealc                 C   s   dd l }dd l}dd l}| jr4|  | j dk r4d S |  | _t }z6||j|j}|d | d |d< |	  W n t
k
r   d|d< Y nX z| |d< W n t
k
r   d|d< Y nX | |d< ||  |d	< | jd
|  d S )Nr      )z8.8.8.8P   ZipzIP unavailablerf   )r   r   r   ZmemoryZdiskzSTATS )timepsutilsocketr   dictZAF_INETZ
SOCK_DGRAMZconnectZgetsocknamecloseOSError
getloadavgZvirtual_memory
disk_usager   r   rF   )r   r   r   r   Zstatssr!   r!   r"   	get_stats;  s*    

zCmfImport.get_statsc                 C   s   dd l }tj  |  }||\}}}t|| d }tjj	| j
ddgd}|dkrd|_|jrr|  t  | jd| d	 d
S |   |jjdks|jdkrd|_|jr|  t  | jd d
S dS )Nr   d   re   cache_status_typer      r   u8   Импорт прерван, место на диске z% < 20%Timport-stoppingIN_PROGRESSimport-pauseduA   **** Импорт остановлен пользователемF)r   r   r   Zimport_heartbeatr   r   intrt   r   r   r   re   r   r   commit_with_eventr   r   r  r   r  warning)r   r   r   totalusedfreeZfree_percentobjr!   r!   r"   	is_cancelX  s,    
zCmfImport.is_cancelc              	   C   sB   dd l }|jdddd|  d| dgddtd	d
tdd
d d S )Nr   z/usr/bin/python3z	manage.pyshellzHfrom common.models.cmf_import import CmfImportWorker; CmfImportWorker().z("z")Tz"/var/log/eva-import-subprocess.logza+z&/var/log/eva-import-subprocess.err.log)Z	close_fdsZstart_new_sessionstdoutstderr)
subprocessPopenopen)methodr   r  r!   r!   r"   r   p  s      zCmfImport.run_workerc                  O   s   t jd|d  dS )/   
        Отменяем импорт
        cancelr   Nr   )rG   r>   r!   r!   r"   r  w  s    zCmfImport.cancelc                 O   s    |  ddddg | jj| dS )uk   
        Предварительный просмотр получившихся объектов
        rp   r{   rr   rq   r   )r}   rq   preview)r   rG   r>   r!   r!   r"   r    s    zCmfImport.previewc                    s   t   ddddg S )Nrp   r{   rr   rq   )ri   save_preload_fieldsrk   rl   r!   r"   r    s    zCmfImport.save_preload_fieldsc                    s   |    t jf |S N)ry   ri   r   r   rl   r!   r"   r     s    zCmfImport.savec                 C   s@   | j r
d S | jr,| jjdkr,tjjdd| _ tjjdd| _ d S )NZCmfPluginJirazimport.system.jira:defaultr   zimport.system:default)rg   rq   r   rt   r   r   rk   r!   r!   r"   _calc_workflow  s
    zCmfImport._calc_workflowc                 C   sN   |  dg ttj| jj  d}|| jjjj	}|j
ddd |S )Nzplugin.plugin.source_hashZ	_raw_dataT)r)   r(   )r}   r	   r3   r8   r9   rq   Zui_namelowersource_hashr   r:   )r   resr!   r!   r"   r     s
    zCmfImport.get_download_pathc                 C   s   | j |  d S r  )rq   download_datark   r!   r!   r"   r     s    zCmfImport.download_datac                 C   s   | j |  d S r  )rq   download_filesrk   r!   r!   r"   r!    s    zCmfImport.download_files)r   )NN)2r$   r%   r&   r   r   Zui_meta_skipr   r   r   r   r   r1   r2   r   r  r=   rI   listrS   r^   rb   rj   ry   r~   r   staticmethodr   r   r   r   r   r   r   boolr   r   r   r  r  r   r  r  r  r   r  r	   r   r   r!  __classcell__r!   r!   rl   r"   r      sT   %		



N B!#
r   c                    s   t   fdd}|S )Nc              	      sj   zFddl m} | (  | f||}t  | jd W 5 Q R X |W S    | jd t  Y nX d S )Nr   )cmf_contextu*   Импорт завершил работуu&   Ошибка работы демона)Zcmf.appr&  r	  r   rF   r   rollback_purge_event)r  rG   r>   r&  r  fnr!   r"   wrapped  s    z!catch_exceptions.<locals>.wrappedr   )r)  r*  r!   r(  r"   catch_exceptions  s    r+  c                   @   sd   e Zd ZdddZdd Zdd Zdd	d
dZedd Zedd Z	edd Z
edd ZdS )CmfImportWorkereva-import-workerc                 C   sb   ddl m} dd l}ddlm} ||| _|j| j|d| d|jd |d| d| _	d S )	Nr   r   r   z/var/logz.log)r0   z	/var/run/z.pid)
cmf.modules.logsr   r1   r_   r	   r6   r   Zinit_loggerr2   pid)r   Zappr   r1   r	   r!   r!   r"   __init__  s     zCmfImportWorker.__init__c                 C   s  | j d t < t & t  tjjddd|gdd|ggdddd	gd
}|	  |
d |jjddd|_|  t  | }td tjj|jdddd	gd}|jjdkr"|r|j d |jjdd|_|  n2|jjdkr"|j d |jjdd|_|  |j jd jtjd}W 5 Q R X W 5 Q R X W 5 Q R X tjj|tj|jdt !t"j#dd| ddd d S )Nu   Импорт запущенr   r   r   r   rg   re   progressr   r   u%   ***Запускаем импорт***r  import-startedrd   r   r   r   u2   ***Импорт успешно завершен***CLOSEDrc   u7   ***Импорт завершен с ошибками***r   r   r   /files/u+   Импорт данных завершен %d.%m.%Y %H:%M
, <a href=(   >Журнал логирования</a>Tr  Zpersonr   r<   Zforce_notify_current_person)$r   rF   r   disable_acldisable_notifyr   rt   r   r   rb   r=   rg   rh   re   r   r	  r   geventsleepr   r   rd   r7   baseFilenamerZ   r3   r8   	CmfNotifyplace_notifygcurrent_personr   r   r`   r   r   )r   r   r  r  r;   r!   r!   r"   run  s@    $





6zCmfImportWorker.runc                 C   sZ  | j d t  t  t  tjjddd|gdd|ggdddd	gd
}|	d |j
jddd|_|  t  | }| }|r|r|j d |j
jdd|_|  n0|jjdkr|j d |j
jdd|_|  |j jd jtjd}W 5 Q R X W 5 Q R X W 5 Q R X tjj|tj|jdttjdd| ddd d S )Nu   Дамп запущенr   r   r   r   rg   re   r1  r   r   u!   ***Запускаем дамп***r  r2  r3  u.   ***Дамп успешно завершен***r4  rc   u3   ***Дамп завершен с ошибками***r   r   r   r5  u'   Дамп данных завершен r6  r7  r8  Tr9  ) r   rF   r   r:  r;  r   rt   r   r   r=   rg   rh   re   r   r	  r   r!  rd   r7   r>  rZ   r3   r8   r?  r@  rA  rB  r   r   r`   r   r   )r   r   r  r  Zres2r;   r!   r!   r"   	dump_data  s6     


6zCmfImportWorker.dump_dataNr   c                 C   sN  | j d t . t  tjjddd|gdd|ggddgdd	}|jj	d
d|_
|  t  zz^d}d}|j d tjjdd|gddD ]^}z*|j d|  |jddd t  W q   |d7 }t  |j d| d Y qX qtjjddd|gdd|ggdddgdd	}|jD ]X}z*|j d|  |jddd t  W n&   |d7 }t  |j d Y nX q,|s|jj	dd|_
|j d n"|j d|  |jj	dd|_
W nX tk
r& } z8|j d|  t| t||_|jj	dd|_
W 5 d}~X Y nX W 5 |  X W 5 Q R X W 5 Q R X dS )r  u   Отмена запущенаr   r   r   r   re   rg   T)r#   r   r   zimport-cancelingr   r   Nu#   ***** Отменяем импортr   )r#   r   u   Удаляем )ZTEXKOM_db_deleter   r   u#   Не удалось удалить uW   , видимо обьект использовали вне данных импортаimport_objectsuy   Не удалось удалить, видимо обьект использовали вне данных импортаzimport-canceledu,   Успешно отменили импортu#   Количество ошибок: r   u   Ошибка удаления )r   rF   r   r:  r;  rt   r   r   rg   rh   re   r   r	  rw   r"  r   r'  r   rE  r   r   r   r   r   )r   r   r  errorsr   r   r!   r!   r"   _cancel_import  s\     
 


&zCmfImportWorker._cancel_importc                 G   s>   | j  rtd| j tt  | j|  | j   d S Nu"   Импорт уже запущен)	r/  rE   r   
write_textr   rA   getpidrC  unlinkr   rG   r!   r!   r"   r   .  s
    

zCmfImportWorker.startc                 G   s>   | j  rtd| j tt  | j|  | j   d S rH  )	r/  rE   r   rI  r   rA   rJ  rD  rK  rL  r!   r!   r"   dump6  s
    

zCmfImportWorker.dumpc                 G   s>   | j  rtd| j tt  | j|  | j   d S rH  )	r/  rE   r   rI  r   rA   rJ  rG  rK  rL  r!   r!   r"   r  >  s
    

zCmfImportWorker.cancelc                 G   s  t jjdddgddddgd}|r|jd	 |jjd
d|_|  t	  t
dD ]2}td t jj|jddgd}|jdkrT qqT|jjdd|_|  t	  |jd | j s| jd d S | jd ztt| j tj W n   | jd Y nX | j  d S )Nr  r   r  rg   re   r1  r   r   uQ   Пытаемся остановить импорт, таймаут 1 минутаr  r   <   r   r   r  u<   Импорт остановлен пользователемu    Импорт не запущенu'   Останавливаем импортuK   Не удалось завершить процесс, он запущен?)rt   r   r   r   r
  rg   rh   re   r   r	  ranger<  r=  r   r  rF   r/  rE   rA   killr  Z	read_textsignalSIGTERMr   rK  )r   rG   r  r   r!   r!   r"   r   F  s0    


zCmfImportWorker.stop)r-  )r$   r%   r&   r0  rC  rD  rG  r+  r   rM  r  r   r!   r!   r!   r"   r,    s   
#1


r,  )#Zcsvr   r   Zdecimalr   r   r   r1   r   r   r_   r	   typingr
   r   r   r   ZxlrdZopenpyxlZcmf.data_providers.baser   Zcmf.includeZcmfr   Zcommon.fieldsr   r.  r   rA   rQ  	functoolsr   r   r+  r,  r!   r!   r!   r"   <module>   s4        