Ë
    daºi'$  ã                   ój   — d dl Z d dlmZ d dlmZ ddlmZ  e j                  e«      Z	 G d„ de«      Z
y)é    N)Úsearch)ÚBeautifulSoupé   )ÚAtlassianRestAPIc                   óº   ‡ — e Zd ZdZ	 	 	 dˆ fd„	Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zdd
„Zdd„Zdd„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zed„ «       Zdd„Zˆ xZS )ÚCrowdz–Crowd API wrapper.
    Important to note that you will have to use an application credentials,
    not user credentials, in order to access Crowd APIsc                 ó6   •— t         t        | �  ||||||«       y )N)Úsuperr   Ú__init__)ÚselfÚurlÚusernameÚpasswordÚtimeoutÚapi_rootÚapi_versionÚ	__class__s          €úG/var/www/timesheet/venv/lib/python3.12/site-packages/atlassian/crowd.pyr   zCrowd.__init__   s   ø€ ô 	Œe�TÑ# C¨°8¸WÀhÐP[Õ\ó    c                 óF   — d| j                   › d|› d| j                  › d|› �S )Nú/)r   r   )r   ÚapiÚresources      r   Ú_crowd_api_urlzCrowd._crowd_api_url   s,   € Ø�4—=‘=�/  3 % q¨×)9Ñ)9Ð(:¸!¸H¸:ÐFÐFr   c                 óþ   — | j                  |«      }|||j                  d«      |j                  d«      |j                  d«      |j                  d«      dœ}d|i}| j                  | j                  dd«      ||¬	«      S )
z‡
        Change user status.
        :param username: str - username
        :param active: bool - True/False
        :return:
        údisplay-nameú
first-nameú	last-nameÚemail)ÚnameÚactiver   r   r   r   r   ÚusermanagementÚuser)ÚparamsÚdata)r#   ÚgetÚputr   )r   r   r!   r#   Úuser_objectr$   s         r   Ú_user_change_statuszCrowd._user_change_status   sŠ   € ð �y‰y˜Ó"ˆð ØØ ŸH™H ^Ó4ØŸ(™( <Ó0ØŸ™ +Ó.Ø—X‘X˜gÓ&ñ
ˆð ˜hÐ'ˆà�x‰xØ×ÑÐ 0°&Ó9ØØð ó 
ð 	
r   c                 óP   — d|i}| j                  | j                  dd«      |¬«      S )zP
        Get user information
        :param username:
        :return:
        r   r"   r#   ©r$   )r&   r   ©r   r   r$   s      r   r#   z
Crowd.user:   s/   € ð ˜hÐ'ˆØ�x‰x˜×+Ñ+Ð,<¸fÓEÈfˆxÓUÐUr   c                 ó&   — | j                  |d«      S )zG
        Activate user
        :param username: str - username
        T©r)   ©r   r   s     r   Úuser_activatezCrowd.user_activateC   s   € ð ×'Ñ'¨°$Ó7Ð7r   c                 ó`   — |d|i|||||dœ}| j                  | j                  dd«      |¬«      S )aO  
        Create new user method
        :param  active: bool:
        :param  username: string: username
        :param  active: bool:
        :param  first_name: string:
        :param  last_name: string:
        :param  display_name:  string:
        :param  email: string:
        :param  password: string:
        :return:
        Úvalue)r    r   r!   r   r   r   r   r"   r#   ©r%   ©Úpostr   )	r   r   r!   Ú
first_nameÚ	last_nameÚdisplay_namer   r   r(   s	            r   Úuser_createzCrowd.user_createK   sH   € ð0 Ø  (Ð+ØØ$Ø"Ø(Øñ
ˆð �y‰y˜×,Ñ,Ð-=¸vÓFÈ[ˆyÓYÐYr   c                 ó&   — | j                  |d«      S )z3
        Deactivate user

        :return:
        Fr.   r/   s     r   Úuser_deactivatezCrowd.user_deactivaten   s   € ð ×'Ñ'¨°%Ó8Ð8r   c                 óP   — d|i}| j                  | j                  dd«      |¬«      S )zV
        Delete user
        :param username: str - username
        :return:
        r   r"   r#   r+   )Údeleter   r,   s      r   Úuser_deletezCrowd.user_deletew   s0   € ð ˜hÐ'ˆà�{‰{˜4×.Ñ.Ð/?ÀÓHÐQWˆ{ÓXÐXr   c                 ón   — | j                  dd|› �«      }| j                  |d|i¬«      }t        d|«      S )z¨
        Get user's all group info
        :param username: str - username
        :param kind: str - group type
        :return: The specify user's group info
        r"   zuser/group/r   r+   zgroups[*].name©r   r&   r   )r   r   ÚkindÚpathÚresponses        r   Úuser_groupszCrowd.user_groups‚   sC   € ð ×"Ñ"Ð#3°{À4À&Ð5IÓJˆØ—8‘8˜D¨*°hÐ)?�8Ó@ˆÜÐ&¨Ó1Ð1r   c                 ót   — | j                  dd|› �«      }||dœ}| j                  ||¬«      }t        d|«      S )zò
        Get group's all direct members
        :param group: str - group name
        :param kind: str - group type
        :param max_results: int - maximum number of results
        :return: The specify group's direct members info
        r"   úgroup/user/)Ú	groupnamezmax-resultsr+   zusers[*].namer@   )r   ÚgrouprA   Úmax_resultsrB   r$   rC   s          r   Úgroup_memberszCrowd.group_members�   sG   € ð ×"Ñ"Ð#3°{À4À&Ð5IÓJˆØ$°[ÑAˆØ—8‘8˜D¨�8Ó0ˆÜ�o xÓ0Ð0r   c                 ó|   — | j                  dd|› �«      }||dœ}| j                  ||d¬«      }|j                  dk(  S )zâ
        Check if the user is a member of the group
        :param username: str - username
        :param group: str - group name
        :param kind: str - group type
        :return: bool - Return `True` or `False`
        r"   rF   )r   rG   T)r$   Úadvanced_modeéÈ   )r   r&   Ústatus_code)r   r   rH   rA   rB   r$   rC   s          r   Úis_user_in_groupzCrowd.is_user_in_groupš   sM   € ð ×"Ñ"Ð#3°{À4À&Ð5IÓJˆØ&°UÑ;ˆØ—8‘8˜D¨¸t�8ÓDˆØ×#Ñ# sÑ*Ð*r   c                 óZ   — d|i}d|i}| j                  | j                  dd«      ||¬«      S )z4
        Add user to group
        :return:
        r    r   r"   zuser/group/direct)r$   Újsonr4   )r   r   rG   r%   r$   s        r   Úgroup_add_userzCrowd.group_add_user§   sF   € ð ˜	Ð"ˆà˜hÐ'ˆà�y‰yØ×ÑÐ 0Ð2EÓFØØð ó 
ð 	
r   c                 óN   — | j                  d«      }|s| j                  d«      }|S )z§
        Get health status
        https://confluence.atlassian.com/jirakb/how-to-retrieve-health-check-results-using-rest-api-867195158.html
        :return:
        zrest/troubleshooting/1.0/check/z"rest/supportHealthCheck/1.0/check/)r&   )r   rC   s     r   Úhealth_checkzCrowd.health_check·   s*   € ð —8‘8Ð=Ó>ˆÙà—x‘xÐ DÓEˆHØˆr   c                 óB   — d}| j                  || j                  d¬«      S )zR
        Provide plugins info
        :return a json of installed plugins
        úrest/plugins/1.0/T©ÚheadersÚtrailing©r&   Úno_check_headers©r   r   s     r   Úget_plugins_infozCrowd.get_plugins_infoÄ   s$   € ð
 "ˆØ�x‰x˜ T×%:Ñ%:ÀTˆxÓJÐJr   c                 óJ   — d|› d�}| j                  || j                  d¬«      S )zQ
        Provide plugin info
        :return a json of installed plugins
        rV   ú-keyTrW   rZ   ©r   Ú
plugin_keyr   s      r   Úget_plugin_infozCrowd.get_plugin_infoÌ   s-   € ð
 " * ¨TÐ2ˆØ�x‰x˜ T×%:Ñ%:ÀTˆxÓJÐJr   c                 óJ   — d|› d�}| j                  || j                  d¬«      S )z[
        Provide plugin license info
        :return a json specific License query
        rV   z-key/licenseTrW   rZ   r`   s      r   Úget_plugin_license_infozCrowd.get_plugin_license_infoÔ   s-   € ð
 " * ¨\Ð:ˆØ�x‰x˜ T×%:Ñ%:ÀTˆxÓJÐJr   c                 ó¼   — dt        |d«      i}| j                  dd| j                  d¬«      j                  d   }d|› �}| j	                  ||| j                  ¬	«      S )
zƒ
        Provide plugin path for upload into Jira e.g. useful for auto deploy
        :param plugin_path:
        :return:
        ÚpluginÚrbÚGETrV   T)ÚmethodrB   rX   rY   z	upm-tokenzrest/plugins/1.0/?token=)ÚfilesrX   )ÚopenÚrequestr[   rX   r5   )r   Úplugin_pathrj   Ú	upm_tokenr   s        r   Úupload_pluginzCrowd.upload_pluginÜ   sq   € ð œ4 ¨TÓ2Ð3ˆØ—L‘LØØ$Ø×)Ñ)Øð	 !ó 
÷
 ‰'�+ñˆ	ð )¨¨Ð4ˆØ�y‰y˜ E°4×3HÑ3HˆyÓIÐIr   c                 ó0   — d|› d�}| j                  |«      S )zK
        Delete plugin
        :param plugin_key:
        :return:
        rV   r_   )r=   r`   s      r   Údelete_pluginzCrowd.delete_pluginì   s!   € ð " * ¨TÐ2ˆØ�{‰{˜3ÓÐr   c                 óB   — d}| j                  d|| j                  ¬«      S )Nzrest/plugins/latest/safe-moderh   )ri   rB   rX   )rl   Úsafe_mode_headersr\   s     r   Úcheck_plugin_manager_statusz!Crowd.check_plugin_manager_statusõ   s"   € Ø-ˆØ�|‰| 5¨s¸D×<RÑ<Rˆ|ÓSÐSr   c                 óH   — dddœ}d|› d�}d|i}| j                  |||¬«      S )zs
        Update license for plugin
        :param plugin_key:
        :param raw_license:
        :return:
        zno-checkz application/vnd.atl.plugins+json)zX-Atlassian-TokenzContent-Typez/plugins/1.0/z/licenseÚ
rawLicense)r%   rX   )r'   )r   ra   Úraw_licenseÚapp_headersr   r%   s         r   Úupdate_plugin_licensezCrowd.update_plugin_licenseù   s@   € ð ",Ø>ñ
ˆð ˜j˜\¨Ð2ˆØ˜kÐ*ˆØ�x‰x˜ $°ˆxÓ<Ð<r   c                 ó   — | j                  dd«      }ddi}| j                  ||¬«      }t        |d«      }i }|j                  d«      D ]-  }|d   }|j                  d	«      D �cg c]  }|d
   ‘Œ	 }	}|	||<   Œ/ |S c c}w )zú
        Retrieves full details of all group memberships, with users and nested groups.
        See: https://docs.atlassian.com/atlassian-crowd/5.3.1/REST/#usermanagement/1/group-getAllMemberships
        :return: All membership mapping dict
        r"   zgroup/membershipÚAcceptzapplication/xml)rX   ÚxmlÚ
membershiprH   r#   r    )r   r&   r   Úfind_all)
r   rB   rX   rC   ÚsoupÚmembershipsr}   rH   r#   Úuserss
             r   r€   zCrowd.memberships  s¢   € ð ×"Ñ"Ð#3Ð5GÓHˆØÐ.Ð/ˆØ—8‘8˜D¨'�8Ó2ˆÜ˜X uÓ-ˆØˆØŸ-™-¨Ó5ò 	'ˆJØ˜wÑ'ˆEØ.8×.AÑ.AÀ&Ó.IÖJ d�T˜&“\ÐJˆEÐJØ!&ˆK˜Òð	'ð Ðùò Ks   Á$A;c                 óV   — |||ddœ}| j                  | j                  dd«      |¬«      S )a  
        Create new group method
        :param groupname: string: The name of new group
        :param description: string: The description of new group, default is None
        :param active: bool: Weather the group is active, default is True
        :return: Create result
        ÚGROUP)r    r!   ÚdescriptionÚtyper"   rH   r3   r4   )r   rG   r„   r!   rH   s        r   Úgroup_createzCrowd.group_create  s:   € ð ØØ&Øñ	
ˆð �y‰y˜×,Ñ,Ð-=¸wÓGÈeˆyÓTÐTr   )é<   ÚrestÚlatest)Údirect)rŠ   iŸ† )NT)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r)   r#   r0   r9   r;   r>   rD   rJ   rO   rR   rT   r]   rb   rd   ro   rq   rt   ry   Úpropertyr€   r†   Ú__classcell__)r   s   @r   r   r      sœ   ø„ ñ;ð ØØõ	]òGò
ò6Vò8ò!ZòF9ò	Yó	2ó1ó+ò
ò òKòKòKòJò  òTò=ð ñó ð÷"Ur   r   )ÚloggingÚjmespathr   Úbs4r   Úrest_clientr   Ú	getLoggerr‹   Úlogr   © r   r   ú<module>r˜      s4   ðã å Ý å )à€g×Ñ˜Ó!€ô]UÐõ ]Ur   