
    +j}                        S SK Jr  S SKJr  S SKrS SKrS SKrS SKJr  S SK	r	 " S S5      r
 " S S\5      r " S	 S
\5      r " S S5      rg)    )annotations)	TypedDictN)webc                      \ rS rSrSrSrSrg)Source   custom_node	templates N)__name__
__module____qualname____firstlineno__r	   r
   __static_attributes__r       4/home/wildlama/comfy/ComfyUI/app/subgraph_manager.pyr   r      s    KIr   r   c                  P    \ rS rSr% S\S'    S\S'    S\S'    S\S'    S\S'   S	rg
)SubgraphEntry   strsourcepathnameCustomNodeSubgraphEntryInfoinfodatar   Nr   r   r   r   __annotations__r   r   r   r   r   r      s8    K I I &% Ir   r   c                       \ rS rSr% S\S'   Srg)r   #   r   	node_packr   Nr   r   r   r   r   r   #   s
    Nr   r   c                  x    \ rS rSrS rSS jrSS jrSSS jjrSSS jjrSS jr	SS jr
SS	 jrSS
 jrS rSrg)SubgraphManager'   c                     S U l         S U l        g N)cached_custom_node_subgraphscached_blueprint_subgraphs)selfs    r   __init__SubgraphManager.__init__(   s    HL)FJ'r   c                    [         R                  " U U 3R                  5       5      R                  5       nU[        R
                  R                  [        R
                  R                  U5      5      S   USU0S.nXE4$ )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)   filer   r!   entry_identrys         r   _create_entrySubgraphManager._create_entry,   sp    >>VHTF"3":":"<=GGIGG$$RWW%5%5d%;<Q? ),	 
 r   c                   #    [        US   SSS9 nUR                  5       US'   S S S 5        U$ ! , (       d  f       U$ = f7f)Nr   rzutf-8)encodingr   )openread)r)   r6   fs      r   load_entry_dataSubgraphManager.load_entry_data7   s=     %-w71FFHE&M 8 87s   A/
A
>Ac                   #    Uc  g UR                  5       nUR                  SS 5        U(       a  UR                  SS 5        U$ 7f)Nr   r   )copypop)r)   r6   remove_datas      r   sanitize_entrySubgraphManager.sanitize_entry<   s<     =

		&$IIfd#s   AAc                   #    UR                  5       n[        UR                  5       5       H!  nU R                  X   U5      I S h  vN X'   M#     U$  N7fr&   )rB   listkeysrE   )r)   entriesrD   keys       r   sanitize_entries SubgraphManager.sanitize_entriesE   sI     ,,.'C!%!4!4W\;!OOGL ( Ps   AAAAc                  #    U(       d  U R                   b  U R                   $ 0 n[        R                  " S5       H  n[        R                  R                  US5      n[        R                  " U5       HS  nUR                  SS5      nSUR                  S5      S   -   nU R                  U[        R                  U5      u  pXU'   MU     M     X0l         U$ 7f)z!Load subgraphs from custom nodes.custom_nodesz*/subgraphs/*.json\/zcustom_nodes.)r'   folder_pathsget_folder_pathsr1   r   joinglobreplacesplitr7   r   r	   )
r)   loadedModulesforce_reloadsubgraphs_dictfolderpatternr4   r!   r5   r6   s
             r   get_custom_node_subgraphs)SubgraphManager.get_custom_node_subgraphsK   s      A A M444.0"33NCFggll6+?@G		'*||D#.+djjob.AA	"&"4"4T6;M;My"Y+0x(	 + D -;)s   CCc                J  #    U(       d  U R                   b  U R                   $ 0 n[        R                  R                  [        R                  R	                  [        R                  R	                  [
        5      5      S5      n[        R                  R                  U5      (       at  [        R                  " [        R                  R                  US5      5       H<  nUR                  SS5      nU R                  U[        R                  S5      u  pVXbU'   M>     X l         U$ 7f)z-Load subgraphs from the blueprints directory.
blueprintsz*.jsonrP   rQ   comfyui)r(   r1   r   rU   dirname__file__existsrV   rW   r7   r   r
   )r)   rZ   r[   blueprints_dirr4   r5   r6   s          r   get_blueprint_subgraphs'SubgraphManager.get_blueprint_subgraphs\   s      ? ? K222.0bggoobggooh6O&PR^_77>>.))		"'',,~x"HI||D#."&"4"4T6;K;KY"W+0x( J
 +9's   D!D#c                   #    U R                  X5      I Sh  vN nU R                  U5      I Sh  vN n0 UEUE$  N# N7f)zAGet all subgraphs from all sources (custom nodes and blueprints).N)r^   rg   )r)   rY   rZ   custom_node_subgraphsblueprint_subgraphss        r   get_all_subgraphs!SubgraphManager.get_all_subgraphsm   sH     &*&D&D]&a a$($@$@$NN?'?+>?? !bNs   ?;?=??c                   #    U R                  U5      I Sh  vN R                  U5      nUb+  UR                  S5      c  U R                  U5      I Sh  vN   U$  NC N7f)z.Get a specific subgraph by ID from any source.Nr   )rl   getr?   )r)   idrY   r6   s       r   get_subgraphSubgraphManager.get_subgraphs   sX     --m<<AA"E6!2!:&&u--- =-s!   AA<AAAAc                t   ^ ^ UR                  S5      UU 4S j5       nUR                  S5      UU 4S j5       ng )Nz/global_subgraphsc                   >#    TR                  T5      I S h  vN n[        R                  " TR                  USS9I S h  vN 5      $  N0 N
7f)NT)rD   )rl   r   json_responserL   )requestr[   rY   r)   s     r   get_global_subgraphs8SubgraphManager.add_routes.<locals>.get_global_subgraphs{   sG     #'#9#9-#HHN$$4+@+@]a+@+b%bcc I%bs!   AA	'A A	AAz/global_subgraphs/{id}c                   >#    U R                   R                  SS 5      nTR                  UT5      I S h  vN n[        R                  " TR                  U5      I S h  vN 5      $  N1 N
7f)Nrp   )
match_inforo   rq   r   ru   rE   )rv   rp   subgraphrY   r)   s      r   get_global_subgraph7SubgraphManager.add_routes.<locals>.get_global_subgraph   s[     ##''d3B!..r=AAH$$4+>+>x+H%HII B%Hs!   2A+A'(A+A)	A+)A+)ro   )r)   routesrY   rw   r|   s   ` `  r   
add_routesSubgraphManager.add_routesz   sA    	'	(	d 
)	d 
,	-	J 
.	Jr   )r(   r'   N)r4   r   r   r   r!   r   returnztuple[str, SubgraphEntry])r6   r   )F)r6   SubgraphEntry | Noner   r   )rJ   dict[str, SubgraphEntry]r   r   )rp   r   )r   r   r   r   r*   r7   r?   rE   rL   r^   rg   rl   rq   r   r   r   r   r   r#   r#   '   s7    K	
""@
Jr   r#   )
__future__r   typingr   r1   rS   rV   aiohttpr   r-   r   r   r   r#   r   r   r   <module>r      sJ    "  	     I () ]J ]Jr   