U
    i!                     @   s`   d dl Z d dlZd dlT d dlmZ G dd dejZedZ	e	
e  G dd deZdS )	    N)*)JiraApic                   @   s   e Zd Zdd ZdS )SensitiveDataFilterc                 C   s~   t |drzd}|jdd}td||}td||}td||}td||}td	||}t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replZ	clean_msg r   #./modules/jira/clients/big_gantt.pyfilter	   s    
zSensitiveDataFilter.filterN)__name__
__module____qualname__r   r   r   r   r   r      s   r   zatlassian.rest_clientc                       s   e Zd ZdZdd fdd
Zdd Zdd	 Zd' fd
d	Zdd Z fddZ	dd Z
dd Zdd Zdd Zdd Zdd Zd(ddZdd  Zd!d" Zd#d$ Zd%d& Z  ZS ))BigGanttClientu0   Клиент для работы с BigGantt APIN)cookiesc                   sB   t  j|f|d|i| |d k	r2| 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__r   r   r      s
    zBigGanttClient.__init__c                 C   s"   t  }t|dkr|d jS dS )u[   Получить имя метода, который вызвал текущий метод   unknown)inspectstacklenfunction)r   r$   r   r   r   _get_caller_method_name(   s    
z&BigGanttClient._get_caller_method_namec                 C   s   || j jkS )u\   Проверить, определен ли метод именно в этом классе)r    __dict__)r   method_namer   r   r   _is_method_defined_here/   s    z&BigGanttClient._is_method_defined_herec                    s4   |   }| |r| j}| j}t j|||d}|S )N)api_rootapi_version)r'   r*   r   r   r   resource_url)r   resourcer+   r,   Zcaller_methodr-   r   r   r   r-   3   s    
zBigGanttClient.resource_urlc                 C   s   |  d}| |}|d S )u2   Получить токен авторизацииzsystem/authZauthenticationr-   get)r   r   responser   r   r   _get_auth_tokenA   s    

zBigGanttClient._get_auth_tokenc                    s   |   | _t | j dS )u-   Создать сессию с токеномN)r2   tokenr   _create_token_sessionr   r   r   r   r4   G   s    
z$BigGanttClient._create_token_sessionc                 C   s<   | j jr(| js(|  r(d| _|   d S |   |   d S )NT)r   r   Z_session_validZ_check_sessionr4   Z_authenticater5   r   r   r   _create_valid_sessionL   s    z$BigGanttClient._create_valid_sessionc                 C   s   |  d}| |S )u   
        Получить экземпляры интеграции

        Returns:
            list: список интеграций BigGantt с Jira или другими платформами
        Zextplatformr/   r   r   r   r   r   get_extplatformV   s    
zBigGanttClient.get_extplatformc                 C   s   |  d}| |S )u   
        Получить поля задач

        Returns:
            list: список сопоставления полей задач
        zppm/task/core/global/fieldsr/   r7   r   r   r   get_task_fields`   s    
zBigGanttClient.get_task_fieldsc                 C   s$   |  d}| |}|d d }|S )u   
        Получить иерархию диаграмм (блоков) в виде древовидной структуры

        Returns:
            dict: иерархия диаграмм (блоков)
        zpublic/ppm/box/boxHierarchycargoZboxChildrenr/   )r   r   r1   boxesr   r   r   get_box_hierarchyj   s    

z BigGanttClient.get_box_hierarchyc                 C   s$   |  d}| d| d}| |S )uX  
        Получить конфигурацию источников (проекты, доски, фильтры) задач для диаграммы (блока)

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

        Returns:
            dict: конфигурация источников задач
        ppm/box/z/area/task/scope/defr/   r   box_idbase_urlr   r   r   r   get_box_scope_definitionv   s    

z'BigGanttClient.get_box_scope_definitionc                 C   s$   |  d}| d| d}| |S )u  
        Получить конфигурацию структуры задач диаграммы (блока)

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

        Returns:
            dict: конфигурация структуры
        r=   r>   z/area/task/structure-builderr/   r?   r   r   r   get_box_task_structure   s    

z%BigGanttClient.get_box_task_structurer   c                 C   s8   |  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/ganttr>   z/loadStructure/ZtreeStructureDTOZchildrenr/   )r   r@   Zmax_issues_to_loadrA   r   r1   Ztree_structurer   r   r   get_box_tree_structure   s
    

z%BigGanttClient.get_box_tree_structurec                 C   s$   |  d}| d| d}| |S )u   
        Получить все связи задач в диаграмме (блоке)

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

        Returns:
            dict: список связей задач
        rD   r>   z	/allLinksr/   r?   r   r   r   get_box_all_links   s    

z BigGanttClient.get_box_all_linksc                 C   s8   d|i}|  d}| d| d}| j||d}|d S )uH  
        Получить данные задач диаграммы (блока)

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

        Returns:
            list: список загруженных данных задач
        ZtasksToLoadrD   r>   z
/loadTasks)datarG   )r-   Zpost)r   r@   Ztask_idsrG   rA   r   r1   r   r   r   get_box_tasks   s     
zBigGanttClient.get_box_tasksc                 C   s@   |  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/taskr>   @z/boxesr:   ZboxIdsr/   )r   extplatform_idtask_type_idtask_idrA   r   r1   r;   r   r   r   get_task_boxes   s
    

zBigGanttClient.get_task_boxesc                 C   s4   |  d}| d| d}|||d}| j||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-panelr>   z/load-parents)ZextPlatformIdZextTaskTypeZ	extTaskId)paramsr/   )r   r@   rJ   rK   rL   rA   r   rN   r   r   r   get_task_parents   s    
zBigGanttClient.get_task_parents)NN)r   )r   r   r   __doc__r   r'   r*   r-   r2   r4   r6   r8   r9   r<   rB   rC   rE   rF   rH   rM   rO   __classcell__r   r   r   r   r      s$   	



r   )r#   r	   Zcmf.includeZmodules.jira.apir   ZloggingZFilterr   Z	getLoggerloggerZ	addFilterr   r   r   r   r   <module>   s   
