
    ?j~                         d dl mZ d dlmZmZ d dlT d dlZd dlm	Z	  G d dej
        j        j        j                  ZdS )    )Path)urlparse
urlunsplit)*N)JiraApic                   f    e Zd Zej        j        j        j        j        dz   ZdZ	ej        j        j        j        j
        ddgz   Z
ed             Zd Zd Zd Zd	 Zed
             ZdefdZd Zd Zd Zd Zed             Z fdZ fdZddZd dZ	 	 d!dZd Zd Zd Z d Z!d Z"d Z# xZ$S )"CmfPluginJira)jiraNtestget_all_projectsc                 h   | j         s|                     g d           t          | j        j        j        | j        j        j        | j        j                                        | j        j	                                        | j        j
        j        | j        j        j                  | _         | j         S )N)pluginzplugin.ext_urlzplugin.ext_loginzplugin.ext_tokenzplugin.ext_passwordzplugin.cloudzplugin.verify_ssl)urlusernametokenpassword
verify_sslcloud)_CmfPluginJira__jiraload_fieldsr   r   ext_urlvalue	ext_login	ext_tokendecryptext_passwordr   r   )selfs    (./modules/jira/models/cmf_plugin_jira.pyr
   zCmfPluginJira.jira   s    { 	` X X X Y Y Y!dk&9&?$+J_Je"k3;;==H`HhHhHjHj#';#9#?t{GXG^` ` `DK {    c                     ddl m} ddlm} | j        5 } |||                                          cd d d            S # 1 swxY w Y   d S )Nr   JiraAPIImportJiraCSVImport)modules.jira.api_importr"   modules.jira.csv_importr$   r
   tmplt_import_settingsr   
cmf_importr"   r$   r
   s        r   r'   z#CmfPluginJira.tmplt_import_settings   s    999999999999Y 	K$ =z22HHJJ	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	Ks   ?AAc                     ddl m} ddlm} |j        dk    r=| j        5 } |||                                          cd d d            S # 1 swxY w Y    ||                                          S )Nr   r!   r#   api)r%   r"   r&   r$   typer
   previewr(   s        r   r-   zCmfPluginJira.preview#   s    999999999999?e## Ad$}T:66>>@@A A A A A A A A A A A A A A A A}Z((00222s   A

AAc                     ddl m} ddlm} d|_        | j        5 } |||                                          cd d d            S # 1 swxY w Y   d S )Nr   r!   r#   u#   Импорт данных из Jira)r%   r"   r&   r$   namer
   process_importr(   s        r   r0   zCmfPluginJira.process_import+   s    999999999999?
Y 	D$ =z22AACC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	Ds   AA
A
c                     ddl m}  || j        |          }t          ||          rt	          ||          } |di | d S |j                            d| d           d S )Nr   r!   zMethod 'z' does not exist )r%   r"   r
   hasattrgetattrloggererror)r   r)   process_methodkwargsr"   jira_importmethods          r   process_entityzCmfPluginJira.process_entity2   s    999999#mDIz::;// 	Q[.99FFV##$O~$O$O$OPPPPPr   c                  
    g } | S )uR   Собственный магазин при выборе импорта из Jirar2   )ress    r   calc_models_settingsz"CmfPluginJira.calc_models_settings<   s    

 
r   cmf_import_idc                   ddl m} |                     dg           g }	 g }t                      }t          j                            ddd| j        j         dgdgd	          }|D ]7}t          
                    d
|j                  }	|                    |	           8| j        5 }
|
                                D ]}|d         }|d         }|d         }|d| dz  }|||d         d}|                    d          r|d         |d<   d| j        j         d| d}||v r|dz  }||d<   |                    |           	 d d d            n# 1 swxY w Y   n# t"          $ rw}t$                              |           t          j                            |ddg          }d  || j        |                                          D             }|s Y d }~nd }~ww xY w|S )Nr   r!   zplugin.source_hashext_idLIKE%::::%T)filterfieldsinclude_deletedz::[^:]+::[^:]+::idkeyr/   z ())rH   rI   original_name	isPrivate::u    [импортирован]r   zplugin.plugin.*rH   rF   c                     g | ]}|S r2   r2   .0objs     r   
<listcomp>z2CmfPluginJira.get_all_projects.<locals>.<listcomp>{   s    WWW33WWWr   )r%   r"   r   setmodels
CmfProjectslistr   source_hashrefindallrA   updater
   get_projectsgetappend	Exceptiongdebug	CmfImport_get_projects)r   r?   argsr8   r"   r=   imported_project_ext_idsimported_projectsimported_projectext_idsr
   project
project_idproject_keyproject_nameproject_dataproject_ext_ider)   s                      r   r   zCmfPluginJira.get_all_projectsL   s   999999./000+	C'*uu$ & 1 7 7 &*L0G*L*L*LM z $ !8 ! !
 %6 9 9 **%8:J:QRR(//8888 -d#0022 - -G!(J")%.K#*6?L $7$7$7$77L
 )*)0$ $L
 {{;// I4;K4H[1%S$+*A%S%SZ%S%S%SN%)AAA$(EE+7L(JJ|,,,,--- - - - - - - - - - - - - - -0  	 	 	GGAJJJ)--M^G_-``JWW--	:"F"F"T"T"V"VWWWC     	 
s>   BE %BEE EE EE 
G#A-GGc                 h   | j         5 }|                    d          5  |                                }|                    d          }d d d            n# 1 swxY w Y   |d         }|j                            d          |k    rt          d| d           d d d            d S # 1 swxY w Y   d S )	N   )timeoutT)do_health_checkbaseUrl/u   Указанный адрес отличается от основного URL-адреса Jira.<br />Пожалуйста, используйте основной URL для корректной работы.<br />Основной URL: <strong>z	</strong>)r
   without_retry
get_myselfget_server_infor   rstrip	cmf_alert)r   r
   myselfserver_infobase_urls        r   check_connectionzCmfPluginJira.check_connection   s_   Y 
	$##A#.. I I**"2242HHI I I I I I I I I I I I I I I #9-Hxs##x//I5=I I I  
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	s4   B'+A
B'A	B'A	<B''B+.B+c                     | j         5 }t          d |                                D                       cddd           S # 1 swxY w Y   dS )uE   
        Проверяем подключение к апи
        c                     g | ]}|S r2   r2   rP   s     r   rS   z&CmfPluginJira.test.<locals>.<listcomp>   s    <<<<<<r   N)r
   boolr\   )r   rd   r8   r
   s       r   r   zCmfPluginJira.test   s     Y 	>$<<(9(9(;(;<<<==	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	>s   +A  AAc                     ddl m} | j        5 } |||                                          cd d d            S # 1 swxY w Y   d S Nr   r!   )r%   r"   r
   download_datar   r)   r"   r
   s       r   r   zCmfPluginJira.download_data   s    999999Y 	C$ =z22@@BB	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C   9= =c                     ddl m} | j        5 } |||                                          cd d d            S # 1 swxY w Y   d S r   )r%   r"   r
   download_filesr   s       r   r   zCmfPluginJira.download_files   s    999999Y 	D$ =z22AACC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	Dr   c                    ddl m} ddlm} dd l}d}t
                                          5  t
                                          5  t          j	        
                    | ddg          } ||j        j        |          }	|j        j        j         d| }
t          j        
                    dd	d
|
 dgddg          }|st          d|
           |j        j        }|
                    d          r|d         |d         f|	_        |j        |	_        |	                    |j                   d |	j        t          j        j                 d         D             |	_        g }|	j                                        }|	j                                        }t7          |	j        |          }|j                            d|            |j                                        }tA          |          D ]v}|	j!        "                    |	j#        d| |||d          }|$                    |           |%                                 |	j&        j                            d|            wd}|	'                    |||tP          j)                  D ]=}|	j&        *                                r n!|dz  }|+                    |d                    >|D ]}|+                    d           |	j&        j                            d           |D ]}|,                                 |j                                        |z
  }|	j&        j                            d||-                                z   d           d}|.                                s+||
                                z  }|.                                +|	j&        j                            d |            ||z  }d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |S )!Nr   r!   )cmf_contextr   zplugin.plugin.source_hashrN   rM   rA   rB   rC   rD   cust_field_conf_schemeimport_raw_json)rE   rF   u)   Не найден проект с ext_id normalized_keyrI   c                      i | ]}|d          |S )titler2   )rQ   fields     r   
<dictcomp>z4CmfPluginJira.process_issue_fork.<locals>.<dictcomp>   s.     * * * g* * *r   rF   u@   Грузим задачи в несколько потоков: _process_issue_thread)issue_queueissue_queue_errorsri   )targetr/   r8   u.   Параллельный обработчик )only_processingrq   
issue_pathDONEu&   Ждем обработки задачu*   ------------------------ скорость u    задач в секундуu?   Закончили обработку задач, ошибок )/r%   r"   cmf.appr   datetimecmfutildisable_acldisable_notifyrU   rb   r]   r   r
   rX   rV   CmfErrorr   r   key_pairr   _cache_prioritiessettingsCmfTaskverbose_namejira_map_fieldsqueueQueueminthreading_max_forksr5   infonowrange	threadingThreadr   r^   startr)   get_project_tasksconfigIMPORT_ONLY_NEW_OR_UPDATED	is_cancelputjointotal_secondsempty)r?   rj   r   limitr"   r   r   errorsr)   
api_importrn   ri   rm   issue_processr   r   thread_countsiproccntissuediff
has_errorss                           r   process_issue_forkz CmfPluginJira.process_issue_fork   s>   999999''''''  "" G	! G	!G$:$:$<$< G	! G	!)--LgGh-iiJ&z'8'=zJJJ * 1 8 DTT
TTN'++ &*C*C*C*CD,% ,  G  ][>[[\\\"28L 011 \'3E':LIY<Z&[
#070NJ-(()GHHH* *'01LMhW* * *J&
 M$*0022K!+!1!7!7!9!9 z=uEEL""#tfr#t#tuuu!%%''A<(( k k!+22%;444'2.@#*  3   $$T***

%,112icg2i2ijjjjC#55 & A	 6   	5 	5 (2244 Eql 34444% ( (''''!(--.WXXX%  		$((**Q.D!(--  /U[^aeasasauau[u  /U  /U  /U  V  V  VJ(..00 7044666
 )..00 7!(--.|pz.|.|}}}j FOG	! G	! G	! G	! G	! G	! G	! G	! G	! G	! G	! G	! G	! G	! G	! G	! G	! G	! G	! G	! G	! G	! G	! G	! G	! G	! G	! G	! G	! G	!P s6   O:NO#O:#O'	'O:*O'	+O::O>O>c                 &   |                     dg           |j        rS|j        dk    rHt          |j        d                   }|j        d         }t	          |j        |j        d| ddf          S t                                          |          S )Nr   r   r   rI   zbrowse/ )	r   r   
class_namer   r   schemenetlocsupercalc_ext_href)r   rR   self_urlrI   	__class__s       r   r   zCmfPluginJira.calc_ext_href   s    *+,,, 	[3>Y#>#> 3F ;<<H%e,Cx3RTVXYZZZww$$S)))r   c                     |                     dg           |j        dk    r|j        r|j        d         S t                                          |          S )Nr   r   r   )r   r   r   r   calc_dump_path)r   rR   r   s     r   r   zCmfPluginJira.calc_dump_path   sT    *+,,,>Y&&3+>&&|44ww%%c***r   r/   c           
         ddl }dt                      g d}dt                      d}d}t                      }t          |j        j                            d                    }	|	                    |          }
|
                                rt          |
d          5 }|D ]Q}t          
                    |          }|                    t          |d                   ||         f           |dz  }R	 ddd           n# 1 swxY w Y   n|
                                r|
                                D ]}|                                s|                    d	          }|                                sBt          |d          5 }t                              |          }|                    t          |d                   ||         f           |dz  }ddd           n# 1 swxY w Y   |d
k    r|d         d         }d |D             }|                    d          }|                                r|                                D ]}|                                s|j                                        rk|j        |j        k    r[|j        |v rR|d                             ||         |j        f           |dxx         dz  cc<   |                    |j                   |r6|d                             ||         d                    |          f           |                    d          }t          |d          5 }|D ]b}t          
                    |          }|d                             ||         t          |d                   f           |dxx         dz  cc<   c	 ddd           n# 1 swxY w Y   ||d}|d
k    r
||d<   ||d<   |S )u  
        Возвращает информацию о дампе сущности,
        общее количество объектов и множество объектов с кортежами вида (id, name/key).
        Для задач дополнительно добавляется информация об их вложениях и комментариях с
        множеством кортежей вида (task_key, id/name)

        Args:
            project (object): объект CmfProject
            entity (str): название сущности (название каталога или файла)
            field (str, optional): дополнительное поле сущности 
                                   для добавления в кортеж объекта вместе c id.
                                   Defaults to "name".

        Returns:
            dict: _description_
        r   N)countobjsundownloadedr   r   project_dirzr+rH   rq   z	info.jsontasksrF   
attachmentc                 8    h | ]}t          |d                    S )rH   )str)rQ   r   s     r   	<setcomp>z:CmfPluginJira._get_dump_stats_by_entity.<locals>.<setcomp>4  s%    %Z%Z%Z
c*T*:&;&;%Z%Z%Zr   attachmentsr   r   r   z, zcomments.jsoncomments)zipfilerT   r   r   r   r]   joinpathis_fileopenjsonloadsaddr   is_diriterdirexistsloadstemisdigitr/   remover^   r   )r   ri   entityr   r   attachment_statscomment_statsdumped_countdumped_objsr   	objs_pathfrowobj_dataobj_dirobj_data_filer   attachment_idsattachments_diritemcomment_data_filecomment_datastatss                          r   _get_dump_stats_by_entityz'CmfPluginJira._get_dump_stats_by_entity   s   " 	 EE
 
 EE
 

 ee728<<]KKLL((00	 0	8i&& &! & &C#zz#HOOS$%8%8(5/$JKKK A%LL&& & & & & & & & & & & & & & &
  )	8$,,.. '8 '8~~''  ' 0 0 = =$++-- -.. &!#yy||HOOS$%8%8(5/$JKKK A%L& & & & & & & & & & & & & & & W$$"*8"4\"BK%Z%Zk%Z%Z%ZN&-&6&6}&E&EO&--// A$3$;$;$=$= A AD#'<<>> ) ( !%	 1 1 3 3A$(I$:$:$(I$?$? 0 8 < <huoty=Y Z Z Z 0 9 9 9Q > 9 9 9 . 5 5di @ @ @% (8??$UOTYY~-F-FA    )0(8(8(I(I%/66 8!#$ 8 8C+/::c??L)&155xLY]L^H_H_6`aaa)'222a7222288 8 8 8 8 8 8 8 8 8 8 8 8 8 8 "
 
 W#3E-  -E*s9   AC??DDAG##G'	*G'	A&N88N<	?N<	c           	         dd|gg dg}|r|                     |           g d}|dv r|                    ddg           t                              |          }|                    |d	          }t                      }	d
}
t          d||
          D ]Q}|                    ||d|||
z   g          }|D ],}|j        r3|j        	                    d          d         
                    d          nd}|rt          ||d          nd}|j        r4t          |j        d                   }|j                            |          }|dv r+|j        j        r|j        j        d         }n|j        j        }|dk    r|r|	                    ||f           |dk    r|	                    ||f           |r|	                    ||f           |	                    |           .S||	d}|S )u  
        Возвращает информацию об обработанных объектах сущности

        Args:
            project (object): объект CmfProject
            entity (str): название cmf модели
            filter_by (list, optional): дополнительный фильтр. Defaults to None.
            field (str, optional): дополнительное поле сущности 
                                   для добавления в кортеж объекта вида (id, name/key).
                                   Defaults to None.

        Returns:
            dict: _description_
        ri   =)r)   !=N)z--rA   r/   r   )CmfAttachment
CmfCommentzparent.codezparent.import_raw_jsonT)rE   include_archivedd   r   )rE   rF   r  slicerM   rq   zversion:NrH   rI   r   r   r   )r^   extendr   get_model_by_namer   rT   r   rW   rA   splitlstripr4   r   r   r]   parentcoder   )r   ri   r   	filter_byr   filter_rF   modelprocessed_countprocessed_objsstepr   r   rR   obj_id	obj_fieldparent_coder   s                     r   _get_process_stats_by_entityz*CmfPluginJira._get_process_stats_by_entityY  sr     W%&&&
  	&NN9%%%
 
 
 444MM(   
 ))&11++Wt+LL1ot44 	/ 	/E;;!%edl+	   D  / /IL]))$//299*EEEY]9>HGC555D	& ? !4T!:;;F # 3 7 7 > >I<<<z1 6&)j&@&G&)jo_,,,"&&V'<====|++"&&V'<==== /"&&	':;;;;"&&v....%/* %"
 
 r   Fc                   
 |rd |D             
d |D             }t          
                                                              t          |                                                    }t          
                                          |z
  }
fd|D             }n|                    |          }||z
  }|s|rdndt          |          d}	|	S )u  
        Возвращает результат проверки сдампленных и обработанных объектов
        в виде статуса и множества кортежей необработанных объектов

        Args:
            dump_objs (set): сдампленные объекты
            process_objs (set): обработанные объекты
            has_undownloaded (bool, optional): есть незагруженные вложения
            check_by_id (bool, optional): осуществлять проверку только по id. Defaults to False.
        c                 ,    i | ]}|d          |d         S r   rq   r2   rQ   r   s     r   r   z4CmfPluginJira._check_consistency.<locals>.<dictcomp>  s"    7771qt777r   c                 ,    i | ]}|d          |d         S r  r2   r  s     r   r   z4CmfPluginJira._check_consistency.<locals>.<dictcomp>  s"    ===1AaD!A$===r   c                 $    h | ]}||         fS r2   r2   )rQ   id_	dump_dicts     r   r   z3CmfPluginJira._check_consistency.<locals>.<setcomp>  s"    EEESC30EEEr   u   НЕКОРРЕКТНОOK)statusunprocessed)rT   keysintersectionlist)r   	dump_objsprocess_objshas_undownloadedcheck_by_idprocess_dictr   diff_idsr  resultr  s             @r   _check_consistencyz CmfPluginJira._check_consistency  s    "  	377Y777I=====Ly~~//00==c,BSBSBUBU>V>VWWL9>>++,,|;HEEEEHEEEKK$11,??L#l2K2=[AQ[..W[,,
 
 r   c                 l   | j                             d           |                     |d          }| j                             d|d                     | j                             d           |                     |dg dd	          }| j                             d
|d                     d|d         |d         d}| j                             d           |                     |d         |d         d          }| j                             d|d                     |                    |           |S )u   
        Возвращает статистику по спринтам проекта

        Args:
            project (object): объект CmfProject

        Returns:
            dict: данные статистики
        uF   Сбор информации о сдампенных спринтахsprintsu%   Сдамплено спринтов: r   uL   Сбор информации об обработанных спринтахCmfList)logic_type.coder   zlist.agile_sprint:defaultr/   r
  r   u'   Обработано спринтов: u   Спринтыr   dumped	processedu   Проверка консистентности между сдампленными и обработанными спринтамиr   T)r%  u   Спринты: r  r5   ra   r   r  r)  r[   r   ri   
dump_statsprocess_stats
stats_datar(  s         r   _get_project_sprint_statsz'CmfPluginJira._get_project_sprint_stats  sp    	bccc33GYGG
W*WBUWWXXXhiii99KKK	 : 
 
 	\MRYDZ\\]]] ' )&w/
 

 	 S	
 	
 	
 ((v&! ) 
 

 	?VH-=??@@@&!!!r   c                 h   | j                             d           |                     |d          }| j                             d|d                     | j                             d           |                     |dg dd	          }| j                             d
|d                     d|d         |d         d}| j                             d           |                     |d         |d                   }| j                             d|d                     |                    |           |S )u   
        Возвращает статистику по релизам (версиям) проекта

        Args:
            project (object): объект CmfProject

        Returns:
            dict: данные статистики
        uT   Сбор информации о сдампенных релизах(версиях)zversions.jsonu1   Сдамплено релизов(версий): r   uZ   Сбор информации об обработанных релизах(версиях)r,  )r-  r   zlist.release:defaultr/   r.  u3   Обработано релизов(версий): u   Релизыr/  u   Проверка консистентности между сдампленными и обработанными релизами(версиями)r   u   Релизы(версии): r  r2  r3  s         r   _get_project_version_statsz(CmfPluginJira._get_project_version_stats  sb    	pqqq33G_MM
cjY`Naccdddvwww99FFF	 : 
 
 	hP]^ePfhhiii % )&w/
 

 	 c	
 	
 	
 ((F);]6=RSSK9IKKLLL&!!!r   c                 b   | j                             d           |                     |d          }| j                             d|d                     | j                             d           |                     |dd          }| j                             d	|d                     d
|d         |d         d}| j                             d           |                     |d         |d                   }| j                             d|d                     |                    |           |S )u   
        Возвращает статистику по компонентам проекта

        Args:
            project (object): объект CmfProject

        Returns:
            dict: данные статистики
        uL   Сбор информации о сдампенных компонентахzcomponents.jsonu+   Сдамплено компонентов: r   uR   Сбор информации об обработанных компонентахCmfComponentr/   r   u-   Обработано компонентов: u   Компонентыr/  u   Проверка консистентности между сдампленными и обработанными компонентамиr   u   Компоненты: r  r2  r3  s         r   _get_project_component_statsz*CmfPluginJira._get_project_component_stats  sY    	hiii33G=NOO
]
SZH[]]^^^nooo99 : 
 

 	b-X_J`bbccc - )&w/
 

 	 Y	
 	
 	
 ((F);]6=RSSE6(3CEEFFF&!!!r   c                 b   | j                             d           |                     |d          }| j                             d|d                     | j                             d           |                     |dd          }| j                             d	|d                     d
|d         |d         d}| j                             d           |                     |d         |d                   }| j                             d|d                     |                    |           |S )u   
        Возвращает статистику по доскам проекта

        Args:
            project (object): объект CmfProject

        Returns:
            dict: данные статистики
        uB   Сбор информации о сдампенных доскахboardsu   Сдамплено досок: r   uH   Сбор информации об обработанных доскахCmfKanbanBoardr/   r<  u!   Обработано досок: u
   Доскиr/  u   Проверка консистентности между сдампленными и обработанными доскамиr   u   Доски: r  r2  r3  s         r   _get_project_board_statsz&CmfPluginJira._get_project_board_stats3  sV    	^___33GXFF
QJw<OQQRRRdeee99 : 
 

 	VmG>TVVWWW # )&w/
 

 	 O	
 	
 	
 ((F);]6=RSS;)9;;<<<&!!!r   c                    | j                             d           |                     |dd          }| j                             d|d                     | j                             d|d         d                     | j                             d	|d
         d                     | j                             d           |                     |dd          }| j                             d|d                     d|d         |d         d}g d}| j                             d           |                     |dg d|g          }| j                             d|d                     d|d         d         |d         d         |d         d}| j                             d           |                     |dg d|g          }| j                             d|d                     d|d
         d         |d         d}	| j                             d           |                     |d         |d                   }
| j                             d |
d!                     |                    |
           | j                             d"           |                     |d         d         |d         t          |d         d                   #          }| j                             d$|d!                     |                    |           | j                             d%           |                     |d
         d         |d                   }| j                             d&|d!                     |	                    |           |||	gS )'u  
        Возвращает статистику по задачам проекта, их вложениям и комментариям

        Args:
            project (object): объект CmfProject

        Returns:
            dict: данные статистики
        ut   Сбор информации о сдампенных задачах, вложениях и комментарияхr   rI   r<  u   Сдамплено задач: r   u%   Сдамплено вложений: r   u-   Сдамплено комментариев: r   uJ   Сбор информации об обработанных задачахr   u!   Обработано задач: u   Задачиr/  )	parent_idrB   z	CmfTask:%uN   Сбор информации об обработанных вложенияхr   )r   r   N)r
  u'   Обработано вложений: u   Вложенияr   )r   r0  r   r1  uT   Сбор информации об обработанных комментарияхr   )	log_levelr   r   u/   Обработано комментариев: u   Комментарииu   Проверка консистентности между сдампленными и обработанными задачамиr   u   Задачи: r  u   Проверка консистентности между сдампленными и обработанными вложениями)r$  u   Вложения: u   Проверка консистентности между сдампленными и обработанными комментариямиu   Комментарии: )r5   ra   r   r  r)  r[   r   )r   ri   r4  r5  task_stats_dataparent_filterattach_process_statsattachment_stats_datacomment_process_statscomment_stats_datatask_resultattachment_resultcomment_results                r   _get_project_task_statsz%CmfPluginJira._get_project_task_statsW  s>    	  Q  	R  	R  	R33GWE3RR
QJw<OQQRRRf*]B[\cBdffgggk*U_J`ahJikklllfggg99 : 
 

 	VmG>TVVWWW$ )&w/
 
 ;::jkkk#@@///  A  
  
 	cDXY`Daccddd( /8&}5nE-g6	!
 !
 	pqqq $ A A%%% !B !
 !
 	lLabiLjllmmm. ,W5.w7
 
 	 Q	
 	
 	
 --v&!
 
 	B;x+@BBCCC{+++ U	
 	
 	
 !33}%f- (!*]";N"KLL 4 
 

 	L/@/JLLMMM$$%6777 [	
 	
 	
 00z"6*!&)
 
 	O^H5MOOPPP!!.111!68JKKr   c                    g }|                      |          }|                    |           |                     |          }|                    |           |                     |          }|                    |           |                     |          }|                    |           |                     |          }|D ]}|                    |           |S )u   
        Возвращает отчет сдампленных и обработанных объектов

        Args:
            project (object): объект CmfProject
        )r7  r^   r9  r=  rA  rN  )	r   ri   r   sprint_stats_dataversion_stats_datacomponent_stats_databoard_stats_datarE  r6  s	            r   project_statszCmfPluginJira.project_stats  s      !::7CC&'''!<<WEE'(((#@@II)***88AA%&&&66w??) 	% 	%JLL$$$$r   )r/   )NN)FF)%__name__
__module____qualname__modulesr
   rF   cmf_plugin_jirar	   ui_meta_skipr   api_methodspropertyr'   r-   r0   r;   staticmethodr>   r   r   r~   r   r   r   r   r   r   r   r  r)  r7  r9  r=  rA  rN  rT  __classcell__)r   s   @r   r	   r	   
   s?       <&6DQT^^LF,%5COS K
   XK K K3 3 3D D DQ Q Q   \2S 2 2 2 2h  > > >C C C
D D D
 M M \M^* * * * *+ + + + +[ [ [ [zF F F FX    @' ' 'R# # #J" " "H" " "H_L _L _LB      r   r	   )pathlibr   urllib.parser   r   cmf.include#modules.jira.fields.cmf_plugin_jirarX  modules.jira.apir   r
   rF   rY  r	   r2   r   r   <module>rd     s          - - - - - - - -     * * * * $ $ $ $ $ $H H H H HGL'7E H H H H Hr   