o
    tf                     @  s   d dl m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 d dlmZmZ g d	ZG d
d dZG dd dZe	dZdddZdS )    )annotationsN)Provider)TilesetResource)	ParamSpec)datatype_default_track)track)LocalTileset	TrackType)HiGlassServerr   _create_tileset_helperc                   @  s:   e Zd ZdddZedd Zedd ZddddZd	S )r   resource_TilesetResourcec                 C  s
   || _ d S N)	_resource)selfr    r   W/var/www/html/software/conda/envs/catlas/lib/python3.10/site-packages/higlass/server.py__init__   s   
zTilesetResource.__init__c                 C     | j jS r   )r   tilesetr   r   r   r   r         zTilesetResource.tilesetc                 C  r   r   )r   serverr   r   r   r   r      r   zTilesetResource.serverNtype_TrackType | Nonec                 K  sp   |d u rt | jdd d u rtdttt| jj }td|| j	| jj
d|}| jjr6|j| jjdd |S )NdatatypezNo default track for tileset)r   r   Z
tilesetUidT)nameZinplacer   )getattrr   
ValueErrortypingcastr	   r   r   r   r   uidr   opts)r   r   kwargstr   r   r   r   !   s    zTilesetResource.track)r   r   r   )r   r   )__name__
__module____qualname__r   propertyr   r   r   r   r   r   r   r      s    


r   c                   @  sP   e Zd Zdd Zedd ZdddZd	d
 Zdd Z	ddddZ	dd Z
dS )r
   c                 C  s   d | _ i | _d S r   )	_provider	_tilesetsr   r   r   r   r   6   s   
zHiGlassServer.__init__c                 C  s   | j std| j jS )NServer not started.)r)   RuntimeErrorportr   r   r   r   r-   <   s   zHiGlassServer.portreturnNonec                 C  s   | j d ur
| j   i | _d S r   )r)   stopZ
_resourcesr   r   r   r   resetB   s   


zHiGlassServer.resetc              
   C  sN   zdd l }W n ty } ztd|d }~ww | js!t  | _d| j_d S )Nr   z9Install "jupyter-server-proxy" to enable server proxying.T)jupyter_server_proxyImportErrorr)   r   startproxy)r   r2   er   r   r   enable_proxyG   s   zHiGlassServer.enable_proxyc                 C  s   | j stdd| j _d S )Nr+   F)r)   r,   r5   r   r   r   r   disable_proxyR   s   zHiGlassServer.disable_proxyNr   r   r-   
int | Noner   c                 C  st   | j du rt j|d| _ |dur || j jkr | j  j|d |j| jvr4| j |}t|| j|j< | j|j S )a8  Add a tileset to the server.

        Note: Only tilesets with new uids are added to the server. If the tileset
              uid matches one already on the server, the existing tileset resource
              is returned. Existing tilesets can only be cleared with
              `HiGlassServer.reset()`.
        N)r-   )	r)   r   r4   r-   r0   r!   r*   creater   )r   r   r-   Zserver_resourcer   r   r   addW   s   
zHiGlassServer.addc                 c  s>    d| j fV  z| j}W n ty   d }Y nw d|fV  d S )NZtilesetsr-   )r*   r-   r,   )r   r-   r   r   r   __rich_repr__o   s   
zHiGlassServer.__rich_repr__)r.   r/   r   )r   r   r-   r9   r.   r   )r%   r&   r'   r   r(   r-   r1   r7   r8   r;   r<   r   r   r   r   r
   5   s    

r
   _Pr   
tileset_fn!typing.Callable[_P, LocalTileset]r.   $typing.Callable[_P, TilesetResource]c                   s   t d	 fdd}|S )
zGCreate a top-level helper function that adds the tileset to the server.args
typing.Anyr#   r.   r   c                    s"   t t j| i |} |S r   )r   r    Anyr;   )rA   r#   r   r   r>   r   r   wrapper   s   
z'_create_tileset_helper.<locals>.wrapperN)rA   rB   r#   rB   r.   r   )	functoolswraps)r   r>   rE   r   rD   r   r   {   s   r   )r   r
   r>   r?   r.   r@   )
__future__r   rF   r   Zservirr   r   r   Ztyping_extensionsr   Zhiglass._utilsr   Zhiglass.apir   Zhiglass.tilesetsr   r	   __all__r
   r=   r   r   r   r   r   <module>   s     C