Ë
    daºi™…  ã                   ó†  — 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m	Z	m
Z
mZmZmZ d dlmZ d dlZd dlZd dlZd dlmZ ej*                  dk\  rd dlmZ nd dlmZ d d	lmZ 	 d d
lmZ d dlmZm Z m!Z! d dl"m#Z#m$Z$ d dlm%Z% d dl&m'Z' d dl(m)Z) ee ef   Z*ee ee+e,f   Z- e)e.«      Z/ G d„ de0«      Z1y# e$ r	 d dlmZ Y ŒUw xY w)é    N)Ú	CookieJar)Údumps)ÚListÚMutableMappingÚOptionalÚTupleÚUnionÚoverload)Ú	urlencode)ÚHTTPAdapter)é   é   )ÚLiteral)ÚT_resp_json)ÚSIGNATURE_RSA_SHA512)ÚSIGNATURE_RSA)Ú	HTTPErrorÚResponseÚSession)ÚOAuth1ÚOAuth2)ÚSelf)ÚRetry)Úget_default_loggerc            +       ó¶  — e Zd ZdddœZddddœZdddœZddiZdd	d
œZdddœZdZ	dddddddddddddddddg d¢ddddddfde
dee
   dee
   dede
dee
ef   dedeej                      dee   dee   d ee   d!ee   d"ed#ed$eee
e
f      d%ee
   d&ee
ee
e
f   df   d'ed(ee   d)ed*ef*d+„Zd,efd-„Zd.efd/„Zde
de
d,dfd0„Zd%e
d,dfd1„Zd2ed,dfd3„Zd4„ Zd5ed,dfd6„Zd5ed,dfd7„Z d8e
d9e
fd:„Z!e"d;e#d,e$fd<„«       Z%d=„ Z&d>„ Z'dde(jR                  fd?e
de
d@eee
df   dAee   dBed,dfdC„Z*	 dpdDe
dee
   dee
edf   d,e
fdE„Z+e"dqdee
   dFe
dGee   d,e
fdH„«       Z,drdI„Z-	 	 	 	 	 	 	 	 	 	 	 dsd?e
dFe
d@eee
df   dJeee
df   dKee.   dLee   dAee   dMee   dGee   dNed!ed,e#fdO„Z/e0	 	 	 	 dtdPdPdQœdFe
d@eee
df   dKee.   dLee   dAee   dRe1d   dGee   dNed!e1d   d,e2fdS„«       Z3e0	 	 	 	 dtdPdPdPdTœdFe
d@eee
df   dKee.   dLee   dAee   dRe1d   dGee   dNed!ed,e2fdU„«       Z3e0	 	 	 	 	 	 	 dudFe
d@eee
df   dKee.   dLee   dAee   dRee1d      dGee   dNed!e1d   d,e#fdV„«       Z3e0	 	 	 	 	 	 	 	 dvdFe
d@eee
df   dKee.   dLee   dAee   dRee1d      dGee   dNed!e1d   d,e$fdW„«       Z3e0	 	 	 	 	 	 	 	 dvdFe
d@eee
df   dKee.   dLee   dAee   dRee   dGee   dNed!ed,e4fdX„«       Z3	 	 	 	 	 	 	 	 dwdFe
d@eee
df   dKee.   dLee   dAee   dRee   dGee   dNed!ed,e4fdY„Z3dZ„ Z5e0dPdPdPdPdPdPdPd[œdFe
d@eee
f   dJeee
df   dAee   dMee   dLee   dGee   dNed!e1d   d,e$fd\„«       Z6e0	 	 	 	 	 	 	 dudPd]œdFe
d@eee
df   dJeee
df   dAee   dMee   dLee   dGee   dNed!e1d   d,e$fd^„«       Z6e0	 	 	 	 	 	 	 	 dvdFe
d@eee
df   dJeee
df   dAee   dMee   dLee   dGee   dNed!e1d   d,e$fd_„«       Z6e0	 	 	 	 	 	 	 dudFe
d@eee
df   dJeee
df   dAee   dMee   dLee   dGee   dNed!e1d   d,e#fd`„«       Z6e0	 	 	 	 	 	 	 	 dvdFe
d@eee
df   dJeee
df   dAee   dMee   dLee   dGee   dNed!ed,ee#edf   fda„«       Z6	 	 	 	 	 	 	 	 dwdFe
d@eee
df   dJeee
df   dAee   dMee   dLee   dGee   dNed!ed,ee#edf   fdb„Z6e0	 	 	 	 	 	 dxdFe
d@eee
df   dAee   dMee   dGee   dLee   dNed!e1d   d,e$fdc„«       Z7e0	 	 	 	 	 	 	 dudFe
d@eee
df   dAee   dMee   dGee   dLee   dNed!e1d   d,e$fdd„«       Z7e0	 	 	 	 	 	 dxdFe
d@eee
df   dAee   dMee   dGee   dLee   dNed!e1d   d,e#fde„«       Z7e0	 	 	 	 	 	 	 dudFe
d@eee
df   dAee   dMee   dGee   dLee   dNed!ed,ee#edf   fdf„«       Z7	 	 	 	 	 	 	 dydFe
d@eee
df   dAee   dMee   dGee   dLee   dNed!ed,ee#edf   fdg„Z7	 	 	 	 	 	 	 	 dydFe
d@eee
df   dAee   dMee   dGee   dLee   dNed!ed,e8fdh„Z9e0	 	 	 	 	 dzdFe
d@eee
df   dAee   dLee   dGee   dNed!e1d   d,e$fdi„«       Z:e0	 	 	 	 	 	 dxdFe
d@eee
df   dAee   dLee   dGee   dNed!e1d   d,e$fdj„«       Z:e0	 	 	 	 	 dzdFe
d@eee
df   dAee   dLee   dGee   dNed!e1d   d,e#fdk„«       Z:e0	 	 	 	 	 	 dxdFe
d@eee
df   dAee   dLee   dGee   dNed!ed,e8fdl„«       Z:	 	 	 	 	 	 d{dFe
d@eee
df   dAee   dLee   dGee   dNed!ed,e8fdm„Z:d;e#d,dfdn„Z;e<d,efdo„«       Z=y)|ÚAtlassianRestAPIzapplication/json)úContent-TypeÚAcceptzopt-in)r   r   úX-ExperimentalApiz0application/x-www-form-urlencoded; charset=UTF-8zno-check)r   úX-Atlassian-Tokenr    z/application/vnd.atl.plugins.safe.mode.flag+json)r    r   )r    r   NéK   zrest/apiÚlatestTF)i�  é­  i÷  i  iè  g      ð?ÚurlÚusernameÚpasswordÚtimeoutÚapi_rootÚapi_versionÚ
verify_sslÚsessionÚoauthÚoauth2ÚcookiesÚadvanced_modeÚkerberosÚcloudÚproxiesÚtokenÚcertÚbackoff_and_retryÚretry_status_codesÚmax_backoff_secondsÚmax_backoff_retriesc           
      óŽ  — || _         || _        || _        t        |«      | _        || _        || _        || _        || _        || _	        || _
        || _        || _        || _        || _        || _        || _        t        t"        j$                  j'                  d«      d   «      dk\  | _        || _        || _        || _        |€t1        j2                  «       | _        n|| _        | j                  �| j                  | j4                  _        | j                  r‹| j(                  rt7        d| j                  d| j                  | j*                  | j,                  | j                   | j.                  ¬«      }| j4                  j9                  | j                   t;        |¬«      «       |r|r| j=                  ||«       y|�| j?                  |«       y|	�| jA                  |	«       y|
�| jC                  |
«       y|�| jE                  |«       y|�&| j4                  j                  jG                  |«       y|�| jI                  |«       yy)ac  
        init function for the AtlassianRestAPI object.

        :param url: The url to be used in the request.
        :param username: Username. Defaults to None.
        :param password: Password. Defaults to None.
        :param timeout: Request timeout. Defaults to 75.
        :param api_root: Root for the api requests. Defaults to "rest/api".
        :param api_version: Version of the API to use. Defaults to "latest".
        :param verify_ssl: Turn on / off SSL verification. Defaults to True.
        :param session: Pass an existing Python requests session object. Defaults to None.
        :param oauth: oauth. Defaults to None.
        :param oauth2: oauth2. Defaults to None.
        :param cookies: Cookies to send with the request. Defaults to None.
        :param advanced_mode: Return results in advanced mode. Defaults to None.
        :param kerberos: Kerberos. Defaults to None.
        :param cloud: Specify if using Atlassian Cloud. Defaults to False.
        :param proxies: Specify proxies to use. Defaults to None.
        :param token: Atlassian / Jira auth token. Defaults to None.
        :param cert: Client-side certificate to use. Defaults to None.
        :param backoff_and_retry: Enable exponential backoff and retry.
                This will retry the request if there is a predefined failure. Primarily
                designed for Atlassian Cloud where API limits are commonly hit if doing
                operations on many issues, and the limits require a cooling off period.
                The wait period before the next request increases exponentially with each
                failed retry. Defaults to False.
        :param retry_status_codes: Errors to match, passed as a list of HTTP
                response codes. Defaults to [413, 429, 503].
        :param max_backoff_seconds: Max backoff seconds. When backing off, requests won't
                wait any longer than this. Defaults to 1800.
        :param max_backoff_retries: Maximum number of retries to try before
                continuing. Defaults to 1000.
        :param backoff_factor: Factor by which to multiply the backoff time (for exponential backoff).
                Defaults to 1.0.
        :param backoff_jitter: Random variation to add to the backoff time to avoid synchronized retries.
                Defaults to 1.0.
        :param retry_with_header: Enable retry logic based on the `Retry-After` header.
                If set to True, the request will automatically retry if the response
                contains a `Retry-After` header with a delay and has a status code of 429.
                The retry delay will be extracted
                from the `Retry-After` header and the request will be paused for the specified
                duration before retrying. Defaults to True.
                If the `Retry-After` header is not present, retries will not occur.
                However, if the `Retry-After` header is missing and `backoff_and_retry` is enabled,
                the retry logic will still be triggered based on the status code 429,
                provided that 429 is included in the `retry_status_codes` list.
        ú.r   é   N)ÚtotalÚstatusÚallowed_methodsÚstatus_forcelistÚbackoff_factorÚbackoff_jitterÚbackoff_maxÚrespect_retry_after_header)Úmax_retries)%r$   r%   r&   Úintr'   r*   r(   r)   r.   r/   r1   r2   r4   r5   r8   r6   r7   Úurllib3Ú__version__ÚsplitÚuse_urllib3_retryr@   rA   Úretry_with_headerÚrequestsr   Ú_sessionr   Úmountr   Ú_create_basic_sessionÚ_create_token_sessionÚ_create_oauth_sessionÚ_create_oauth2_sessionÚ_create_kerberos_sessionÚupdateÚ_create_header_session)Úselfr$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r@   rA   rJ   ÚheaderÚretriess                              úM/var/www/timesheet/venv/lib/python3.12/site-packages/atlassian/rest_client.pyÚ__init__zAtlassianRestAPI.__init__M   s	  € ðV ˆŒØ ˆŒØ ˆŒÜ˜7“|ˆŒØ$ˆŒØ ˆŒØ&ˆÔØˆŒØ*ˆÔØˆŒ
ØˆŒØˆŒ	Ø!2ˆÔØ#6ˆÔ Ø"4ˆÔØ#6ˆÔ Ü!$¤W×%8Ñ%8×%>Ñ%>¸sÓ%CÀAÑ%FÓ!GÈ1Ñ!LˆÔØ,ˆÔØ,ˆÔØ!2ˆÔØˆ?Ü$×,Ñ,Ó.ˆD�Mà#ˆDŒMà�<‰<Ð#Ø$(§L¡LˆD�M‰MÔ!à×!Ò! d×&<Ò&<ô ØØ×/Ñ/Ø $Ø!%×!8Ñ!8Ø#×2Ñ2Ø#×2Ñ2Ø ×4Ñ4Ø+/×+AÑ+Aô	ˆGð �M‰M×Ñ §¡¬+À'Ô*JÔKÙ™Ø×&Ñ& x°Õ:ØÐØ×&Ñ& uÕ-ØÐØ×&Ñ& uÕ-ØÐØ×'Ñ'¨Õ/ØÐ!Ø×)Ñ)¨(Õ3ØÐ Ø�M‰M×!Ñ!×(Ñ(¨Õ1ØÐØ×'Ñ'¨Õ/ð  ó    Úreturnc                 ó   — | S ©N© ©rU   s    rX   Ú	__enter__zAtlassianRestAPI.__enter__Ñ   s   € ØˆrZ   Ú_c                 ó$   — | j                  «        y r]   )Úclose)rU   ra   s     rX   Ú__exit__zAtlassianRestAPI.__exit__Ô   s   € Ø�
‰
�rZ   c                 ó*   — ||f| j                   _        y r]   )rL   Úauth)rU   r%   r&   s      rX   rN   z&AtlassianRestAPI._create_basic_session×   s   € Ø&¨Ð1ˆ�‰ÕrZ   c                 óJ   — | j                  dd|j                  «       › �«       y )NÚAuthorizationzBearer )Ú_update_headerÚstrip)rU   r3   s     rX   rO   z&AtlassianRestAPI._create_token_sessionÚ   s   € Ø×Ñ˜O¨w°u·{±{³}°oÐ-FÕGrZ   rV   c                 óN   — | j                   j                  j                  |«       y r]   ©rL   ÚheadersrS   )rU   rV   s     rX   rT   z'AtlassianRestAPI._create_header_sessionÝ   s   € Ø�‰×Ñ×$Ñ$ VÕ,rZ   c                 óD   — ddl m}m}  ||¬«      | j                  _        y )Nr   )ÚOPTIONALÚHTTPKerberosAuth)Úmutual_authentication)Úrequests_kerberosro   rp   rL   rf   )rU   ra   ro   rp   s       rX   rR   z)AtlassianRestAPI._create_kerberos_sessionà   s   € ß@á-ÀHÔMˆ�‰ÕrZ   Ú
oauth_dictc                 ó†   — t        |d   |d   |j                  dt        «      |d   |d   ¬«      }|| j                  _        y )NÚconsumer_keyÚkey_certÚsignature_methodÚaccess_tokenÚaccess_token_secret)Úrsa_keyrw   Úresource_owner_keyÚresource_owner_secret)r   Úgetr   rL   rf   ©rU   rs   r,   s      rX   rP   z&AtlassianRestAPI._create_oauth_sessionå   sJ   € ÜØ�~Ñ&Ø˜zÑ*Ø'Ÿ^™^Ð,>ÄÓNØ)¨.Ñ9Ø",Ð-BÑ"Cô
ˆð #ˆ�‰ÕrZ   c                 ód   — d|vrd|d<   t        |d   |d   |d   «      }|| j                  _        y)a  
        Use OAuth 2.0 Authentication
        :param oauth_dict: Dictionary containing access information. Must at
            least contain "client_id" and "token". "token" is a dictionary and
            must at least contain "access_token" and "token_type".
        :return:
        ÚclientNÚ	client_idr3   )r   rL   rf   r~   s      rX   rQ   z'AtlassianRestAPI._create_oauth2_sessionï   s@   € ð ˜:Ñ%Ø#'ˆJ�xÑ Ü�z +Ñ.°
¸8Ñ0DÀjÐQXÑFYÓZˆØ"ˆ�‰ÕrZ   ÚkeyÚvaluec                 óR   — | j                   j                  j                  ||i«       y)zl
        Update header for exist session
        :param key:
        :param value:
        :return:
        Nrl   )rU   r‚   rƒ   s      rX   ri   zAtlassianRestAPI._update_headerü   s    € ð 	�‰×Ñ×$Ñ$ c¨5 \Õ2rZ   Úresponsec                 ó¸   — 	 | j                  «       S # t        $ r t        j                  d«       Y y t        $ r}t        j                  |«       Y d }~y d }~ww xY w)Nz!Received response with no content)ÚjsonÚ
ValueErrorÚlogÚdebugÚ	ExceptionÚerror)r…   Úes     rX   Ú_response_handlerz"AtlassianRestAPI._response_handler  sI   € ð	Ø—=‘=“?Ð"øÜò 	Ü�I‰IÐ9Ô:ÙÜò 	Ü�I‰I�aŒLÜûð	ús   ‚ ’A²AºAÁAc           	      óâ   — | j                   d|dz
  z  z  }| j                  dk7  r#|t        j                  d| j                  «      z  }t	        t        dt        | j                  |«      «      «      S )a#  
        Calculate the backoff delay for a given retry attempt.

        This method computes an exponential backoff delay based on the retry count and
        a configurable backoff factor. It optionally adds a random jitter to introduce
        variability in the delay, which can help prevent synchronized retries in
        distributed systems. The calculated backoff delay is clamped between 0 and a
        maximum allowable delay (`self.max_backoff_seconds`) to avoid excessively long
        wait times.

        :param retry_count: int, REQUIRED: The current retry attempt number (1-based).
            Determines the exponential backoff delay.
        :return: float: The calculated backoff delay in seconds, adjusted for jitter
            and clamped to the maximum allowable value.
        r;   é   g        r   )r@   rA   ÚrandomÚuniformÚfloatÚmaxÚminr7   )rU   Úretry_countÚbackoff_values      rX   Ú_calculate_backoff_valuez)AtlassianRestAPI._calculate_backoff_value  se   € ð  ×+Ñ+¨q°[À1±_Ñ/EÑFˆØ×Ñ #Ò%ØœVŸ^™^¨A¨t×/BÑ/BÓCÑCˆMÜ”S˜œC × 8Ñ 8¸-ÓHÓIÓJÐJrZ   c                 ó   ‡ ‡— dŠˆˆ fd„}|S )a¡  
        Creates and returns a retry handler function for managing HTTP request retries.

        The returned handler function determines whether a request should be retried
        based on the response and retry settings.

        :return: Callable[[Response], bool]: A function that takes an HTTP response object as input and
        returns `True` if the request should be retried, or `False` otherwise.
        r   c                 óˆ  •— ‰j                   rId| j                  v r;| j                  dk(  r,t        j                  t        | j                  d   «      «       y‰j                  r‰j                  ry‰‰j                  k  rD| j                  ‰j                  v r,‰dz  Š‰j                  ‰«      }t        j                  |«       yy)NzRetry-Afterr#   TFr�   )rJ   rm   Ústatus_codeÚtimeÚsleeprE   r5   rI   r8   r6   r˜   )r…   r—   rW   rU   s     €€rX   Ú_handlez0AtlassianRestAPI._retry_handler.<locals>._handle1  s©   ø€ ð ×%Ò%¨-¸8×;KÑ;KÑ*KÐPX×PdÑPdÐhkÒPkÜ—
‘
œ3˜x×/Ñ/°Ñ>Ó?Ô@Øà×)Ò)¨T×-CÒ-CØà˜×1Ñ1Ò1°h×6JÑ6JÈd×NeÑNeÑ6eØ˜1‘�Ø $× =Ñ =¸gÓ F�Ü—
‘
˜=Ô)ØàrZ   r^   )rU   rž   rW   s   ` @rX   Ú_retry_handlerzAtlassianRestAPI._retry_handler%  s   ù€ ð ˆõ	ð$ ˆrZ   ÚmethodÚdatarm   Úlevelc                 ó*  — |xs | j                   }dj                  |dj                  t        |j	                  «       «      D ��cg c]  \  }}d|› d|› d�‘Œ c}}«      |sdndt        |«      › d�|¬«      }t        j                  ||¬«       y	c c}}w )
z‰

        :param method:
        :param url:
        :param data:
        :param headers:
        :param level:
        :return:
        z5curl --silent -X {method} -H {headers} {data} '{url}'z -H ú'ú: Ú z--data ')r    rm   r¡   r$   )r¢   ÚmsgN)Údefault_headersÚformatÚjoinÚlistÚitemsr   r‰   )	rU   r    r$   r¡   rm   r¢   r‚   rƒ   Úmessages	            rX   Úlog_curl_debugzAtlassianRestAPI.log_curl_debugE  s‘   € ð" Ò1˜T×1Ñ1ˆØI×PÑPØØ—K‘KÄtÈGÏMÉMËOÓG\× ]¹¸¸e 1 S E¨¨E¨7°!Ò!4Ó ]Ó^Ù‘ x´°d³¨}¸AÐ%>Øð	 Qó 
ˆô 	�‰�e ˆÕ)ùó	 !^s   ÁBÚresourcec                 óp   — |€| j                   }|€| j                  }dj                  d„ |||fD «       «      S )Nú/c              3   óV   K  — | ]!  }|€Œt        |«      j                  d«      –— Œ# y ­w©Nr±   ©Ústrrj   ©Ú.0Úss     rX   ú	<genexpr>z0AtlassianRestAPI.resource_url.<locals>.<genexpr>f  s#   è ø€ Òf¨aÐXYÑXeœ˜A›Ÿ™ S×)Ñfùó   ‚)Š))r(   r)   rª   )rU   r¯   r(   r)   s       rX   Úresource_urlzAtlassianRestAPI.resource_url_  s@   € ð ÐØ—}‘}ˆHØÐØ×*Ñ*ˆKØ�x‰xÑf°H¸kÈ8Ð3TÔfÓfÐfrZ   ÚpathÚtrailingc                 óH   — dj                  d„ | |fD «       «      }|r|dz  }|S )Nr±   c              3   óV   K  — | ]!  }|€Œt        |«      j                  d«      –— Œ# y ­wr³   r´   r¶   s     rX   r¹   z.AtlassianRestAPI.url_joiner.<locals>.<genexpr>j  s!   è ø€ ÒT°!ÀaÁmœC ›FŸL™L¨×-ÑTùrº   )rª   )r$   r¼   r½   Úurl_links       rX   Ú
url_joinerzAtlassianRestAPI.url_joinerh  s+   € à—8‘8ÑT¸¸T°{ÔTÓTˆÙØ˜‰OˆHØˆrZ   c                 ó6   — | j                   j                  «       S r]   )rL   rc   r_   s    rX   rc   zAtlassianRestAPI.closeo  s   € Ø�}‰}×"Ñ"Ó$Ð$rZ   r‡   ÚflagsÚparamsÚfilesÚabsolutec                 ó@  — | j                  |
rdn| j                  ||	«      }d|v rdnd}|s|r|r|dz  }n|dz  }|r|t        |xs i d¬«      z  }|r!||s|rdnddj                  |xs g «      z   z  }d}|€|sdn
t	        |«      }|sdn
t	        |«      }|xs | j
                  }| j                  «       }	 | j                  ||||xs |¬	«       | j                  j                  |||||| j                  | j                  || j                  | j                  ¬
«
      } ||«      }|rŒr	 d|_        t        j!                  d|||j"                  |j$                  «       t        j!                  d|j&                  «       | j(                  s|r|S | j+                  |«       |S )a¢  

        :param method:
        :param path:
        :param data:
        :param json:
        :param flags:
        :param params:
        :param headers:
        :param files:
        :param trailing: bool - OPTIONAL: Add trailing slash to url
        :param absolute: bool, OPTIONAL: Do not prefix url, url is absolute
        :param advanced_mode: bool, OPTIONAL: Return the raw response
        :return:
        Nú?TFú&ú,)Úsafer¦   )r    r$   rm   r¡   )
r    r$   rm   r¡   r‡   r'   ÚverifyrÅ   r2   r4   zutf-8zHTTP: %s %s -> %s %szHTTP: Response text -> %s)rÁ   r$   r   rª   r   r¨   rŸ   r®   rL   Úrequestr'   r*   r2   r4   Úencodingr‰   rŠ   r›   ÚreasonÚtextr/   Úraise_for_status)rU   r    r¼   r¡   r‡   rÃ   rÄ   rm   rÅ   r½   rÆ   r/   r$   Úparams_already_in_urlÚ	json_dumpÚretry_handlerr…   Úcontinue_retriess                     rX   rÍ   zAtlassianRestAPI.requestr  sª  € ð: �o‰o¡h™d°D·H±H¸dÀHÓMˆØ(+¨s©
¡¸ÐÙ‘UÙ$Ø�s‘
‘à�s‘
�ÙØ”9˜fšl¨°#Ô6Ñ6ˆCÙØ™6Ñ%:‘CÀÀcÇhÁhÈuÊ{ÐXZÓF[Ñ[Ñ[ˆCØˆ	Øˆ=Ù#‘4¬¨t«ˆDÙ$(™¬e°D«kˆIàÒ1˜T×1Ñ1ˆà×+Ñ+Ó-ˆØØ×ÑØØØØÒ&˜Yð	  ô ð —}‘}×,Ñ,ØØØØØØŸ™Ø—‘ØØŸ™Ø—Y‘Yð -ó ˆHñ  -¨XÓ6ÐÙØØà#ˆÔä�	‰	Ð(¨&°$¸×8LÑ8LÈhÏoÉoÔ^Ü�	‰	Ð-¨x¯}©}Ô=à×Ò¡ØˆOà×Ñ˜hÔ'ØˆrZ   .)r½   rÆ   Únot_json_responsec                 ó   — y r]   r^   ©
rU   r¼   r¡   rÃ   rÄ   rm   rÖ   r½   rÆ   r/   s
             rX   r}   zAtlassianRestAPI.getÆ  ó   € ð 	rZ   )r½   rÆ   r/   c                 ó   — y r]   r^   rØ   s
             rX   r}   zAtlassianRestAPI.get×  rÙ   rZ   c	                 ó   — y r]   r^   rØ   s
             rX   r}   zAtlassianRestAPI.getè  rÙ   rZ   c
                  ó   — y r]   r^   rØ   s
             rX   r}   zAtlassianRestAPI.getù  ó   € ð 	rZ   c
                  ó   — y r]   r^   rØ   s
             rX   r}   zAtlassianRestAPI.get	  rÝ   rZ   c
                 ó  — | j                  d||||||||	¬«	      }
| j                  s|	r|
S |r|
j                  S |
j                  sy	 |
j	                  «       S # t
        $ r+}t        j                  |«       |
j                  cY d}~S d}~ww xY w)a2  
        Get request based on the python-requests module. You can override headers, and also, get not json response
        :param path:
        :param data:
        :param flags:
        :param params:
        :param headers:
        :param not_json_response: OPTIONAL: For get content from raw request's packet
        :param trailing: OPTIONAL: for wrap slash symbol in the end of string
        :param absolute: bool, OPTIONAL: Do not prefix url, url is absolute
        :param advanced_mode: bool, OPTIONAL: Return the raw response
        :return:
        ÚGET)r¼   rÃ   rÄ   r¡   rm   r½   rÆ   r/   N)rÍ   r/   ÚcontentrÐ   r‡   r‹   r‰   rŒ   )rU   r¼   r¡   rÃ   rÄ   rm   rÖ   r½   rÆ   r/   r…   r�   s               rX   r}   zAtlassianRestAPI.get  s“   € ð2 —<‘<ØØØØØØØØØ'ð  ó 

ˆð ×Ò¡ØˆOÙØ×#Ñ#Ð#à—=’=Øð%Ø—}‘}“Ð&øÜò %Ü—	‘	˜!”Ø—}‘}Õ$ûð%ús   ÁA Á	BÁ  BÂ BÂBc                ó   —  | j                   |i |¤Ž}d|v r|d   }n| j                  }|s|D ]  } |j                   |Ž }Œ |S |d   } |j                  «       j                   |Ž }|dd D ]  } |j                   |Ž }Œ |S )zí
        :param fields: list of tuples in the form (field_name, default value (optional)).
            Used for chaining dictionary value accession.
            E.g. [("field1", "default1"), ("field2", "default2"), ("field3", )]
        r/   r   r�   N)r}   r/   r‡   )rU   ÚfieldsÚargsÚkwargsr…   r/   ÚfieldÚfirst_fields           rX   Ú_get_response_contentz&AtlassianRestAPI._get_response_contentI  s®   € ð �4—8‘8˜TÐ, VÑ,ˆØ˜fÑ$Ø" ?Ñ3‰Mà ×.Ñ.ˆMáØò 0�Ø'˜8Ÿ<™<¨Ð/‘ð0ð ˆð ! ™)ˆKØ*�x—}‘}“×*Ñ*¨KÐ8ˆHØ  ˜ò 0�Ø'˜8Ÿ<™<¨Ð/‘ð0ð ˆrZ   )r‡   rm   rÅ   rÄ   r½   rÆ   r/   c                 ó   — y r]   r^   ©
rU   r¼   r¡   r‡   rm   rÅ   rÄ   r½   rÆ   r/   s
             rX   ÚpostzAtlassianRestAPI.postf  rÙ   rZ   )r/   c	                 ó   — y r]   r^   rê   s
             rX   rë   zAtlassianRestAPI.postv  rÙ   rZ   c
                  ó   — y r]   r^   rê   s
             rX   rë   zAtlassianRestAPI.post†  rÝ   rZ   c	                 ó   — y r]   r^   rê   s
             rX   rë   zAtlassianRestAPI.post–  rÙ   rZ   c
                  ó   — y r]   r^   rê   s
             rX   rë   zAtlassianRestAPI.post§  rÝ   rZ   c
                 óz   — | j                  d|||||||||	¬«
      }
| j                  s|	r|
S | j                  |
«      S )am  
        :param path:
        :param data:
        :param json:
        :param headers:
        :param files:
        :param params:
        :param trailing:
        :param absolute:
        :param advanced_mode: bool, OPTIONAL: Return the raw response
        :return: if advanced_mode is not set - returns dictionary. If it is set - returns raw response.
        ÚPOST)	r¼   r¡   r‡   rm   rÅ   rÄ   r½   rÆ   r/   ©rÍ   r/   rŽ   )rU   r¼   r¡   r‡   rm   rÅ   rÄ   r½   rÆ   r/   r…   s              rX   rë   zAtlassianRestAPI.post¶  sX   € ð0 —<‘<ØØØØØØØØØØ'ð  ó 
ˆð ×Ò¡ØˆOØ×%Ñ% hÓ/Ð/rZ   c                 ó   — y r]   r^   ©	rU   r¼   r¡   rm   rÅ   r½   rÄ   rÆ   r/   s	            rX   ÚputzAtlassianRestAPI.putß  rÝ   rZ   c	                  ó   — y r]   r^   rô   s	            rX   rõ   zAtlassianRestAPI.putî  ó   € ð 	rZ   c                 ó   — y r]   r^   rô   s	            rX   rõ   zAtlassianRestAPI.putý  rÝ   rZ   c	                  ó   — y r]   r^   rô   s	            rX   rõ   zAtlassianRestAPI.put  r÷   rZ   c	                 óx   — | j                  d||||||||¬«	      }	| j                  s|r|	S | j                  |	«      S )á�  
        :param path: Path of request
        :param data:
        :param headers: adjusted headers, usually it's default
        :param files:
        :param trailing:
        :param params:
        :param absolute:
        :param advanced_mode: bool, OPTIONAL: Return the raw response
        :return: if advanced_mode is not set - returns dictionary. If it is set - returns raw response.
        ÚPUT©r¼   r¡   rm   rÅ   rÄ   r½   rÆ   r/   rò   ©
rU   r¼   r¡   rm   rÅ   r½   rÄ   rÆ   r/   r…   s
             rX   rõ   zAtlassianRestAPI.put  sU   € ð, —<‘<ØØØØØØØØØ'ð  ó 

ˆð ×Ò¡ØˆOØ×%Ñ% hÓ/Ð/rZ   c	                 óx   — | j                  d||||||||¬«	      }	| j                  s|r|	S | j                  |	«      S )rû   ÚPATCHrý   rò   rþ   s
             rX   ÚpatchzAtlassianRestAPI.patchE  sU   € ð, —<‘<ØØØØØØØØØ'ð  ó 

ˆð ×Ò¡ØˆOØ×%Ñ% hÓ/Ð/rZ   c                 ó   — y r]   r^   ©rU   r¼   r¡   rm   rÄ   r½   rÆ   r/   s           rX   ÚdeletezAtlassianRestAPI.deletek  r÷   rZ   c                  ó   — y r]   r^   r  s           rX   r  zAtlassianRestAPI.deletey  ó   € ð 	rZ   c                 ó   — y r]   r^   r  s           rX   r  zAtlassianRestAPI.delete‡  r÷   rZ   c                  ó   — y r]   r^   r  s           rX   r  zAtlassianRestAPI.delete–  r  rZ   c           
      óv   — | j                  d|||||||¬«      }| j                  s|r|S | j                  |«      S )aÔ  
        Deletes resources at given paths.
        :param path:
        :param data:
        :param headers:
        :param params:
        :param trailing:
        :param absolute:
        :param advanced_mode: bool, OPTIONAL: Return the raw response
        :rtype: dict
        :return: Empty dictionary to have consistent interface.
        Some of Atlassian REST resources don't return any content.
        If advanced_mode is set - returns raw response.
        ÚDELETE)r¼   r¡   rm   rÄ   r½   rÆ   r/   rò   )	rU   r¼   r¡   rm   rÄ   r½   rÆ   r/   r…   s	            rX   r  zAtlassianRestAPI.delete£  sR   € ð0 —<‘<ØØØØØØØØ'ð  ó 	
ˆð ×Ò¡ØˆOØ×%Ñ% hÓ/Ð/rZ   c           	      óH  — |j                   dk(  r+|j                  j                  d«      dk7  rt        d|¬«      ‚d|j                   cxk  rdk  �r|n �nx	 |j	                  «       }| j
                  dk(  rBd	j                  t        |j                  «       «      D ��cg c]  \  }}|› d
|› �‘Œ c}}«      }�n	|j                  dt        «       «      }|j                  dt        «       «      }t        |t        «      r-d|vr)|j                  t        |j                  «       «      «       n‡t        |t        «      r&d|v r"|j                  |j                  dd«      «       nQt        |t        «      rA|j                  |D �cg c]&  }t        |t        «      r|j                  dd«      n|‘Œ( c}«       d	j                  |«      }t        ||¬«      ‚|j#                  «        yc c}}w c c}w # t        $ r/}t        j!                  |«       |j#                  «        Y d}~yd}~ww xY w)a;  
        Checks the response for errors and throws an exception if return code >= 400
        Since different tools (Atlassian, Jira, ...) have different formats of returned json,
        this method is intended to be overwritten by a tool specific implementation.
        :param response:
        :return:
        i‘  r   zapplication/json;charset=UTF-8zUnauthorized (401))r…   i�  iX  zhttps://api.atlassian.comú
r¥   ÚerrorMessagesÚerrorsr­   r¦   N)r›   rm   r}   r   r‡   r$   rª   r«   r¬   ÚdictÚ
isinstanceÚextendÚvaluesÚappendr‹   r‰   rŒ   rÑ   )	rU   r…   ÚjÚkÚvÚ	error_msgÚerror_msg_listr  r�   s	            rX   rÑ   z!AtlassianRestAPI.raise_for_statusÉ  s²  € ð ×Ñ 3Ò&¨8×+;Ñ+;×+?Ñ+?ÀÓ+OÐSsÒ+sÜÐ0¸8ÔDÐDà�(×&Ñ&Ô,¨×,ð>Ø—M‘M“O�Ø—8‘8Ð:Ò:Ø $§	¡	Ä4ÈÏÉË	Ã?×*S¹4¸1¸a¨a¨S°°1°#ª;Ó*SÓ T’Ià%&§U¡U¨?¼D»FÓ%C�NØŸU™U 8¬T«VÓ4�FÜ! &¬$Ô/°IÀVÑ4KØ&×-Ñ-¬d°6·=±=³?Ó.CÕDÜ# F¬DÔ1°iÀ6Ñ6IØ&×-Ñ-¨f¯j©j¸ÀBÓ.GÕHÜ# F¬DÔ1Ø&×-Ñ-ÐkqÖ.rÐfgÄzÐRSÔUYÔGZ¨q¯u©u°YÀÔ/CÐ`aÑ/aÒ.rÔsØ $§	¡	¨.Ó 9�Iô
   	°HÔ=Ð=à×%Ñ%Õ'ùó# +Tùò /søäò ,Ü—	‘	˜!”Ø×)Ñ)×+Ñ+ûð,ús8   ÁAG) ÂG
Â-CG) Å=+G$Æ(G) ÇG) Ç)	H!Ç2%HÈH!c                 ó   — | j                   S )z(Providing access to the restricted field)rL   r_   s    rX   r+   zAtlassianRestAPI.sessionë  s   € ð �}‰}ÐrZ   )NNr]   )r[   N)rà   r±   NNNNNNNFF)....).......)........)NNNNNNFF)......)NNNNNFF).....)NNNNFF)>Ú__name__Ú
__module__Ú__qualname__r¨   Úexperimental_headersÚform_token_headersÚno_check_headersÚsafe_mode_headersÚexperimental_headers_generalr…   rµ   r   rE   r	   ÚboolrK   r   r  r   Úobjectr   r   r   rY   r   r`   rd   rN   rO   rT   rR   rP   rQ   ri   Ústaticmethodr   r   rŽ   r˜   rŸ   ÚloggingÚDEBUGr®   r»   rÁ   rc   r«   rÍ   r
   r   Úbytesr}   Ú
T_resp_getrè   rë   rõ   ÚT_respr  r  rÑ   Úpropertyr+   r^   rZ   rX   r   r   0   s™  „ à*Ø$ñ€Oð
 +Ø$Ø%ñÐð KØ'ñÐð
 ,¨ZÐ8Ðð (ØIñÐð (Ø%ñ$Ð ð €Hð
 #'Ø"&ØØ"Ø'/ØØ.2Ø $Ø!%Ø'+Ø(,ØØØ6:Ø#Ø26Ø"'Ú(7Ø#'Ø#'ØØØØñ5B0àðB0ð ˜3‘-ðB0ð ˜3‘-ð	B0ð
 ðB0ð ðB0ð ˜3 ˜8‘_ðB0ð ðB0ð ˜(×*Ñ*Ñ+ðB0ð ˜‰~ðB0ð ˜‘ðB0ð ˜)Ñ$ðB0ð   ‘~ðB0ð ðB0ð ðB0ð  ˜.¨¨c¨Ñ2Ñ3ð!B0ð" ˜‰}ð#B0ð$ �C˜˜s C˜x™¨$Ð.Ñ/ð%B0ð&  ð'B0ð( ! ™Ið)B0ð* !ð+B0ð, !ó-B0ðH˜4ó ð˜6ó ð2¨cð 2¸Sð 2ÀTó 2ðH¨3ð H°4ó Hð-¨Tð -°dó -òNð
#°ð #¸ó #ð#°ð #¸$ó #ð3 #ð 3¨có 3ð ð Hð °ò ó ðòKò*ðH (,Ø"&Ø—]‘]ñ*àð*ð ð*ð �D˜#˜t�OÑ$ð	*ð
 ˜$‘ð*ð ð*ð 
ó*ð6 cgñgØðgØ'/°¡}ðgØJOÐPSÐUXÐZ^ÐP^ÑJ_ðgà	ógð ñ˜ ™ð ¨Sð ¸HÀT¹Nð ÐVYò ó ðó%ð
 ØØ'+Ø'+Ø $Ø!%Ø"&Ø $Ø#'ØØ#ñQàðQð ðQð �D˜#˜t�OÑ$ð	Qð
 �D˜#˜t�OÑ$ðQð ˜‰~ðQð ˜‘ðQð ˜$‘ðQð ˜‰~ðQð ˜4‘.ðQð ðQð ðQð 
óQðh ð (+Ø #Ø!$Ø"%ðð $'Øòàðð �D˜#˜t�OÑ$ðð ˜‰~ð	ð
 ˜‘ðð ˜$‘ðð # 4™=ðð ˜4‘.ðð ðð ˜t‘}ðð 
òó ðð  ð (+Ø #Ø!$Ø"%ðð $'ØØ!òàðð �D˜#˜t�OÑ$ðð ˜‰~ð	ð
 ˜‘ðð ˜$‘ðð # 4™=ðð ˜4‘.ðð ðð ðð 
òó ðð  ð (+Ø #Ø!$Ø"%Ø69Ø#&Øñàðð �D˜#˜t�OÑ$ðð ˜‰~ð	ð
 ˜‘ðð ˜$‘ðð $ G¨E¡NÑ3ðð ˜4‘.ðð ðð ˜t‘}ðð 
òó ðð  ð (+Ø #Ø!$Ø"%Ø69Ø#&ØØ(+ñàðð �D˜#˜t�OÑ$ðð ˜‰~ð	ð
 ˜‘ðð ˜$‘ðð $ G¨E¡NÑ3ðð ˜4‘.ðð ðð ˜u‘~ðð 
òó ðð ð (+Ø #Ø!$Ø"%Ø,/Ø#&ØØ!ñàðð �D˜#˜t�OÑ$ðð ˜‰~ð	ð
 ˜‘ðð ˜$‘ðð $ D™>ðð ˜4‘.ðð ðð ðð 
òó ðð" (,Ø $Ø!%Ø"&Ø,0Ø#'ØØ#ñ/%àð/%ð �D˜#˜t�OÑ$ð/%ð ˜‰~ð	/%ð
 ˜‘ð/%ð ˜$‘ð/%ð $ D™>ð/%ð ˜4‘.ð/%ð ð/%ð ð/%ð 
ó/%òbð: ð (+Ø"%Ø #Ø!$Ø#&ØØ(+òàðð �D˜#�IÑðð
 �D˜#˜t�OÑ$ðð ˜$‘ðð ˜‰~ðð ˜‘ðð ˜4‘.ðð ðð ˜u‘~ðð 
òó ðð ð (+Ø'*Ø"%Ø #Ø!$Ø#&Øðð ),òàðð �D˜#˜t�OÑ$ðð �D˜#˜t�OÑ$ð	ð
 ˜$‘ðð ˜‰~ðð ˜‘ðð ˜4‘.ðð ðð ˜u‘~ðð 
òó ðð ð (+Ø'*Ø"%Ø #Ø!$Ø#&ØØ(+ñàðð �D˜#˜t�OÑ$ðð �D˜#˜t�OÑ$ð	ð
 ˜$‘ðð ˜‰~ðð ˜‘ðð ˜4‘.ðð ðð ˜u‘~ðð 
òó ðð ð (+Ø'*Ø"%Ø #Ø!$Ø#&Øñàðð �D˜#˜t�OÑ$ðð �D˜#˜t�OÑ$ð	ð
 ˜$‘ðð ˜‰~ðð ˜‘ðð ˜4‘.ðð ðð ˜t‘}ðð 
òó ðð  ð (+Ø'*Ø"%Ø #Ø!$Ø#&ØØ!ñàðð �D˜#˜t�OÑ$ðð �D˜#˜t�OÑ$ð	ð
 ˜$‘ðð ˜‰~ðð ˜‘ðð ˜4‘.ðð ðð ðð 
ˆx˜˜tÐ#Ñ	$òó ðð" (,Ø'+Ø"&Ø $Ø!%Ø#'ØØ#ñ&0àð&0ð �D˜#˜t�OÑ$ð&0ð �D˜#˜t�OÑ$ð	&0ð
 ˜$‘ð&0ð ˜‰~ð&0ð ˜‘ð&0ð ˜4‘.ð&0ð ð&0ð ð&0ð 
ˆx˜˜tÐ#Ñ	$ó&0ðR ð (+Ø"%Ø #Ø#&Ø!$Øñàðð �D˜#˜t�OÑ$ðð ˜$‘ð	ð
 ˜‰~ðð ˜4‘.ðð ˜‘ðð ðð ˜u‘~ðð 
òó ðð ð (+Ø"%Ø #Ø#&Ø!$ØØ(+ñàðð �D˜#˜t�OÑ$ðð ˜$‘ð	ð
 ˜‰~ðð ˜4‘.ðð ˜‘ðð ðð ˜u‘~ðð 
òó ðð ð (+Ø"%Ø #Ø#&Ø!$Øñàðð �D˜#˜t�OÑ$ðð ˜$‘ð	ð
 ˜‰~ðð ˜4‘.ðð ˜‘ðð ðð ˜t‘}ðð 
òó ðð ð (+Ø"%Ø #Ø#&Ø!$ØØ!ñàðð �D˜#˜t�OÑ$ðð ˜$‘ð	ð
 ˜‰~ðð ˜4‘.ðð ˜‘ðð ðð ðð 
ˆx˜˜tÐ#Ñ	$òó ðð  (,Ø"&Ø $Ø#'Ø!%ØØ#ñ#0àð#0ð �D˜#˜t�OÑ$ð#0ð ˜$‘ð	#0ð
 ˜‰~ð#0ð ˜4‘.ð#0ð ˜‘ð#0ð ð#0ð ð#0ð 
ˆx˜˜tÐ#Ñ	$ó#0ðJð (,Ø"&Ø $Ø#'Ø!%ØØ#ñ#0àð#0ð �D˜#˜t�OÑ$ð#0ð ˜$‘ð	#0ð
 ˜‰~ð#0ð ˜4‘.ð#0ð ˜‘ð#0ð ð#0ð ð#0ð 
ó#0ðL ð (+Ø"%Ø!$Ø#&Øñàðð �D˜#˜t�OÑ$ðð ˜$‘ð	ð
 ˜‘ðð ˜4‘.ðð ðð ˜u‘~ðð 
òó ðð ð (+Ø"%Ø!$Ø#&ØØ(+ñ
àð
ð �D˜#˜t�OÑ$ð
ð ˜$‘ð	
ð
 ˜‘ð
ð ˜4‘.ð
ð ð
ð ˜u‘~ð
ð 
ò
ó ð
ð ð (+Ø"%Ø!$Ø#&Øñàðð �D˜#˜t�OÑ$ðð ˜$‘ð	ð
 ˜‘ðð ˜4‘.ðð ðð ˜t‘}ðð 
òó ðð ð (+Ø"%Ø!$Ø#&ØØ!ñ
àð
ð �D˜#˜t�OÑ$ð
ð ˜$‘ð	
ð
 ˜‘ð
ð ˜4‘.ð
ð ð
ð ð
ð 
ò
ó ð
ð (,Ø"&Ø!%Ø#'ØØ#ñ$0àð$0ð �D˜#˜t�OÑ$ð$0ð ˜$‘ð	$0ð
 ˜‘ð$0ð ˜4‘.ð$0ð ð$0ð ð$0ð 
ó$0ðL (¨ð  (°dó  (ðD ð˜ò ó ñrZ   r   )2r%  r‘   rœ   Úhttp.cookiejarr   r‡   r   Útypingr   r   r   r   r	   r
   Úurllib.parser   ÚsysrK   rF   Úrequests.adaptersr   Úversion_infor   Útyping_extensionsÚatlassian.typehintsr   Úoauthlib.oauth1.rfc5849r   r   ÚImportErrorÚoauthlib.oauth1r   r   r   Úrequests_oauthlibr   r   r   Úurllib3.utilr   Úatlassian.request_utilsr   r)  rµ   r'  r(  r  r‰   r#  r   r^   rZ   rX   ú<module>r9     s´   ðó Û Û Ý $Ý ÷÷ õ #Û 
Û Û Ý )à×Ñ�vÒÞå)å +ð.ÝM÷ 2Ñ 1ß ,Ý "Ý å 6à	ˆx˜Ð$Ñ	%€Ø�8˜[¨#¨uÐ4Ñ5€
ñ ˜Ó"€ô~�võ ~øð# ò .ß-ð.ús   Á$B2 Â2C Â?C 