
    ibx                         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} g }	 g }| j        5 }|                                D ]O}|d         |d         |d         d}|                    d          r|d         |d<   |                    |           P	 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!   idkeyr/   )rA   rB   r/   	isPrivater   zplugin.plugin.*rA   fieldsc                     g | ]}|S r2   r2   .0objs     r   
<listcomp>z2CmfPluginJira.get_all_projects.<locals>.<listcomp>a   s    WWW33WWWr   )r%   r"   r
   get_projectsgetappend	Exceptiongdebugmodels	CmfImport_get_projects)r   r?   argsr8   r"   r=   r
   projectproject_dataer)   s              r   r   zCmfPluginJira.get_all_projectsL   s   999999	C -d#0022 
- 
-G &dm&u~ '$ $L
 {{;// I4;K4H[1JJ|,,,,
-- - - - - - - - - - - - - - -  	 	 	GGAJJJ)--M^G_-``JWW--	:"F"F"T"T"V"VWWWC     	 
s<   	B A%B9B B		B B	B 
DA-DD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_connectionf   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   rG   s     r   rJ   z&CmfPluginJira.test.<locals>.<listcomp>x   s    <<<<<<r   N)r
   boolrK   )r   rT   r8   r
   s       r   r   zCmfPluginJira.tests   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   rl   zCmfPluginJira.download_dataz   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 rk   )r%   r"   r
   download_filesrm   s       r   rp   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rn   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 |	j        t          j        j                 d         D             |	_        g }|	j                                        }|	j                                        }t1          |	j        |          }|j                            d|            |j                                        }t;          |          D ]v}|	j                            |	j         d| |||d          }|!                    |           |"                                 |	j#        j                            d|            wd}|	$                    |||tJ          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_hashrD   ::ext_idLIKEz%::z::%cust_field_conf_schemeimport_raw_json)filterrE   u)   Не найден проект с ext_id c                      i | ]}|d          |S )titler2   )rH   fields     r   
<dictcomp>z4CmfPluginJira.process_issue_fork.<locals>.<dictcomp>   s.     * * * g* * *r   rE   u@   Грузим задачи в несколько потоков: _process_issue_thread)issue_queueissue_queue_errorsrU   )targetr/   r8   u.   Параллельный обработчик )only_processingrY   
issue_pathDONEu&   Ждем обработки задачu*   ------------------------ скорость u    задач в секундуu?   Закончили обработку задач, ошибок ),r%   r"   cmf.apprr   datetimecmfutildisable_acldisable_notifyrQ   rR   rL   r   r
   source_hash
CmfProjectCmfErrorrv   _cache_prioritiessettingsCmfTaskverbose_namejira_map_fieldsqueueQueueminthreading_max_forksr5   infonowrange	threadingThreadr}   rM   startr)   get_project_tasksconfigIMPORT_ONLY_NEW_OR_UPDATED	is_cancelputjointotal_secondsempty)r?   
project_idr   limitr"   rr   r   errorsr)   
api_importproject_ext_idrU   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''''''  "" D	! D	!G$:$:$<$< D	! D	!)--LgGh-iiJ&z'8'=zJJJ * 1 8 DTT
TTN'++ &*C*C*C*CD,% ,  G  ][>[[\\\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 FI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 s6   OMN-!O-N1	1O4N1	5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 )Nrw   r   r   rB   zbrowse/ )	r   rw   
class_namer   r   schemenetlocsupercalc_ext_href)r   rI   self_urlrB   	__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 )Nrw   r   r   )r   r   rw   r   calc_dump_path)r   rI   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+rA   rY   z	info.jsontasksrE   
attachmentc                 8    h | ]}t          |d                    S )rA   )str)rH   r   s     r   	<setcomp>z:CmfPluginJira._get_dump_stats_by_entity.<locals>.<setcomp>  s%    %Z%Z%Z
c*T*:&;&;%Z%Z%Zr   attachmentsr   r   r   z, zcomments.jsoncomments)zipfilesetr   rw   r   rL   joinpathis_fileopenjsonloadsaddr   is_diriterdirexistsloadstemisdigitr/   removerM   r   )r   rU   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                 f   dd|gg dg}|r|                     |           t                              |          }|                    |d          }t	                      }d}	t          d||	          D ]7}
|                    |g d|
|
|	z   gd	          }|D ]}|j        r3|j                            d
          d         	                    d          nd}|rt          ||d          nd}|j        r4t          |j        d                   }|j                            |          }|dk    r$|r"|                    |j        j        |f           |dk    r"|                    |j        j        |f           |r|                    ||f           |                    |           9||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_
        rU   =)r)   !=NT)rx   include_archivedd   r   )z--rt   r/   zparent.coderw   )rx   rE   slicer   rs   rY   zversion:NrA   CmfAttachment
CmfCommentr   )rM   r   get_model_by_namer   r   r   slistrt   splitlstripr4   rw   r   rL   r   parentcode)r   rU   r   	filter_byr{   filter_modelprocessed_countprocessed_objsstepr   r   rI   obj_id	obj_fieldr   s                   r   _get_process_stats_by_entityz*CmfPluginJira._get_process_stats_by_entity<  s     W%&&&
  	&NN9%%%))&11++Wt+LL1ot44 	/ 	/E;;QQQedl+!%	   D  / /IL]))$//299*EEEY]9>HGC555D	& ? !4T!:;;F # 3 7 7 > >I_,,,"&&
'@AAAA|++"&&
'@AAAA /"&&	':;;;;"&&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   rY   r2   rH   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   )rH   id_	dump_dicts     r   r   z3CmfPluginJira._check_consistency.<locals>.<setcomp>  s"    EEESC30EEEr   u   НЕКОРРЕКТНОOK)statusunprocessed)r   keysintersectionlist)r   	dump_objsprocess_objshas_undownloadedcheck_by_idprocess_dictr  diff_idsr  resultr	  s             @r   _check_consistencyz CmfPluginJira._check_consistencys  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   rP   r   r  r  updater   rU   
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  r   r"  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  r   r"  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  r   r"  s         r   _get_project_board_statsz&CmfPluginJira._get_project_board_stats  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   rB   r+  u   Сдамплено задач: r   u%   Сдамплено вложений: r   u-   Сдамплено комментариев: r   uJ   Сбор информации об обработанных задачахr   u!   Обработано задач: u   Задачиr  )	parent_idru   z	CmfTask:%uN   Сбор информации об обработанных вложенияхr   )rw   r   N)r   u'   Обработано вложений: u   Вложенияr   )r   r  r   r  uT   Сбор информации об обработанных комментарияхr   )	log_levelr   r   u/   Обработано комментариев: u   Комментарииu   Проверка консистентности между сдампленными и обработанными задачамиr   u   Задачи: r  u   Проверка консистентности между сдампленными и обработанными вложениями)r  u   Вложения: u   Проверка консистентности между сдампленными и обработанными комментариямиu   Комментарии: )r5   rP   r   r  r  r!  ri   )r   rU   r#  r$  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_stats)  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
        )r&  rM   r(  r,  r0  r=  )	r   rU   r   sprint_stats_dataversion_stats_datacomponent_stats_databoard_stats_datar4  r%  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
   rE   cmf_plugin_jirar	   ui_meta_skipr   api_methodspropertyr'   r-   r0   r;   staticmethodr>   r   r   rf   r   rl   rp   r   r   r   r   r  r  r&  r(  r,  r0  r=  rC  __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   \S    4  > > >C C C
D D D
 J J \JX* * * * *+ + + + +[ [ [ [z5 5 5 5v    @' ' 'R# # #J" " "H" " "H_L _L _LB      r   r	   )pathlibr   urllib.parser   r   cmf.include#modules.jira.fields.cmf_plugin_jirarG  modules.jira.apir   r
   rE   rH  r	   r2   r   r   <module>rS     s          - - - - - - - -     * * * * $ $ $ $ $ $Z
 Z
 Z
 Z
 Z
GL'7E Z
 Z
 Z
 Z
 Z
r   