
    ^(j1              
           d dl mZmZmZmZ ddlZddlmZ ddlm	Z	m
Z
 dddeded	ed
e
e	   fdZ G d d      Z G d d      Zd ZdefdZd Zded
efdZ G d de      ZddZd Zd Zy)   )ComfyAPIBaseComfyAPIWithVersionregister_versionsget_all_versions    N)asdict)CallableOptional)baseclsnamer   returnc                2   |'t        | d      st        d      | j                         }t        ||d      }|y|j                  }| j                         D ]?  }||u r y||j                  v st        ||      j                  }||us3t        | |      c S  y)zReturn the *callable* override of `name` visible on `cls`, or None if every
    implementation up to (and including) `base` is the placeholder defined on `base`.

    If base is not provided, it will assume cls has a GET_BASE_CLASS
    NGET_BASE_CLASSz[base is required if cls does not have a GET_BASE_CLASS; is this a valid ComfyNode subclass?)hasattr
ValueErrorr   getattr__func__mro__dict__)r   r   r   	base_attr	base_funccfuncs          E/Users/danicosta/Desktop/Flux2/ComfyUI/comfy_api/internal/__init__.pyfirst_real_overrider      s     |s,-z{{!!#dD)I""IWWY9
 	 1::1d#,,D9$sD))      c                        e Zd ZdZed        Zy)_ComfyNodeInternalzClass that all V3-based APIs inherit from for ComfyNode.

    This is intended to only be referenced within execution.py, as it has to handle all V3 APIs going forward.c                      y N )r   s    r   GET_NODE_INFO_V1z#_ComfyNodeInternal.GET_NODE_INFO_V1*   s    r   N)__name__
__module____qualname____doc__classmethodr#   r"   r   r   r   r   &   s    r  r   r   c                       e Zd ZdZy)_NodeOutputInternalzClass that all V3-based APIs inherit from for NodeOutput.

    This is intended to only be referenced within execution.py, as it has to handle all V3 APIs going forward.N)r$   r%   r&   r'   r"   r   r   r*   r*   /   s    r r   r*   c                 *    t        t        |             S )z8Return dict of dataclass object with pruned None values.)
prune_dictr   )dataclass_objs    r   as_pruned_dictr.   6   s    f]+,,r   dc                 \    | j                         D ci c]  \  }}|	|| c}}S c c}}w r!   )items)r/   kvs      r   r,   r,   :   s,    GGI7ISQqAqDI777s   
((c                 "    t        | t              S )zT
    Returns True if is a class type.
    Returns False if is a class instance.
    )
isinstancetype)objs    r   is_classr8   >   s    
 c4  r   c                     | y| j                   j                         D ci c]  \  }}|dvr|| }}}t        | j                  | f|      }| j                  |_        | j
                  |_        |S c c}}w )z*
    Copy a class and its attributes.
    N)r   __weakref__r%   r'   )r   r1   r6   r$   r%   r'   )r   r2   r3   cls_dictnew_clss        r   
copy_classr=   F   s     { \\//1
1TQLL qD1  

 	G GkkGON
s   A1c                       e Zd Zd Zd Zy)classpropertyc                     || _         y r!   f)selfrB   s     r   __init__zclassproperty.__init__]   s	    r   c                 $    | j                  |      S r!   rA   )rC   r7   owners      r   __get__zclassproperty.__get___   s    vve}r   N)r$   r%   r&   rD   rG   r"   r   r   r?   r?   \   s    r   r?   c                     |xs | j                    d}| f| j                  z   }t        ||t        | j                              S )zG
    Shallow clone a class while preserving super() functionality.
    Clone)r$   	__bases__r6   dictr   )r   new_name	new_basess      r   shallow_clone_classrN   d   sA     1cll^51H&I)T#,,%788r   c                     d } G d dt        |             }t        | j                        }||d<    || j                  | j                  |      S )zJ
    Lock a class so that its top-levelattributes cannot be modified.
    c                 J    t        d| dt        |       j                         )NzCannot set attribute 'z' on immutable instance of )AttributeErrorr6   r$   )rC   r   values      r   locked_instance_setattrz+lock_class.<locals>.locked_instance_setattrs   s+    $TF*Ed4jFYFYEZ[
 	
r   c                       e Zd Zd Zy)lock_class.<locals>.LockedMetac                 :    t        d| d| j                   d      )NzCannot modify class attribute 'z' on locked class '')rQ   r$   )cls_r   rR   s      r   __setattr__z*lock_class.<locals>.LockedMeta.__setattr__y   s'     1$7J4==/YZ[ r   N)r$   r%   r&   rY   r"   r   r   
LockedMetarU   x   s    	r   rZ   rY   )r6   rK   r   r$   rJ   )r   rS   rZ   locked_dicts       r   
lock_classr\   n   sH    


T#Y  s||$K!8KcllCMM;??r   c                     t        |      t        | |      j                  t        j                        rfd}|S fd}|S )z
    Returns a function that, when called with **inputs, will execute:
    getattr(type_obj, func).__func__(lock_class(class_clone), **inputs)

    Supports both synchronous and asynchronous methods.
    c                  2   K    fi |  d {   S 7 wr!   r"   inputslocked_classmethods    r   wrapped_async_funcz3make_locked_method_func.<locals>.wrapped_async_func   s     77777s   c                       fi | S r!   r"   r_   s    r   wrapped_funcz-make_locked_method_func.<locals>.wrapped_func   s    ,1&11r   )r\   r   r   asyncioiscoroutinefunction)type_objr   class_clonerc   re   ra   rb   s        @@r   make_locked_method_funcrj      sG     k*LXt$--F ""6*	8!!	2r   r!   )api_registryr   r   r   r   rf   dataclassesr   typingr	   r
   r6   strr   r   r*   r.   rK   r,   r8   r=   objectr?   rN   r\   rj   r"   r   r   <module>rp      s       % =A T  t XhEW 0  -8$ 8!D T ,F 9@,r   