o
    -wiA;                     @   s   d Z ddlZddlmZmZmZmZ erddlmZ ddlm	Z	 ddl
Z
ddlmZ ddlmZmZ dd	lmZ G d
d deZG dd deZG dd deZdS )zPublic API: registries search.    N)TYPE_CHECKINGAnyDictOptional)Client)gql)	Paginator)_gql_artifact_fragment_gql_registry_fragment   )ensure_registry_prefix_on_namesc                
       s   e Zd ZdZede  Z		ddddedee	ee
f  d	ee f fd
dZdd Zdd Zd dee	ee
f  ddfddZd dee	ee
f  ddfddZedd Zedd Zedd Zdd Z  ZS )!
Registriesz!Iterator that returns Registries.a  
        query Registries($organization: String!, $filters: JSONString, $cursor: String, $perPage: Int) {
            organization(name: $organization) {
                orgEntity {
                    name
                    projects(filters: $filters, after: $cursor, first: $perPage) {
                        pageInfo {
                            endCursor
                            hasNextPage
                        }
                        edges {
                            node {
                                ...RegistryFragment
                            }
                        }
                    }
                }
            }
        }
        Nd   clientr   organizationfilterper_pagec                    s@   || _ || _t|p
i | _|t| jd}t ||| d S )N)r   filters)r   r   r   r   jsondumpssuper__init__)selfr   r   r   r   	variables	__class__ k/home/ubuntu/sommelier/.venv/lib/python3.10/site-packages/wandb/apis/public/registries/registries_search.pyr   0   s   
zRegistries.__init__c                 C   s
   t | jS N)boolobjectsr   r   r   r   __bool__A   s   
zRegistries.__bool__c                 C   F   |  j d7  _ t| j| j kr|  stt| j| j ks| j| j  S Nr   indexlenr    
_load_pageStopIterationr!   r   r   r   __next__D      zRegistries.__next__returnCollectionsc                 C   s   t | j| j| j|dS )N)registry_filtercollection_filter)r-   r   r   r   r   r   r   r   r   collectionsL   s   zRegistries.collectionsVersionsc                 C   s   t | j| j| jd |dS N)r.   r/   artifact_filter)r2   r   r   r   r0   r   r   r   versionsT   s   zRegistries.versionsc                 C   $   | j rt| j d d d d S d S )Nr   	orgEntityprojectsedgeslast_responser'   r!   r   r   r   length]   s
   zRegistries.lengthc                 C   $   | j r| j d d d d d S dS )Nr   r7   r8   pageInfohasNextPageTr;   r!   r   r   r   moref      zRegistries.morec                 C   $   | j r| j d d d d d S d S )Nr   r7   r8   r>   	endCursorr@   r!   r   r   r   cursoro   rB   zRegistries.cursorc                    sf   j sg S j d rj d d stdj dddlm   fddj d d d	 d
 D S )Nr   r7   Organization ';' not found. Please verify the organization name is correctr   )Registryc              	      s:   g | ]} j jjd  d d |d d |d qS )r   r7   namenode)r   r   r;   .0rrH   r   r   r   
<listcomp>   s    
z.Registries.convert_objects.<locals>.<listcomp>r8   r9   )r;   
ValueErrorr   %wandb.apis.public.registries.registryrH   r!   r   rN   r   convert_objectsx   s   zRegistries.convert_objects)Nr   r   )__name__
__module____qualname____doc__r   r
   QUERYstrr   r   r   intr   r"   r*   r1   r5   propertyr<   rA   rE   rR   __classcell__r   r   r   r   r      s:      	


r   c                       s   e Zd ZdZedZ			ddddedeeee	f  d	eeee	f  d
ee
 f
 fddZdd Zdd Zddeeee	f  ddfddZedd Zedd Zedd Zdd Z  ZS ) r-   z;Iterator that returns Artifact collections in the Registry.a  
        query Collections(
            $organization: String!,
            $registryFilter: JSONString,
            $collectionFilter: JSONString,
            $collectionTypes: [ArtifactCollectionType!],
            $cursor: String,
            $perPage: Int
        ) {
            organization(name: $organization) {
                orgEntity {
                    name
                    artifactCollections(
                        projectFilters: $registryFilter,
                        filters: $collectionFilter,
                        collectionTypes: $collectionTypes,
                        after: $cursor,
                        first: $perPage
                    ) {
                        totalCount
                        pageInfo {
                            endCursor
                            hasNextPage
                        }
                        edges {
                            cursor
                            node {
                                id
                                name
                                description
                                createdAt
                                tags {
                                    edges {
                                        node {
                                            name
                                        }
                                    }
                                }
                                project {
                                    name
                                    entity {
                                        name
                                    }
                                }
                                defaultArtifactType {
                                    name
                                }
                                aliases {
                                    edges {
                                        node {
                                            alias
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
        Nr   r   r   r   r.   r/   r   c                    sh   || _ || _|| _|pi | _| jrt| jnd | jr!t| jnd | jdg|d}t ||| d S )N	PORTFOLIO)registryFiltercollectionFilterr   collectionTypesperPage)r   r   r.   r/   r   r   r   r   )r   r   r   r.   r/   r   r   r   r   r   r      s   
zCollections.__init__c                 C      t | dkpt | jdkS Nr   r'   r    r!   r   r   r   r"         zCollections.__bool__c                 C   r#   r$   r%   r!   r   r   r   r*      r+   zCollections.__next__r   r,   r2   c                 C   s   t | j| j| j| j|dS r3   )r2   r   r   r.   r/   r0   r   r   r   r5      s   zCollections.versionsc                 C   s    | j r| j d d d d S d S )Nr   r7   artifactCollections
totalCountr@   r!   r   r   r   r<     s   zCollections.lengthc                 C   r=   )Nr   r7   re   r>   r?   Tr@   r!   r   r   r   rA        zCollections.morec                 C   rC   )Nr   r7   re   r>   rD   r@   r!   r   r   r   rE     rg   zCollections.cursorc                    sf   ddl m  jsg S jd rjd d s tdj d fddjd d d	 d
 D S )Nr   )ArtifactCollectionr   r7   rF   rG   c                    s\   g | ]*} j |d  d d d |d  d d |d  d |d  d d j|d  ddqS )rJ   projectentityrI   defaultArtifactTypeF)is_sequence)r   r   rK   rh   r   r   r   rO   -  s    
z/Collections.convert_objects.<locals>.<listcomp>re   r9   )wandb.apis.publicrh   r;   rP   r   r!   r   rm   r   rR      s"   zCollections.convert_objects)NNr   r   )rS   rT   rU   rV   r   rW   rX   r   r   r   rY   r   r"   r*   r5   rZ   r<   rA   rE   rR   r[   r   r   r   r   r-      s:    D 	


r-   c                       s   e Zd ZdZ				ddddedeeeef  deeeef  d	eeeef  d
ef fddZ	dd Z
dd Zedd Zedd Zedd Zdd Z  ZS )r2   z8Iterator that returns Artifact versions in the Registry.Nr   r   r   r   r.   r/   r4   r   c                    s   || _ || _|| _|| _|pi | _tdtdd | _| jr$t	| jnd | jr.t	| jnd | jr8t	| jnd | jd}t
 ||| d S )Na[  
            query Versions(
                $organization: String!,
                $registryFilter: JSONString,
                $collectionFilter: JSONString,
                $artifactFilter: JSONString,
                $cursor: String,
                $perPage: Int
            ) {
                organization(name: $organization) {
                    orgEntity {
                        name
                        artifactMemberships(
                            projectFilters: $registryFilter,
                            collectionFilters: $collectionFilter,
                            filters: $artifactFilter,
                            after: $cursor,
                            first: $perPage
                        ) {
                            pageInfo {
                                endCursor
                                hasNextPage
                            }
                            edges {
                                node {
                                    artifactCollection {
                                        project {
                                            name
                                            entity {
                                                name
                                            }
                                        }
                                        name
                                    }
                                    versionIndex
                                    artifact {
                                        ...ArtifactFragment
                                    }
                                    aliases {
                                        alias
                                    }
                                }
                            }
                        }
                    }
                }
            }
            F)include_aliases)r]   r^   artifactFilterr   )r   r   r.   r/   r4   r   r	   rW   r   r   r   r   )r   r   r   r.   r/   r4   r   r   r   r   r   r   A  s    	
06zVersions.__init__c                 C   r#   r$   r%   r!   r   r   r   r*     r+   zVersions.__next__c                 C   ra   rb   rc   r!   r   r   r   r"     rd   zVersions.__bool__c                 C   r6   )Nr   r7   artifactMembershipsr9   r:   r!   r   r   r   r<     s   zVersions.lengthc                 C   r=   )Nr   r7   rq   r>   r?   Tr@   r!   r   r   r   rA     rg   zVersions.morec                 C   rC   )Nr   r7   rq   r>   rD   r@   r!   r   r   r   rE     rg   zVersions.cursorc                    s\    j sg S  j d r j d d std j d fdd j d d d d D }|S )	Nr   r7   rF   rG   c                 3   s    | ]>}t j|d  d d d d |d  d d d |d  d d d t|d  d  |d  d  jdd	 |d  d
 D V  qdS )rJ   artifactCollectionri   rj   rI   z:vversionIndexartifactc                 S   s   g | ]}|d  qS )aliasr   )rL   ru   r   r   r   rO     s    z6Versions.convert_objects.<locals>.<genexpr>.<listcomp>aliasesN)wandbArtifact_from_attrsrX   r   )rL   ar!   r   r   	<genexpr>  s     

z+Versions.convert_objects.<locals>.<genexpr>rq   r9   )r;   rP   r   )r   	artifactsr   r!   r   rR     s"   
zVersions.convert_objects)NNNr   )rS   rT   rU   rV   rX   r   r   r   rY   r   r*   r"   rZ   r<   rA   rE   rR   r[   r   r   r   r   r2   >  s8    Q



r2   )rV   r   typingr   r   r   r   	wandb_gqlr   r   rw   wandb.apis.paginatorr   &wandb.sdk.artifacts._graphql_fragmentsr	   r
   _utilsr   r   r-   r2   r   r   r   r   <module>   s    ~ ,