o
    ÔÙ¾iÖ
  ã                   @   s„   d dl Z d dlZd dlZd dlZd dlmZmZ d dlmZm	Z	m
Z
mZ d dlZG dd„ deƒZG dd„ deƒZG dd	„ d	eƒZdS )
é    N)ÚABCÚabstractmethod)Ú	GeneratorÚListÚOptionalÚTuplec                	   @   s®   e Zd ZdZdefdd„Zdd„ Ze	dded	e	e
eejf d
d
f fdd„ƒZe	
	
ddeee  deee  d	d
fdd„ƒZdd„ Zdd„ Zdd„ Zdd„ Zddd„Zd
S )ÚBaseConnectorzó
    For fs connector such as s3:
    <connector_type>://<path>/<filename>

    For kv connector such as redis:
    <connector_type>://<host>:<port>/<model_name>/keys/<key>
    <connector_type://<host>:<port>/<model_name>/files/<filename>
    Úurlc                 C   sH   || _ d| _t ¡ | _tjtjfD ]}t |¡}t ||  	|¡¡ qd S )NF)
r	   ÚclosedÚtempfileÚmkdtempÚ	local_dirÚsignalÚSIGINTÚSIGTERMÚ	getsignalÚ_close_by_signal)Úselfr	   ÚsigÚexisting_handler© r   úW/home/ubuntu/.local/lib/python3.10/site-packages/sglang/srt/connector/base_connector.pyÚ__init__   s   

þzBaseConnector.__init__c                 C   s   | j S ©N)r   ©r   r   r   r   Úget_local_dir   s   zBaseConnector.get_local_dirr   ÚrankÚreturnNc                 C   ó   t ƒ ‚r   ©ÚNotImplementedError)r   r   r   r   r   Úweight_iterator"   s   zBaseConnector.weight_iteratorÚallow_patternÚignore_patternc                 C   r   r   r   )r   r"   r#   r   r   r   Ú
pull_files(   s   zBaseConnector.pull_filesc                 C   s2   | j rd S d| _ tj | j¡rt | j¡ d S d S )NT)r
   ÚosÚpathÚexistsr   ÚshutilÚrmtreer   r   r   r   Úclose0   s   ÿzBaseConnector.closec                 C   s   | S r   r   r   r   r   r   Ú	__enter__8   s   zBaseConnector.__enter__c                 C   ó   |   ¡  d S r   ©r*   )r   Úexc_typeÚ	exc_valueÚ	tracebackr   r   r   Ú__exit__;   ó   zBaseConnector.__exit__c                 C   r,   r   r-   r   r   r   r   Ú__del__>   r2   zBaseConnector.__del__c                    s   ‡ ‡fdd„}|S )Nc                    s   ˆ  ¡  ˆ rˆ | |ƒ d S d S r   r-   )ÚsignumÚframe©r   r   r   r   Únew_handlerC   s   ÿz3BaseConnector._close_by_signal.<locals>.new_handlerr   )r   r   r7   r   r6   r   r   A   s   zBaseConnector._close_by_signal)r   )NNr   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ústrr   r   r   Úintr   r   ÚtorchÚTensorr!   r   r   r$   r*   r+   r1   r3   r   r   r   r   r   r      s4    	ÿÿþý
þ
ýür   c                   @   s’   e Zd Zededeej fdd„ƒZededee fdd„ƒZ	ededejddfd	d
„ƒZ
edededdfdd„ƒZededee fdd„ƒZdS )ÚBaseKVConnectorÚkeyr   c                 C   r   r   r   ©r   rA   r   r   r   ÚgetM   ó   zBaseKVConnector.getc                 C   r   r   r   rB   r   r   r   ÚgetstrQ   rD   zBaseKVConnector.getstrÚobjNc                 C   r   r   r   ©r   rA   rF   r   r   r   ÚsetU   rD   zBaseKVConnector.setc                 C   r   r   r   rG   r   r   r   ÚsetstrY   rD   zBaseKVConnector.setstrÚprefixc                 C   r   r   r   )r   rJ   r   r   r   Úlist]   rD   zBaseKVConnector.list)r8   r9   r:   r   r<   r   r>   r?   rC   rE   rH   rI   r   rK   r   r   r   r   r@   K   s    r@   c                   @   s*   e Zd ZdZededee fdd„ƒZdS )ÚBaseFileConnectorzç
    List full file names from remote fs path and filter by allow pattern.

    Args:
        allow_pattern: A list of patterns of which files to pull.

    Returns:
        list[str]: List of full paths allowed by the pattern
    r"   r   c                 C   r   r   r   )r   r"   r   r   r   Úglobm   rD   zBaseFileConnector.globN)r8   r9   r:   r;   r   r<   r   rM   r   r   r   r   rL   b   s    
rL   )r%   r(   r   r   Úabcr   r   Útypingr   r   r   r   r>   r   r@   rL   r   r   r   r   Ú<module>   s   >