
    Gŕi!                         d dl Z d dlZd dl d dlmZ  G d dej                        Zej                  d      Z	e	j                   e               G d de      Zy)	    N)*)JiraApic                       e Zd Zd Zy)SensitiveDataFilterc                 |   t        |d      rd}|j                  j                  dd      }t        j                  d||      }t        j                  d||      }t        j                  d||      }t        j                  d||      }t        j                  d	||      }t        j                  d
||      }||_        yy )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#6I;T9MI;T9MIBD)TI<dINIA4SI:D)LI"FJ "    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        |   |g|d|i| |%| j                  j                  j	                  |       d| _        d| _        y )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__   sM    ?t?W??MM!!((1!>$)!r   c                 f    t        j                         }t        |      dkD  r|d   j                  S y)u[   Получить имя метода, который вызвал текущий метод   unknown)inspectstacklenfunction)r   r+   s     r   _get_caller_method_namez&BigGanttClient._get_caller_method_name(   s+    u:>8$$$r   c                 2    || j                   j                  v S )u\   Проверить, определен ли метод именно в этом классе)r&   __dict__)r   method_names     r   _is_method_defined_herez&BigGanttClient._is_method_defined_here/   s    dnn5555r   c                     | j                         }| j                  |      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   sZ    446''6--H33Kw+# , 

 r   c                 P    | j                  d      }| j                  |      }|d   S )u2   Получить токен авторизацииzsystem/authauthenticationr6   get)r   r#   responses      r   _get_auth_tokenzBigGanttClient._get_auth_tokenA   s+    .88C=())r   c                 b    | j                         | _        t        |   | j                         y)u-   Создать сессию с токеномN)r>   tokenr   _create_token_session)r   r&   s    r   rA   z$BigGanttClient._create_token_sessionG   s$    ))+
%djj1r   c                     | j                   j                  r4| j                  s(| j                         rd| _        | j	                          y | j                          | j	                          y )NT)r   r   _session_valid_check_sessionrA   _authenticate)r   s    r   _create_valid_sessionz$BigGanttClient._create_valid_sessionL   sR    ==  )<)<""$&*#**,""$r   c                 F    | j                  d      }| j                  |      S )u   
        Получить экземпляры интеграции

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

        Returns:
            list: список сопоставления полей задач
        zppm/task/core/global/fieldsr;   rI   s     r   get_task_fieldszBigGanttClient.get_task_fields`   s#      =>xx}r   c                 Z    | j                  d      }| j                  |      }|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   s6      =>88C=!-0r   c                 V    | j                  d      }| d| d}| j                  |      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   s5     $$Y/
!F8#78xx}r   c                 V    | j                  d      }| d| d}| j                  |      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   s5     $$Y/
!F8#?@xx}r   c                 n    | j                  d      }| d| d| }| j                  |      }|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   sP     $$%:;
!F8?3E2FG88C=!"45jAr   c                 V    | j                  d      }| d| d}| j                  |      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   s5     $$%:;
!F89-xx}r   c                 l    d|i}| j                  d      }| d| d}| j                  ||      }|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   sR     8
 $$%:;
!F8:.99St9,r   c                 v    | j                  d      }| d| d| d| d}| j                  |      }|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   sU     $$%>?
!N+1\N!G9FK88C=!(+r   c                 f    | j                  d      }| d| d}|||d}| j                  ||      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   sL     $$%GH
!F8=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      s^    :+/ *6*2
%
$ &$,r   r   )r*   r   cmf.includemodules.jira.apir   loggingFilterr   	getLoggerlogger	addFilterr   r   r   r   <module>r      sT     	  $'..   
		2	3   $& 'P,W P,r   