Ë
    PU håÝ  ã                  óú  — U d Z ddlmZ ddlZddlZddlZddlZddlmZm	Z	m
Z
mZmZmZ ddlmZ ddlmZ ddlmZmZ ddlmZmZmZ er	dd	lmZ e	Zn
 G d
„ d«      ZdZ ej:                  d«      j=                   ej>                  «       «        G d„ d«      Z  G d„ de «      Z! G d„ de «      Z" G d„ de «      Z# G d„ de «      Z$ G d„ de «      Z% G d„ de «      Z& G d„ de «      Z' G d„ de «      Z( G d „ d!e «      Z) G d"„ d#e «      Z* G d$„ d%e «      Z+ G d&„ d'e «      Z, G d(„ d)e «      Z- G d*„ d+e «      Z. G d,„ d-e «      Z/ G d.„ d/e «      Z0 G d0„ d1e «      Z1 G d2„ d3e «      Z2 G d4„ d5e «      Z3 G d6„ d7e «      Z4 G d8„ d9e «      Z5 G d:„ d;e «      Z6 G d<„ d=e «      Z7 G d>„ d?e «      Z8 G d@„ dAe «      Z9 G dB„ dCe «      Z: G dD„ dEe «      Z; G dF„ dGe «      Z< G dH„ dIe «      Z= G dJ„ dKe «      Z> G dL„ dMe «      Z? G dN„ dOe «      Z@ G dP„ dQe «      ZA G dR„ dSe «      ZB G dT„ dUe «      ZC G dV„ dWe «      ZD G dX„ dYe «      ZE G dZ„ d[eE«      ZF G d\„ d]eE«      ZG G d^„ d_e «      ZH G d`„ dae «      ZI G db„ dce «      ZJ	 d�	 	 	 d�dd„ZKi dee!“dfe"“dge#“dhe$“die%“dje&“dke'“dle)“dme*“dne+“doe-“dpe4“dqe6“dre7“dse8“dte9“due:“i dve.“dwe/“dxe0“dye2“dze;“d{e<“d|e=“d}e1“d~e3“de>“d€e?“d�e@“d‚eA“dƒeB“d„eC“d…eD“d†eF“¥d‡eGi¥ZLdˆeMd‰<    G dŠ„ d‹e «      ZNd‘dŒ„ZO G d�„ dŽ«      ZPy)’zŠJira resource definitions.

This module implements the Resource classes that translate JSON from Jira REST
resources into usable objects.
é    )ÚannotationsN)ÚTYPE_CHECKINGÚAnyÚDictÚListÚTypeÚcast)ÚResponse)ÚCaseInsensitiveDict)ÚResilientSessionÚparse_errors)Ú
json_loadsÚremove_empty_attributesÚthreaded_requests)ÚJIRAc                  ó   — e Zd ZdZy)ÚAnyLikezIDummy subclass of base object class for when type checker is not running.N©Ú__name__Ú
__module__Ú__qualname__Ú__doc__© ó    úF/var/www/timesheet/venv/lib/python3.12/site-packages/jira/resources.pyr   r      s   „ ÙWàr   r   )&ÚResourceÚIssueÚCommentÚProjectÚ
AttachmentÚ	ComponentÚ	DashboardÚDashboardItemPropertyÚDashboardItemPropertyKeyÚFilterÚDashboardGadgetÚVotesÚPermissionSchemeÚWatchersÚWorklogÚ	IssueLinkÚIssueLinkTypeÚIssuePropertyÚIssueSecurityLevelSchemeÚ	IssueTypeÚIssueTypeSchemeÚNotificationSchemeÚPriorityÚPrioritySchemeÚVersionÚWorkflowSchemeÚRoleÚ
ResolutionÚSecurityLevelÚStatusÚUserÚGroupÚCustomFieldOptionÚ
RemoteLinkÚCustomerÚServiceDeskÚRequestTypeÚresource_class_mapÚjirac                  óú   — e Zd ZdZdZdZdZef	 	 	 	 	 	 	 dd„Z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d„Zd d„Z	 	 	 	 d!	 	 	 	 	 	 	 	 	 d"d„Zdd#d„Z e«       ddf	 	 	 	 	 d$d„Zd%d„Zd„ Zy)&r   aÈ  Models a URL-addressable resource in the Jira REST API.

    All Resource objects provide the following:
    ``find()`` -- get a resource from the server and load it into the current object (though clients should use the methods in the JIRA class instead of this method directly)
    ``update()`` -- changes the value of this resource on the server and returns a new resource object for it
    ``delete()`` -- deletes this resource from the server
    ``self`` -- the URL of this resource on the server
    ``raw`` -- dict of properties parsed out of the JSON response from the server

    Subclasses will implement ``update()`` and ``delete()`` as appropriate for the specific resource.

    All Resources have a resource path of the form:

    * ``issue``
    * ``project/{0}``
    * ``issue/{0}/votes``
    * ``issue/{0}/comment/{1}``

    where the bracketed numerals are placeholders for ID values that are filled in from the ``ids`` parameter to ``find()``.
    z3{server}/rest/{rest_path}/{rest_api_version}/{path})ÚdisplayNameÚkeyÚnameÚ	accountIdÚfilenameÚvalueÚscopeÚvotesÚidÚmimeTypeÚclosed)ÚselfÚtyperE   rL   rF   c                óJ   — || _         || _        || _        || _        d| _        y)a0  Initializes a generic resource.

        Args:
            resource (str): The name of the resource.
            options (Dict[str,str]): Options for the new resource
            session (ResilientSession): Session used for the resource.
            base_url (Optional[str]): The Base Jira url.

        N)Ú	_resourceÚ_optionsÚ_sessionÚ	_base_urlÚraw)rO   ÚresourceÚoptionsÚsessionÚbase_urls        r   Ú__init__zResource.__init__   s)   € ð  "ˆŒØˆŒØˆŒØ!ˆŒð +/ˆ�r   c                óô   — | j                   rb| j                  D ]S  }|| j                   v sŒt        | j                   |   «      }t        | d«      r|dt        | j                  «      z   z  }|c S  t        | «      S )znReturn the first value we find that is likely to be human-readable.

        Returns:
            str
        Úchildz - )rV   Ú_READABLE_IDSÚstrÚhasattrr]   Úrepr)rO   rF   Úpretty_names      r   Ú__str__zResource.__str__—   sq   € ð �8Š8Ø×*Ñ*ò '�Ø˜4Ÿ8™8Ò#Ü"% d§h¡h¨t¡nÓ"5�Kä˜t WÔ-Ø# u¬s°4·:±:«Ñ'>Ñ>˜Ø&Ò&ð'ô �D‹zÐr   c                ó`  — g }| j                   rM| j                  D ]>  }|| j                   v sŒ|j                  |dz   t        | j                   |   «      z   «       Œ@ |s&d| j                  j
                  › dt        | «      › d�S d| j                  j
                  › ddj                  |«      › d�S )zfIdentify the class and include any and all relevant values.

        Returns:
            str
        ú=z<JIRA z at ú>z: z, )rV   r^   Úappendra   Ú	__class__r   rL   Újoin)rO   ÚnamesrF   s      r   Ú__repr__zResource.__repr__©   s¨   € ð ˆØ�8Š8Ø×*Ñ*ò D�Ø˜4Ÿ8™8Ò#Ø—L‘L ¨¡¬d°4·8±8¸D±>Ó.BÑ!BÕCðDñ Ø˜DŸN™N×3Ñ3Ð4°D¼¸D»¸
À!ÐDÐDØ˜Ÿ™×/Ñ/Ð0°°4·9±9¸UÓ3CÐ2DÀAÐFÐFr   c           	     óà   — 	 | |   S # t         $ r]}t        | d«      r.| j                  �"|| j                  v r| j                  |   cY d}~S t        | j                  ›d|›d|› d�«      ‚d}~ww xY w)zäAllow access of attributes via names.

        Args:
            item (str): Attribute Name

        Raises:
            AttributeError: When attribute does not exist.

        Returns:
            Any: Attribute value.
        rV   Nz object has no attribute z (ú))Ú	Exceptionr`   rV   ÚAttributeErrorrh   )rO   ÚitemÚes      r   Ú__getattr__zResource.__getattr__¸   sv   € ð	Ø˜‘:ÐøÜò 	Ü�t˜UÔ#¨¯©Ð(<ÀÈÏÉÑAQØ—x‘x ‘~Õ%ä$Ø—~‘~Ð(Ð(AÀ$ÀÈÈAÈ3ÈaÐPóð ûð		ús    ‚ ‡	A-�4A(ÁA-Á
A(Á(A-c                ó   — t        | «      S )zPickling the resource.)Úvars©rO   s    r   Ú__getstate__zResource.__getstate__Î   s   € ä�D‹zÐr   c                ó8   — t        | «      j                  |«       y)zUnpickling of the resource.N)rt   Úupdate)rO   Úraw_pickleds     r   Ú__setstate__zResource.__setstate__Ò   s   € ô 	ˆT‹
×Ñ˜+Õ&r   c                óÖ   — g }| j                   D ]*  }t        | |«      sŒ|j                  t        | |«      «       Œ, |rt	        t        |«      «      S t        d| j                  › d�«      ‚)zêHash calculation.

        We try to find unique identifier like properties to form our hash object.
        Technically 'self', if present, is the unique URL to the object, and should be sufficient to generate a unique hash.
        ú'z' is not hashable)Ú	_HASH_IDSr`   rg   ÚgetattrÚhashÚtupleÚ	TypeErrorrh   )rO   Ú	hash_listÚas      r   Ú__hash__zResource.__hash__×   sj   € ð ˆ	Ø—‘ò 	3ˆAÜ�t˜QÕØ× Ñ ¤¨¨qÓ!1Õ2ð	3ñ Üœ˜iÓ(Ó)Ð)ä˜a §¡Ð/Ð/@ÐAÓBÐBr   c           
     óÈ   — t        || j                  «      xrF t        | j                  D �cg c]'  }t	        | |«      rt        | |«      t        ||«      k(  ‘Œ) c}«      S c c}w )z˜Default equality test.

        Checks the types look about right and that the relevant attributes that uniquely identify a resource are equal.
        )Ú
isinstancerh   Úallr}   r`   r~   )rO   Úotherrƒ   s      r   Ú__eq__zResource.__eq__ç   sa   € ô
 ˜% §¡Ó0ò 
´Sð Ÿ™öàÜ˜4 Ô#ô ˜˜aÓ ¤G¨E°1Ó$5Ó5òó6
ð 	
ùòs   ¬,ANc                óÜ   — |€i }t        |t        «      r | j                  j                  |Ž }n| j                  j                  |«      }| j	                  |«      }| j                  ||«       y)z³Finds a resource based on the input parameters.

        Args:
            id (Union[Tuple[str, str], int, str]): id
            params (Optional[Dict[str, str]]): params
        N)r†   r€   rR   ÚformatÚ_get_urlÚ_find_by_url)rO   rL   ÚparamsÚpathÚurls        r   ÚfindzResource.findô   s`   € ð ˆ>ØˆFä�bœ%Ô Ø(�4—>‘>×(Ñ(¨"Ð-‰Dà—>‘>×(Ñ(¨Ó,ˆDØ�m‰m˜DÓ!ˆØ×Ñ˜#˜vÕ&r   c                ó*   — | j                  ||¬«       y)züFinds a resource on the specified url.

        The resource is loaded with the JSON data returned by doing a
        request on the specified url.

        Args:
            url (str): url
            params (Optional[Dict[str, str]]): params
        ©rŽ   N)Ú_load)rO   r�   rŽ   s      r   r�   zResource._find_by_url	  s   € ð 	�
‰
�3˜vˆ
Õ&r   c                ó”   — | j                   j                  «       }|j                  d|i«        | j                  j                  di |¤ŽS )zzGets the url for the specified path.

        Args:
            path (str): str

        Returns:
            str
        r�   r   )rS   Úcopyrx   rU   r‹   )rO   r�   rX   s      r   rŒ   zResource._get_url  s@   € ð —-‘-×$Ñ$Ó&ˆØ�‰˜ �~Ô&Ø$ˆt�~‰~×$Ñ$Ñ/ wÑ/Ð/r   c                ór  — |€| j                   d   }i }|�|j                  |«       |j                  |«       |sd}nd}| j                  j                  | j                  |z   t        j                  |«      ¬«      }d| j                   v �rð|j                  dk(  �ràd}	t        |«      }
t        j                  |
«       d|
v rCd	|d
   vr<t        j                  d| j                   d   z  «       d| j                   d   i|d
   d	<   d|
v rZd|d
   vrSt        j                  dj                  | j                   d   | j                  «      «       d| j                   d   i|d
   d<   d|
v rt        j                  d«       ddi|d
   d<   d|
v rAt        j                  d«       | j                  j                  j!                  dd«      |d
   d<   |
D ]¸  }t#        j$                  d|t"        j&                  «      rEt#        j$                  d|t"        j&                  «      }|r|j)                  «       d   }	n
t+        «       ‚t#        j$                  d|«      sŒ„t#        j$                  d|«      }|r|j)                  «       d   }	Œ°t+        «       ‚ |	r/|r-t        j                  d|	z  «       |j-                  |	ddd¬«       |r‡t/        | j                  d «      st1        «       | j                  _        | j                  j2                  j5                  t7        j                  | j                  t        j                  |«      ¬«      «       n:| j                  j                  | j                  t        j                  |«      ¬«      }t9        j:                  | j                   d!   «       | j=                  | j                  «       y)"aU  Update this resource on the server.

        Keyword arguments are marshalled into a dict before being sent. If this resource doesn't support ``PUT``, a :py:exc:`.JIRAError`
        will be raised; subclasses that specialize this method will only raise errors in case of user error.

        Args:
            fields (Optional[Dict[str, Any]]): Fields which should be updated for the object.
            async_ (Optional[bool]): True to add the request to the queue, so it can be executed later using async_run()
            jira (jira.client.JIRA): Instance of Jira Client
            notify (bool): True to notify watchers about the update, sets parameter notifyUsers. (Default: ``True``).
              Admin or project admin permissions are required to disable the notification.
            kwargs (Any): extra arguments to the PUT request.
        NÚasyncz?notifyUsers=falseÚ ©ÚdataÚautofixi�  z%The reporter specified is not a user.ÚreporterÚfieldsz:autofix: setting reporter to '%s' and retrying the update.rF   zIssues must be assigned.ÚassigneezAautofix: setting assignee to '{}' for {} and retrying the update.zBIssue type is a sub-task but parent issue key or id not specified.zIautofix: trying to fix sub-task without parent by converting to it to bugÚBugÚ	issuetypez>The summary is invalid because it contains newline characters.z)autofix: trying to fix newline in summaryz/nÚsummaryz*^User '(.*)' was not found in the system\.r   z^User '(.*)' does not exist\.zZTrying to add missing orphan user '%s' in order to complete the previous failed operation.znoreply@example.comit'  F)ÚactiveÚ_async_jobsÚdelay_reload)rS   rx   rT   ÚputrO   ÚjsonÚdumpsÚstatus_coder   ÚloggingÚerrorÚwarningr‹   rE   rž   r¢   ÚreplaceÚreÚsearchÚUÚgroupsÚNotImplementedErrorÚadd_userr`   Úsetr¤   Úaddr   ÚtimeÚsleepr”   )rO   rž   Úasync_rB   ÚnotifyÚkwargsr›   ÚquerystringÚrÚuserÚ
error_listr«   Úms                r   rx   zResource.update&  s;  € ð* ˆ>ØŸ=™=¨Ñ1ˆFàˆØÐØ�K‰K˜ÔØ�‰�FÔáØ.‰KàˆKà�M‰M×Ñ˜dŸi™i¨+Ñ5¼D¿J¹JÀtÓ<LÐÓMˆØ˜Ÿ™Ò%¨!¯-©-¸3Ó*>ØˆDÜ% a›ˆJÜ�M‰M˜*Ô%à7¸:ÑEØ d¨8¡nÑ4ä—‘ØPØ—m‘m IÑ.ñ/ôð /5°d·m±mÀIÑ6NÐ-O��X‘˜zÑ*ð +¨jÑ8Ø d¨8¡nÑ4ä—‘ØW×^Ñ^ØŸ™ iÑ0°$·(±(óôð
 /5°d·m±mÀIÑ6NÐ-O��X‘˜zÑ*ð UØñô —‘Ø_ôð 06°u¨o��X‘˜{Ñ+àPØñô —‘Ð KÔLØ,0¯K©K×,?Ñ,?×,GÑ,GÈÈbÓ,Q��X‘˜yÑ)Ø#ò 4�Ü—9‘9ØAÀ5Ì"Ï$É$ôô Ÿ	™	ØEÀuÌbÏdÉdó�Añ Ø Ÿx™x›z¨!™}™ä1Ó3Ð3Ü—9‘9Ð=¸uÕEÜŸ	™	Ð"BÀEÓJ�AÙØ Ÿx™x›z¨!™}™ä1Ó3Ð3ð!4ñ$ ™Ü—‘ØpØñôð —‘˜dÐ$9¸5È�ÔOñ
 Ü˜tŸ}™}¨mÔ<Ü03³�D—M‘MÔ-Ø—‘×)Ñ)×-Ñ-Ü%×)Ñ)ØŸ	™	¬¯
©
°4Ó(8ôõð —M‘M×%Ñ% d§i¡i´d·j±jÀÓ6FÐ%ÓG�ä�
‰
�4—=‘= Ñ0Ô1Ø�
‰
�4—9‘9Õr   c                óV  — | j                   d   rtt        | j                  d«      st        «       | j                  _        | j                  j                  j                  t        j                  | j                  |¬«      «       y| j                  j                  | j                  |¬«      S )až  Delete this resource from the server, passing the specified query parameters.

        If this resource doesn't support ``DELETE``, a :py:exc:`.JIRAError` will be raised; subclasses that specialize this method will
        only raise errors in case of user error.

        Args:
            params: Parameters for the delete request.

        Returns:
            Optional[Response]: Returns None if async
        r˜   r¤   )r�   rŽ   N)	rS   r`   rT   r´   r¤   rµ   r   ÚdeleterO   )rO   rŽ   s     r   rÁ   zResource.deleteš  s{   € ð �=‰=˜Ò!ä˜4Ÿ=™=¨-Ô8Ü,/«E�—‘Ô)Ø�M‰M×%Ñ%×)Ñ)Ü!×(Ñ(¨T¯Y©Y¸vÔFôð à—=‘=×'Ñ'¨D¯I©I¸fÐ'ÓEÐEr   c                óö   — | j                   j                  |||¬«      }	 t        |«      }|r||   }| j                  |«       y# t        $ r+}t	        j
                  |› d|j                  › �«       |‚d}~ww xY w)a  Load a resource.

        Args:
            url (str): url
            headers (Optional[CaseInsensitiveDict]): headers. Defaults to CaseInsensitiveDict().
            params (Optional[Dict[str,str]]): params to get request. Defaults to None.
            path (Optional[str]): field to get. Defaults to None.

        Raises:
            ValueError: If json cannot be loaded
        )ÚheadersrŽ   z:
N)rT   Úgetr   Ú
ValueErrorrª   r«   ÚtextÚ
_parse_raw)rO   r�   rÃ   rŽ   r�   r¼   Újrq   s           r   r”   zResource._load±  sy   € ð$ �M‰M×Ñ˜c¨7¸6ÐÓBˆð	Ü˜1“ˆAñ Ø�$‘ˆAØ�‰˜Õøô ò 	Ü�M‰M˜Q˜C˜s 1§6¡6 (Ð+Ô,ØˆGûð	ús    A Á	A8Á&A3Á3A8c                óv   — || _         |st        d|› �«      ‚t        || | j                  | j                  «       y)zeParse a raw dictionary to create a resource.

        Args:
            raw (Dict[str, Any])
        z'We cannot instantiate empty resources: N)rV   r²   Údict2resourcerS   rT   )rO   rV   s     r   rÇ   zResource._parse_rawÍ  s8   € ð ˆŒÙÜ%Ð(OÐPSÈuÐ&UÓVÐVÜ�c˜4 §¡°·±Õ>r   c                óp   — t        | j                  d   j                  «       |j                  «       z   «      S )NrÃ   )r   rS   Úitems)rO   Úuser_headerss     r   Ú_default_headerszResource._default_headersØ  s4   € ô #Ø�M‰M˜)Ñ$×*Ñ*Ó,¨|×/AÑ/AÓ/CÑCó
ð 	
r   )rW   r_   rX   údict[str, Any]rY   r   rZ   r_   )Úreturnr_   )rp   r_   rÐ   r   )rÐ   rÏ   )ry   rÏ   )rÐ   Úint)rˆ   r   rÐ   Úbool©N)rL   ztuple[str, ...] | int | strrŽ   údict[str, str] | None©r�   r_   rŽ   rÔ   )r�   r_   rÐ   r_   )NNNT)
rž   údict[str, Any] | Noner¸   úbool | NonerB   r   r¹   rÒ   rº   r   )rŽ   rÖ   rÐ   zResponse | None)r�   r_   rŽ   rÔ   r�   ú
str | None)rV   rÏ   )r   r   r   r   ÚJIRA_BASE_URLr^   r}   r[   rc   rk   rr   rv   rz   r„   r‰   r‘   r�   rŒ   rx   rÁ   r   r”   rÇ   rÎ   r   r   r   r   r   M   s8  „ ñð* J€Mð€Mð €Ið &ð/àð/ð  ð/ð "ð	/ð
 ó/ó0ó$Góó,ó'ó
Có 
ð  )-ð'à'ð'ð &ó'ð0 )-ð'àð'ð &ó'ó 0ð )-Ø"ØØðrà%ðrð ðrð ð	rð
 ðrð órôhFñ4 $Ó%Ø(,Øðàðð &ð	ð
 óó8	?ó
r   r   c                  ó4   — e Zd ZdZ	 d	 	 	 	 	 dd„Zd„ Zdd„Zy)	r    zAn issue attachment.Nc                ó²   — t         j                  | d||«       |r| j                  |«       t        t        t
        t        f   | j                  «      | _        y )Nzattachment/{0}©r   r[   rÇ   r	   r   r_   r   rV   ©rO   rX   rY   rV   s       r   r[   zAttachment.__init__ã  óB   € ô 	×Ñ˜$Ð 0°'¸7ÔCÙØ�O‰O˜CÔ Ü#'¬¬S´#¨X©¸¿¹Ó#Aˆ�r   c                ól   — | j                   j                  | j                  ddi¬«      }|j                  S )z$Return the file content as a string.ÚAcceptz*/*)rÃ   )rT   rÄ   Úcontent)rO   r¼   s     r   rÄ   zAttachment.getî  s.   € à�M‰M×Ñ˜dŸl™l°X¸uÐ4EÐÓFˆØ�y‰yÐr   c                ór   — | j                   j                  | j                  d¬«      }|j                  |«      S )z.Return the file content as an iterable stream.T)Ústream)rT   rÄ   rá   Úiter_content)rO   Ú
chunk_sizer¼   s      r   rä   zAttachment.iter_contentó  s.   € à�M‰M×Ñ˜dŸl™l°4ÐÓ8ˆØ�~‰~˜jÓ)Ð)r   rÓ   ©rX   údict[str, str]rY   r   rV   rÏ   )i   )r   r   r   r   r[   rÄ   rä   r   r   r   r    r    à  s9   „ Ùð #ð		Bàð	Bð "ð	Bð ó		Bòô
*r   r    c                  ó<   ‡ — e Zd ZdZ	 d	 	 	 	 	 dd„Zddˆ fd„Zˆ xZS )r!   zA project component.c                ó²   — t         j                  | d||«       |r| j                  |«       t        t        t
        t        f   | j                  «      | _        y )Nzcomponent/{0}rÜ   rÝ   s       r   r[   zComponent.__init__ü  óA   € ô 	×Ñ˜$ °¸'ÔBÙØ�O‰O˜CÔ Ü#'¬¬S´#¨X©¸¿¹Ó#Aˆ�r   c                ó6   •— i }|�||d<   t         ‰| �  |«       y)z¨Delete this component from the server.

        Args:
            moveIssuesTo: the name of the component to which to move any issues this component is applied
        NÚmoveIssuesTo©ÚsuperrÁ   )rO   rì   rŽ   rh   s      €r   rÁ   zComponent.delete  s&   ø€ ð ˆØÐ#Ø%1ˆF�>Ñ"ä‰‰�vÕr   rÓ   ræ   )rì   rØ   ©r   r   r   r   r[   rÁ   Ú__classcell__©rh   s   @r   r!   r!   ù  s:   ø„ Ùð #ð		Bàð	Bð "ð	Bð ó		B÷
ò 
r   r!   c                  ó&   — e Zd ZdZ	 d	 	 	 	 	 dd„Zy)r<   z,An existing option for a custom issue field.Nc                ó²   — t         j                  | d||«       |r| j                  |«       t        t        t
        t        f   | j                  «      | _        y )NzcustomFieldOption/{0}rÜ   rÝ   s       r   r[   zCustomFieldOption.__init__  óB   € ô 	×Ñ˜$Ð 7¸À'ÔJÙØ�O‰O˜CÔ Ü#'¬¬S´#¨X©¸¿¹Ó#Aˆ�r   rÓ   ræ   ©r   r   r   r   r[   r   r   r   r<   r<     s/   „ Ù6ð #ð		Bàð	Bð "ð	Bð ô		Br   r<   c                  ó&   — e Zd ZdZ	 d	 	 	 	 	 dd„Zy)r"   zA Jira dashboard.Nc                óÀ   — t         j                  | d||«       |r| j                  |«       g | _        t	        t
        t        t        f   | j                  «      | _        y )Nzdashboard/{0})	r   r[   rÇ   Úgadgetsr	   r   r_   r   rV   rÝ   s       r   r[   zDashboard.__init__&  sH   € ô 	×Ñ˜$ °¸'ÔBÙØ�O‰O˜CÔ Ø.0ˆŒÜ#'¬¬S´#¨X©¸¿¹Ó#Aˆ�r   rÓ   ræ   rõ   r   r   r   r"   r"   #  s/   „ Ùð #ð	
Bàð
Bð "ð
Bð ô	
Br   r"   c                  ó&   — e Zd ZdZ	 d	 	 	 	 	 dd„Zy)r$   z#A jira dashboard item property key.Nc                ó²   — t         j                  | d||«       |r| j                  |«       t        t        t
        t        f   | j                  «      | _        y )Nz"dashboard/{0}/items/{1}/propertiesrÜ   rÝ   s       r   r[   z!DashboardItemPropertyKey.__init__6  sB   € ô 	×Ñ˜$Ð DÀgÈwÔWÙØ�O‰O˜CÔ Ü#'¬¬S´#¨X©¸¿¹Ó#Aˆ�r   rÓ   ræ   rõ   r   r   r   r$   r$   3  s/   „ Ù-ð #ð		Bàð	Bð "ð	Bð ô		Br   r$   c                  óF   — e Zd ZdZ	 d	 	 	 	 	 dd„Z	 	 	 	 	 	 	 	 dd„Zd	d„Zy)
r#   zA jira dashboard item.Nc                ó²   — t         j                  | d||«       |r| j                  |«       t        t        t
        t        f   | j                  «      | _        y )Nz&dashboard/{0}/items/{1}/properties/{2}rÜ   rÝ   s       r   r[   zDashboardItemProperty.__init__E  sG   € ô 	×ÑØÐ:¸GÀWô	
ñ Ø�O‰O˜CÔ Ü#'¬¬S´#¨X©¸¿¹Ó#Aˆ�r   c                ó€  — | j                   j                  «       }d|› d|› d| j                  › �|d<   | j                  d   j	                  |«       | j
                  j                   | j                  j                  di |¤Ž| j                  d   «       t        | j                   | j
                  | j                  ¬«      S )a@  Update this resource on the server.

        Keyword arguments are marshalled into a dict before being sent. If this resource doesn't support ``PUT``, a :py:exc:`.JIRAError`
        will be raised; subclasses that specialize this method will only raise errors in case of user error.

        Args:
          dashboard_id (str): The ``id`` if the dashboard.
          item_id (str): The id of the dashboard item (``DashboardGadget``) to target.
          value (dict[str, Any]): The value of the targeted property key.

        Returns:
          DashboardItemProperty
        ú
dashboard/ú/items/ú/properties/r�   rI   ©rV   r   )
rS   r–   rE   rV   rx   rT   r¦   rÙ   r‹   r#   )rO   Údashboard_idÚitem_idrI   rX   s        r   rx   zDashboardItemProperty.updateR  s§   € ð  —-‘-×$Ñ$Ó&ˆð ˜˜ g¨g¨Y°lÀ4Ç8Á8À*ÐMð 	Øñ	
ð 	�‰�Ñ× Ñ  Ô'Ø�‰×ÑÐ3˜$×,Ñ,×3Ñ3Ñ>°gÑ>ÀÇÁÈÑ@QÔRä$ T§]¡]°D·M±MÀtÇxÁxÔPÐPr   c                óÐ   — | j                   j                  «       }d|› d|› d| j                  › �|d<   | j                  j	                   | j
                  j                  di |¤Ž«      S )zéDelete dashboard item property.

        Args:
          dashboard_id (str): The ``id`` of the dashboard.
          item_id (str): The ``id`` of the dashboard item (``DashboardGadget``).


        Returns:
          Response
        rþ   rÿ   r   r�   r   )rS   r–   rE   rT   rÁ   rÙ   r‹   )rO   r  r  rX   s       r   rÁ   zDashboardItemProperty.deletek  sm   € ð —-‘-×$Ñ$Ó&ˆð ˜˜ g¨g¨Y°lÀ4Ç8Á8À*ÐMð 	Øñ	
ð �}‰}×#Ñ#Ð$= D×$6Ñ$6×$=Ñ$=Ñ$HÀÑ$HÓIÐIr   rÓ   ræ   )r  r_   r  r_   rI   rÏ   rÐ   r#   )r  r_   r  r_   rÐ   r
   ©r   r   r   r   r[   rx   rÁ   r   r   r   r#   r#   B  s_   „ Ù ð #ð	BàðBð "ðBð ó	BðQØðQØ*-ðQØ6DðQà	óQô2Jr   r#   c                  óP   — e Zd ZdZ	 d	 	 	 	 	 dd„Z	 	 	 d	 	 	 	 	 	 	 	 	 d	d„Zd
d„Zy)r&   zA jira dashboard gadget.Nc                óÀ   — t         j                  | d||«       |r| j                  |«       g | _        t	        t
        t        t        f   | j                  «      | _        y )Nzdashboard/{0}/gadget/{1})	r   r[   rÇ   Úitem_propertiesr	   r   r_   r   rV   rÝ   s       r   r[   zDashboardGadget.__init__�  sJ   € ô 	×Ñ˜$Ð :¸GÀWÔMÙØ�O‰O˜CÔ Ø<>ˆÔÜ#'¬¬S´#¨X©¸¿¹Ó#Aˆ�r   c           
     ó°  ‡ — t        |||dœ«      }‰ j                  j                  «       }d|› d‰ j                  › �|d<   ‰ j                  j                   ‰ j                  j                  d	i |¤Ž|¬«       d|› d�|d<   t        ˆ fd„‰ j                  j                   ‰ j                  j                  d	i |¤Ž«      j                  «       d   D «       «      S )
aâ  Update this resource on the server.

        Keyword arguments are marshalled into a dict before being sent. If this resource doesn't support ``PUT``, a :py:exc:`.JIRAError`
        will be raised; subclasses that specialize this method will only raise errors in case of user error.

        Args:
          dashboard_id (str): The ``id`` of the dashboard to add the gadget to `required`.
          color (str): The color of the gadget, should be one of: blue, red, yellow,
              green, cyan, purple, gray, or white.
          ignore_uri_and_module_key_validation (bool): Whether to ignore the
              validation of the module key and URI. For example, when a gadget is created
              that is part of an application that is not installed.
          position (dict[str, int]): A dictionary containing position information like -
              `{"column": 0, "row", 1}`.
          title (str): The title of the gadget.

        Returns:
          ``DashboardGadget``
        )ÚcolorÚpositionÚtitlerþ   ú/gadget/r�   )r§   z/gadgetc              3  ó†   •K  — | ]8  }|d    ‰j                   k(  r$t        ‰j                  ‰j                  |¬«      –— Œ: y­w)rL   r  N)rL   r&   rS   rT   )Ú.0ÚgadgetrO   s     €r   ú	<genexpr>z)DashboardGadget.update.<locals>.<genexpr>°  s?   øè ø€ ò 
àð �d‰|˜tŸw™wÒ&ô	 ˜DŸM™M¨4¯=©=¸f×EÐEñ
ùs   ƒ>Arø   r   )r   rS   r–   rL   rT   r¦   rÙ   r‹   ÚnextrÄ   r§   )rO   r  r
  r  r  r›   rX   s   `      r   rx   zDashboardGadget.update�  s×   ø€ ô4 'Ø¨¸EÑBó
ˆð —-‘-×$Ñ$Ó&ˆØ& | n°H¸T¿W¹W¸IÐFˆ�‰à�‰×ÑÐ3˜$×,Ñ,×3Ñ3Ñ>°gÑ>ÀTÐÔJØ& | n°GÐ<ˆ�‰äó 
àŸ-™-×+Ñ+Ø)�×"Ñ"×)Ñ)Ñ4¨GÑ4óç‰d‹f�Yñ ô
ó 
ð 	
r   c                óÊ   — | j                   j                  «       }d|› d| j                  › �|d<   | j                  j	                   | j
                  j                  di |¤Ž«      S )z•Delete gadget from dashboard.

        Args:
          dashboard_id (str): The ``id`` of the dashboard.

        Returns:
          Response
        rþ   r  r�   r   )rS   r–   rL   rT   rÁ   rÙ   r‹   )rO   r  rX   s      r   rÁ   zDashboardGadget.delete¸  s\   € ð —-‘-×$Ñ$Ó&ˆØ& | n°H¸T¿W¹W¸IÐFˆ�‰à�}‰}×#Ñ#Ð$= D×$6Ñ$6×$=Ñ$=Ñ$HÀÑ$HÓIÐIr   rÓ   ræ   ©NNN)
r  r_   r
  rØ   r  rÖ   r  rØ   rÐ   r&   )r  r_   rÐ   r
   r  r   r   r   r&   r&   ~  sv   „ Ù"ð #ð	
Bàð
Bð "ð
Bð ó	
Bð !Ø*.Ø ð)
àð)
ð ð)
ð (ð	)
ð
 ð)
ð 
ó)
ôVJr   r&   c                  ó&   — e Zd ZdZ	 d	 	 	 	 	 dd„Zy)ÚFieldz‘An issue field.

    A field cannot be fetched from the Jira API individually, but paginated lists of fields are returned by some endpoints.
    Nc                ó²   — t         j                  | d||«       |r| j                  |«       t        t        t
        t        f   | j                  «      | _        y )Nz	field/{0}rÜ   rÝ   s       r   r[   zField.__init__Í  sA   € ô 	×Ñ˜$ ¨W°gÔ>ÙØ�O‰O˜CÔ Ü#'¬¬S´#¨X©¸¿¹Ó#Aˆ�r   rÓ   ræ   rõ   r   r   r   r  r  Ç  s1   „ ñð #ð		Bàð	Bð "ð	Bð ô		Br   r  c                  ó&   — e Zd ZdZ	 d	 	 	 	 	 dd„Zy)r%   zAn issue navigator filter.Nc                ó²   — t         j                  | d||«       |r| j                  |«       t        t        t
        t        f   | j                  «      | _        y )Nz
filter/{0}rÜ   rÝ   s       r   r[   zFilter.__init__Ü  óA   € ô 	×Ñ˜$ ¨g°wÔ?ÙØ�O‰O˜CÔ Ü#'¬¬S´#¨X©¸¿¹Ó#Aˆ�r   rÓ   ræ   rõ   r   r   r   r%   r%   Ù  ó/   „ Ù$ð #ð		Bàð	Bð "ð	Bð ô		Br   r%   c                  ó”   ‡ — e Zd ZdZ G d„ de«      Z	 d
	 	 	 	 	 dd„Z	 	 	 	 	 d	 	 	 	 	 	 	 	 	 dˆ fd„Zdd„Zdˆ fd„Z	dˆ fd„	Z
d	„ Zˆ xZS )r   zA Jira issue.c                  ó:   — e Zd Z G d„ d«      Z G d„ d«      Zd„ Zy)úIssue._IssueFieldsc                  ó   — e Zd Zdd„Zy)úIssue._IssueFields._Commentc                ó   — g | _         y rÓ   )Úcommentsru   s    r   r[   z$Issue._IssueFields._Comment.__init__í  ó	   € Ø/1�•r   N©rÐ   ÚNone©r   r   r   r[   r   r   r   Ú_Commentr   ì  ó   „ ô2r   r'  c                  ó   — e Zd Zdd„Zy)úIssue._IssueFields._Worklogc                ó   — g | _         y rÓ   )Úworklogsru   s    r   r[   z$Issue._IssueFields._Worklog.__init__ñ  r#  r   Nr$  r&  r   r   r   Ú_Worklogr*  ð  r(  r   r-  c                ó  — d | _         g | _        | j                  «       | _        |  d | _        d | _        g | _        |  g | _        |  |  |  d | _        d | _	        |  d | _
        |  |  g | _        |  |  | j                  «       | _        y rÓ   )rŸ   Ú
attachmentr'  ÚcommentÚdescriptionÚduedateÚ
issuelinksÚlabelsÚ
resolutionÚsecurityÚstatuscategorychangedateÚversionsr-  Úworklogru   s    r   r[   zIssue._IssueFields.__init__ô  s‚   € Ø48ˆDŒMØ02ˆDŒOØŸ=™=›?ˆDŒLÙØ+/ˆDÔØ'+ˆDŒLØ/1ˆDŒOÙØ%'ˆDŒKÙÙÙØ15ˆDŒOØ26ˆDŒMÙØ8<ˆDÔ)ÙÙØ+-ˆDŒMÙÙØŸ=™=›?ˆD�Lr   N)r   r   r   r'  r-  r[   r   r   r   Ú_IssueFieldsr  ë  s   „ ÷	2ñ 	2÷	2ñ 	2ó	+r   r:  c                ó¾   — t         j                  | d||«       |  |  |  |r| j                  |«       t        t        t
        t        f   | j                  «      | _        y )Nz	issue/{0}rÜ   rÝ   s       r   r[   zIssue.__init__  sJ   € ô 	×Ñ˜$ ¨W°gÔ>áÙÙÙØ�O‰O˜CÔ Ü#'¬¬S´#¨X©¸¿¹Ó#Aˆ�r   c                óª  •— i }|�|}ni }||d<   |�|}	ni }	|	|d<   t        |j                  «       «      D ]‰  }
||
   }t        |t        «      r?|
dk(  s|
dk(  rd|i||
<   Œ*|
dk(  r"d|	vrg |	d<   |	d   j	                  dd	|ii«       ŒQ|||
<   ŒWt        |t
        «      r|
|	vrg |	|
<   |	|
   j                  |«       Œ…|||
<   Œ‹ t        ‰| �!  ||||¬
«       y)aU  Update this issue on the server.

        Each keyword argument (other than the predefined ones) is treated as a field name and the argument's value is treated as
        the intended value for that field -- if the fields argument is used, all other keyword arguments will be ignored.

        Jira projects may contain many issue types. Some issue screens have different requirements for fields in an issue.
        This information is available through the :py:meth:`.JIRA.editmeta` method.
        Further examples are available here: https://developer.atlassian.com/display/JIRADEV/JIRA+REST+API+Example+-+Edit+issues

        Args:
            fields (Dict[str,Any]): a dict containing field names and the values to use
            update (Dict[str,Any]): a dict containing update the operations to apply
            async_ (Optional[bool]): True to add the request to the queue, so it can be executed later using async_run() (Default: ``None``))
            jira (Optional[jira.client.JIRA]): JIRA instance.
            notify (bool): True to notify watchers about the update, sets parameter notifyUsers. (Default: ``True``).
              Admin or project admin permissions are required to disable the notification.
            fieldargs (dict): keyword arguments will generally be merged into fields, except lists, which will be merged into updates
        Nrž   rx   rŸ   r�   rF   r0  rµ   Úbody©r¸   rB   r¹   rž   )	ÚsortedÚkeysr†   r_   rg   ÚlistÚextendrî   rx   )rO   rž   rx   r¸   rB   r¹   Ú	fieldargsr›   Úfields_dictÚupdate_dictÚfieldrI   rh   s               €r   rx   zIssue.update  s  ø€ ð6 ˆØÐØ ‰KàˆKØ$ˆˆX‰ØÐØ ‰KàˆKØ$ˆˆX‰Ü˜IŸN™NÓ,Ó-ò 	+ˆEØ˜eÑ$ˆEä˜%¤Ô%Ø˜JÒ&¨%°:Ò*=Ø*0°%¨�K Ò&Ø˜iÒ'Ø ¨Ñ3Ø13˜ IÑ.Ø 	Ñ*×1Ñ1°5¸6À5¸/Ð2JÕKà).�K Ò&Ü˜E¤4Ô(Ø Ñ+Ø)+�K Ñ&Ø˜EÑ"×)Ñ)¨%Õ0à%*�˜EÒ"ð#	+ô& 	‰‰˜f¨4¸ÀtˆÕLr   c                ón   — |j                  d«      rt        d|› �|«      ‚t        | j                  |«      S )a  Obtain the (parsed) value from the Issue's field.

        Args:
            field_name (str): The name of the field to get

        Raises:
            AttributeError: If the field does not exist or if the field starts with an ``_``

        Returns:
            Any: Returns the parsed data stored in the field. For example, "project" would be of class :py:class:`Project`
        Ú_z6An issue field_name cannot start with underscore (_): )Ú
startswithro   r~   rž   )rO   Ú
field_names     r   Ú	get_fieldzIssue.get_fieldV  s?   € ð × Ñ  Ô%Ü ØHÈÈÐUØóð ô
 ˜4Ÿ;™;¨
Ó3Ð3r   c                ó4   •— t         ‰| �  d|d|igii¬«       y)a  Add a value to a field that supports multiple values, without resetting the existing values.

        This should work with: labels, multiple checkbox lists, multiple select

        Args:
            field (str): The field name
            value (str): The field's value
        rx   rµ   )rž   N©rî   rx   )rO   rF  rI   rh   s      €r   Úadd_field_valuezIssue.add_field_valuej  s$   ø€ ô 	‰‰˜x¨%°5¸%°.Ð1AÐ)BÐCˆÕDr   c                ó*   •— t         ‰| �  d|i¬«       y)z½Delete this issue from the server.

        Args:
            deleteSubtasks (bool): True to also delete subtasks. If any are present the Issue won't be deleted (Default: ``True``)
        ÚdeleteSubtasksr“   Nrí   )rO   rP  rh   s     €r   rÁ   zIssue.deleteu  s   ø€ ô 	‰‰Ð/°Ð@ˆÕAr   c                ó>   — | j                   d   › d| j                  › �S )zzGet the URL of the issue, the browsable one not the REST one.

        Returns:
            str: URL of the issue
        Úserverz/browse/)rS   rE   ru   s    r   Ú	permalinkzIssue.permalink}  s#   € ð —-‘- Ñ)Ð*¨(°4·8±8°*Ð=Ð=r   rÓ   ræ   )NNNNT)
rž   rÏ   rx   rÏ   r¸   rÒ   rB   r   r¹   rÒ   )rJ  r_   rÐ   r   )rF  r_   rI   r_   )F)r   r   r   r   r   r:  r[   rx   rK  rN  rÁ   rS  rð   rñ   s   @r   r   r   è  s    ø„ Ùô+�wô +ðJ #ð	BàðBð "ðBð ó	Bð" "&Ø!%ØØØð9Màð9Mð ð9Mð ð	9Mð
 ð9Mð õ9Móv4õ(	EõBö>r   r   c                  ód   ‡ — e Zd ZdZ	 d	 	 	 	 	 dd„Z	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 dˆ fd„Zˆ xZS )r   zAn issue comment.c                ó²   — t         j                  | d||«       |r| j                  |«       t        t        t
        t        f   | j                  «      | _        y )Nzissue/{0}/comment/{1}rÜ   rÝ   s       r   r[   zComment.__init__‰  rô   r   c                óf   •— i }|r||d<   |r||d<   |rdd|idœg|d<   t         ‰	| �  ||||¬«       y)	aJ  Update a comment.

        Keyword arguments are marshalled into a dict before being sent.

        Args:
            fields (Optional[Dict[str, Any]]): DEPRECATED => a comment doesn't have fields
            async_ (Optional[bool]): True to add the request to the queue, so it can be executed later using async_run() (Default: ``None``))
            jira (jira.client.JIRA): Instance of Jira Client
            visibility (Optional[Dict[str, str]]): a dict containing two entries: "type" and "value".
              "type" is 'role' (or 'group' if the Jira server has configured comment visibility for groups)
              "value" is the name of the role (or group) to which viewing of this comment will be restricted.
            body (str): New text of the comment
            is_internal (bool): True to mark the comment as 'Internal' in Jira Service Desk (Default: ``False``)
            notify (bool): True to notify watchers about the update, sets parameter notifyUsers. (Default: ``True``).
              Admin or project admin permissions are required to disable the notification.
        r=  Ú
visibilityzsd.public.commentÚinternal)rE   rI   Ú
propertiesr>  NrM  )
rO   rž   r¸   rB   r=  rW  Úis_internalr¹   r›   rh   s
            €r   rx   zComment.update”  sU   ø€ ð:  "ˆÙØˆD�‰LÙØ!+ˆD�ÑÙà+°zÀ;Ð6OÑPð"ˆD�Ñô 	‰‰˜f¨4¸ÀtˆÕLr   rÓ   ræ   )NNNr™   NFT)rž   rÖ   r¸   r×   rB   r   r=  r_   rW  rÔ   rZ  rÒ   r¹   rÒ   ©r   r   r   r   r[   rx   rð   rñ   s   @r   r   r   †  s    ø„ Ùð #ð		Bàð	Bð "ð	Bð ó		Bð  )-Ø"ØØØ,0Ø!Øð'Mð
 &ð'Mð ð'Mð ð'Mð ð'Mð *ð'Mð ð'Mð ÷'Mñ 'Mr   r   c                  ó:   ‡ — e Zd ZdZ	 d	 	 	 	 	 dd„Zdˆ fd„	Zˆ xZS )r=   z-A link to a remote application from an issue.c                ó²   — t         j                  | d||«       |r| j                  |«       t        t        t
        t        f   | j                  «      | _        y )Nzissue/{0}/remotelink/{1}rÜ   rÝ   s       r   r[   zRemoteLink.__init__Á  óB   € ô 	×Ñ˜$Ð :¸GÀWÔMÙØ�O‰O˜CÔ Ü#'¬¬S´#¨X©¸¿¹Ó#Aˆ�r   c                óV   •— d|i}|�||d<   |�||d<   |�||d<   t        ‰| �  di |¤Ž y)a…  Update a RemoteLink. 'object' is required.

        For definitions of the allowable fields for 'object' and the keyword arguments 'globalId', 'application' and 'relationship',
        see https://developer.atlassian.com/display/JIRADEV/JIRA+REST+API+for+Remote+Issue+Links.

        Args:
            object: the link details to add (see the above link for details)
            globalId: unique ID for the link (see the above link for details)
            application: application information for the link (see the above link for details)
            relationship: relationship description for the link (see the above link for details)
        ÚobjectNÚglobalIdÚapplicationÚrelationshipr   rM  )rO   r`  ra  rb  rc  r›   rh   s         €r   rx   zRemoteLink.updateÌ  sN   ø€ ð ˜&Ð!ˆØÐØ'ˆD�ÑØÐ"Ø"-ˆD�ÑØÐ#Ø#/ˆD�Ñ ä‰‰Ñ˜Ór   rÓ   ræ   r  r[  rñ   s   @r   r=   r=   ¾  s:   ø„ Ù7ð #ð		Bàð	Bð "ð	Bð ó		B÷ñ r   r=   c                  ó&   — e Zd ZdZ	 d	 	 	 	 	 dd„Zy)r'   zVote information on an issue.Nc                ó²   — t         j                  | d||«       |r| j                  |«       t        t        t
        t        f   | j                  «      | _        y )Nzissue/{0}/votesrÜ   rÝ   s       r   r[   zVotes.__init__æ  sB   € ô 	×Ñ˜$Ð 1°7¸GÔDÙØ�O‰O˜CÔ Ü#'¬¬S´#¨X©¸¿¹Ó#Aˆ�r   rÓ   ræ   rõ   r   r   r   r'   r'   ã  s/   „ Ù'ð #ð		Bàð	Bð "ð	Bð ô		Br   r'   c                  ó   — e Zd ZdZdd„Zy)r0   zAn issue type scheme.Nc                ó²   — t         j                  | d||«       |r| j                  |«       t        t        t
        t        f   | j                  «      | _        y )NÚissuetypeschemerÜ   rÝ   s       r   r[   zIssueTypeScheme.__init__õ  s@   € Ü×Ñ˜$Ð 1°7¸GÔDÙØ�O‰O˜CÔ Ü#'¬¬S´#¨X©¸¿¹Ó#Aˆ�r   rÓ   rõ   r   r   r   r0   r0   ò  s   „ ÙôBr   r0   c                  ó   — e Zd ZdZdd„Zy)r.   z2IssueSecurityLevelScheme information on a project.Nc                ó²   — t         j                  | d||«       |r| j                  |«       t        t        t
        t        f   | j                  «      | _        y )Nz0project/{0}/issuesecuritylevelscheme?expand=userrÜ   rÝ   s       r   r[   z!IssueSecurityLevelScheme.__init__ÿ  sE   € Ü×ÑØÐDÀgÈwô	
ñ Ø�O‰O˜CÔ Ü#'¬¬S´#¨X©¸¿¹Ó#Aˆ�r   rÓ   rõ   r   r   r   r.   r.   ü  s   „ Ù<ôBr   r.   c                  ó   — e Zd ZdZdd„Zy)r1   z,NotificationScheme information on a project.Nc                ó²   — t         j                  | d||«       |r| j                  |«       t        t        t
        t        f   | j                  «      | _        y )Nz*project/{0}/notificationscheme?expand=userrÜ   rÝ   s       r   r[   zNotificationScheme.__init__  sE   € Ü×ÑØÐ>ÀÈô	
ñ Ø�O‰O˜CÔ Ü#'¬¬S´#¨X©¸¿¹Ó#Aˆ�r   rÓ   rõ   r   r   r   r1   r1     s   „ Ù6ôBr   r1   c                  ó   — e Zd ZdZdd„Zy)r(   z*Permissionscheme information on a project.Nc                ó²   — t         j                  | d||«       |r| j                  |«       t        t        t
        t        f   | j                  «      | _        y )Nz(project/{0}/permissionscheme?expand=userrÜ   rÝ   s       r   r[   zPermissionScheme.__init__  sE   € Ü×ÑØÐ<¸gÀwô	
ñ Ø�O‰O˜CÔ Ü#'¬¬S´#¨X©¸¿¹Ó#Aˆ�r   rÓ   rõ   r   r   r   r(   r(     s   „ Ù4ôBr   r(   c                  ó   — e Zd ZdZdd„Zy)r3   z(PriorityScheme information on a project.Nc                ó²   — t         j                  | d||«       |r| j                  |«       t        t        t
        t        f   | j                  «      | _        y )Nz&project/{0}/priorityscheme?expand=userrÜ   rÝ   s       r   r[   zPriorityScheme.__init__#  óE   € Ü×ÑØÐ:¸GÀWô	
ñ Ø�O‰O˜CÔ Ü#'¬¬S´#¨X©¸¿¹Ó#Aˆ�r   rÓ   rõ   r   r   r   r3   r3      ó   „ Ù2ôBr   r3   c                  ó   — e Zd ZdZdd„Zy)r5   z(WorkflowScheme information on a project.Nc                ó²   — t         j                  | d||«       |r| j                  |«       t        t        t
        t        f   | j                  «      | _        y )Nz&project/{0}/workflowscheme?expand=userrÜ   rÝ   s       r   r[   zWorkflowScheme.__init__/  rq  r   rÓ   rõ   r   r   r   r5   r5   ,  rr  r   r5   c                  ó8   ‡ — e Zd ZdZ	 d	 	 	 	 	 dd„Zˆ fd„Zˆ xZS )r)   z Watcher information on an issue.c                ó²   — t         j                  | d||«       |r| j                  |«       t        t        t
        t        f   | j                  «      | _        y )Nzissue/{0}/watchersrÜ   rÝ   s       r   r[   zWatchers.__init__;  óB   € ô 	×Ñ˜$Ð 4°g¸wÔGÙØ�O‰O˜CÔ Ü#'¬¬S´#¨X©¸¿¹Ó#Aˆ�r   c                ó*   •— t         ‰| �  d|i¬«       y)z1Remove the specified user from the watchers list.Úusernamer“   Nrí   )rO   ry  rh   s     €r   rÁ   zWatchers.deleteF  s   ø€ ä‰‰˜z¨8Ð4ˆÕ5r   rÓ   ræ   rï   rñ   s   @r   r)   r)   8  s:   ø„ Ù*ð #ð		Bàð	Bð "ð	Bð ó		B÷6ð 6r   r)   c                  ó"   — e Zd Z	 d	 	 	 	 	 dd„Zy)ÚTimeTrackingNc                óÀ   — t         j                  | d||«       d | _        |r| j                  |«       t	        t
        t        t        f   | j                  «      | _        y ©Nzissue/{0}/worklog/{1})	r   r[   ÚremainingEstimaterÇ   r	   r   r_   r   rV   rÝ   s       r   r[   zTimeTracking.__init__L  sJ   € ô 	×Ñ˜$Ð 7¸À'ÔJØ!%ˆÔÙØ�O‰O˜CÔ Ü#'¬¬S´#¨X©¸¿¹Ó#Aˆ�r   rÓ   ræ   r&  r   r   r   r{  r{  K  s,   „ ð
 #ð	
Bàð
Bð "ð
Bð ô	
Br   r{  c                  ó@   ‡ — e Zd ZdZ	 d	 	 	 	 	 dd„Z	 d	 dˆ fd„Zˆ xZS )r*   zWorklog on an issue.c                ó²   — t         j                  | d||«       |r| j                  |«       t        t        t
        t        f   | j                  «      | _        y r}  rÜ   rÝ   s       r   r[   zWorklog.__init__\  rô   r   c                óR   •— i }|�||d<   |�||d<   |�||d<   t         ‰| �  |«       y)aÿ  Delete this worklog entry from its associated issue.

        Args:
            adjustEstimate: one of ``new``, ``leave``, ``manual`` or ``auto``.
              ``auto`` is the default and adjusts the estimate automatically.
              ``leave`` leaves the estimate unchanged by this deletion.
            newEstimate: combined with ``adjustEstimate=new``, set the estimate to this value
            increaseBy: combined with ``adjustEstimate=manual``, increase the remaining estimate by this amount
        NÚadjustEstimateÚnewEstimateÚ
increaseByrí   )rO   r‚  rƒ  r„  rŽ   rh   s        €r   rÁ   zWorklog.deleteg  sG   ø€ ð ˆØÐ%Ø'5ˆFÐ#Ñ$ØÐ"Ø$/ˆF�=Ñ!ØÐ!Ø#-ˆF�<Ñ ä‰‰�vÕr   rÓ   ræ   r  )r‚  rØ   rï   rñ   s   @r   r*   r*   Y  sI   ø„ Ùð #ð		Bàð	Bð "ð	Bð ó		Bð OSðØ(÷ñ r   r*   c                  óD   ‡ — e Zd ZdZ	 d	 	 	 	 	 dd„Z	 d	 	 	 dˆ fd„Zˆ xZS )r-   zCustom data against an issue.c                ó²   — t         j                  | d||«       |r| j                  |«       t        t        t
        t        f   | j                  «      | _        y )Nzissue/{0}/properties/{1}rÜ   rÝ   s       r   r[   zIssueProperty.__init__�  r^  r   c                ó4   •— t         ‰| �  ||«       || _        y rÓ   )rî   r�   rO   )rO   r�   rŽ   rh   s      €r   r�   zIssueProperty._find_by_urlŒ  s   ø€ ô
 	‰Ñ˜S &Ô)àˆ�	r   rÓ   ræ   rÕ   )r   r   r   r   r[   r�   rð   rñ   s   @r   r-   r-   ~  sQ   ø„ Ù'ð #ð		Bàð	Bð "ð	Bð ó		Bð )-ðàðð &÷ñ r   r-   c                  ó&   — e Zd ZdZ	 d	 	 	 	 	 dd„Zy)r+   zLink between two issues.Nc                ó²   — t         j                  | d||«       |r| j                  |«       t        t        t
        t        f   | j                  «      | _        y )NzissueLink/{0}rÜ   rÝ   s       r   r[   zIssueLink.__init__™  rê   r   rÓ   ræ   rõ   r   r   r   r+   r+   –  s/   „ Ù"ð #ð		Bàð	Bð "ð	Bð ô		Br   r+   c                  ó&   — e Zd ZdZ	 d	 	 	 	 	 dd„Zy)r,   z Type of link between two issues.Nc                ó²   — t         j                  | d||«       |r| j                  |«       t        t        t
        t        f   | j                  «      | _        y )NzissueLinkType/{0}rÜ   rÝ   s       r   r[   zIssueLinkType.__init__¨  óB   € ô 	×Ñ˜$Ð 3°W¸gÔFÙØ�O‰O˜CÔ Ü#'¬¬S´#¨X©¸¿¹Ó#Aˆ�r   rÓ   ræ   rõ   r   r   r   r,   r,   ¥  s/   „ Ù*ð #ð		Bàð	Bð "ð	Bð ô		Br   r,   c                  ó&   — e Zd ZdZ	 d	 	 	 	 	 dd„Zy)r/   zType of issue.Nc                ó²   — t         j                  | d||«       |r| j                  |«       t        t        t
        t        f   | j                  «      | _        y )Nzissuetype/{0}rÜ   rÝ   s       r   r[   zIssueType.__init__·  rê   r   rÓ   ræ   rõ   r   r   r   r/   r/   ´  s/   „ Ùð #ð		Bàð	Bð "ð	Bð ô		Br   r/   c                  ó&   — e Zd ZdZ	 d	 	 	 	 	 dd„Zy)r2   z%Priority that can be set on an issue.Nc                ó²   — t         j                  | d||«       |r| j                  |«       t        t        t
        t        f   | j                  «      | _        y )Nzpriority/{0}rÜ   rÝ   s       r   r[   zPriority.__init__Æ  sA   € ô 	×Ñ˜$ °¸ÔAÙØ�O‰O˜CÔ Ü#'¬¬S´#¨X©¸¿¹Ó#Aˆ�r   rÓ   ræ   rõ   r   r   r   r2   r2   Ã  s/   „ Ù/ð #ð		Bàð	Bð "ð	Bð ô		Br   r2   c                  ó&   — e Zd ZdZ	 d	 	 	 	 	 dd„Zy)r   zA Jira project.Nc                ó²   — t         j                  | d||«       |r| j                  |«       t        t        t
        t        f   | j                  «      | _        y )Nzproject/{0}rÜ   rÝ   s       r   r[   zProject.__init__Õ  óA   € ô 	×Ñ˜$ ¨w¸Ô@ÙØ�O‰O˜CÔ Ü#'¬¬S´#¨X©¸¿¹Ó#Aˆ�r   rÓ   ræ   rõ   r   r   r   r   r   Ò  s/   „ Ùð #ð		Bàð	Bð "ð	Bð ô		Br   r   c                  óZ   ‡ — e Zd ZdZ	 d	 	 	 	 	 dd„Z	 	 d	 	 	 dˆ fd„Z	 	 d	 	 	 dd„Zˆ xZS )	r6   zA role inside a project.c                ó²   — t         j                  | d||«       |r| j                  |«       t        t        t
        t        f   | j                  «      | _        y )Nzproject/{0}/role/{1}rÜ   rÝ   s       r   r[   zRole.__init__ä  sB   € ô 	×Ñ˜$Ð 6¸ÀÔIÙØ�O‰O˜CÔ Ü#'¬¬S´#¨X©¸¿¹Ó#Aˆ�r   c                óœ   •— |�t        |t        «      r|f}|�t        |t        «      r|f}| j                  ||dœdœ}t        ‰| �  di |¤Ž y)á4  Add the specified users or groups to this project role. One of ``users`` or ``groups`` must be specified.

        Args:
            users (Optional[Union[str,List,Tuple]]): a user or users to add to the role
            groups (Optional[Union[str,List,Tuple]]): a group or groups to add to the role
        N)zatlassian-user-role-actorzatlassian-group-role-actor)rL   ÚcategorisedActorsr   )r†   r_   rL   rî   rx   )rO   Úusersr±   r›   rh   s       €r   rx   zRole.updateï  s]   ø€ ð Ð¤¨E´3Ô!7Ø�HˆEØÐ¤*¨V´SÔ"9Ø�YˆFð —'‘'à-2Ø.4ñ"ñ
ˆô 	‰‰Ñ˜Ór   c                óÖ   — |�t        |t        «      r|f}|�t        |t        «      r|f}||dœ}| j                  j                  | j                  t        j                  |«      ¬«       y)r—  N)r½   Úgrouprš   )r†   r_   rT   ÚpostrO   r§   r¨   )rO   r™  r±   r›   s       r   r³   zRole.add_user	  s^   € ð Ð¤¨E´3Ô!7Ø�HˆEØÐ¤*¨V´SÔ"9Ø�YˆFà¨Ñ/ˆØ�‰×Ñ˜4Ÿ9™9¬4¯:©:°dÓ+;ÐÕ<r   rÓ   ræ   ©NN)r™  ústr | list | tupler±   rž  )r   r   r   r   r[   rx   r³   rð   rñ   s   @r   r6   r6   á  sn   ø„ Ù"ð #ð		Bàð	Bð "ð	Bð ó		Bð %)Ø%)ðà!ðð #õð8 %)Ø%)ð=à!ð=ð #÷=r   r6   c                  ó&   — e Zd ZdZ	 d	 	 	 	 	 dd„Zy)r7   zA resolution for an issue.Nc                ó²   — t         j                  | d||«       |r| j                  |«       t        t        t
        t        f   | j                  «      | _        y )Nzresolution/{0}rÜ   rÝ   s       r   r[   zResolution.__init__   rÞ   r   rÓ   ræ   rõ   r   r   r   r7   r7     r  r   r7   c                  ó&   — e Zd ZdZ	 d	 	 	 	 	 dd„Zy)r8   z)A security level for an issue or project.Nc                ó²   — t         j                  | d||«       |r| j                  |«       t        t        t
        t        f   | j                  «      | _        y )Nzsecuritylevel/{0}rÜ   rÝ   s       r   r[   zSecurityLevel.__init__/  rŒ  r   rÓ   ræ   rõ   r   r   r   r8   r8   ,  s/   „ Ù3ð #ð		Bàð	Bð "ð	Bð ô		Br   r8   c                  ó&   — e Zd ZdZ	 d	 	 	 	 	 dd„Zy)r9   zStatus for an issue.Nc                ó²   — t         j                  | d||«       |r| j                  |«       t        t        t
        t        f   | j                  «      | _        y )Nz
status/{0}rÜ   rÝ   s       r   r[   zStatus.__init__>  r  r   rÓ   ræ   rõ   r   r   r   r9   r9   ;  s/   „ Ùð #ð		Bàð	Bð "ð	Bð ô		Br   r9   c                  ó&   — e Zd ZdZ	 d	 	 	 	 	 dd„Zy)ÚStatusCategoryzStatusCategory for an issue.Nc                ó²   — t         j                  | d||«       |r| j                  |«       t        t        t
        t        f   | j                  «      | _        y )Nzstatuscategory/{0}rÜ   rÝ   s       r   r[   zStatusCategory.__init__M  rw  r   rÓ   ræ   rõ   r   r   r   r¦  r¦  J  s/   „ Ù&ð #ð		Bàð	Bð "ð	Bð ô		Br   r¦  c                  ó0   — e Zd ZdZ	 dddœ	 	 	 	 	 	 	 dd„Zy)r:   zA Jira user.Nry  )Ú_query_paramc               óÔ   — |r	d|d   v rd}t         j                  | d|› �dz   ||«       |r| j                  |«       t        t        t
        t        f   | j                  «      | _        y )NrG   rO   zuser?z={0}rÜ   )rO   rX   rY   rV   r©  s        r   r[   zUser.__init__\  s`   € ñ �; # f¡+Ñ-Ø&ˆLä×Ñ˜$ %¨ ~Ð 6¸Ñ ?ÀÈ'ÔRÙØ�O‰O˜CÔ Ü#'¬¬S´#¨X©¸¿¹Ó#Aˆ�r   rÓ   )rX   rç   rY   r   rV   rÏ   r©  r_   rõ   r   r   r   r:   r:   Y  sE   „ Ùð #ð	Bð 'ñBàðBð "ðBð ð	Bð ôBr   r:   c                  ó&   — e Zd ZdZ	 d	 	 	 	 	 dd„Zy)r;   zA Jira user group.Nc                ó²   — t         j                  | d||«       |r| j                  |«       t        t        t
        t        f   | j                  «      | _        y )Nzgroup?groupname={0}rÜ   rÝ   s       r   r[   zGroup.__init__q  sB   € ô 	×Ñ˜$Ð 5°wÀÔHÙØ�O‰O˜CÔ Ü#'¬¬S´#¨X©¸¿¹Ó#Aˆ�r   rÓ   ræ   rõ   r   r   r   r;   r;   n  s/   „ Ùð #ð		Bàð	Bð "ð	Bð ô		Br   r;   c                  óD   ‡ — e Zd ZdZ	 d	 	 	 	 	 dd„Zdˆ fd„	Zˆ fd„Zˆ xZS )r4   zA version of a project.c                ó²   — t         j                  | d||«       |r| j                  |«       t        t        t
        t        f   | j                  «      | _        y )Nzversion/{0}rÜ   rÝ   s       r   r[   zVersion.__init__€  r“  r   c                óB   •— i }|�||d<   |�||d<   t         ‰| �  |«      S )a´  Delete this project version from the server.

        If neither of the arguments are specified, the version is removed from all issues it is attached to.

        Args:
            moveFixIssuesTo: in issues for which this version is a fix version, add this version to the fix version list
            moveAffectedIssuesTo: in issues for which this version is an affected version, add this version to the affected version list
        ÚmoveFixIssuesToÚmoveAffectedIssuesTorí   )rO   r°  r±  rŽ   rh   s       €r   rÁ   zVersion.delete‹  s;   ø€ ð ˆØÐ&Ø(7ˆFÐ$Ñ%ØÐ+Ø-AˆFÐ)Ñ*ä‰w‰~˜fÓ%Ð%r   c                óF   •— i }|D ]
  }||   ||<   Œ t        ‰| �  di |¤Ž y)a  Update this project version from the server. It is prior used to archive versions.

        Refer to Atlassian REST API `documentation`_.

        .. _documentation: https://developer.atlassian.com/cloud/jira/platform/rest/v2/api-group-project-versions/#api-rest-api-2-version-id-put

        :Example:

            .. code-block:: python

                >> version_id = "10543"
                >> version = JIRA("https://atlassian.org").version(version_id)
                >> print(version.name)
                "some_version_name"
                >> version.update(name="another_name")
                >> print(version.name)
                "another_name"
                >> version.update(archived=True)
                >> print(version.archived)
                True
        Nr   rM  )rO   rº   r›   rF  rh   s       €r   rx   zVersion.updateœ  s7   ø€ ð, ˆØò 	(ˆEØ  ™-ˆD�ŠKð	(ô 	‰‰Ñ˜Ór   rÓ   ræ   r�  )r   r   r   r   r[   rÁ   rx   rð   rñ   s   @r   r4   r4   }  s?   ø„ Ù!ð #ð		Bàð	Bð "ð	Bð ó		Bõ&÷"ð r   r4   c                  ó4   — e Zd ZdZdZdZ	 	 d	 	 	 	 	 	 	 dd„Zy)ÚAgileResourcezbA generic Agile resource. Also known as Jira Agile Server, Jira Software and formerly GreenHopper.z?{server}/rest/{agile_rest_path}/{agile_rest_api_version}/{path}ÚagileNc                óÖ   — d | _         t        j                  | |||| j                  «       |r| j	                  |«       t        t        t        t        f   | j                  «      | _	        y rÓ   )
rO   r   r[   ÚAGILE_BASE_URLrÇ   r	   r   r_   r   rV   )rO   r�   rX   rY   rV   s        r   r[   zAgileResource.__init__Ä  sP   € ð ˆŒ	ä×Ñ˜$  g¨w¸×8KÑ8KÔLÙØ�O‰O˜CÔ Ü#'¬¬S´#¨X©¸¿¹Ó#Aˆ�r   rÓ   )r�   r_   rX   rç   rY   r   rV   rÏ   )r   r   r   r   r·  ÚAGILE_BASE_REST_PATHr[   r   r   r   r´  r´  ¼  sH   „ ÙlàV€Nà"ÐØ4ð #ðBàðBð  ðBð "ð	Bð
 ôBr   r´  c                  ó&   — e Zd ZdZ	 d	 	 	 	 	 dd„Zy)ÚSprintzAn Agile sprint.Nc                ó6   — t         j                  | d|||«       y )Nz
sprint/{0}©r´  r[   rÝ   s       r   r[   zSprint.__init__Ö  ó   € ô 	×Ñ˜t \°7¸GÀSÕIr   rÓ   ræ   rõ   r   r   r   rº  rº  Ó  s/   „ Ùð #ð	JàðJð "ðJð ô	Jr   rº  c                  ó&   — e Zd ZdZ	 d	 	 	 	 	 dd„Zy)ÚBoardzAn Agile board.Nc                ó6   — t         j                  | d|||«       y )Nz
board/{id}r¼  rÝ   s       r   r[   zBoard.__init__â  r½  r   rÓ   ræ   rõ   r   r   r   r¿  r¿  ß  s/   „ Ùð #ð	JàðJð "ðJð ô	Jr   r¿  c                  ó&   — e Zd ZdZ	 d	 	 	 	 	 dd„Zy)r>   zA Service Desk customer.Nc                ó´   — t         j                  | d||d«       |r| j                  |«       t        t        t
        t        f   | j                  «      | _        y )NÚcustomerú#{server}/rest/servicedeskapi/{path}rÜ   rÝ   s       r   r[   zCustomer.__init__ñ  sI   € ô 	×ÑØ�*˜g wÐ0Uô	
ñ Ø�O‰O˜CÔ Ü#'¬¬S´#¨X©¸¿¹Ó#Aˆ�r   rÓ   ræ   rõ   r   r   r   r>   r>   î  s/   „ Ù"ð #ð	BàðBð "ðBð ô	Br   r>   c                  ó&   — e Zd ZdZ	 d	 	 	 	 	 dd„Zy)r?   zA Service Desk.Nc                ó´   — t         j                  | d||d«       |r| j                  |«       t        t        t
        t        f   | j                  «      | _        y )Nzservicedesk/{0}rÄ  rÜ   rÝ   s       r   r[   zServiceDesk.__init__  sL   € ô 	×ÑØØØØØ1ô	
ñ Ø�O‰O˜CÔ Ü#'¬¬S´#¨X©¸¿¹Ó#Aˆ�r   rÓ   ræ   rõ   r   r   r   r?   r?   ÿ  s/   „ Ùð #ð	BàðBð "ðBð ô	Br   r?   c                  ó&   — e Zd ZdZ	 d	 	 	 	 	 dd„Zy)r@   zA Service Desk Request Type.Nc                ó´   — t         j                  | d||d«       |r| j                  |«       t        t        t
        t        f   | j                  «      | _        y )Nzservicedesk/{0}/requesttyperÄ  rÜ   rÝ   s       r   r[   zRequestType.__init__  sL   € ô 	×ÑØØ)ØØØ1ô	
ñ Ø�O‰O˜CÔ Ü#'¬¬S´#¨X©¸¿¹Ó#Aˆ�r   rÓ   ræ   rõ   r   r   r   r@   r@     s/   „ Ù&ð #ð	BàðBð "ðBð ô	Br   r@   c           
     ó’  — |€
t        «       }t        t        t        t        f}| j                  «       D �]�  \  }}t        |t        «      r�d|v rQt        t        t           t        |d   «      «      }t        t        t            ||||¬«      «      }t        |||«       Œl|dk(  rt        |dt        |||«      «       ŒŠt        ||t        |||¬«      «       Œ¤t        ||«      rÔt        t        t         t"        t$        f      |«      }g }	|D ]š  }
t        |
t        «      rwd|
v rUt        t        t           t        |
d   «      «      }t        t        t            ||||
¬«      «      }|	j'                  |«       Œl|	j'                  t        |
||¬«      «       ŒŠ|	j'                  |
«       Œœ t        |||	«       �Œ„t        |||«       �Œ“ |S )a%  Convert a dictionary into a Jira Resource object.

    Recursively walks a dict structure, transforming the properties into attributes on a new ``Resource`` object of the appropriate type
    (if a ``self`` link is present) or a ``PropertyHolder`` object (if no ``self`` link is present).
    rO   )rX   rY   rV   Útimetracking)rX   rY   )ÚPropertyHolderr€   rA  r´   Ú	frozensetrÌ   r†   Údictr	   r   r   Úcls_for_resourceÚsetattrr{  rÊ   r   r   r_   r   rg   )rV   ÚtoprX   rY   ÚseqsÚirÈ   Úresource_classrW   Úseq_listÚseq_elems              r   rÊ   rÊ   -  s§  € ð €{ÜÓˆä”$œœYÐ&€DØ—	‘	“ó -‰ˆˆ1Ü�aœÔØ˜‰{ä!%¤d¬8¡nÔ6FÀqÈÁyÓ6QÓ!R�ÜÜœ‘NÙ"Ø 'Ø 'Øôó�ô ˜˜Q Õ)Ø�nÒ$Ü˜˜^¬\¸'À7ÈAÓ-NÕOä˜˜Q¤¨a¸È'Ô RÕSÜ˜˜4Ô Ü”Tœ$œs¤C˜x™.Ñ)¨1Ó-ˆAØ"$ˆHØò .�Ü˜h¬Ô-Ø Ñ)ä)-Ü ¤™NÔ,<¸XÀfÑ=MÓ,Nó*˜ô $(Ü ¤™NÙ*Ø(/Ø(/Ø$,ôó$˜ð !Ÿ™¨Õ1à Ÿ™Ü)¨(¸GÈWÔUõð —O‘O HÕ-ð+.ô, �C˜˜HÖ%ä�C˜˜AÖð[-ð\ €Jr   zattachment/[^/]+$zcomponent/[^/]+$zcustomFieldOption/[^/]+$zdashboard/[^/]+$z(dashboard/[^/]+/items/[^/]+/properties+$z-dashboard/[^/]+/items/[^/]+/properties/[^/]+$zdashboard/[^/]+/gadget/[^/]+$zfilter/[^/]$zissue/[^/]+$zissue/[^/]+/comment/[^/]+$zissue/[^/]+/votes$zissue/[^/]+/watchers$zissue/[^/]+/worklog/[^/]+$zissue/[^/]+/properties/[^/]+$zissueLink/[^/]+$zissueLinkType/[^/]+$zissuetype/[^/]+$zissuetypescheme/[^/]+$z,project/[^/]+/issuesecuritylevelscheme[^/]+$z&project/[^/]+/notificationscheme[^/]+$z"project/[^/]+/priorityscheme[^/]+$zpriority/[^/]+$zproject/[^/]+$zproject/[^/]+/role/[^/]+$z$project/[^/]+/permissionscheme[^/]+$z"project/[^/]+/workflowscheme[^/]+$zresolution/[^/]+$zsecuritylevel/[^/]+$zstatus/[^/]+$zstatuscategory/[^/]+$z!user\?(username|key|accountId).+$zgroup\?groupname.+$zversion/[^/]+$zsprints/[^/]+$zviews/[^/]+$zdict[str, type[Resource]]rA   c                  ó&   — e Zd ZdZ	 d	 	 	 	 	 dd„Zy)ÚUnknownResourcez1A Resource from Jira that is not (yet) supported.Nc                ó²   — t         j                  | d||«       |r| j                  |«       t        t        t
        t        f   | j                  «      | _        y )Nz
unknown{0}rÜ   rÝ   s       r   r[   zUnknownResource.__init__–  r  r   rÓ   ræ   rõ   r   r   r   r×  r×  “  s/   „ Ù;ð #ð		Bàð	Bð "ð	Bð ô		Br   r×  c                óf   — t         D ]#  }t        j                  || «      sŒt         |   c S  t        S rÓ   )rA   r®   r¯   r×  )Úresource_literalrW   s     r   rÎ  rÎ  ¢  s3   € Ü&ò ˆÜ�9‰9�XÐ/Õ0Ü% hÑ/Ò/ðô
 Ðr   c                  ó   — e Zd ZdZy)rË  z'An object for storing named attributes.Nr   r   r   r   rË  rË  «  s   „ Ú1r   rË  r  )rV   rÏ   rÐ   zPropertyHolder | type[Resource])rÚ  r_   rÐ   ztype[Resource])Qr   Ú
__future__r   r§   rª   r®   r¶   Útypingr   r   r   r   r   r	   Úrequestsr
   Úrequests.structuresr   Újira.resilientsessionr   r   Ú
jira.utilsr   r   r   Újira.clientr   r   Ú__all__Ú	getLoggerÚ
addHandlerÚNullHandlerr   r    r!   r<   r"   r$   r#   r&   r  r%   r   r   r=   r'   r0   r.   r1   r(   r3   r5   r)   r{  r*   r-   r+   r,   r/   r2   r   r6   r7   r8   r9   r¦  r:   r;   r4   r´  rº  r¿  r>   r?   r@   rÊ   rA   Ú__annotations__r×  rÎ  rË  r   r   r   ú<module>rè     sÄ  ðòõ #ã Û Û 	Û ß =× =å Ý 3ç @ß MÑ MáÝ à�G÷ñ ð'€ðR €× Ñ �&Ó × $Ñ $Ð%8 W×%8Ñ%8Ó%:Ô ;÷P
ñ P
ôf*�ô *ô2�ô ô6B˜ô BôB�ô Bô B˜xô Bô9J˜Hô 9JôxFJ�hô FJôRBˆHô Bô$BˆXô Bô[>ˆHô [>ô|5Mˆhô 5Môp"�ô "ôJBˆHô BôB�hô Bô	B˜xô 	Bô	B˜ô 	Bô	B�xô 	Bô	B�Xô 	Bô	B�Xô 	Bô6ˆxô 6ô&B�8ô Bô"ˆhô "ôJ�Hô ô0B�ô BôB�Hô BôB�ô BôBˆxô BôBˆhô Bô9=ˆ8ô 9=ôxB�ô BôB�Hô BôBˆXô BôB�Xô BôBˆ8ô Bô*BˆHô Bô9ˆhô 9ô~B�Hô Bô.	Jˆ]ô 	Jô	JˆMô 	JôBˆxô Bô"B�(ô Bô*B�(ô Bð4 :>ð:Ø	ð:à$ó:ðz&1à˜*ð&1ð ˜ð&1ð  Ð!2ð	&1ð
 ˜ð&1ð 0Ð1Ið&1ð 5Ð6Kð&1ð % oð&1ð �Vð&1ð �Uð&1ð " 7ð&1ð ˜5ð&1ð ˜hð&1ð " 7ð&1ð % mð&1ð  ˜ð!&1ð" ˜]ð#&1ð$ ˜ñ%&1ð& ˜ð'&1ð( 4Ð5Mð)&1ð* .Ð/Að+&1ð, *¨>ð-&1ð. ˜ð/&1ð0 �wð1&1ð2 ! $ð3&1ð4 ,Ð-=ð5&1ð6 *¨>ð7&1ð8 ˜*ð9&1ð: ˜]ð;&1ð< �fð=&1ð> ˜nð?&1ð@ )¨$ðA&1ðB ˜EðC&1ðD �wðE&1ðH �vñI&1ðJ �UñK&1Ð Ð-ó &ôRB�hô Bó÷2ò 2r   