
    3fi%                     |    d dl Z ddlmZ ddlmZmZmZ  e j                  e      Z	 G d de      Z
 G d de      Zy)	    N   )User)ApiComponentNEXT_LINK_KEYWORD
Paginationc                   d     e Zd ZdZdddZeZddd fd
Zd Zd	 Z	d
 Z
d ZddZd Zd Z xZS )Groupz A Microsoft 365 group z/groups/{group_id}/ownersz/groups/{group_id}/members)get_group_ownersget_group_membersNparentconc                $   |r|rt        d      |r|j                  n|| _        |j                  | j                  i       }|j                  d      | _        |j                  dd      xs |rt        |dd      nd}dj                  |d      }t        | %  |r|j                  n|j                  d      |       |j                  d	      | _        |j                  | j                  d
      d      | _        |j                  | j                  d      d      | _        |j                  | j                  d      d      | _        |j                  | j                  d      d      | _        |j                  | j                  d      d      | _        y)ae   A Microsoft 365 group

        :param parent: parent object
        :type parent: Teams
        :param Connection con: connection to use if no parent specified
        :param Protocol protocol: protocol to use if no parent specified
         (kwargs)
        :param str main_resource: use this resource instead of parent resource
         (kwargs)
        *Need a parent or a connection but not bothidmain_resourceNz{}{} protocolr   r   @odata.typedisplayNamedescriptionmailmailNickname
visibility)
ValueErrorr   get_cloud_data_key	object_idpopgetattrformatsuper__init__r   type_ccdisplay_namer   r   mail_nicknamer   )selfr   r   kwargs
cloud_datar   	__class__s         I/var/www/auto_recruiter/arenv/lib/python3.12/site-packages/O365/groups.pyr$   zGroup.__init__   sO    cIJJ!'6::SZZ 4 4b9
 $- 

?D9 H6<GFOT2$ 	 mR8(.V__FJJz4J' 	 	)
 NN=1	&NN488M+BBG%>>$((=*A2FNN488F#3R8	'^^DHH^,DbI$..,)?D    c                 "    | j                         S N__repr__r)   s    r-   __str__zGroup.__str__>       }}r.   c                 8    dj                  | j                        S )Nz	Group: {})r"   r'   r3   s    r-   r2   zGroup.__repr__A   s    !!$"3"344r.   c                 4    | j                   |j                   k(  S r0   )r   )r)   others     r-   __eq__zGroup.__eq__D   s    ~~00r.   c                 6    | j                   j                         S r0   )r   __hash__r3   s    r-   r;   zGroup.__hash__G   s    ~~&&((r.   c           	         |r| j                         }|D ]]  }|d   dk(  st        | j                  | j                        j	                  |d         j                         }|j                  |       _ |D cg c]"  } | j                  dd| i| j                  |i$ c}S | j                         D cg c]"  } | j                  dd| i| j                  |i$ c}S c c}w c c}w )z Returns members of given group
        :param bool recursive: drill down to users if group has other group as a member
        :rtype: list[User]
        r   z#microsoft.graph.group)r   r   r   r    )_get_group_members_rawGroupsr   r   get_group_by_idextendmember_constructorr   )r)   	recursiverecursive_datamemberrecursive_memberslsts         r-   r   zGroup.get_group_membersJ   s   
 !88:N( =-(,DD(.488dmm(T(d(deklpeq(r  )J  )J  )L%"))*;<= drr\_+D++W4WD<P<PRU;VWrrcgc~c~  dA  B\_+D++W4WD<P<PRU;VW  B  B s Bs   9'C5'C$c                    | j                  | j                  j                  d      j                  | j                              }| j
                  j                  |      }|sg S |j                         }|j                  dg       S )Nr   group_idvalue)	build_url
_endpointsr   r"   r   r   json)r)   urlresponsedatas       r-   r>   zGroup._get_group_members_rawY   sk    nnT__001DELLVZVdVdLef88<<$I}}xx$$r.   c           	      n   | j                  | j                  j                  d      j                  | j                              }| j
                  j                  |      }|sg S |j                         }|j                  dg       D cg c]"  } | j                  dd| i| j                  |i$ c}S c c}w )zC Returns owners of given group

        :rtype: list[User]
        r
   rI   rK   r   r=   )	rL   rM   r   r"   r   r   rN   rB   r   )r)   rO   rP   rQ   rG   s        r-   r
   zGroup.get_group_ownersc   s    
 nnT__001CDKKUYUcUcKde88<<$I}}_c_g_ghoqs_tuX['''StS8L8Lc7RSuuus   'B2)F)__name__
__module____qualname____doc__rM   r   rB   r$   r4   r2   r9   r;   r   r>   r
   __classcell__r,   s   @r-   r	   r	   	   sN    ! !<!=J
 !%4 )EV51)B%vr.   r	   c                   f     e Zd ZdZdddddZeZddd fd	
Zd
 Zd Z	ddZ
ddZddZd Z xZS )r?   z A microsoft groups class
        In order to use the API following permissions are required.
        Delegated (work or school account) - Group.Read.All, Group.ReadWrite.All
    z/users/{user_id}/memberOfz/groups/{group_id}z0/groups/?$search="mail:{group_mail}"&$count=truez/groups)get_user_groupsr@   get_group_by_maillist_groupsNr   c                    |r|rt        d      |r|j                  n|| _        |j                  dd      }t        |   |r|j
                  n|j                  d      |       y)a`   A Teams object

        :param parent: parent object
        :type parent: Account
        :param Connection con: connection to use if no parent specified
        :param Protocol protocol: protocol to use if no parent specified
         (kwargs)
        :param str main_resource: use this resource instead of parent resource
         (kwargs)
        r   r   r   r   r   N)r   r   r    r#   r$   r   r   )r)   r   r   r*   r   r,   s        r-   r$   zGroups.__init__   sc     cIJJ!'6::S 

?#%'(.V__FJJz4J' 	 	)r.   c                 "    | j                         S r0   r1   r3   s    r-   r4   zGroups.__str__   r5   r.   c                      y)Nz!Microsoft O365 Group parent classr=   r3   s    r-   r2   zGroups.__repr__   s    2r.   c                 ,   |st        d      | j                  | j                  j                  d      j	                  |            }| j
                  j                  |      }|sy|j                         } | j                  dd| i| j                  |iS )zy Returns Microsoft 365/AD group with given id

        :param group_id: group id of group

        :rtype: Group
        zProvide the group_idr@   rI   Nr   r=   	RuntimeErrorrL   rM   r   r"   r   rN   group_constructorr   )r)   rJ   rO   rP   rQ   s        r-   r@   zGroups.get_group_by_id   s     566 nnOO 129989L
 88<<$}}%t%%RTRd6J6JD5QRRr.   c                    |st        d      | j                  | j                  j                  d      j	                  |            }| j
                  j                  |ddi      }|sy|j                         }d|v r|d   d	k  rt        d
       | j                  dd| i| j                  |j                  d      d   iS )zvReturns Microsoft 365/AD group by mail field

        :param group_name: mail of group

        :rtype: Group
        zProvide the group mailr[   )
group_mailConsistencyLeveleventual)headersNz@odata.countr   z%Not found group with provided filtersr   rK   r   r=   ra   )r)   re   rO   rP   rQ   s        r-   r[   zGroups.get_group_by_mail   s     788 nnOO 34;;z;R
 88<<.@*-M<N}}T!d>&:Q&>FGG &t%% PT P#'#7#7'9J19M"NP 	Pr.   c           	      `   |st        d      | j                  | j                  j                  d      j	                  |            }i }||| j
                  j                  kD  r| j
                  j                  }|r|n||d<   | j                  j                  ||xs d      }|sy|j                         }|j                  dg       D cg c]"  } | j                  d
d| i| j                  |i$ }	}|j                  t        d      }
|r|
rt        | |	| j                  |
|	      S |	S c c}w )aM  Returns list of groups that given user has membership

        :param user_id: user_id
        :param int limit: max no. of groups to get. Over 999 uses batch.
        :param int batch: batch size, retrieves items in
          batches allowing to retrieve more items than the limit.
        :rtype: list[Group] or Pagination
        zProvide the user_idrZ   )user_idNz$top)paramsrK   r   )r   rQ   constructor	next_linklimitr=   )rb   rL   rM   r   r"   r   max_top_valuer   rN   rc   r   r   r   )r)   rj   rn   batchrO   rk   rP   rQ   groupgroupsrm   s              r-   rZ   zGroups.get_user_groups   s8    455 nnOO 1299'9J
 =EDMM$?$??MM//E"'Uv88<<FNd<;}} '2.
 #D""P$P43G3G2OP
 
 HH.5	Y 22#  
s   'D+c           	      8   | j                  | j                  j                  d            }| j                  j                  |      }|sy|j	                         }|j                  dg       D cg c]"  } | j
                  dd| i| j                  |i$ c}S c c}w )z<Returns list of groups

        :rtype: list[Group]
        r\   NrK   r   r=   )rL   rM   r   r   rN   rc   r   )r)   rO   rP   rQ   rq   s        r-   r\   zGroups.list_groups  s     nnOO.0 88<<$}} '2.0 #D""P$P43G3G2OP0 	0 0s   -'Br0   )NNN)rS   rT   rU   rV   rM   r	   rc   r$   r4   r2   r@   r[   rZ   r\   rW   rX   s   @r-   r?   r?   s   sP     7/O 	J !%4 ),3S2P:+Z0r.   r?   )logging	directoryr   utilsr   r   r   	getLoggerrS   logr	   r?   r=   r.   r-   <module>ry      sB      > >g!gvL gvT`0\ `0r.   