o
    wi1                     @  s  d Z ddlmZ ddlmZ ddlmZ ddlmZ ddl	m
Z
 ddlmZmZ ddlmZ dd	lmZmZmZ dd
lmZ ddlmZ ddlmZ G dd deeZG dd deeZG dd deddZG dd deddZeeeeeef Z 	 d!ddZ!eG dd dZ"d S )"z0Types and helpers for managing registry members.    )annotations)defaultdict)Iterable)Enum)singledispatchmethod)LiteralUnion)	dataclass)b64decode_asciib64encode_asciinameof)ArtifactsBase   )Team)Userc                   @  s   e Zd ZdZdZdZeZdS )
MemberKindz4Identifies what kind of object a registry member is.r   EntityN)__name__
__module____qualname____doc__USERENTITYTEAM r   r   Y/home/ubuntu/.local/lib/python3.10/site-packages/wandb/apis/public/registries/_members.pyr      s
    r   c                   @  s    e Zd ZdZdZdZdZdZdS )
MemberRolez Identifies the role of a member.adminmemberviewerrestricted_viewerN)r   r   r   r   ADMINMEMBERVIEWERRESTRICTED_VIEWERr   r   r   r   r      s    r   c                   @  ,   e Zd ZU ejZded< ded< ded< dS )
UserMemberzLiteral[MemberKind.USER]kindr   userUnion[MemberRole, str]roleN)r   r   r   r   r   r'   __annotations__r   r   r   r   r&   &      
 r&   T)arbitrary_types_allowedc                   @  r%   )
TeamMemberzLiteral[MemberKind.ENTITY]r'   r   teamr)   r*   N)r   r   r   r   r   r'   r+   r   r   r   r   r.   -   r,   r.   membersIterable[MemberOrId]returntuple[list[str], list[str]]c                 C  sR   t t}ttj| D ]}||j |  q
|tj	 }|tj
 }t|t|fS )zGReturns a tuple of (user_ids, team_ids) from parsing the given objects.)r   setmapMemberIdfrom_objr'   addencoder   r   r   sorted)r0   ids_by_kindparseduser_idsteam_idsr   r   r   parse_member_ids8   s   

r?   c                   @  s   e Zd ZU ded< ded< dddZeedddZee	ee
edddZeeedddZeeedddZeeed ddZdS )!r6   r   r'   intindexr2   strc                 C  s   t | jj d| j S )z7Converts this parsed ID to a base64-encoded GraphQL ID.:)r   r'   valuerA   )selfr   r   r   r9   K   s   zMemberId.encodeobj
MemberOrIdc             	   C  s*   t dttdttdtt|)z-Parses `User` or `Team` ID from the argument.zMember arg must be a z, z, or a user/team ID. Got: )	TypeErrorr   r   r   typeclsrF   r   r   r   r7   O   s
   
zMemberId.from_objUser | Teamc                C  s   |  |jS N)_from_ididrJ   r   r   r   _from_obj_with_idY   s   zMemberId._from_obj_with_idr   r&   c                C     |  |jjS rM   )rN   r(   rO   rK   r   r   r   r   _from_user_member`      zMemberId._from_user_memberr.   c                C  rQ   rM   )rN   r/   rO   rR   r   r   r   _from_team_membere   rT   zMemberId._from_team_memberid_c                C  s"   t |jddd\}}| ||dS )NrC      )maxsplit)r'   rA   )r
   split)rK   rV   r'   rA   r   r   r   rN   j   s   zMemberId._from_idN)r2   rB   )rF   rG   r2   r6   )rF   rL   r2   r6   )r   r&   r2   r6   )r   r.   r2   r6   )rV   rB   r2   r6   )r   r   r   r+   r9   r   classmethodr7   registerr   r   rP   r&   rS   r.   rU   rB   rN   r   r   r   r   r6   F   s(   
 
r6   N)r0   r1   r2   r3   )#r   
__future__r   collectionsr   collections.abcr   enumr   	functoolsr   typingr   r   pydantic.dataclassesr	   pydantic_dataclasswandb._strutilsr
   r   r   wandb.sdk.artifacts._modelsr   teamsr   usersr   rB   r   r   r&   r.   rG   r?   r6   r   r   r   r   <module>   s*    		
