
    i!                         d dl Z d dlZd dlT d dlmZ  G d dej                  Ze                    d          Z	e	
                     e                        G d de          ZdS )	    N)*)JiraApic                       e Zd Zd ZdS )SensitiveDataFilterc                 z   t          |d          rd}|j                            dd          }t          j        d||          }t          j        d||          }t          j        d||          }t          j        d||          }t          j        d	||          }t          j        d
||          }||_        dS d S )Nmsgz\1***\2z\""z("username":\s*")[^"]*(")z("password":\s*")[^"]*(")z ("webSudoPassword":\s*")[^"]*(")z("atl_token":\s*")[^"]*(")z("authentication":\s*")[^"]*(")z("refresh":\s*")[^"]*(")T)hasattrr   replaceresub)selfrecordrepl	clean_msgs       #./modules/jira/clients/big_gantt.pyfilterzSensitiveDataFilter.filter	   s    65!! 	D
**5#66I;T9MMI;T9MMIBD)TTI<dINNIA4SSI:D)LLI"FJ4	 	    N)__name__
__module____qualname__r    r   r   r   r      s#            r   r   zatlassian.rest_clientc                        e Zd ZdZdd fd
Zd Zd Zd fd	Zd Z fd	Z	d
 Z
d Zd Zd Zd Zd ZddZd Zd Zd Zd Z xZS )BigGanttClientu0   Клиент для работы с BigGantt APIN)cookiesc                     t                      j        |g|R d|i| || j        j                            |           d| _        d| _        d S )Nr   zrest/softwareplant-bigganttz1.0)super__init___sessionr   updatebiggantt_api_rootbiggantt_api_version)r   urlr   argskwargs	__class__s        r   r   zBigGanttClient.__init__   sd    ?t???W????M!((111!>$)!!!r   c                 l    t          j                    }t          |          dk    r|d         j        S dS )u[   Получить имя метода, который вызвал текущий метод   unknown)inspectstacklenfunction)r   r+   s     r   _get_caller_method_namez&BigGanttClient._get_caller_method_name(   s.    u::>>8$$yr   c                     || j         j        v S )u\   Проверить, определен ли метод именно в этом классе)r&   __dict__)r   method_names     r   _is_method_defined_herez&BigGanttClient._is_method_defined_here/   s    dn555r   c                     |                                  }|                     |          r| j        }| j        }t	                                          |||          }|S )N)api_rootapi_version)r.   r2   r!   r"   r   resource_url)r   resourcer4   r5   caller_methodr6   r&   s         r   r6   zBigGanttClient.resource_url3   si    4466''66 	4-H3Kww++# , 
 

 r   c                 f    |                      d          }|                     |          }|d         S )u2   Получить токен авторизацииzsystem/authauthenticationr6   get)r   r#   responses      r   _get_auth_tokenzBigGanttClient._get_auth_tokenA   s0    ..88C==())r   c                     |                                  | _        t                                          | j                   dS )u-   Создать сессию с токеномN)r>   tokenr   _create_token_session)r   r&   s    r   rA   z$BigGanttClient._create_token_sessionG   s6    ))++
%%dj11111r   c                     | j         j        r8| j        s1|                                 rd| _        |                                  d S |                                  |                                  d S )NT)r   r   _session_valid_check_sessionrA   _authenticate)r   s    r   _create_valid_sessionz$BigGanttClient._create_valid_sessionL   sv    =  	)< 	""$$ &*#**,,,""$$$$$r   c                 V    |                      d          }|                     |          S )u   
        Получить экземпляры интеграции

        Returns:
            list: список интеграций BigGantt с Jira или другими платформами
        extplatformr;   r   r#   s     r   get_extplatformzBigGanttClient.get_extplatformV   s'     ..xx}}r   c                 V    |                      d          }|                     |          S )u   
        Получить поля задач

        Returns:
            list: список сопоставления полей задач
        zppm/task/core/global/fieldsr;   rI   s     r   get_task_fieldszBigGanttClient.get_task_fields`   s(      =>>xx}}r   c                 v    |                      d          }|                     |          }|d         d         }|S )u   
        Получить иерархию диаграмм (блоков) в виде древовидной структуры

        Returns:
            dict: иерархия диаграмм (блоков)
        zpublic/ppm/box/boxHierarchycargoboxChildrenr;   )r   r#   r=   boxess       r   get_box_hierarchyz BigGanttClient.get_box_hierarchyj   s;      =>>88C==!-0r   c                 f    |                      d          }| d| d}|                     |          S )uX  
        Получить конфигурацию источников (проекты, доски, фильтры) задач для диаграммы (блока)

        Args:
            box_id (str): id диаграммы (блока)

        Returns:
            dict: конфигурация источников задач
        ppm/box/z/area/task/scope/defr;   r   box_idbase_urlr#   s       r   get_box_scope_definitionz'BigGanttClient.get_box_scope_definitionv   s=     $$Y//88F888xx}}r   c                 f    |                      d          }| d| d}|                     |          S )u  
        Получить конфигурацию структуры задач диаграммы (блока)

        Args:
            box_id (str): id диаграммы (блока)

        Returns:
            dict: конфигурация структуры
        rS   rT   z/area/task/structure-builderr;   rU   s       r   get_box_task_structurez%BigGanttClient.get_box_task_structure   s=     $$Y//@@F@@@xx}}r   r   c                     |                      d          }| d| d| }|                     |          }|d         d         }|S )u  
        Получить древовидную структуру диаграммы (блока)

        Args:
            box_id (str): id диаграммы (блока)
            max_issues_to_load (int, optional): максимальное количество загруженных данных задач.
                Defaults to 0.

        Returns:
            list: древовидная структура
        ppm/boxmodule/ganttrT   z/loadStructure/treeStructureDTOchildrenr;   )r   rV   max_issues_to_loadrW   r#   r=   tree_structures          r   get_box_tree_structurez%BigGanttClient.get_box_tree_structure   sY     $$%:;;GGFGG3EGG88C==!"45jAr   c                 f    |                      d          }| d| d}|                     |          S )u   
        Получить все связи задач в диаграмме (блоке)

        Args:
            box_id (str): id диаграммы (блока)

        Returns:
            dict: список связей задач
        r\   rT   z	/allLinksr;   rU   s       r   get_box_all_linksz BigGanttClient.get_box_all_links   s>     $$%:;;--F---xx}}r   c                     d|i}|                      d          }| d| d}|                     ||          }|d         S )uH  
        Получить данные задач диаграммы (блока)

        Args:
            box_id (str): id диаграммы (блока)
            task_ids (list, optional): список id задач

        Returns:
            list: список загруженных данных задач
        tasksToLoadr\   rT   z
/loadTasks)datarf   )r6   post)r   rV   task_idsrf   rW   r#   r=   s          r   get_box_taskszBigGanttClient.get_box_tasks   s\     8
 $$%:;;..F...99St9,,r   c                     |                      d          }| d| d| d| d}|                     |          }|d         d         }|S )u  
        Получить диаграммы (блоки), содержащие данную задачу

        Args:
            extplatform_id (_type_): id экземпляра интеграции
            task_type_id (_type_): id типа задачи
            task_id (_type_): id задачи

        Returns:
            list: список id диаграмм (блоков)
        zpublic/ppm/boxarea/taskrT   @z/boxesrN   boxIdsr;   )r   extplatform_idtask_type_idtask_idrW   r#   r=   rP   s           r   get_task_boxeszBigGanttClient.get_task_boxes   sa     $$%>??KKNKK\KKGKKK88C==!(+r   c                 v    |                      d          }| d| d}|||d}|                     ||          S )u  
        Получить родительские задачи согласно структуре диаграммы (блока),
        содержащей данную задачу

        Args:
            box_id (str): id диаграммы (блока)
            extplatform_id (str): id экземпляра интеграции
            task_type_id (str): id типа задачи
            task_id (str): id задачи

        Returns:
            dict: родительские задачи
        z ppm/boxmodule/external-wbs-panelrT   z/load-parents)extPlatformIdextTaskType	extTaskId)paramsr;   )r   rV   rm   rn   ro   rW   r#   ru   s           r   get_task_parentszBigGanttClient.get_task_parents   s[     $$%GHH11F111+' 
 

 xxFx+++r   )NN)r   )r   r   r   __doc__r   r.   r2   r6   r>   rA   rF   rJ   rL   rQ   rX   rZ   ra   rc   ri   rp   rv   __classcell__)r&   s   @r   r   r      sY       ::+/ * * * * * * *  6 6 6     * * *2 2 2 2 2
% % %    
 
 
       $       &  $, , , , , , ,r   r   )r*   r   cmf.includemodules.jira.apir   loggingFilterr   	getLoggerlogger	addFilterr   r   r   r   <module>r      s     				     $ $ $ $ $ $    '.     
		2	3	3   $$&& ' ' 'P, P, P, P, P,W P, P, P, P, P,r   