o
    -wi                     @   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 ddlmZ dd	lmZ dd
lmZ dZG dd ded ZG dd de
ZdS )zPublic API: projects.    )suppress)	HTTPError)gql)public)Attrs)normalize_exceptions)	Paginator)RetryingClient)ipythonzdfragment ProjectFragment on Project {
    id
    name
    entityName
    createdAt
    isBenchmark
}c                	       sz   e Zd ZdZedeZ	ddede	de
dd f fdd	ZedddZedd Zedd Zdd Zdd Z  ZS )Projectsz,An iterable collection of `Project` objects.a  
        query Projects($entity: String, $cursor: String, $perPage: Int = 50) {{
            models(entityName: $entity, after: $cursor, first: $perPage) {{
                edges {{
                    node {{
                        ...ProjectFragment
                    }}
                    cursor
                }}
                pageInfo {{
                    endCursor
                    hasNextPage
                }}
            }}
        }}
        {}
        2   cliententityper_pagereturnc                    s*   || _ || _d| ji}t ||| dS )a   An iterable collection of `Project` objects.

        Args:
            client: The API client used to query W&B.
            entity: The entity which owns the projects.
            per_page: The number of projects to fetch per request to the API.
        r   N)r   r   super__init__)selfr   r   r   	variables	__class__ W/home/ubuntu/sommelier/.venv/lib/python3.10/site-packages/wandb/apis/public/projects.pyr   /   s
   zProjects.__init__Nc                 C   s   d S Nr   r   r   r   r   lengthC   s   zProjects.lengthc                 C   s   | j r| j d d d S dS )NmodelspageInfohasNextPageTlast_responser   r   r   r   moreH   s   zProjects.morec                 C   s    | j r| j d d d d S d S )Nr   edgescursorr   r   r   r   r   r$   O   s   zProjects.cursorc                    s    fdd j d d D S )Nc                    s*   g | ]}t  j j|d  d |d  qS nodename)Projectr   r   ).0pr   r   r   
<listcomp>W   s    z,Projects.convert_objects.<locals>.<listcomp>r   r"   r   r   r   r   r   convert_objectsV   s   
zProjects.convert_objectsc                 C   s   d| j  dS )Nz
<Projects >)r   r   r   r   r   __repr__\   s   zProjects.__repr__r   )r   N)__name__
__module____qualname____doc__r   formatPROJECT_FRAGMENTQUERYr	   strintr   propertyr   r!   r$   r,   r.   __classcell__r   r   r   r   r      s0    

r   r(   c                
       s   e Zd ZdZedZdededededd f
 fdd	Z	e
d
d Ze
dd ZdddZdefddZdd ZedddZedd ZedZe
defddZ  ZS ) r(   z"A project is a namespace for runs.z
        query Project($project: String!, $entity: String!) {
            project(name: $project, entityName: $entity) {
                id
            }
        }
        r   r   projectattrsr   c                    s&   t  t| || _|| _|| _dS )a  A single project associated with an entity.

        Args:
            client: The API client used to query W&B.
            entity: The entity which owns the project.
            project: The name of the project to query.
            attrs: The attributes of the project.
        N)r   r   dictr   r'   r   )r   r   r   r;   r<   r   r   r   r   m   s   
zProject.__init__c                 C   s   | j | jgS r   )r   r'   r   r   r   r   path   s   zProject.pathc                 C   s   | j jd| jdg  S )N/	workspace)r   app_urljoinr>   r   r   r   r   url   s   zProject.url  Fc                 C   sF   | j d }d| d}d}|r|d7 }td}|d|d|d	 S )
z;Generate HTML containing an iframe displaying this project.z?jupyter=truezborder:none;width:100%;height:zpx; zdisplay:none;r;   z<iframe src=z style=z
></iframe>)rC   r
   toggle_button)r   heighthiddenrC   styleprefixr   r   r   to_html   s   

zProject.to_htmlc                 C   s   |   S r   )rK   r   r   r   r   _repr_html_   s   zProject._repr_html_c                 C   s   d d| jS )Nz<Project {}>r?   )r4   rB   r>   r   r   r   r   r.      s   zProject.__repr__r   c                 C   s   t | j| j| jS r   )r   ArtifactTypesr   r   r'   )r   r   r   r   r   artifacts_types   s   zProject.artifacts_typesc                    sh   t dtj} j jd} j||}|dr#|d d dk r%g S  fdd|d d d	 D S )
Naw  
            query GetSweeps($project: String!, $entity: String!) {{
                project(name: $project, entityName: $entity) {{
                    totalSweeps
                    sweeps {{
                        edges {{
                            node {{
                                ...SweepFragment
                            }}
                            cursor
                        }}
                        pageInfo {{
                            endCursor
                            hasNextPage
                        }}
                    }}
                }}
            }}
            {}
            )r;   r   r;   totalSweeps   c              	      s*   g | ]}t  j j j|d  d qS r%   )r   Sweepr   r   r'   )r)   er   r   r   r+      s    
z"Project.sweeps.<locals>.<listcomp>sweepsr"   )	r   r4   r   SWEEP_FRAGMENTr'   r   r   executeget)r   queryvariable_valuesretr   r   r   rS      s   
zProject.sweepsz
        query ProjectID($projectName: String!, $entityName: String!) {
            project(name: $projectName, entityName: $entityName) {
                id
            }
        }
        c              
   C   s   t t | jd W  d    S 1 sw   Y  | j| jd}z,| j| j|}|dr5|d ds>t	d| j d|d d | jd< | jd W S  t
ttfyc } zt	d||d }~ww )Nid)projectName
entityNamer;   zProject z
 not foundzUnable to fetch project ID: )r   LookupError_attrsr'   r   r   rU   _PROJECT_IDrV   
ValueErrorr   	TypeError)r   rX   datarR   r   r   r   rZ      s   
 z
Project.id)rD   Fr/   )r0   r1   r2   r3   r   r6   r	   r7   r=   r   r9   r>   rC   rK   rL   r.   r   rN   rS   r_   rZ   r:   r   r   r   r   r(   `   s@    





'
N)r3   
contextlibr   requestsr   	wandb_gqlr   
wandb.apisr   wandb.apis.attrsr   wandb.apis.normalizer   wandb.apis.paginatorr   wandb.apis.public.apir	   wandb.sdk.libr
   r5   r   r(   r   r   r   r   <module>   s    	H