
    i=                     h   d Z ddlZddlZddlZddlmZ ddlmZ ddlm	Z	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mZmZmZ dd	lmZ d
dlmZmZmZmZmZ d
dl m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z- d
dl.m/Z/ d
dl0m1Z1 ddl2m3Z3 ddl4m5Z5 ddl6m7Z8 ddl9m:Z; ddl<m=Z= ddl>m?Z?  G d d          Z@dS )a  SCIM API is a set of APIs for provisioning and managing user accounts and groups.
SCIM is used by Single Sign-On (SSO) services and identity providers to manage people across a variety of tools,
including Slack.

Refer to https://docs.slack.dev/tools/python-slack-sdk/scim/ for details.
    N)HTTPResponse)
SSLContext)DictOptionalUnionAnyList)	HTTPError)quote)RequesturlopenOpenerDirectorProxyHandlerHTTPSHandler)SlackRequestError   )_build_query_build_request_headers_debug_log_responseget_user_agent_to_dict_without_not_given)SCIMResponseSearchUsersResponseReadUserResponseSearchGroupsResponseReadGroupResponseUserCreateResponseUserPatchResponseUserUpdateResponseUserDeleteResponseGroupCreateResponseGroupPatchResponseGroupUpdateResponseGroupDeleteResponse)User)Group)default_retry_handlers)RetryHandler)HttpRequest)HttpResponse)
RetryState   )load_http_proxy_from_envc                      e Zd ZU dZeed<   eed<   ee         ed<   ee         ed<   eed<   e	eef         ed<   e
j        ed<   ee         ed	<   d
ddedddddf	dededee         dee         dedee	eef                  dee         dee         dee
j                 d	eee                  fdZdddededee         defdZdedefdZdee	eef         ef         defdZdedee	eef         ef         defdZdee	eef         ef         defdZdedefdZdddededee         defdZdede fdZ!dee	eef         e"f         de#fd Z$ded!ee	eef         e"f         de%fd"Z&dee	eef         e"f         de'fd#Z(dede)fd$Z*dddd%d&ed'ed(ee	eef                  d)ee	eef                  d*ee	eef                  de+fd+Z,d,dd-d&ed.ed/ee	eef                  d*e	eef         de+f
d0Z-d.ed1e.de+fd2Z/dS )3
SCIMClientzhttps://api.slack.com/scim/v1/tokentimeoutsslproxybase_urldefault_headersloggerretry_handlers   Nuser_agent_prefixuser_agent_suffixc                    || _         || _        || _        || _        || _        |r|ni | _        t          ||          | j        d<   |	|	nt          j        t                    | _
        |
|
nt                      | _        | j        *t          | j                                                  dk    r!t          | j
                  }|	|| _        dS dS dS )a  API client for SCIM API
        See https://docs.slack.dev/admins/scim-api/ for more details

        Args:
            token: An admin user's token, which starts with `xoxp-`
            timeout: Request timeout (in seconds)
            ssl: `ssl.SSLContext` to use for requests
            proxy: Proxy URL (e.g., `localhost:9000`, `http://localhost:9000`)
            base_url: The base URL for API calls
            default_headers: Request headers to add to all requests
            user_agent_prefix: Prefix for User-Agent header value
            user_agent_suffix: Suffix for User-Agent header value
            logger: Custom logger
            retry_handlers: Retry handlers
        z
User-AgentNr   )r0   r1   r2   r3   r4   r5   r   logging	getLogger__name__r6   r'   r7   lenstripr-   )selfr0   r1   r2   r3   r4   r5   r9   r:   r6   r7   env_variables               S/root/projects/butler/venv/lib/python3.11/site-packages/slack_sdk/scim/v1/client.py__init__zSCIMClient.__init__A   s    8 

 2AIr-;<MO`-a-a\* & 2ff8I(8S8S0>0JnnPfPhPh:TZ%5%5%7%7!8!8A!=!=3DK@@L')


 (' ">!=    )filtercountstart_indexrF   returnc          
      T    t          |                     dd|||d                    S )NGETUsersrF   rG   
startIndex	http_verbpathquery_params)r   api_callrA   rG   rH   rF   s       rC   search_userszSCIMClient.search_usersp   sE     #MM$""-    

 

 
	
rE   idc           	      j    t          |                     ddt          |                               S )NrK   Users/rP   rQ   )r   rS   r   rA   rV   s     rC   	read_userzSCIMClient.read_user   s0    DXUSUYYDXDX Y YZZZrE   userc           
          t          |                     ddt          |t                    r|                                nt          |                              S )NPOSTrL   rP   rQ   body_params)r   rS   
isinstancer%   to_dictr   )rA   r\   s     rC   create_userzSCIMClient.create_user   sX    !MM .8t.D.DjDLLNNNJdeiJjJj   
 
 	
rE   partial_userc           
          t          |                     ddt          |           t          |t                    r|                                nt          |                              S )NPATCHrX   r_   )r   rS   r   ra   r%   rb   r   )rA   rV   rd   s      rC   
patch_userzSCIMClient.patch_user   sk     MM!)eBii)).8t.L.LzL((***RlmyRzRz	   
 
 	
rE   c           
          t          |t                    r|j        n|d         }t          |                     ddt          |           t          |t                    r|                                nt          |                              S )NrV   PUTrX   r_   )ra   r%   rV   r   rS   r   rb   r   )rA   r\   user_ids      rC   update_userzSCIMClient.update_user   s    'd33C$''d!MM.eGnn...8t.D.DjDLLNNNJdeiJjJj   
 
 	
rE   c           	      j    t          |                     ddt          |                               S )NDELETErX   rY   )r    rS   r   rZ   s     rC   delete_userzSCIMClient.delete_user   s>    !MM")eBii))   
 
 	
rE   c          
      T    t          |                     dd|||d                    S )NrK   GroupsrM   rO   )r   rS   rT   s       rC   search_groupszSCIMClient.search_groups   sE     $MM$""-    

 

 
	
rE   c           	      j    t          |                     ddt          |                               S )NrK   Groups/rY   )r   rS   r   rZ   s     rC   
read_groupzSCIMClient.read_group   s0     EZuUWyyEZEZ![![\\\rE   groupc           
          t          |                     ddt          |t                    r|                                nt          |                              S )Nr^   rp   r_   )r!   rS   ra   r&   rb   r   )rA   ru   s     rC   create_groupzSCIMClient.create_group   sX    "MM /9%/G/GnEMMOOOMghmMnMn   
 
 	
rE   partial_groupc           
          t          |                     ddt          |           t          |t                    r|                                nt          |                              S )Nrf   rs   r_   )r"   rS   r   ra   r&   rb   r   )rA   rV   rx   s      rC   patch_groupzSCIMClient.patch_group   so    !MM!*uRyy** "-77CM))+++3MBB   

 

 
	
rE   c           
          t          |t                    r|j        n|d         }t          |                     ddt          |           t          |t                    r|                                nt          |                              S )NrV   ri   rs   r_   )ra   r&   rV   r#   rS   r   rb   r   )rA   ru   group_ids      rC   update_groupzSCIMClient.update_group   s    )%77H588U4["MM0uX00/9%/G/GnEMMOOOMghmMnMn   
 
 	
rE   c           	      j    t          |                     ddt          |                               S )Nrm   rs   rY   )r$   rS   r   rZ   s     rC   delete_groupzSCIMClient.delete_group   s>    "MM"*uRyy**   
 
 	
rE   )rR   r`   headersrP   rQ   rR   r`   r   c          
          | j          | }t          |          }t          |          dk    r|d| z  }|                     |||t	          | j        | j        |                    S )z4Performs a Slack API request and returns the result.r   ?)r0   r5   additional_headers)rP   urlbodyr   )r4   r   r?   _perform_http_requestr   r0   r5   )rA   rP   rQ   rR   r`   r   r   querys           rC   rS   zSCIMClient.api_call   s     &&&\**u::>>;u;;C))*j $ 4#*  	 * 	
 	
 		
rE   rK   )rP   r   r   r   c                j   |/|                     d          dg|d<   t          j        |          }d|d<   | j        j        t
          j        k    rDd |                                D             }| j                            d| d| d| d	|            t          ||||
                    d
          nd |          }d }d }t                      }	d}
|
dk     rU|
dz  }
d|	_        	 |                     ||          }|S # t          $ r}|j                                        pd
}|                                                    |          }t'          |j                                                  }t)          ||j        ||          }|j        dk    rNd|j        vrd|j        v r|j        d         |j        d<   d|j        vrd|j        v r|j        d         |j        d<   t-          | j        |           t/          j        |          }t3          |j        d |j                                        D             ||
                    d
          nd           }| j        D ]}|                    |	|||          rw| j        j        t
          j        k    rB| j                            dt;          |          j         d|j         d|j          d|            |!                    |	|||            n|	j        du r|cY d }~S Y d }~nd }~wtD          $ r}|}| j        #                    d|            t/          j        |          }| j        D ]}|                    |	|d |          r| j        j        t
          j        k    rB| j                            dt;          |          j         d|j         d|j          d|            |!                    |	|d |           | j                            d|j         d|j                      n|	j        du r|Y d }~nd }~ww xY w|
dk     U||S |)Nschemaszurn:scim:schemas:core:1.0zapplication/json;charset=utf-8zContent-Typec                 N    i | ]"\  }}||                                 d k    rdn|#S )authorizationz
(redacted))lower.0kvs      rC   
<dictcomp>z4SCIMClient._perform_http_request.<locals>.<dictcomp>  s8    "v"v"v^b^_ab1aggii?6R6RllXY"v"v"vrE   zSending a request - z url: z, body: z, headers: utf-8)methodr   datar   r   d   r   Fr   status_coderaw_bodyr   i  zretry-afterzRetry-Afterc                     i | ]	\  }}||g
S  r   r   s      rC   r   z4SCIMClient._perform_http_request.<locals>.<dictcomp>M  s     BBB1QBBBrE   )r   r   r   )staterequestresponseerrorzA retry handler found: z for  z - z.Failed to send a request to Slack API server: z!Going to retry the same request: )$getjsondumpsr6   levelr<   DEBUGitemsdebugr   encoder+   next_attempt_requested_perform_http_request_internalr
   r   get_content_charsetreaddecodedictr   coder   RetryHttpRequestfrom_urllib_http_requestRetryHttpResponser7   	can_retryinfotyper>   r   full_urlprepare_for_next_attempt	Exceptionr   )rA   rP   r   r   r   headers_for_loggingreqresp
last_errorretry_statecounter_for_safetyecharsetresponse_bodyresponse_headersretry_requestretry_responsehandlererrs                      rC   r   z SCIMClient._perform_http_request  sE    xx	""*#>"?Y:d##D"B;--"v"vfmfsfsfufu"v"v"vKyYyycyySWyydwyyzzz )-)9W%%%t	
 
 
 
 ll 3&&!#16K.Q::3DD /  /  / )7799DW%&VVXX__W%=%=#'	(9(9#:#: # !*,	   6S==$DL88]dl=Z=Z6:l=6Q]3$DL88]dl=Z=Z6:l=6Q]3#DK666 !1 I# N N!2 !BB	0A0ABBB:G:S--g666Y]" " "
  $2  G(() -!/	 )     ;,== K,, x$w--:P x xWZWa x xdgdp x xuv x x    88"-$1%3"#	 9    !$ 5>>KKKKKK ?>>>>     
!!"XSV"X"XYYY !1 I# N N#2  G(() -!%!	 )     ;,== K,, z$w--:P z zWZWa z zdgdp z zux z z    88"-$1%)"%	 9    (()hSZ)h)hZ]Zf)h)hiii#& 5>>I ?>>>>5w !3&&p Ks,   'C? ?P%
G5L?P%P%DP  P%r   c                    d }|                                                     d          r| j        t          | j        t                    rNt
          j                            t          | j        | j        d          t          | j
                            }n+t          d| j         d          nt          d|           d }|r|                    || j                  }nt          || j
        | j                  }|j                                        pd	}|                                                    |          }t'          ||j        ||j        
          }t+          | j        |           |S )Nhttp)r   https)contextzInvalid proxy detected: z must be a str valuezInvalid URL detected: )r1   )r   r1   r   r   )r   
startswithr3   ra   strurllibr   build_openerr   r   r2   r   openr1   r   r   r   r   r   r   statusr   r6   )rA   r   r   opener	http_respr   r   r   s           rC   r   z)SCIMClient._perform_http_request_internal  su   +/99;;!!&)) 
	Dz%dj#.. i#^88$dj4:%N%NOO$TX666 FF
 ,,gtz,g,g,ghhh & $$BS$B$BCCC -1	 	MC>>IITXt|LLLI (<<>>I'&^^--44W==!("%	
 
 
 	DK...rE   )0r>   
__module____qualname__BASE_URLr   __annotations__intr   r   r   r<   Loggerr	   r(   rD   r   rU   r   r[   r   r   r%   r   rc   r   rg   r   rk   r    rn   r   rq   r   rt   r&   r!   rw   r"   rz   r#   r}   r$   r   r   rS   r   r   r   r   rE   rC   r/   r/   5   s        /HJJJLLL	*	C=MMM#s(^###N&&&&
 $(# 48+/+/+/7;)* )*)* )* j!	)*
 })* )* "$sCx.1)* $C=)* $C=)* ()* !l!34)* )* )* )*j !%
 
 
 	

 
 
 

 
 
 
([C [$4 [ [ [ [
d38nd&: ; 
@R 
 
 
 
	
S 	
d38nd6J0K 	
Pa 	
 	
 	
 	

d38nd&: ; 
@R 
 
 
 

c 
&8 
 
 
 
$ !%
 
 
 	

 
 
 

 
 
 
(]S ]%6 ] ] ] ]
%S#X(="> 
CV 
 
 
 

c 
%S#X8M2N 
Se 
 
 
 

%S#X(="> 
CV 
 
 
 

s 
': 
 
 
 
 2604,0
 
 
 
 	

 tCH~.
 d38n-
 $sCx.)
 

 
 
 
: )-y y y y 	y
 tCH~&y c3hy 
y y y yv# G       rE   r/   )A__doc__r   r<   r   http.clientr   r2   r   typingr   r   r   r   r	   urllib.errorr
   urllib.parser   urllib.requestr   r   r   r   r   slack_sdk.errorsr   internal_utilsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r\   r%   ru   r&   slack_sdk.http_retryr'   slack_sdk.http_retry.handlerr(   slack_sdk.http_retry.requestr)   r   slack_sdk.http_retry.responser*   r   slack_sdk.http_retry.stater+   proxy_env_variable_loaderr-   r/   r   rE   rC   <module>r      s       $ $ $ $ $ $       3 3 3 3 3 3 3 3 3 3 3 3 3 3 " " " " " "       W W W W W W W W W W W W W W . . . . . .                                                       7 7 7 7 7 7 5 5 5 5 5 5 H H H H H H K K K K K K 1 1 1 1 1 1 A A A A A Ap p p p p p p p p prE   