a
    2b                     @   s^   d dl Z d dlmZ d dlmZ ddlmZ dd Zdd Z	d	d
 Z
dd ZG dd dZdS )    N)filterfalse   )HEREc                  G   s   t t j|  S )z&Join paths to create a real path.
    )ospabspathjoin)args r	   4lib/python3.9/site-packages/jupyterlab/coreconfig.pypjoin   s    r   c                  C   s>   t ttdd} t| W  d   S 1 s00    Y  dS )z'Get the data for the app template.
    Zstagingzpackage.jsonN)openr   r   jsonload)Zfidr	   r	   r
   _get_default_core_data   s    r   c                 C   s
   |  dS )z.Whether a package name is in the lab namespacez@jupyterlab/)
startswith)namer	   r	   r
   _is_lab_package   s    r   c                 C   sH   t | tr tdd |  D S t | ttfr<ttt| S tddS )zFilter a dict/sequence to remove all lab packages

    This is useful to take the default values of e.g. singletons and filter
    away the '@jupyterlab/' namespace packages, but leave any others (e.g.
    lumino and react).
    c                 s   s"   | ]\}}t |s||fV  qd S N)r   ).0kvr	   r	   r
   	<genexpr>&   s   z_only_nonlab.<locals>.<genexpr>z2collection arg should be either dict or list/tupleN)
isinstancedictitemslisttupler   r   	TypeError)Z
collectionr	   r	   r
   _only_nonlab   s    
r   c                   @   sr   e Zd ZdZdd ZdddZdd Zdd
dZedd Z	edd Z
edd Zedd Zejdd ZdS )
CoreConfigzAn object representing a core config.

    This enables custom lab application to override some parts of the core
    configuration of the build system.
    c                 C   s   t  | _d S r   )r   _dataselfr	   r	   r
   __init__5   s    zCoreConfig.__init__Fc                 C   s   | j }|std|std||d v r8td|f ||d |< |rfd|d d |< ||d |< n4|rd|d d	 |< ||d |< n|d d
 | dS )a  Remove an extension/singleton.

        If neither extension or mimeExtension is True (the default)
        the package is added as a singleton dependency.

        name: string
            The npm package name
        semver: string
            The semver range for the package
        extension: bool
            Whether the package is an extension
        mime_extension: bool
            Whether the package is a MIME extension
        zMissing package namezMissing package semverresolutionszPackage already present: %r 
jupyterlabmimeExtensionsdependencies
extensionssingletonPackagesN)r    
ValueErrorappend)r"   r   Zsemver	extensionZmime_extensiondatar	   r	   r
   add8   s    zCoreConfig.addc              	   C   sh   | j }|d |d |d d |d d f}|D ]"}z
||= W q. tyN   Y q.0 q.|d d | dS )z[Remove a package/extension.

        name: string
            The npm package name
        r(   r$   r&   r)   r'   r*   N)r    KeyErrorremove)r"   r   r.   mapsmr	   r	   r
   r1   [   s    


zCoreConfig.removeTc                 C   s   | j }|rtt|d |d< t|d |d< t|d d |d d< t|d d |d d< t|d d |d d< n4i |d< i |d< i |d d< i |d d< g |d d< dS )z'Clear the packages/extensions.
        r(   r$   r&   r)   r'   r*   N)r    r   )r"   Zlab_onlyr.   r	   r	   r
   clear_packagesp   s$    


zCoreConfig.clear_packagesc                    s(   | j  t fdd d d  D S )z2A dict mapping all extension names to their semverc                 3   s   | ]}| d  | fV  qdS r$   Nr	   r   r   r.   r	   r
   r      s   z(CoreConfig.extensions.<locals>.<genexpr>r&   r)   r    r   keysr!   r	   r7   r
   r)      s    zCoreConfig.extensionsc                    s(   | j  t fdd d d  D S )z7A dict mapping all MIME extension names to their semverc                 3   s   | ]}| d  | fV  qdS r5   r	   r6   r7   r	   r
   r      s   z-CoreConfig.mime_extensions.<locals>.<genexpr>r&   r'   r8   r!   r	   r7   r
   mime_extensions   s    zCoreConfig.mime_extensionsc                    s$   | j  t fdd d d D S )z2A dict mapping all singleton names to their semverc                 3   s"   | ]}| d   |dfV  qdS r5   )getr6   r7   r	   r
   r      s   z(CoreConfig.singletons.<locals>.<genexpr>r&   r*   )r    r   r!   r	   r7   r
   
singletons   s    
zCoreConfig.singletonsc                 C   s   | j d d S Nr&   Z	staticDirr    r!   r	   r	   r
   
static_dir   s    zCoreConfig.static_dirc                 C   s   || j d d< d S r=   r>   )r"   r?   r	   r	   r
   r?      s    N)FF)T)__name__
__module____qualname____doc__r#   r/   r1   r4   propertyr)   r:   r<   r?   setterr	   r	   r	   r
   r   /   s   
#




r   )r   Zos.pathpathr   	itertoolsr   Zjlpmappr   r   r   r   r   r   r	   r	   r	   r
   <module>   s   