B
    Zf                 @   sD   d dl m Z  d dlT d dlZd dlmZ G dd dejjjj	Z	dS )    )cached_property)*N)JiraApic                   s   e Zd Zejjjjjd ZdZ	ejjjjj
ddg Z
edd Zdd Zd	d
 Zdd Zedd ZedddZdd Zdd Zdd Zedd Z fddZ fddZ  ZS )CmfPluginJira)jiraNtestget_all_projectsc          	   C   sb   | j s\| dddddddg t| jjj| jjj| jj | jj	 | jj
j| jjjd| _ | j S )	Npluginzplugin.ext_urlzplugin.ext_loginzplugin.ext_tokenzplugin.ext_passwordzplugin.cloudzplugin.verify_ssl)ZurlZlogintokenZpassword
verify_sslcloud)_CmfPluginJira__jiraload_fieldsr   r	   ext_urlvalueZ	ext_loginZ	ext_tokenZdecryptZext_passwordr   r   )self r   (./modules/jira/models/cmf_plugin_jira.pyr      s    zCmfPluginJira.jirac             C   s(   ddl m} ddlm} || j| S )Nr   )JiraAPIImport)JiraCSVImport)modules.jira.api_importr   modules.jira.csv_importr   r   tmplt_import_settings)r   
cmf_importr   r   r   r   r   r      s    z#CmfPluginJira.tmplt_import_settingsc             C   s>   ddl m} ddlm} |jdkr2|| j| S || S )Nr   )r   )r   Zapi)r   r   r   r   typer   preview)r   r   r   r   r   r   r   r       s
    
zCmfPluginJira.previewc             C   s.   ddl m} ddlm} d|_|| j| S )Nr   )r   )r   u#   Импорт данных из Jira)r   r   r   r   namer   process_import)r   r   r   r   r   r   r   r   '   s    zCmfPluginJira.process_importc           
   C   s   dt j t jjddt j t jjddt j t jjddt j t jjddt j t jjddt j t jjddt j	 t j	jdg} | S )	uR   Собственный магазин при выборе импорта из Jirau   Поля контактов)Zcaptionfieldsiconu   Поля организацийu   Поля задачu   Поля заметокu   Поля проектовu"   Поля списков задачu   Поля групп)
modelsZ	CmfPersonZimport_shop_fieldsr   Z
CmfCompanyCmfTaskZ
CmfCommentZ
CmfProductZ
CmfProjectZCmfPersonGroup)resr   r   r   calc_models_settings-   s    z"CmfPluginJira.calc_models_settings)cmf_import_idc         
   O   s   ddl m} g }ydd | j D }W n` tk
r } zBt| tjj	|ddgd}dd || j|
 D }|sx W d d }~X Y nX |S )	Nr   )r   c             S   s   g | ]}|qS r   r   ).0objr   r   r   
<listcomp>?   s    z2CmfPluginJira.get_all_projects.<locals>.<listcomp>r   zplugin.plugin.*)idr   c             S   s   g | ]}|qS r   r   )r%   r&   r   r   r   r'   D   s    )r   r   r   get_projects	Exceptiongdebugr    	CmfImportgetZ_get_projects)r   r$   argskwargsr   r"   er   r   r   r   r   ;   s    
zCmfPluginJira.get_all_projectsc             O   s   t dd | j D S )uE   
        Проверяем подключение к апи
        c             S   s   g | ]}|qS r   r   )r%   r&   r   r   r   r'   M   s    z&CmfPluginJira.test.<locals>.<listcomp>)boolr   r)   )r   r/   r0   r   r   r   r   I   s    zCmfPluginJira.testc             C   s   ddl m} || j| S )Nr   )r   )r   r   r   download_data)r   r   r   r   r   r   r3   O   s    zCmfPluginJira.download_datac             C   s   ddl m} || j| S )Nr   )r   )r   r   r   download_files)r   r   r   r   r   r   r4   S   s    zCmfPluginJira.download_filesc          
   C   s  ddl m} ddlm} dd l}d}t  t  tj	j
| ddgd}||jj|}	g }
|	j }|	j }|jd|	j  |j }xXt|	jD ]J}|	jj|	jd| ||d	d
}|
| |  |	jjd|  qW d}x8|	|||D ]&}|	j rP |d7 }|| qW x|
D ]}|d q2W |	jjd x|
D ]}|  qZW |j | }|	jjd||   d d}x| s||
 7 }qW |	jjd|  ||7 }W d Q R X W d Q R X |S )Nr   )r   )cmf_contextr   r	   )r(   r   u@   Грузим задачи в несколько потоков: _process_issue_thread)issue_queueissue_queue_errors)targetr   r0   u.   Параллельный обработчик    ZDONEu&   Ждем обработки задачu*   ------------------------ скорость u    задач в секундуu?   Закончили обработку задач, ошибок ) r   r   Zcmf.appr5   datetimeZcmfutilZdisable_aclZdisable_notifyr    r-   r.   r	   r   ZqueueZQueueZloggerinfoZthreading_max_forksZnowrangeZ	threadingZThreadr6   appendstartr   Zget_project_tasksZ	is_cancelZputjoinZtotal_secondsempty)r$   Z
project_idr?   limitr   r5   r;   errorsr   Z
api_importZissue_processr7   r8   siprocZcntZissueZdiffZ
has_errorsr   r   r   process_issue_forkW   sJ    





z CmfPluginJira.process_issue_forkc                sF   | ddg |jr:|jdkr:tj| jjjd|jd S t	 
|S )Nimport_raw_jsonzplugin.ext_urlr!   Zbrowsekey)r   rH   
class_nameospathr@   r	   r   r   supercalc_ext_href)r   r&   )	__class__r   r   rN      s    zCmfPluginJira.calc_ext_hrefc                s2   | dg |jdkr&|jr&|jd S t |S )NrH   r!   Z
issue_path)r   rJ   rH   rM   calc_dump_path)r   r&   )rO   r   r   rP      s    
zCmfPluginJira.calc_dump_path)__name__
__module____qualname__modulesr   r   cmf_plugin_jirar   Zui_meta_skipr   Zapi_methodspropertyr   r   r   staticmethodr#   strr   r   r3   r4   rG   rN   rP   __classcell__r   r   )rO   r   r      s"   
*r   )
r   Zcmf.includeZ#modules.jira.fields.cmf_plugin_jirarT   Zmodules.jira.apir   r   r   rU   r   r   r   r   r   <module>   s   