o
    i                     @   s  d dl 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 d dlmZ dd	lmZ ed
ZedZdefddZdeej defddZdeej deeef fddZdefddZ			d'dddedeej dB dedB dedB de dB deeej ee e dB gdf dB fddZ!dedefdd Z"d!eeB de fd"d#Z#d$ede
fd%d&Z$dS )(    N)Callable)BytesIO)URL)argsprocessing_interrupted)IO   )ProcessingInterruptedz%[0-9A-Fa-f]{2}z%(?![0-9A-Fa-f]{2})returnc                   C   s   t  S )z3Return True if user/runtime requested interruption.r    r   r   ;/mnt/c/Users/fbmor/ComfyUI/comfy_api_nodes/util/_helpers.pyis_processing_interrupted   s   r   node_clsc                 C   s   | j jS N)hidden	unique_idr   r   r   r   get_node_id   s   r   c                 C   s2   | j jrdd| j j iS | j jrd| j jiS i S )NAuthorizationzBearer z	X-API-KEY)r   auth_token_comfy_orgapi_key_comfy_orgr   r   r   r   get_auth_header   s
   r   c                   C   s   t tddS )Ncomfy_api_basezhttps://api.comfy.org)getattrr   r   r   r   r   default_base_url&   s   r   )display_callbacksecondslabelstart_tsestimated_totalr   c                   s   t  |  }	 t rtdt  }|dur;|r;|r;tt |||t|| | W d   n1 s6w   Y  ||krAdS t	t
d|| I dH  q)z
    Sleep in 1s slices while:
      - Checking for interruption (raises ProcessingInterrupted).
      - Optionally emitting time progress via display_callback (if provided).
    TzTask cancelledNg      ?)time	monotonicr   r
   
contextlibsuppress	Exceptionintasynciosleepmin)r   r   r   r   r    r   endnowr   r   r   sleep_with_interrupt*   s   r,   	mime_typec                 C   s   |  dd  S )z)Converts a MIME type to a file extension./)splitlower)r-   r   r   r   mimetype_to_extensionE   s   r2   path_or_objectc                 C   s"   t | trtj| S t|  S r   )
isinstancestrospathgetsizelengetvalue)r3   r   r   r   get_fs_object_sizeJ   s   
r;   urlc                 C   sT   t dd | D st dd | D rt| S t| r&t| s&t| ddS t| S )aR  If `url` appears to be already percent-encoded (contains at least one valid %HH
    escape and no malformed '%' sequences) and contains no raw whitespace/control
    characters preserve the original encoding byte-for-byte (important for signed/presigned URLs).
    Otherwise, return `URL(url)` and allow yarl to normalize/quote as needed.c                 s   s    | ]}|  V  qd S r   )isspace.0cr   r   r   	<genexpr>U   s    z!to_aiohttp_url.<locals>.<genexpr>c                 s   s    | ]	}t |d k V  qdS )    N)ordr>   r   r   r   rA   U   s    T)encoded)anyr   _HAS_PCT_ESCsearch_HAS_BAD_PCT)r<   r   r   r   to_aiohttp_urlP   s
   $rI   )NNN)%r'   r#   r6   rer!   collections.abcr   ior   yarlr   comfy.cli_argsr   comfy.model_managementr   comfy_api.latestr   common_exceptionsr
   compilerF   rH   boolr   type	ComfyNoder5   r   dictr   r   floatr&   r,   r2   r;   rI   r   r   r   r   <module>   sN    

  
