o
    tf                     @  s   d dl mZ d dlZd dlZd dl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mZmZ d dlmZmZmZ G d	d
 d
eZdS )    )annotationsN)	Starlette)CORSMiddleware)BackgroundServer)TilesetProtocol)Resourcecreate_resourcecreate_resource_route)TilesetResourceTilesetTypecreate_tileset_routec                      sn   e Zd ZU dZded< ded< dd fd	d
Zed ddZej	d!ddZ
ej	d"ddZ
d#ddZ
  ZS )$Providerz-A server that provides resources to a client.z$typing.MutableMapping[str, Resource]
_resourcesz<typing.MutableMapping[str, TilesetResource[TilesetProtocol]]	_tilesetsFproxyboolc                   s^   t  | _t  | _tt| jt| jgd}|jtdgddgdgd || _	t
 | dS )zCreate a new Provider.

        Parameters
        ----------
        proxy : bool, optional
            Whether the url should be proxied for `jupyter-server-proxy` (default: False).
        )Zroutes*T)Zallow_originsZallow_credentialsZallow_methodsZallow_headersN)weakrefWeakValueDictionaryr   r   r   r   r	   Zadd_middlewarer   r   super__init__)selfr   Zapp	__class__ X/var/www/html/software/conda/envs/catlas/lib/python3.10/site-packages/servir/_provide.pyr      s    

zProvider.__init__returnstrc                 C  sJ   | j r	d| j S dtjv rtjd }| d| j S d| j d| j S )a@  The URL for this provider.

        If proxy is True, the URL will be proxied for `jupyter-server-proxy`.

        If the environment variable `JUPYTERHUB_SERVICE_PREFIX` is set, the URL will be
        prefixed for JupyterHub.

        Returns
        -------
        str
            The URL for this provider.
        z/proxy/ZJUPYTERHUB_SERVICE_PREFIXzhttp://:)r   portosenvironhost)r   Z	urlprefixr   r   r   url8   s   

zProvider.urlpathpathlib.Path | strkwargs
typing.Anyr   c                K     d S Nr   )r   r$   r&   r   r   r   createP   s   zProvider.createtilesetr   TilesetResource[TilesetType]c                K  r(   r)   r   )r   r+   r&   r   r   r   r*   S   s   x pathlib.Path | str | TilesetType'Resource | TilesetResource[TilesetType]c                K  s   t |tjtfs&t|fd| i|}|j| jv r| j|j }n#|| j|j< nt|fd| i|}|j| j	v r<| j	|j }|| j	|j< | 
  ttt |S )a  Create a resource from a path or tileset.

        Parameters
        ----------
        x : pathlib.Path | str | TilesetProtocol
            The path or tileset to create a resource from.
        **kwargs
            Additional keyword arguments to pass to the resource constructor.

        Returns
        -------
        Resource | TilesetResource
            The resource.
        provider)
isinstancepathlibPathr   r
   uidr   r   Zguidr   starttypingcastr   )r   r-   r&   resourcer   r   r   r*   X   s   )F)r   r   )r   r   )r$   r%   r&   r'   r   r   )r+   r   r&   r'   r   r,   )r-   r.   r&   r'   r   r/   )__name__
__module____qualname____doc____annotations__r   propertyr#   r6   overloadr*   __classcell__r   r   r   r   r      s   
 r   )
__future__r   r    r2   r6   r   Zstarlette.applicationsr   Zstarlette.middleware.corsr   Zservir._background_serverr   Zservir._protocolsr   Zservir._resourcesr   r   r	   Zservir._tilesetsr
   r   r   r   r   r   r   r   <module>   s    