
    +j}                        d dl mZ d dlmZ d dlZd dlZd dlZd dlmZ d dl	Z	 G d d          Z
 G d de          Z G d	 d
e          Z G d d          ZdS )    )annotations)	TypedDictN)webc                      e Zd ZdZdZdS )Sourcecustom_node	templatesN)__name__
__module____qualname__r   r	        4/home/wildlama/comfy/ComfyUI/app/subgraph_manager.pyr   r      s        KIIIr   r   c                  J    e Zd ZU ded<   	 ded<   	 ded<   	 ded<   	 ded<   dS )	SubgraphEntrystrsourcepathnameCustomNodeSubgraphEntryInfoinfodataNr
   r   r   __annotations__r   r   r   r   r      s\         KKK III III &%%% IIIIIr   r   c                      e Zd ZU ded<   dS )r   r   	node_packNr   r   r   r   r   r   #   s         NNNr   r   c                  ^    e Zd Zd ZddZddZdddZdddZddZddZ	ddZ
ddZd ZdS )SubgraphManagerc                "    d | _         d | _        d S N)cached_custom_node_subgraphscached_blueprint_subgraphs)selfs    r   __init__zSubgraphManager.__init__(   s    HL)FJ'''r   filer   r   r   returntuple[str, SubgraphEntry]c                   t          j        | |                                                                           }|t          j                            t          j                            |                    d         |d|id}||fS )zTCreate a subgraph entry from a file path. Expects normalized path (forward slashes).r   r   )r   r   r   r   )hashlibsha256encode	hexdigestosr   splitextbasename)r#   r%   r   r   entry_identrys         r   _create_entryzSubgraphManager._create_entry,   s    >V"3T"3"3":":"<"<==GGIIG$$RW%5%5d%;%;<<Q? ),	 
  
 r   r1   r   c                   K   t          |d         dd          5 }|                                |d<   d d d            n# 1 swxY w Y   |S )Nr   rzutf-8)encodingr   )openread)r#   r1   fs      r   load_entry_datazSubgraphManager.load_entry_data7   s      %-w777 	%1FFHHE&M	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%s   ?AAFSubgraphEntry | Nonec                   K   |d S |                                 }|                    dd            |r|                    dd            |S )Nr   r   )copypop)r#   r1   remove_datas      r   sanitize_entryzSubgraphManager.sanitize_entry<   sR      =4

		&$ 	$IIfd###r   entriesdict[str, SubgraphEntry]c                   K   |                                 }t          |                                          D ]'}|                     ||         |           d {V ||<   (|S r    )r<   listkeysr?   )r#   r@   r>   keys       r   sanitize_entriesz SubgraphManager.sanitize_entriesE   sj      ,,..'' 	P 	PC!%!4!4WS\;!O!OOOOOOOGCLLr   c                  K   |s| j         | j         S i }t          j        d          D ]}t          j                            |d          }t          j        |          D ]_}|                    dd          }d|                    d          d         z   }| 	                    |t          j        |          \  }}	|	||<   `|| _         |S )z!Load subgraphs from custom nodes.Ncustom_nodesz*/subgraphs/*.json\/zcustom_nodes.)r!   folder_pathsget_folder_pathsr-   r   joinglobreplacesplitr2   r   r   )
r#   loadedModulesforce_reloadsubgraphs_dictfolderpatternr%   r   r0   r1   s
             r   get_custom_node_subgraphsz)SubgraphManager.get_custom_node_subgraphsK   s       	5 A M44.0"3NCC 	1 	1Fgll6+?@@G	'** 1 1||D#..+djjoob.AA	"&"4"4T6;My"Y"Y%+0x((	1 -;)r   c                   K   |s| j         | j         S i }t          j                            t          j                            t          j                            t
                              d          }t          j                            |          rtt          j        t          j                            |d                    D ]A}|                    dd          }| 	                    |t          j        d          \  }}|||<   B|| _         |S )z-Load subgraphs from the blueprints directory.N
blueprintsz*.jsonrI   rJ   comfyui)r"   r-   r   rN   dirname__file__existsrO   rP   r2   r   r	   )r#   rS   rT   blueprints_dirr%   r0   r1   s          r   get_blueprint_subgraphsz'SubgraphManager.get_blueprint_subgraphs\   s       	3 ? K22.0bgoobgooh6O6O&P&PR^__7>>.)) 	1	"',,~x"H"HII 1 1||D#.."&"4"4T6;KY"W"W%+0x((*8'r   c                   K   |                      ||           d{V }|                     |           d{V }i ||S )zAGet all subgraphs from all sources (custom nodes and blueprints).N)rW   r_   )r#   rR   rS   custom_node_subgraphsblueprint_subgraphss        r   get_all_subgraphsz!SubgraphManager.get_all_subgraphsm   sg      &*&D&D]T`&a&a a a a a a a$($@$@$N$NNNNNNN?'?+>??r   idc                   K   |                      |           d{V                     |          }|0|                    d          |                     |           d{V  |S )z.Get a specific subgraph by ID from any source.Nr   )rc   getr9   )r#   rd   rR   r1   s       r   get_subgraphzSubgraphManager.get_subgraphs   s{      --m<<<<<<<<AA"EE6!2!2!:&&u---------r   c                     |                     d           fd            }|                     d           fd            }d S )Nz/global_subgraphsc                   K                                   d {V }t          j                            |d           d {V           S )NT)r>   )rc   r   json_responserF   )requestrT   rR   r#   s     r   get_global_subgraphsz8SubgraphManager.add_routes.<locals>.get_global_subgraphs{   sc      #'#9#9-#H#HHHHHHHN$4+@+@]a+@+b+b%b%b%b%b%b%bcccr   z/global_subgraphs/{id}c                   K   | j                             dd           }                    |           d {V }t          j                            |           d {V           S )Nrd   )
match_inforf   rg   r   rj   r?   )rk   rd   subgraphrR   r#   s      r   get_global_subgraphz7SubgraphManager.add_routes.<locals>.get_global_subgraph   sw      #''d33B!..r=AAAAAAAAH$4+>+>x+H+H%H%H%H%H%H%HIIIr   )rf   )r#   routesrR   rl   rp   s   ` `  r   
add_routeszSubgraphManager.add_routesz   s    	'	(	(	d 	d 	d 	d 	d 
)	(	d 
,	-	-	J 	J 	J 	J 	J 
.	-	J 	J 	Jr   N)r%   r   r   r   r   r   r&   r'   )r1   r   )F)r1   r:   r&   r:   )r@   rA   r&   rA   )rd   r   )r
   r   r   r$   r2   r9   r?   rF   rW   r_   rc   rg   rr   r   r   r   r   r   '   s        K K K	 	 	 	   
           "   "@ @ @ @   
J 
J 
J 
J 
Jr   r   )
__future__r   typingr   r-   rL   rO   aiohttpr   r)   r   r   r   r   r   r   r   <module>rv      s$   " " " " " "       				                       I   (    )   ]J ]J ]J ]J ]J ]J ]J ]J ]J ]Jr   