
    jgiY                         d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlmZ d dl	m
Z
mZ d dlmZ d dlmZ d dlmZ d dlmZ d	 Zdd
Z G d de
      Zy)    N)connections)settings)BaseCommandCommandError)
OrderedSet)import_objects)signalcommand)monkey_patch_cursordebugwrapperc                      t         j                  j                  d      } | syt         j                  j	                  |       } | j                  d      xs | j                  d      S )NEDITORFvivim)osenvirongetpathbasename
startswithendswith)editors    k/var/www/html/Stanley/venv/lib/python3.12/site-packages/django_extensions/management/commands/shell_plus.pyuse_vi_moder      sM    ZZ^^H%FWWf%FT"<fooe&<<    c                       fd}|S )ae  
    Decorates methods with information about the application they are starting

    :param flags: The flags used to start this runner via the ArgumentParser.
    :param name: The name of this runner for the help text for the ArgumentParser.
    :param help: The optional help for the ArgumentParser if the dynamically generated help is not sufficient.
    c                 2    | _         | _        | _        | S N)runner_flagsrunner_namerunner_help)fnflagshelpnames    r   	decoratorzshell_runner.<locals>.decorator#   s    	r    )r!   r#   r"   r$   s   ``` r   shell_runnerr&      s     r   c                       e Zd ZdZdZdZ fdZ fdZ fdZd Z	d Z
d	 Z ed
gd      d        Zd Zd Zd+dZ edgd      d        Z edgd      d        Z edgd      d        Z edgd      d        Z edgd      d        Z ed gd!      d"        Z ed#gd$      d%        Z ed&gd'      d(        Zd) Zed*        Z xZS ),CommandzOLike the 'shell' command but autoloads the models of all installed Django apps.NFc                     t         |           t        j                  |       D cg c]  \  }}t	        |d      r| c}}| _        y c c}}w )Nr   )super__init__inspect
getmembershasattrrunners)selfr#   member	__class__s      r   r+   zCommand.__init__2   sK    3:3E3Ed3K <3K<4"6>: 3K < <s   A
c           	         t         |   |       |j                         }| j                  D ]I  }|j                  r|j                  }nd|j
                  z  } |j                  |j                  dd||d K |j                  dddd	       |j                  d
dddd       |j                  ddddd       |j                  dddd       |j                  ddt        d       |j                  dddd       |j                  dddg d       |j                  dddd d!"       |j                  d#dt               d$d%"       |j                  d&ddd'd("       |j                  d)d*d+,       y )-NzTells Django to use %s.store_construnner)actiondestconstr"   z--connection-filestoreconnection_filezASpecifies the connection file to use if using the --kernel option)r6   r7   r"   z--no-startup
store_true
no_startupFzaWhen using plain Python, ignore the PYTHONSTARTUP environment variable and ~/.pythonrc.py script.)r6   r7   defaultr"   z--use-pythonrcuse_pythonrcz_When using plain Python, load the PYTHONSTARTUP environment variable and ~/.pythonrc.py script.z--print-sqlz%Print SQL queries as they're executed)r6   r=   r"   z--truncate-sqlz/Truncate SQL queries to a number of characters.)r6   typer"   z--print-sql-locationz4Show location in code where SQL query generated fromz--dont-loadappend	dont_loadzBIgnore autoloading of some apps/models. Can be used several times.z--quiet-load
quiet_loadz%Do not display loaded models messages)r6   r=   r7   r"   z--vivi_modez5Load Vi key bindings (for --ptpython and --ptipython)--no-browser
no_browserz3Don't open the notebook in a browser after startup.-cz	--commandzJInstead of opening an interactive shell, run a command as Django and exit.)r"   )
r*   add_argumentsadd_mutually_exclusive_groupr/   r   r   add_argumentr   intr   )r0   parsergroupr5   r"   r2   s        r   rG   zCommand.add_arguments7   s   f%335llF!!))063E3EEE$$]QW^bd # 	6GT 	 	
 	<lt 	 	

 	\r 	 	

 	,8 	 	

 	W3B 	 	
 	"<G 	 	

 	(bU 	 	
 	<$K 	 	

 	<YH 	 	
 	<G	 	 	
 	+] 	 	
r   c                 v    d|dd  v r#|j                  d      }||dz   d  | _        |d | }t        |   |      S )N--      )index
extra_argsr*   run_from_argv)r0   argvidxr2   s      r   rS   zCommand.run_from_argvx   sK    48**T"C"378nDO:Dw$T**r   c                     d}t        t        |g       }|s.t        j                  j	                  |d      j                         }|S )NIPYTHON_ARGUMENTS getattrr   r   r   r   split)r0   optionsipython_args	argumentss       r   get_ipython_argumentszCommand.get_ipython_arguments   s;    *HlB7	

|R8>>@Ir   c                     d}t        t        |g       }|s.t        j                  j	                  |d      j                         }|S )NNOTEBOOK_ARGUMENTSrX   rY   )r0   r\   notebook_argsr^   s       r   get_notebook_argumentszCommand.get_notebook_arguments   s;    ,HmR8	

}b9??AIr   c                 X    t        || j                        }| j                  r|| _        |S r   )r   style
tests_modetests_imported_objects)r0   r\   imported_objectss      r   get_imported_objectszCommand.get_imported_objects   s(    )'4::>??*:D'r   z--kernelzIPython Kernel)r!   r#   c                      	 ddl m} |j                  d   dk  r%t         j                  j                  d             y ddl m  fd}|S # t        $ r t        j                         cY S w xY w)Nr   releaserO   z.--kernel requires at least IPython version 2.0)start_kernelc                  j    j                        } t        g |       }d   }|r||d<    di | y )NrT   user_nsr:   r%   )ri   dict)rh   kwargsr:   r\   r0   rm   s      r   
run_kernelz&Command.get_kernel.<locals>.run_kernel   sJ    #88A(F &&78O,;()"6"r   )
IPythonrl   version_infoprintre   ERRORrm   ImportError	traceback
format_exc)r0   r\   rl   rs   rm   s   ``  @r   
get_kernelzCommand.get_kernel   si    	*'##A&*djj&&'WXY,		#   	*''))	*s   <A A A10A1c                     |j                   }t        t        dddg      }t        |t              r|g}d}|D ]  }	 |j                  |      } n |st        d|z        |S # t        $ r Y 5w xY w)z<Finds and returns the base Python kernelspec to extend from.NOTEBOOK_KERNEL_SPEC_NAMESpython3pythonNz1No notebook (Python) kernel specs found. Tried %r)kernel_spec_managerrZ   r   
isinstancestrget_kernel_spec	Exceptionr   )r0   appksmtry_spec_namesks	spec_names         r   load_base_kernel_speczCommand.load_base_kernel_spec   s    %% +GJ
 
 nc*,-N'I((3 ( RUccdd	  s   A!!	A-,A-c                    | j                  |      }|j                  j                  |       t        t        dd      |_        t        j                  j                  t        j                  j                  t        j                  d               \  }}|dk(  rt        j                  j                  |      r|j                  j                  dt        j                  j                  dd            }|j                  t        j                        }||vr|j!                  |       t        j                  j#                  t%        d|            |j                  d<   d|iS )	zBGenerate an IPython >= 3.0 kernelspec that loads django extensionsIPYTHON_KERNEL_DISPLAY_NAMEzDjango Shell-Plusr   z	manage.py
PYTHONPATHrX   Ndjango_extensions)r   rT   extendrZ   r   display_namer   r   r[   realpathsysisdirenvr   r   pathsepr@   joinfilter)r0   r   ipython_argumentsr   manage_py_dir	manage_py
pythonpaths          r   generate_kernel_specszCommand.generate_kernel_specs   s    '',
()!(,IK^_#%77==1A1A#((1+1N#O y#m(DL"**..r2RSJ#))"**5JJ.!!-0#%::??6$
3K#LBFF< #R((r   c                 j   |d   }| j                   rZd| j                   v r=| j                   j                  d      }| j                   d | }| j                   |dz   d  }n1| j                   }g }n"| j                  |      }| j                  |      }d|vr|j	                  ddg       |rd|vr|j                  d       d|vr%t        d |D              s|j	                  dd	g       |s|j	                  |       |s#t        d
 |D              s|j                  d       t        |      s.|}	t        j                  dt               |	j                  |       n ||      }	|r(|	j                  }
| j                  |	|      j                         D ]  \  }}t        j                   j#                  |j$                        |
j&                  g}|D ]  }t        j                   j)                  ||      }	 t        j                   j+                  |      st        j,                  |       t/        t        j                   j)                  |d      d      5 }|j1                  |j3                                d d d          t7        d|d|       |	j9                          y # 1 sw Y   /xY w# t4        $ r Y w xY w)NrE   rN   rP   z/django_extensions.management.notebook_extensionz--extrD   z--notebook-dirc              3   >   K   | ]  }|j                  d         yw)z--notebook-dir=Nr   ).0es     r   	<genexpr>z*Command.run_notebookapp.<locals>.<genexpr>   s     A~k}fg!,,O`Bak}   .c              3   >   K   | ]  }|j                  d         yw)z--HistoryManagerNr   )r   args     r   r   z*Command.run_notebookapp.<locals>.<genexpr>   s     "cQb#3>>2D#EQbr   z--HistoryManager.enabled=Falsez3Initialize should be a callable not an app instancezkernel.jsonwzCould not write kernel z in directories )rR   rQ   rc   r_   r   r@   anycallablewarningswarnDeprecationWarning
initializer   r   itemsr   r   dirnameresource_diruser_kernel_dirr   existsmakedirsopenwriteto_jsonOSErrorr   start)r0   app_initr\   use_kernel_specshistoryrE   rU   notebook_argumentsr   r   r   kidr   rootsroot
kernel_dirfs                    r   run_notebookappzCommand.run_notebookapp   sf   \*
??t&oo++D1%)__Tc%:"$(OOC!GH$=! &*__"$&!!%!<!<W!E $ : :7 C =DUU$$g/`%ab .0BB%%n5#55cA~k}A~>~%%'7&=>  %%&78 s"cQb"cc$$%EF!CMMOQcdNN-.-.C ))C55c;LMSSUR93;N;NO!D!#dC!8J!!ww~~j9KK
3!"'',,z="I3OSTGGBJJL1 P " 'X[]b'cdd V  			 PO # ! !s+   .AJ& J,J&J#J&&	J21J2z
--notebookzIPython Notebookc                     	 ddl m} 	 ddlm |j                  d   dk\  fd fd}|S # t        $ r t        j                         cY S w xY w# t        $ r |j                  d   dk\  rt        j                         cY S 	 ddlm nt# t        $ rh |j                  d   dk\  rt        j                         cY cY S 	 ddl	m
} |j                  n'# t        $ r t        j                         cY cY cY S w xY wY nw xY wY w xY w)	Nr   rk   NotebookApp      )notebookappc                  L    j                         } |j                  | i | |S r   instancer   )argsrr   r   r   s      r   r   z&Command.get_notebook.<locals>.app_init*  s)    &&(CCNND+F+Jr   c                  ,    j                          y r   r   )r   r\   r0   r   s   r   run_notebookz*Command.get_notebook.<locals>.run_notebook/  s      74DEr   )rt   rl   rx   ry   rz   notebook.notebookappr   ru   IPython.html.notebookappIPython.frontend.html.notebookr   )r0   r\   rl   r   r   r   r   r   s   ``   @@@r   get_notebookzCommand.get_notebook  s    	*'	28 #//2a7	
	F7  	*''))	*  	2##A&!+ ++--	2@ 2''*a/$//112J"-"9"9K" 2$//112  2	2st   5 A AA/D
BD/D DCDC<5D7D;C<<D?DDDDz--labzJupyterLab Notebookc                      	 ddl m 	 ddlm} |rt        |      sj                  nfd fd}|S # t        $ r t        j                         cY S w xY w# t        $ r d }Y Yw xY w)Nr   )LabAppr   c                  L    j                         } |j                  | i | |S r   r   )r   rr   r   r   s      r   r   z(Command.get_jupyterlab.<locals>.app_initC  s'    oo'//
r   c                  .    j                   d       y )NF)r   r   )r   r\   r0   s   r   run_jupyterlabz.Command.get_jupyterlab.<locals>.run_jupyterlabH  s      7E Br   )	jupyterlab.labappr   rx   ry   rz   r   r   
issubclassinitialize_server)r0   r\   r   r   r   r   s   ``  @@r   get_jupyterlabzCommand.get_jupyterlab3  sr    	*0
	8 *V["A//H
	C'  	*''))	*  	K	s    < A AAA-,A-z--plainzplain Pythonc                    dd l | j                  |      	 dd l}dd l}|j	                  |j                        j                         t        |dd      }|d|v r|j                  d       n|j                  d       	 |d   }|d   }|s|st        t        j                  j                  d	      t        j                  j                  d
      g      D ]a  }|st        j                  j!                  |      s&t#        |      5 }|j%                         }	d d d        	 t'        t)        	|d             c fd}
|
S # t        $ r Y w xY w# 1 sw Y   :xY w# t*        $ r$ t-        j.                          | j0                  r Y w xY w)Nr   __doc__rX   libeditzbind ^I rl_completeztab:completer>   r<   PYTHONSTARTUPz~/.pythonrc.pyexecc                  *     j                         y )N)local)interact)coderh   s   r   	run_plainz$Command.get_plain.<locals>.run_plainy  s    MM 0M1r   )r   ri   readlinerlcompleterset_completer	CompletercompleterZ   parse_and_bindrx   r   r   r   r   r   
expanduserisfiler   readr   compiler   ry   	print_excrf   )r0   r\   r   r   readline_docr>   r<   pythonrchandlepythonrc_coder   r   rh   s              @@r   	get_plainzCommand.get_plainL  sk    	44W=	8 "";#8#89I#J#S#ST #8Y;L'I,E''(=>''7~.\*
 z&

(GI[I[\lIm'noww~~h/(^v$*KKMM $&ACST p 	2O  		4 $^ ! '') 's/   E E"E	EEE	*F
Fz	--bpythonBPythonc                 n     	 ddl m  fd}|S # t        $ r t        j                         cY S w xY w)Nr   embedc                  t    j                        } i }j                  rj                  |d<    | fi | y )Nr   )ri   rR   )rh   rr   r   r\   r0   s     r   run_bpythonz(Command.get_bpython.<locals>.run_bpython  s;    #88AF!%v"-f-r   )bpythonr   rx   ry   rz   )r0   r\   r   r   s   `` @r   get_bpythonzCommand.get_bpython}  s8    	*%	.   	*''))	*s    44z	--ipythonrt   c                      	 ddl m  fd}|S # t        $ rS t        j                         }	 ddlm n+# t        $ r |dz   t        j                         z   cY cY S w xY w fd}|cY S w xY w)Nr   )start_ipythonc                  z    j                        } j                  xs j                        } ||        y Nro   )ri   rR   r_   )rh   r   r\   r0   r   s     r   run_ipythonz(Command.get_ipython.<locals>.run_ipython  s;    #'#<#<W#E $(OO$Zt7Q7QRY7Z!#4>NOr   )IPShell
c                  \    j                        }  g |       }|j                          y r  )ri   mainloop)rh   shellr  r\   r0   s     r   r  z(Command.get_ipython.<locals>.run_ipython  s+    #'#<#<W#E R1AB r   )rt   r   rx   ry   rz   IPython.Shellr  )r0   r\   r  str_excr  r   s   ``  @@r   get_ipythonzCommand.get_ipython  sr    	-P  	**,G
?1 ?~	(<(<(>>>?! 	s/    A1:A1#A"A1!A""A10A1z
--ptpythonPTPythonc                      	 ddl mm  fd}|S # t        $ r4 t	        j
                         }	 ddlmm n# t        $ r |cY cY S w xY wY Fw xY w)Nr   )r   
run_configc                      j                        } t        j                  j                  d      } | |d          y )N~/.ptpython_historyrC   )globalshistory_filenamerC   	configureri   r   r   r   rh   r  r   r\   r  r0   s     r   run_ptpythonz*Command.get_ptpython.<locals>.run_ptpython  C    #88A!ww112GH*=M!),
Dr   )ptpython.replr   r  rx   ry   rz   prompt_toolkit.contrib.repl)r0   r\   tbr  r   r  s   ``  @@r   get_ptpythonzCommand.get_ptpython  s]    	7	D
   	%%'BII 	 J	s/    A?AA
AAAAz--ptipythonz
PT-IPythonc                      	 ddl m ddlm  fd}|S # t        $ r8 t        j                         }	 ddlm ddlm n# t        $ r |cY cY S w xY wY Jw xY w)Nr   )r  r   c                      j                        } t        j                  j                  d      } | |d          y )Nr  rC   )rp   r  rC   r  r  r  s     r   run_ptipythonz,Command.get_ptipython.<locals>.run_ptipython  r  r   )	r  r  ptpython.ipythonr   rx   ry   rz   r  prompt_toolkit.contrib.ipython)r0   r\   r  r  r   r  s   ``  @@r   get_ptipythonzCommand.get_ptipython  s`    		0.	D
   	%%'BB@ 	 A		s2    AAAAAAAAz--idleIdlec                     ddl m fd}|S )Nr   mainc                  R    t         j                  d   ddgt         _                  y )Nr   rF   z
from django_extensions.management import shells
from django.core.management.color import no_style
for k, m in shells.import_objects({}, no_style()).items():
    globals()[k] = m
)r   rT   r$  s   r   run_idlez"Command.get_idle.<locals>.run_idle  s&    	CH Fr   )idlelib.pyshellr%  )r0   r\   r'  r%  s      @r   get_idlezCommand.get_idle  s    (	 r   c                 V   dd}d}t        t        dg       }t        j                         D ]z  }|j                  }t        j                  |j                        }t        fd|D              sCd||   vs|||   d   vsU||   j                  di       j                  ||i       | y)a  
        Set the application_name on PostgreSQL connection

        Use the fallback_application_name to let the user override
        it with PGAPPNAME env variable

        https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-PARAMKEYWORDS  # noqa
        )zdjango.db.backends.postgresqlz&django.db.backends.postgresql_psycopg2fallback_application_namedjango_shell	DATABASESc              3   T   K   | ]  }|j                   j                         ! y wr   )
__module__r   )r   klasssupported_backendss     r   r   z/Command.set_application_name.<locals>.<genexpr>  s&     TPSu5##../ABPSs   %(OPTIONSN)rZ   r   r   allaliasr,   getmror2   r   
setdefaultupdate)	r0   r\   opt_namedefault_app_namedbs
connectionr4  mror1  s	           @r   set_application_namezCommand.set_application_name  s    
 /)hR0%//+J$$E..!5!56CTPSTTCJ.(#e*YBW2WJ)))R8??K[@\] ,r   c                 f    d   d   }t        t        dd      }d }d }d   dk(  rd nd   }t        d   xs ||d   d	
      5  t        t        d	d       } fd}	 j                         |s|r |	d|z        }|sd }|}|r |      }|j                  }n fd}
t               }g d}|D ]6  } |	d|z        }|j                  |        |
|      }|s*|j                  } n |s. j                  D ]  }||vs |
|      }|s|j                  } n t        |      s(|rt        |       |st        d      t        d|z         j                  r
	 d d d        yd   r* j                        }t        d   |       	 d d d        y  |        d d d        y # 1 sw Y   y xY w)N	verbosityr5   SHELL_PLUS_PRINT_SQLFtruncate_sqlr   	print_sqlprint_sql_location
SHELL_PLUS)rB  truncaterC  
confprefixc                 L    j                   D ]  }| |j                  v s|c S  y r   )r/   r   )flagr5   r0   s     r   get_runner_by_flagz*Command.handle.<locals>.get_runner_by_flag  s)    "llFv222% + r   z--%sc                     | j                   }dkD  r't        j                  j                  d|z                |       }t	        |      r.dkD  r't        j                  j                  d|z               |S y )NrO   z
Trying: %srP   z	Using: %s)r   rv   re   NOTICEr   )
get_runnerr   r5   r\   r0   r?  s      r   
try_runnerz"Command.handle.<locals>.try_runner  sn    ","8"8K 1}djj//{0JKL'0F'$q=!$**"3"3K+4M"NO%r   )	ptipythonptpythonr   ipythonplainzNo shell runner could be found.z"Could not load shell runner: '%s'.   command)rZ   r   r
   r=  r   setaddr/   r   rv   r   rf   ri   r   )r0   r   r\   rL  rB  r5   r   rE  SETTINGS_SHELL_PLUSrI  rM  tried_runnerspreferred_runnersflag_suffixrh   r?  s   ` `            @r   r   zCommand.handle  s   K(	X&
H&<eD	">2a74W^=T,w{7K7Xyck  AH  I]  A^  kw  x")(L$"G %%g."5/9L0LM
!!F"5K#G,(44
  !$ %]!#4K!3F[4H!IJ!%%j1'
3F&0&<&< $5 &*ll
%]:%/
%;F%.8.D.D % '3 F#&M"&'HII"#G+#UVV} x  x@ y!#'#<#<W#E WY')9:G x  xJ HK x  x  xs,   BF' $F'
F'AF'(&F'F''F0)TT)__name__r/  __qualname__r"   rR   rf   r+   rG   rS   r_   rc   ri   r&   r{   r   r   r   r   r   r   r   r  r  r!  r)  r=  r	   r   __classcell__)r2   s   @r   r(   r(   -   sh   \DJJ<
?
B+  +;< =,.)"=~ -?@ A@ 	(=> ?0 .9. :.` I6 7 I6 74 Z8 9" l; <& 
0 1$^0 M Mr   r(   r   )r,   r   r   ry   r   	django.dbr   django.confr   django.core.management.baser   r   django.utils.datastructuresr   #django_extensions.management.shellsr   "django_extensions.management.utilsr	   )django_extensions.management.debug_cursorr
   r   r&   r(   r%   r   r   <module>rd     sA     	 
   !   A 2 > < U=&Yk Yr   