
    +hz                         S r SSKrSSKrSSKrSSKJrJr  SSKJ	r	  SSK
Jr  SSKJr  S	/rS
rS\4S jr " S S\5      rg)z
Usage example:
    TODO
    N)ArgumentParser	Namespace)Path   )logging   )BaseDiffusersCLICommandModularPipelineBlockszconfig.jsonargsc                 B    [        U R                  U R                  5      $ N)CustomBlocksCommandblock_module_nameblock_class_name)r   s    Z/home/james-whalen/.local/lib/python3.13/site-packages/diffusers/commands/custom_blocks.pyconversion_command_factoryr   "   s    t55t7L7LMM    c                       \ rS rSr\S\4S j5       rSS\S\4S jjrS r	SS	 jr
S
 rS\R                  4S jrS rSrg)r   &   parserc                     U R                  S5      nUR                  S[        SSS9  UR                  S[        S SS9  UR                  [        S9  g )	Ncustom_blocksz--block_module_nameblock.pyz>Module filename in which the custom block will be implemented.)typedefaulthelpz--block_class_namezDName of the custom block. If provided None, we will try to infer it.)func)
add_parseradd_argumentstrset_defaultsr   )r   conversion_parsers     r   register_subcommand'CustomBlocksCommand.register_subcommand'   sg    "--o>&&!Q	 	' 	
 	&& W	 	' 	
 	&&,F&Gr   Nr   r   c                 f    [         R                  " S5      U l        [        U5      U l        X l        g )Nzdiffusers-cli/custom_blocks)r   
get_loggerloggerr   r   r   )selfr   r   s      r   __init__CustomBlocksCommand.__init__8   s)    (()FG!%&7!8 0r   c                 d   U R                  U R                  5      n[        U VVs1 s H  u  p#UiM	     snn5      nU R                  b?  U R	                  XR                  5      u  pVUc  Uc  [        SU R                   SU 35      eO4U R                  R                  SU SUS    S35        US   S   US   S   peSU R                  R                   3n[        R                  R                  U[        U R                  5      5      n[        R                  R                  U5      n	UR                  R                  U	5        [!        X5      " 5       R#                  [$        R&                  " 5       5        [)        S	S
5       n
U
R+                  S5        S S S 5        g s  snnf ! , (       d  f       g = f)NzB`block_class_name` could not be retrieved. Available classes from z:
zFound classes: z will be using r   zP. If this needs to be changed, re-run the command specifying `block_class_name`.r   __dynamic__zrequirements.txtw )_get_class_namesr   listr   _choose_block
ValueErrorr'   infostem	importlibutilspec_from_file_locationr    module_from_specloaderexec_modulegetattrsave_pretrainedosgetcwdopenwrite)r(   outcls_classes_foundchild_classparent_classmodule_namespecmodulefs              r   runCustomBlocksCommand.run=   s   ##D$:$:;4fcc45  ,(,(:(:3@U@U(V%K"|'; X--.c-B 
 KK!-a@P?Q Ra a ),Aq	3q6!9 $D$:$:$?$?#@A~~55k3tG]G]C^_006'$&66ryy{C $c*aGGBK +*9 58 +*s   F
 F!!
F/c                 .    U H  u  p4X2:X  d  M  X44s  $    g)N)NN )r(   
candidateschosenrB   bases        r   r1   !CustomBlocksCommand._choose_block_   s     #IC}y  $ r   c                    UR                  SS9n [        R                  " X!S9n/ nUR
                   H  n[        U[        R                  5      (       d  M$  UR                   Vs/ s H  opR                  U5      =nc  M  UPM     n	n[         H'  n
X;   d  M
  UR                  UR                  U
45        M)     M     U$ ! [         a  n[	        SU< SU 35      UeS nAff = fs  snf )Nzutf-8)encoding)filenamezCould not parse z: )	read_textastparseSyntaxErrorr2   body
isinstanceClassDefbases_get_base_nameEXPECTED_PARENT_CLASSESappendname)r(   	file_pathsourcetreeeresultsnodebbname
base_namesalloweds              r   r/   $CustomBlocksCommand._get_class_namese   s    $$g$6	K99V8D *,IIDdCLL11 *.eAATATUVAW8W%Je 3(NNDIIw#78 3  !  	K/	}BqcBCJ	K fs#   B? %C$ C$?
C!	CC!rg   c                    [        U[        R                  5      (       a  UR                  $ [        U[        R                  5      (       a?  U R                  UR                  5      nU(       a  U SUR                   3$ UR                  $ g )N.)r[   rW   Nameid	Attributer^   valueattr)r(   rg   vals      r   r^   "CustomBlocksCommand._get_base_name{   sd    dCHH%%77Ncmm,,%%djj1C+.cU!DII;'=DII=r   c                     [        U R                  5      R                  SS5      R                  SS5      S   nU U SU 30nSU0$ )Nz.pyr.   rn   r   auto_map)r    r   replacersplit)r(   rF   rE   rI   rx   s        r   _create_automap#CustomBlocksCommand._create_automap   sS    T++,44UB?FFsANrR#n&;-'@AH%%r   )r   r   r'   )r   Nr   )__name__
__module____qualname____firstlineno__staticmethodr   r#   r    r)   rK   r1   r/   rW   exprr^   r{   __static_attributes__rN   r   r   r   r   &   sV    HN H H 1# 1c 1
 D,388 &r   r   )__doc__rW   importlib.utilr5   r=   argparser   r   pathlibr   utilsr   r.   r	   r_   CONFIGr   r   rN   r   r   <module>r      sN   
   	 .   % 33 	NY N`&1 `&r   