
    G@d6                        d Z ddlZddlZddlmZ ddlmZ ddlmZ ddlm	Z	  G d d          Z
 G d	 d
e	j                  Z G d de	j                  Zedk    rddlmZ  e            Z ed          Ze                    g ddddddddgdddddgddddd           e                    d           e                                  ej        e                                           dS dS ) z
Cookiecutter widget.
    N)OrderedDict)Template)QtCore)	QtWidgetsc                       e Zd ZdZd ZdS )	NamespacezQ
    Namespace to provide a holder for attributes when rendering a template.
    c                 \    |                                 D ]\  }}t          | ||           d S N)itemssetattr)selfkwargskeyvalues       Mlib/python3.11/site-packages/spyder/plugins/projects/widgets/qcookiecutter.py__init__zNamespace.__init__   s<     ,,.. 	& 	&JCD#u%%%%	& 	&    N)__name__
__module____qualname____doc__r    r   r   r   r      s-         & & & & &r   r   c                   f     e Zd ZdZ ej        ee          Z	 d	 fd	Z	d Z
d Zd Zd Zd Z xZS )
CookiecutterDialogz
    QDialog to display cookiecutter.json options.

    cookiecutter_settings: dict
        A cookiecutter.json settings content.
    pre_gen_code: str
        The code of the pregeneration script.
    Nc                    t                                          |           t          | ||          | _        t	          j                    | _        t	          j        d          | _        t	          j	                    }|
                    | j                   |
                    | j                   |
                    | j                   |                     |           | j        j                            | j                   | j        j                            | j                   | j        j                            | j                   d S )NValidate)superr   CookiecutterWidget_widgetr   QLabel_info_labelQPushButton_validate_buttonQVBoxLayout	addWidget	setLayoutclickedconnectvalidatesig_validated_set_message)r   parentcookiecutter_settingspre_gen_codelayout	__class__s        r   r   zCookiecutterDialog.__init__1   s      )'
 
 %+-- ) 5j A A&((&&&)***.///v 	%--dm<<<"**4+<==="**4+=>>>>>r   c                 J    |dk    r| j                             |           d S d S )Nr   )r!   setText)r   	exit_codemessages      r   r+   zCookiecutterDialog._set_messageF   s/    >>$$W----- >r   c                 :    | j                             |           dS )1
        Setup the widget using options.
        N)r   setup)r   r-   s     r   r7   zCookiecutterDialog.setupJ   s!     	011111r   c                 :    | j                             |           dS z:
        Set the cookiecutter pregeneration code.
        N)r   set_pre_gen_coder   r.   s     r   r:   z#CookiecutterDialog.set_pre_gen_codeP   s      	%%l33333r   c                 8    | j                                          dS )Q
        Run, pre generation script and provide information on finished.
        N)r   r)   r   s    r   r)   zCookiecutterDialog.validateV   s     	r   c                 4    | j                                         S ):
        Return all entered and generated values.
        )r   
get_valuesr>   s    r   rA   zCookiecutterDialog.get_values\   s     |&&(((r   NN)r   r   r   r   r   Signalintstrr*   r   r+   r7   r:   r)   rA   __classcell__r0   s   @r   r   r       s          "FM#s++M? ? ? ? ? ?*. . .2 2 24 4 4     ) ) ) ) ) ) )r   r   c                        e Zd ZdZ ej        ee          Z	 d fd	Z	d Z
d Zd ZddZddZdd	Zd
 Zd Zd Zd Zd Zd Zd Z xZS )r   z
    QWidget to display cookiecutter.json options.

    cookiecutter_settings: dict
        A cookiecutter.json settings content.
    pre_gen_code: str
        The code of the pregeneration script.
    Nc                 &   t                                          |           || _        || _        || _        t                      | _        t                      | _        t                      | _        d | _	        t          j        d          d         | _        d | _        d | _        d | _        d | _        d | _        t%          j                    | _        | j                            | j        j                   |                     | j                   d S )Nz.py)suffix)r   r   _parent_cookiecutter_settings_pre_gen_coder   _widgets_defined_settings_rendered_settings_processtempfilemkstemp	_tempfile_extensions_copy_without_render
_new_lines_private_vars_rendered_private_varr   QFormLayout_form_layoutsetFieldGrowthPolicyAllNonFixedFieldsGrowr&   )r   r,   r-   r.   r0   s       r   r   zCookiecutterWidget.__init__t   s        &;#)#!,"---!)777;  $(!!%)" &133..3	5 	5 	5t()))))r   c           	         | j         rM| j                             dg           | _        | j                             dg           | _        | j                             dd          | _        | j                                         D ]\  }}t          |t                    r"t          |	                                          }nt          |t                    s|g}n|}g }|rT|rR|D ]O}t          |          }|                    t          di | j                   }|                    ||k               Pt          |          r|| j        |<   || j        |<   dS dS )z<
        Check which values are Jinja2 expressions.
        rV   rW   rX    cookiecutterNr   )rM   poprV   rW   rX   r   
isinstancedictlistkeysr   renderr   appendanyrQ   rP   )r   settingr   list_valuesare_rendered_values
list_valuetemplaterendered_values           r   _check_jinja_optionsz'CookiecutterWidget._check_jinja_options   s    & $	<#:>>}?A C  CD )-(C(G(G&), ),D% #9==lBOODO"&"="C"C"E"E < <eT** ("&uzz||"4"4KK#E400 (#('KK"'K&(# :5 :&1 : :
#+J#7#7)1)2 *? *?"&"=*? *? *9 *@ *@ ,22&.8: : : : *++ <7<D+G446;D*733I$	< $	<< <r   c                     || j         v S )z7
        Check if option contains jinja2 code.
        )rQ   )r   rk   s     r   	_is_jinjazCookiecutterWidget._is_jinja   s     $111r   c                 l    d}|                                 dv rd}n|                                 dv rd}|S )z6
        Convert a text value into a boolean.
        N)nnofalseF)yyestrueT)lower)r   textr   s      r   _parse_bool_textz#CookiecutterWidget._parse_bool_text   sB     ::<<///EEZZ\\111Er   c                 ^    |At          |          dk    r.t          j                   j        _        j        _        nt          j                   |_        |3                    |           j	        
                    d fd	           j        _        fd_        S )z)
        Create a textbox field.
        N   r,   c                 ,                                     S r
   )rh   )xr   s    r   <lambda>z4CookiecutterWidget._create_textbox.<locals>.<lambda>   s    4;;== r   c                 .                         |           S r
   )r2   )r|   boxs    r   r   z4CookiecutterWidget._create_textbox.<locals>.<lambda>   s    S[[%6%6 r   r
   )lenr   	QTextEditsetPlainTextr2   toPlainTextr|   	QLineEditrk   textChangedr(   	get_value	set_value)r   rk   labeldefaultr   s   `   @r   _create_textboxz"CookiecutterWidget._create_textbox   s     3w<<"#4#4%T222C*CKCHH%T222CKK   O##$@$@$@$@$@AAA6666
r   c                      t          j                   |_        *                               }                    |            fd}|_        S )z*
        Create a checkbox field.
        r   Nc                                                                                     dz   i} |                                          S )Nzother-value-)r}   	isChecked)bool_to_valuesr   r   r   s    r   
_get_valuez7CookiecutterWidget._create_checkbox.<locals>._get_value   sM    %%g..))'222NW4LN "#--//22r   )r   	QCheckBoxrk   r}   
setCheckedr   )r   rk   r   r   new_defaultr   r   s   `  `  @r   _create_checkboxz#CookiecutterWidget._create_checkbox   s}     !...//88KNN;'''	3 	3 	3 	3 	3 	3 	3 #
r   c                 8   t          j        |           }t          |t                    rAt	                      }|                                D ]\  }}|                    |||i           n|D ]}|                    ||           ||_        |j        |_	        |S )z*
        Create a combobox field.
        r   )
r   	QComboBoxrd   re   r   r   addItemrk   currentDatar   )	r   rk   r   choicesr   r   tempchoicechoice_values	            r   _create_comboboxz#CookiecutterWidget._create_combobox   s     !...gt$$ 	,==D(/ < <$FV\$:;;;;< " , ,FF++++
r   c                 .   d                     |                    d                                                    }t          |t          t
          f          r|                     |||          }nt          |t                    ra|                                dv r| 	                    |||          }nT| 
                    |          rdn|}|                     |||          }n"t          d                    |                    ||f| j        |<   ||fS )z&
        Create a form field.
         _)rx   ry   rz   ru   rv   rw   )r   Nz+Cookiecutter option '{}'cannot be processed)joinsplit
capitalizerd   rf   re   r   rE   r{   r   rs   r   	ExceptionformatrO   )r   rk   r   r   widgetr   s         r   _create_fieldz CookiecutterWidget._create_field  s    s++,,7799edD\** 	O**7E5AAFFs## 	O{{}} HHH..wu.MM"&.."9"9D$$u--gug-NN=DDWMMO O O #(gf}r   c                    | j         t          | j                                                                                   }t          | j                                                                                   }d}|r||z  }|r||z  }|                    dd          }|                    dd          }| j                            | j                                         |           dS dS )z5
        Process output of valiation script.
        Nr`   z
r   
)	rR   bytesreadAllStandardOutputdecodereadAllStandardErrorreplacer*   emitexitCode)r   outerrorr4   s       r   _on_process_finishedz'CookiecutterWidget._on_process_finished  s     =$;;==>>EEGGC$-<<>>??FFHHEG 3 !5 oofc22GoodC00G##DM$:$:$<$<gFFFFF %$r   c                 4   || _         |                                  | j                                         D ]N\  }}|                    d          s4|                     ||          \  }}| j                            ||           O|                                  dS )r6   __r   N)rM   rq   r   
startswithr   r\   addRowrh   )r   r-   rk   r   r   r   s         r   r7   zCookiecutterWidget.setup2  s     '<#!!###"9??AA 	8 	8NGU%%k22 8 $ 2 27E B Bv!((777r   c                     || _         dS r9   )rN   r;   s     r   r:   z#CookiecutterWidget.set_pre_gen_code@  s     *r   c                 >   |                                  }| j                                        D ]n\  }}|                    d          sTt	          |          }|                    t          di |          }| j        |         \  }}|                    |           odS )zT
        Render text that contains Jinja2 expressions and set their values.
        r   ra   Nr   )	rA   rQ   r   r   r   rh   r   rO   r   )r   r-   rk   r   ro   valr   r   s           r   rh   zCookiecutterWidget.renderF  s     !% 1 1"5;;== 	& 	&NGU%%k22 &#E??oo!*!C!C-B!C!C & E E!]73
F  %%%	& 	&r   c                 2   t                      x}}| j        ra| j                                        D ]G\  }}|                    d          r|||<    | j        |         \  }}|                                ||<   H| j        |d<   | j        |d<   | j        |d<   |S )r@   r   rV   rW   rX   )	r   rM   r   r   rO   r   rV   rW   rX   )r   r-   csrk   r   r   r   s          r   rA   zCookiecutterWidget.get_valuesS  s     &1]]2& 	H"&"="C"C"E"E H H%%k22 H5:)'22!%w!7JB5;5E5E5G5G)'22 04/?m,% 	45.2ol+$$r   c                    | j         `|                                 }t          | j                   }|                    t	          di |          }t          | j        d          5 }|                    |           ddd           n# 1 swxY w Y   | j        3| j        	                                 | j        
                    d           t          j        |           | _        | j                            t          j                   | j                            | j        g           | j        j                            | j                   | j                                         dS dS )r=   Nra   wi  r   )rN   rA   r   rh   r   openrU   writerR   closewaitForFinishedr   QProcess
setProgramsys
executablesetArgumentsfinishedr(   r   start)r   r-   ro   r   fhs        r   r)   zCookiecutterWidget.validateh  s    )$(OO$5$5! 233H//&??)>?? " A AC dnc** b               }(##%%%--d333"OD11DMM$$S^444M&&'7888M"**4+DEEEM!!!!!# *)s   &BBBrB   r
   )r   r   r   r   r   rC   rD   rE   r*   r   rq   rs   r}   r   r   r   r   r   r7   r:   rh   rA   r)   rF   rG   s   @r   r   r   c   s7         "FM#s++M* * * * * *8(< (< (<T2 2 2
 
 
   *   *   $  ,G G G(  * * *& & &% % %*" " " " " " "r   r   __main__)qapplicationr   )123rx   rw   goanpecaz%{{ cookiecutter.fixed_option|upper }}zPortable Network GraphiclibpngGIMP)namelibraryappsBitmaplibbmpPaint)pngbmpz{{ cookiecutter.fixed_option }})list_optioncheckbox_optioncheckbox_option_2fixed_optionrendered_optiondict_option_private__private_renderedz<
import sys
print("HELP!")  # spyder: test-skip
sys.exit(10))r   r   rS   collectionsr   jinja2r   qtpyr   r   r   QDialogr   QWidgetr   r   spyder.utils.qthelpersr   appdlgr7   r:   showexitexec_r   r   r   <module>r      s    


  # # # # # #                  & & & & & & & &@) @) @) @) @)* @) @) @)FZ" Z" Z" Z" Z"* Z" Z" Z"z z333333
,..C

D
)
)
)CII*??"!(&F 7'  %'  " :"C1	
 	
  8      HHJJJCHSYY[[M r   