
    +j                     ~    S SK r S SKrS SKrS SKJr  S SKrS SKrS SKJr  S SK	J
r
  / SQrS\S\4S jr " S	 S
5      rg)    N)web)	lru_cache)merge_json_recursive)znodeDefs.jsonzcommands.jsonzsettings.json	file_pathreturnc                 2   [         R                  R                  U 5      (       d  0 $  [        U SSS9 n[        R
                  " U5      sS S S 5        $ ! , (       d  f       g = f! [        R                   a    [        R                  " SU  35        0 s $ f = f)Nrzutf-8)encodingzError loading )	ospathexistsopenjsonloadJSONDecodeErrorloggingerror)r   fs     7/home/wildlama/comfy/ComfyUI/app/custom_node_manager.pysafe_load_json_filer      sp    77>>)$$	)S73q99Q< 433 yk23	s.   A$ A		A$ 
A!A$ !A$ $/BBc                   2    \ rS rSr\" SS9S 5       rS rSrg)CustomNodeManager       )maxsizec           	         0 n[         R                  " S5       GH  n[        [        R                  " [        R
                  R                  US5      5      5       GHf  n[        R
                  R                  US5      n[        R
                  R                  U5      (       d  MJ  [        R                  " [        R
                  R                  US5      5       H  n[        R
                  R                  [        R
                  R                  U5      5      nXa;  a  0 X'   [        R
                  R                  US5      n[        U5      n[         HN  n	[        R
                  R                  XY5      n
U	R                  S5      S   n[        U
5      nU(       d  MJ  XU'   MP     U(       d  M  [        X   U5      X'   M     GMi     GM     U$ )a"  Load all custom nodes translations during initialization. Translations are
expected to be loaded from `locales/` folder.

The folder structure is expected to be the following:
- custom_nodes/
    - custom_node_1/
        - locales/
            - en/
                - main.json
                - commands.json
                - settings.json

returned translations are expected to be in the following format:
{
    "en": {
        "nodeDefs": {...},
        "commands": {...},
        "settings": {...},
        ...{other main.json keys}
    }
}
custom_nodes*/localesz	main.json.r   )folder_pathsget_folder_pathssortedglobr   r   joinr   basenamedirnamer   EXTRA_LOCALE_FILESsplitr   )selftranslationsfoldercustom_node_dirlocales_dirlang_dir	lang_code	main_filenode_translations
extra_fileextra_file_pathkey	json_datas                r   build_translations$CustomNodeManager.build_translations!   sT   2 "33NCF#)$))BGGLL4N*O#P ggll?IFww~~k22 $		"'',,{D*I JH " 0 01J KI 424/ !#X{ CI(;I(F% '9
*,'',,x*L(..s3A6$7$H	$95>c2 '9 )(2F(35F3/' !K $Q D<     c                   ^ ^
 / SQm
UR                  S5      U
4S j5       nU H  u  pVT
 H  n[        R                  R                  Xg5      n[        R                  R	                  U5      (       d  MH  US:w  a  [
        R                  " SXu5        UR                  [        R                  " SU-   U5      /5        M     M     UR                  S5      U 4S j5       n	g )	N)example_workflowsexampleexamplesworkflow	workflowsz/workflow_templatesc                   >#    / n[         R                  " S5       HW  nT
 HN  n[        R                  R	                  USU S35      n[
        R
                  " U5      nUR                  U5        MP     MY     0 nU H  n[        R                  R                  [        R                  R                  [        R                  R                  U5      5      5      n[        R                  R                  [        R                  R                  U5      5      S   n	UR                  U/ 5      R                  U	5        M     [        R                  " U5      $ 7f)zReturns a web response that contains the map of custom_nodes names and their associated workflow templates. The ones without templates are omitted.r   r   z/*.jsonr   )r!   r"   r   r   r%   r$   extendr&   r'   splitext
setdefaultappendr   json_response)requestfilesr,   folder_namepatternmatched_filesworkflow_templates_dictfilecustom_nodes_nameworkflow_nameexample_workflow_folder_namess             r   get_workflow_templates<CustomNodeManager.add_routes.<locals>.get_workflow_templates`   s
     E&77G#@K ggll6R}G3LMG$(IIg$6MLL/ $A H  $ $&GG$4$4GGOOBGGOOD$9:%! !# 0 01A1A$1G H K'223DbIPP!  $$%<==s   EEr;   zdFound example workflow folder '%s' for custom node '%s', consider renaming it to 'example_workflows'z/api/workflow_templates/z/i18nc                 T   >#    [         R                  " TR                  5       5      $ 7f)z<Returns translations from all custom nodes' locales folders.)r   rE   r7   )rF   r*   s    r   get_i18n.CustomNodeManager.add_routes.<locals>.get_i18n   s"      $$T%<%<%>??s   %()
getr   r   r%   r   r   debug
add_routesr   static)r*   routeswebapploadedModulesrP   module_name
module_dirrH   workflows_dirrS   rO   s   `         @r   rW   CustomNodeManager.add_routes\   s    (m%	)	*	> 
+	>2 (5#K< "Z E77>>-00"&99 C'6 %%JJ :[ H-  = (5$ 
G		@ 
	@r9    N)__name__
__module____qualname____firstlineno__r   r7   rW   __static_attributes__r`   r9   r   r   r       s     q8 8t3@r9   r   )r   r!   r$   aiohttpr   r   r   	functoolsr   utils.json_utilr   r(   strdictr   r   r`   r9   r   <module>rk      sF    	       0 	3 	4 	o@ o@r9   