
    h:                         S SK r S SKrS SKrS SKrS SKJr  S SKJr  S SKJr	  S SK
Jr  S SKJr  SSKJrJr  SS	 jrS
 rSS jrS rS rS rS rS rS r\" 5       =r4S jrg)    N)Path)run)appsget_random_string)DEFAULT_LOCALE_ENCODING   )CommandErrorCommandParserc                     [        U S[        R                  S:g  S9nUR
                  R                  U5      UR                  R                  [        SS9UR                  4$ ! [         a  n[	        SU S   -  5      UeSnAff = f)	zZ
Friendly wrapper around Popen.

Return stdout output, stderr output, and OS status code.
Tnt)capture_output	close_fdszError executing %sr   Nreplace)errors)
r   osnameOSErrorr
   stdoutdecodestderrr   
returncode)argsstdout_encodingperrs       N/var/www/html/env/lib/python3.13/site-packages/django/core/management/utils.pypopen_wrapperr      s    DTRWW_E 	
(	/	B	   D/$q'9:CDs   A" "
B,A>>Bc                     / nU  H3  nUR                  UR                  SS5      R                  S5      5        M5     [        U5       H&  u  p2UR	                  S5      (       a  M  SX   -  X'   M(     [        U5      $ )a  
Organize multiple extensions that are separated with commas or passed by
using --extension/-e multiple times.

For example: running 'django-admin makemessages -e js,txt -e xhtml -a'
would result in an extension list: ['.js', '.txt', '.xhtml']

>>> handle_extensions(['.html', 'html,js,py,py,py,.py', 'py,.py'])
{'.html', '.js', '.py'}
>>> handle_extensions(['.html, txt,.tpl'])
{'.html', '.tpl', '.txt'}
  ,.z.%s)extendr   split	enumerate
startswithset)
extensionsext_listextis       r   handle_extensionsr-       so     HC,22378 H%~~c""(+-HK & x=    c                    Uc=  [         R                  R                  SS5      R                  [         R                  5      n[        U[        5      (       a  U/nUc=  [         R                  R                  SS5      R                  [         R                  5      nU H  nU R                  U5      (       d  M  S/n  O   U H  n[         R                  R                  X@5      n[         R                  R                  U5      (       a  Us  $ U H1  nXS-   n[         R                  R                  U5      (       d  M-  Us  s  $    M     g )NPATHr!   PATHEXTz.COM;.EXE;.BAT;.CMD)r   environgetr%   pathsep
isinstancestrendswithpathjoinisfile)cmdr8   pathextr+   r   ffexts          r   find_commandr?   6   s    |zz~~fb)//

;$v**..,ABHHT<<dG 
 GGLL 77>>!HC7Dww~~d## 	  r.   c                      Sn [        SU 5      $ )zK
Return a 50 character random string usable as a SECRET_KEY setting value.
z2abcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*(-_=+)2   r   )charss    r   get_random_secret_keyrC   O   s     AER''r.   c                 v   [        5       n[        5       nU  H[  nSU;   a*   [        R                  " U5      nUR                  U5        M3   [        R                  " U5      nUR                  U5        M]     X!4$ ! [         a    [	        SU-  5      ef = f! [         a  n[	        [        U5      5      eSnAff = f)z
Parse a list of "app_label.ModelName" or "app_label" strings into actual
objects and return a two-element tuple:
    (set of model classes, set of app_configs).
Raise a CommandError if some specified models or apps don't exist.
r#   zUnknown model: %sN)r(   installed_apps	get_modelLookupErrorr
   addget_app_configr6   )labelsr   modelslabelmodel
app_configes          r   parse_apps_and_model_labelsrP   W   s     5DUF%<@&007 JJu++::5A
 HHZ   <  @"#6#>??@  +"3q6**+s#   A9B9B
B8B33B8c                     [        SSS9nUR                  USS9   UR                  U SS 5      u  p4UR                  $ ! [         a     gf = f)z
Return the value of a command line option (which should include leading
dashes, e.g. '--testrunner') from an argument list. Return None if the
option wasn't passed or if the argument list couldn't be parsed.
F)add_helpallow_abbrevvalue)dest   N)r   add_argumentparse_known_argsrT   r
   )argvoptionparseroptions_s        r   get_command_line_optionr^   r   s`     E>F
W-,,T!"X6
 }}  s   > 
A
Ac                 ~   U  Vs/ s H"  n[         R                  R                  U5      PM$     n nS[         R                  1 Vs1 s H  nSU-  iM
     nn/ nU  HV  nU H<  nUR	                  U5      (       d  M  UR                  UR                  U5      5          MC     UR                  U5        MX     U$ s  snf s  snf )z9Normalize an iterable of glob style patterns based on OS./z%s*)r   r8   normcasesepr7   appendremovesuffix)patternsr   path_sepdir_suffixesnorm_patternspattern
dir_suffixs          r   normalize_path_patternsrk      s    -56X  #XH669266]C]EH$]LCM&J
++$$W%9%9*%EF '
   )   7Cs   )B5B:c                 d   ^ ^ [        T 5      m U 4S jm[        U4S j[        U5       5       5      $ )zm
Check if the given path should be ignored or not based on matching
one of the glob style `ignore_patterns`.
c                    > [         R                  " TR                  U 5      =(       d     [         R                  " [        T5      U 5      $ N)fnmatchfnmatchcaser   r6   )ri   r8   s    r   ignoreis_ignored_path.<locals>.ignore   s7    ""499g6 
':M:MIw;
 	
r.   c              3   4   >#    U  H  nT" U5      v   M     g 7frn    ).0ri   rq   s     r   	<genexpr>"is_ignored_path.<locals>.<genexpr>   s     W.V7vg.Vs   )r   anyrk   )r8   ignore_patternsrq   s   ` @r   is_ignored_pathrz      s,    
 :D

 W.Eo.VWWWr.   c                  2    S[         R                  " S5      0$ )N
black_pathblack)shutilwhichrt   r.   r   find_formattersr      s    &,,w/00r.   c                     U[         L a  [        R                  " S5      nU(       a  [        R                  " USS/U QSS9  gg)z1
Run the black formatter on the specified files.
r}   z--fastz--T)r   N)sentinelr~   r   
subprocessr   )written_filesr|   s     r   run_formattersr      s@    
 X\\'*
48-8	
 r.   )zutf-8)NN)ro   r   r~   r   pathlibr   r   django.appsr   rE   django.utils.cryptor   django.utils.encodingr   baser
   r   r   r-   r?   rC   rP   r^   rk   rz   r   objectr   r   rt   r.   r   <module>r      sc     	     . 1 9 -",2(6 X1 ;A(.Bh 
r.   