
    )zd                        d dl mZ d dlZd dlmZ d dlmZ d dl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dZde Z G d de          ZddZddZdS )    )annotationsN)Any)Optional)Catalog)CatalogParser   )__version__)AnacondaCatalogsError)ClientRequiresUpdatezhttps://anaconda.cloud/apiz
2023.02.20zanaconda-catalogs/c                  F     e Zd ZdZdd fd	ZddZddZddZddZ xZ	S )AnacondaCataloganaconda_catalogNnamestrbase_uriOptional[str]kwargsr   c                h    || _         |pt          | _         t                      j        dd|i| d S )Nr    )r   DEFAULT_BASE_URIr   super__init__)selfr   r   r   	__class__s       9lib/python3.11/site-packages/anaconda_catalogs/catalog.pyr   zAnacondaCatalog.__init__   s?    	 4$4--d-f-----    returndict[str, Any]c                   t          | j        d| j                  }t          j        |dt
          t          d          }t          |          pi }|                     |                    di           pi            	 |	                                 n3# t          j
        $ r!}t          t          |                    d}~ww xY w|                                S )z#Load the catalog spec from the API.catalogszapplication/json)AcceptzApi-Versionz
User-Agent)headersdisplay_messageN)
slash_joinr   r   requestsgetAPI_VERSION
USER_AGENTsafe_get_json _handle_response_display_messageraise_for_status	HTTPErrorr
   r   json)r   urlresponsedataes        r   _get_from_serverz AnacondaCatalog._get_from_server   s     
DI>><,*( 
 
 
  -X66<"--dhh7H".M.M.SQSTTT	0%%''''! 	0 	0 	0'A///	0}}s   =B C!B==Cc                N   |                                  }|                    d          }||d         S i }|D ]j}|d         }|d                             d          p|}d                    |                                                                          }dd|id||<   kd	|iS )
zILoad the Intake-parsable spec from the service, handling nested catalogs.r    Nspecidr   _r   )driverargssources)r2   r&   joinlowersplit)r   response_datar    r9   catalogcidr   normalized_names           r   _get_catalog_specz!AnacondaCatalog._get_catalog_spec4   s    --// $$Z00 ((  	 	G$-C6?&&v..5#D!hhtzz||'9'9';';<<O,( (GO$$ 7##r   Nonec                f   |                                  }d| j        i}t          ||          }i | _        |j        pi }|d         D ]}| |_        || j        |j        <   | j                            |                    d          pi            | j	        p|                    dd          | _	        dS )zCPopulate the catalog by loading the spec from the catalogs service.root)contextdata_sourcesmetadatadescription N)
rA   r   r   _entriesr0   _catalogrG   updater&   rH   )r   r4   rE   resultcfgentrys         r   _loadzAnacondaCatalog._loadH   s    %%'' 49%tW555$k/R( 	. 	.E!EN(-DM%*%%SWWZ006B777 $ 0 NCGGM24N4Nr   r#   c                0   |                     d          x}rt          |t          j                   |                     dd           }|                     dd          }|dk    rt	          |p
dt
           d          |d	k    rt          |pd
          d S )Nmessage_of_the_day)file
error_codeerror_messagerI   client_requires_updatezanaconda-catalogs z5 is out-of-date. Please upgrade to the latest versionunknown_errorzAn unknown error has occurred)r&   printsysstderrr   r	   r
   )r   r#   messagerT   rU   s        r   r*   z0AnacondaCatalog._handle_response_display_messageZ   s    %))*>???7 	,'
++++$((t<<
'++OR@@111& kjjjj   ?**'@!@   +*r   N)r   r   r   r   r   r   )r   r   )r   rB   )r#   r   r   rB   )
__name__
__module____qualname__r   r   r2   rA   rP   r*   __classcell__)r   s   @r   r   r      s        D. . . . . . .
   0$ $ $ $(O O O O$       r   r   r8   r   r   c                 @    d                     d | D                       S )N/c              3  @   K   | ]}|                     d           V  dS )rb   N)strip).0args     r   	<genexpr>zslash_join.<locals>.<genexpr>m   s,      33sCIIcNN333333r   )r:   )r8   s    r   r$   r$   l   s#    8833d333333r   r/   requests.ResponseOptional[dict[str, Any]]c                b    	 |                                  S # t          j        j        $ r Y d S w xY wr\   )r-   r%   
exceptionsJSONDecodeError)r/   s    r   r)   r)   p   s=    }}.   tts    ..)r8   r   r   r   )r/   rh   r   ri   )
__future__r   rY   typingr   r   r%   intake.catalogr   intake.catalog.localr   rI   r	   rk   r
   r   r   r'   r(   r   r$   r)   r   r   r   <module>rq      s$   " " " " " " 



              " " " " " " . . . . . .       - - - - - - , , , , , ,/ /+//
S S S S Sg S S Sp4 4 4 4     r   