Ë
    daºiY  ã                   óz   — d dl Z d dlZd dlZd dlmZ d dlmZ ddlmZ  ej                  d«      Z	 G d„ de«      Z
y)	é    N)Údatetime)ÚPrettyPrinteré   )ÚAtlassianRestAPIz(\d{2}):(\d{2})$c                   ó’   ‡ — e Zd ZdZddiZˆ fd„Zd„ Z	 	 	 	 	 dd„Zed„ «       Z	d„ Z
d	„ Zed
„ «       Zdd„Zd„ Zd„ Zed„ «       Zˆ xZS )ÚBitbucketBasez%Y-%m-%dT%H:%M:%S.%f%zzContent-Typez'application/vnd.atl.bitbucket.bulk+jsonc                 ó   •— | j                  |j                  di «      «       |€&| j                  d«      }t        |t        «      r|d   }|j                  d| j
                  «      | _        | j                  «        t        ‰| �$  |g|¢­i |¤Ž y)a%  
        Init the rest api wrapper

        :param url: string:    The base url used for the rest api.
        :param *args: list:    The fixed arguments for the AtlassianRestApi.
        :param **kwargs: dict: The keyword arguments for the AtlassianRestApi.

        :return: nothing
        ÚdataNÚselfr   Útimeformat_lambda)
Ú_update_dataÚpopÚget_linkÚ
isinstanceÚlistÚ_default_timeformat_lambdar   Ú_check_timeformat_lambdaÚsuperÚ__init__)r   ÚurlÚargsÚkwargsÚ	__class__s       €úP/var/www/timesheet/venv/lib/python3.12/site-packages/atlassian/bitbucket/base.pyr   zBitbucketBase.__init__   s�   ø€ ð 	×Ñ˜&Ÿ*™* V¨RÓ0Ô1Øˆ;Ø—-‘- Ó'ˆCÜ˜#œtÔ$Ø˜!‘f�Ø!'§¡Ð,?À×A`ÑA`Ó!aˆÔØ×%Ñ%Ô'Ü‰Ñ˜Ð.˜tÒ. vÓ.ó    c                 óp   — t        d¬«      j                  | j                  r| j                  «      S | «      S )Né   )Úindent)r   ÚpformatÚ_BitbucketBase__data©r   s    r   Ú__str__zBitbucketBase.__str__%   s*   € Ü AÔ&×.Ñ.¸d¿kºk¨t¯{©{ÓTÐTÈtÓTÐTr   c              #   ó$  K  — |€i }	 | j                  ||||||¬«      }d|vry|j                  dg «      E d{  –—†  | j                  r|j                  d«      }|€	 yd}i }d}n'|j                  d«      €	 y|j                  d«      |d<   Œ†7 ŒT­w)	a>  
        Used to get the paged data

        :param url: string:                        The url to retrieve
        :param params: dict (default is None):     The parameter's
        :param data: dict (default is None):       The data
        :param flags: string[] (default is None):  The flags
        :param trailing: bool (default is None):   If True, a trailing slash is added to the url
        :param absolute: bool (default is False):  If True, the url is used absolute and not relative to the root

        :return: A generator object for the data elements
        NT)ÚtrailingÚparamsr
   ÚflagsÚabsoluteÚvaluesÚnextFÚnextPageStartÚstart)ÚgetÚcloud)r   r   r%   r
   r&   r$   r'   Úresponses           r   Ú
_get_pagedzBitbucketBase._get_paged(   sÃ   è ø€ ð, ˆ>ØˆFàØ—x‘xØØ!ØØØØ!ð  ó ˆHð ˜xÑ'Øà—|‘| H¨bÓ1×1Ð1à�zŠzØ—l‘l 6Ó*�Ø�;Øð 	ð  �à�à ‘à—<‘< Ó0Ð8Øð 	ð #+§,¡,¨Ó"?��w‘ð7 ð 2ús   ‚7B¹BºABc                 ó*   — t        | t        «      r| S dS )zç
        Default time format function.

        :param timestamp: datetime str: The datetime object of the parsed string or the raw value if parsing failed

        :return: timestamp if it was a datetime object, else None
        N)r   r   )Ú	timestamps    r   r   z(BitbucketBase._default_timeformat_lambda`   s   € ô ' y´(Ô;ˆyÐEÀÐEr   c                 ó¾   — d„ }| j                   �Bt        | j                   t        |«      «      r$| j                   j                  |j                  k(  ryt	        d«       y)z`
        Check the lambda for the time format. Raise an exception if the value is wrong
        c                   ó   — y)Nr   © r4   r   r   ú<lambda>z8BitbucketBase._check_timeformat_lambda.<locals>.<lambda>o   s   � r   NTzCExpected [None] or [lambda function] for argument [timeformat_func])r   r   ÚtypeÚ__name__Ú
ValueError)r   ÚLAMBDAs     r   r   z&BitbucketBase._check_timeformat_lambdak   sO   € ñ ˆØ×!Ñ!Ð)Ü�t×-Ñ-¬t°F«|Ô<À×AWÑAW×A`ÑA`Ðdj×dsÑdsÒAsàäÐ\Õ]r   c                 ó:   — | j                  | j                  |«      S )zƒ
        Get the full url from a relative one.

        :param url: string: The sub url

        :return: The absolute url
        )Ú
url_joinerr   )r   r   s     r   Ú_sub_urlzBitbucketBase._sub_urlw   s   € ð �‰˜tŸx™x¨Ó-Ð-r   c                 ó@   — t        j                   | j                  «      S )z†
        Get the internal cached data. For data integrity a deep copy is returned.

        :return: A copy of the data cache
        )Úcopyr    r!   s    r   r
   zBitbucketBase.data�   s   € ô �y‰y˜Ÿ™Ó%Ð%r   c                 óf   — || j                   v r"t        j                  | j                   |   «      S |S )a|  
        Get a data element from the internal data cache. For data integrity a deep copy is returned.
        If data isn't present, the default value is returned.

        :param id: string:                     The data element to return
        :param default: any (default is None): The value to return if id is not present

        :return: The requested data element
        )r    r>   )r   ÚidÚdefaults      r   Úget_datazBitbucketBase.get_dataŠ   s+   € ð .0°4·;±;Ñ->Œt�y‰y˜Ÿ™ R™Ó)ÐKÀGÐKr   c                 óv  — | j                  |«      }| j                  €|S t        |t        «      rSt        j
                  dk  rt        j                  d|«      }	 |dd dz   }t        j                  || j                  «      }n|}| j                  |«      S # t        $ r t        j                  |d«      }Y Œ2w xY w)zÄ
        Return the time value with the expected format.

        :param id: string: The id for the time data

        :return: The time with the configured format, see timeformat_lambda.
        N)é   é   z\1\2é   ÚZz%Y-%m-%dT%H:%M:%S.%fZ)rB   r   r   ÚstrÚsysÚversion_infoÚRE_TIMEZONEÚsubr   ÚstrptimeÚCONF_TIMEFORMATr8   )r   r@   Ú	value_strÚvalues       r   Úget_timezBitbucketBase.get_time–   s¸   € ð —M‘M "Ó%ˆ	Ø×!Ñ!Ð)ØÐä�i¤Ô%ä×Ñ 6Ò)Ü'ŸO™O¨G°YÓ?�	ðØ% c r˜N¨SÑ0�	Ü ×)Ñ)¨)°T×5IÑ5IÓJ‘ð ˆEà×%Ñ% eÓ,Ð,øô ò Ü ×)Ñ)ØØ+ó’ðús   Á(B ÂB8Â7B8c                 ó   — || _         | S )z†
        Internal function to update the data.

        :param data: dict: The new data.

        :return: The updated object
        )r    )r   r
   s     r   r   zBitbucketBase._update_data³   s   € ð ˆŒàˆr   c                 óv   — | j                   | j                  | j                  | j                  | j                  dœS )z‡
        Get the kwargs for new objects (session, root, version,...).

        :return: A dict with the kwargs for new objects
        )Úsessionr-   Úapi_rootÚapi_versionr   )Ú_sessionr-   rU   rV   r   r!   s    r   Ú_new_session_argszBitbucketBase._new_session_args¿   s5   € ð —}‘}Ø—Z‘ZØŸ™Ø×+Ñ+Ø!%×!7Ñ!7ñ
ð 	
r   )NNNNF)N)r7   Ú
__module__Ú__qualname__rN   Úbulk_headersr   r"   r/   Ústaticmethodr   r   r<   Úpropertyr
   rB   rQ   r   rX   Ú__classcell__)r   s   @r   r   r      sŽ   ø„ Ø.€OØ"Ð$MÐN€Lô/ò&Uð ØØØØó6ðp ñFó ðFò
^ò.ð ñ&ó ð&ó
Lò-ò:
ð ñ
ó ô
r   r   )r>   ÚrerI   r   Úpprintr   Úrest_clientr   ÚcompilerK   r   r4   r   r   ú<module>rc      s9   ðó Û 	Û 
Ý Ý  å *àˆb�j‰jÐ,Ó-€ô~
Ð$õ ~
r   