a
    ÆZEgiY  ã                   @   s¦   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	d
„ Zddd„ZG dd„ de
ƒZdS )é    N)Úconnections)Úsettings)ÚBaseCommandÚCommandError)Ú
OrderedSet)Úimport_objects)Úsignalcommand)Úmonkey_patch_cursordebugwrapperc                  C   s4   t j d¡} | sdS t j | ¡} |  d¡p2|  d¡S )NZEDITORFÚviZvim)ÚosÚenvironÚgetÚpathÚbasenameÚ
startswithÚendswith)Zeditor© r   úi/var/www/sistema_ama/venv/lib/python3.9/site-packages/django_extensions/management/commands/shell_plus.pyÚuse_vi_mode   s
    r   c                    s   ‡ ‡‡fd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                    s   ˆ | _ ˆ| _ˆ| _| S ©N)Úrunner_flagsÚrunner_nameÚrunner_help)Úfn©ÚflagsÚhelpÚnamer   r   Ú	decorator#   s    zshell_runner.<locals>.decoratorr   )r   r   r   r   r   r   r   Úshell_runner   s    	r   c                       sL  e Zd ZdZdZdZ‡ fdd„Z‡ fdd„Z‡ fdd	„Zd
d„ Z	dd„ Z
dd„ Zedgdd�dd„ ƒZdd„ Zdd„ Zd@dd„Zedgdd�dd„ ƒZed gd!d�d"d#„ ƒZed$gd%d�d&d'„ ƒZed(gd)d�d*d+„ ƒZed,gd-d�d.d/„ ƒZed0gd1d�d2d3„ ƒZed4gd5d�d6d7„ ƒZed8gd9d�d:d;„ ƒZd<d=„ Zed>d?„ ƒZ‡  ZS )AÚCommandzOLike the 'shell' command but autoloads the models of all installed Django apps.NFc                    s$   t ƒ  ¡  dd„ t | ¡D ƒ| _d S )Nc                 S   s   g | ]\}}t |d ƒr|‘qS )r   )Úhasattr)Ú.0r   Úmemberr   r   r   Ú
<listcomp>4   s   
ÿz$Command.__init__.<locals>.<listcomp>)ÚsuperÚ__init__ÚinspectÚ
getmembersÚrunners©Úself©Ú	__class__r   r   r&   2   s    
zCommand.__init__c                    s&  t ƒ  |¡ | ¡ }| jD ]4}|jr,|j}n
d|j }|j|jdd||dœŽ q|jddddd	� |jd
ddddd� |jdddddd� |jddddd� |jddtdd� |jddddd� |jdddg dd� |jdddd d!d"� |jd#dt	ƒ d$d%d"� |jd&ddd'd(d"� |jd)d*d+d,� d S )-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)r0   r1   r   z--no-startupÚ
store_trueÚ
no_startupFzaWhen using plain Python, ignore the PYTHONSTARTUP environment variable and ~/.pythonrc.py script.)r0   r1   Ú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)r0   r7   r   z--truncate-sqlz/Truncate SQL queries to a number of characters.)r0   Útyper   z--print-sql-locationz4Show location in code where SQL query generated fromz--dont-loadÚappendZ	dont_loadzBIgnore autoloading of some apps/models. Can be used several times.z--quiet-loadZ
quiet_loadz%Do not display loaded models messages)r0   r7   r1   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   )r+   ÚparserÚgroupr/   r   r,   r   r   r?   7   sx    

ÿ
þýýýþýþý
þüþzCommand.add_argumentsc                    sD   d|dd … v r8|  d¡}||d d … | _|d |… }tƒ  |¡S )Nú--é   é   )ÚindexÚ
extra_argsr%   Úrun_from_argv)r+   ÚargvÚidxr,   r   r   rJ   x   s
    
zCommand.run_from_argvc                 C   s*   d}t t|g ƒ}|s&tj |d¡ ¡ }|S )NZIPYTHON_ARGUMENTSÚ ©Úgetattrr   r   r   r   Úsplit)r+   ÚoptionsZipython_argsÚ	argumentsr   r   r   Úget_ipython_arguments   s
    zCommand.get_ipython_argumentsc                 C   s*   d}t t|g ƒ}|s&tj |d¡ ¡ }|S )NZNOTEBOOK_ARGUMENTSrM   rN   )r+   rQ   Znotebook_argsrR   r   r   r   Úget_notebook_arguments†   s
    zCommand.get_notebook_argumentsc                 C   s   t || jƒ}| jr|| _|S r   )r   ÚstyleÚ
tests_modeZtests_imported_objects)r+   rQ   Úimported_objectsr   r   r   Úget_imported_objects�   s    zCommand.get_imported_objectsz--kernelzIPython Kernel)r   r   c                    sp   z@ddl m} |jd dk r2tˆj d¡ƒ W d S ddl m‰ W n tyZ   t 	¡  Y S 0 ‡ ‡‡fdd„}|S )Nr   ©ÚreleaserF   z.--kernel requires at least IPython version 2.0)Ústart_kernelc                     s<   ˆ  ˆ ¡} tg | d�}ˆ d }|r*||d< ˆf i |¤Ž d S )N©rK   Úuser_nsr4   )rX   Údict)rW   Úkwargsr4   ©rQ   r+   r[   r   r   Ú
run_kernelŸ   s    
þz&Command.get_kernel.<locals>.run_kernel)
ÚIPythonrZ   Úversion_infoÚprintrU   ÚERRORr[   ÚImportErrorÚ	tracebackÚ
format_exc)r+   rQ   rZ   ra   r   r`   r   Ú
get_kernel”   s    
zCommand.get_kernelc              	   C   st   |j }ttdddgƒ}t|tƒr&|g}d}|D ]0}z| |¡}W  q`W q. ty\   Y q.Y q.0 q.|sptd| ƒ‚|S )z<Finds and returns the base Python kernelspec to extend from.ZNOTEBOOK_KERNEL_SPEC_NAMESÚpython3ÚpythonNz1No notebook (Python) kernel specs found. Tried %r)Úkernel_spec_managerrO   r   Ú
isinstanceÚstrZget_kernel_specÚ	Exceptionr   )r+   ÚappÚksmZtry_spec_namesÚksZ	spec_namer   r   r   Úload_base_kernel_spec«   s"    þ


zCommand.load_base_kernel_specc                 C   s¬   |   |¡}|j |¡ ttddƒ|_tj tj 	t
jd ¡¡\}}|dkr¤tj |¡r¤|j dtj dd¡¡}| tj¡}||vrŒ| |¡ tj td|ƒ¡|jd< d|iS )	zBGenerate an IPython >= 3.0 kernelspec that loads django extensionsZIPYTHON_KERNEL_DISPLAY_NAMEzDjango Shell-Plusr   z	manage.pyÚ
PYTHONPATHrM   NZdjango_extensions)rs   rK   ÚextendrO   r   Zdisplay_namer   r   rP   ÚrealpathÚsysÚisdirÚenvr   r   Úpathsepr:   ÚjoinÚfilter)r+   rp   Úipython_argumentsrr   Zmanage_py_dirZ	manage_pyÚ
pythonpathr   r   r   Úgenerate_kernel_specsÂ   s    

zCommand.generate_kernel_specsTc              
   C   s  |d }| j rRd| j v rF| j  d¡}| j d |… }| j |d d … }qf| j }g }n|  |¡}|  |¡}d|vr|| ddg¡ |r’d|vr’| d¡ d|vrºtdd	„ |D ƒƒsº| dd
g¡ |sÈ| |¡ |sètdd	„ |D ƒƒsè| d¡ t|ƒ�s|}	t 	dt
¡ |	 |¡ n||ƒ}	|�r |	j}
|  |	|¡ ¡ D ]Ì\}}tj |j¡|
jg}|D ]˜}tj ||¡}zhtj |¡�s~t |¡ ttj |d¡dƒ�}| | ¡ ¡ W d   ƒ n1 �s¸0    Y  W  �q2W n t�yæ   Y �qRY n0 �qRtd||f ƒ‚�q2|	 ¡  d S )Nr=   rE   rG   z/django_extensions.management.notebook_extensionz--extr<   z--notebook-dirc                 s   s   | ]}|  d ¡V  qdS )z--notebook-dir=N©r   )r"   Úer   r   r   Ú	<genexpr>ë   ó    z*Command.run_notebookapp.<locals>.<genexpr>Ú.c                 s   s   | ]}|  d ¡V  qdS )z--HistoryManagerNr€   )r"   Úargr   r   r   r‚   ó   rƒ   z--HistoryManager.enabled=Falsez3Initialize should be a callable not an app instancezkernel.jsonÚwz+Could not write kernel %r in directories %r)rI   rH   rT   rS   ru   r:   ÚanyÚcallableÚwarningsÚwarnÚDeprecationWarningÚ
initializerl   r   Úitemsr   r   ÚdirnameÚresource_dirZuser_kernel_dirr{   ÚexistsÚmakedirsÚopenÚwriteÚto_jsonÚOSErrorr   Ústart)r+   Úapp_initrQ   Úuse_kernel_specsÚhistoryr=   rL   Znotebook_argumentsr}   rp   rq   Zkidrr   ÚrootsÚrootZ
kernel_dirÚfr   r   r   Úrun_notebookappÓ   sR    







.zCommand.run_notebookappz
--notebookzIPython Notebookc                    s  zddl m} W n ty*   t ¡  Y S 0 zddlm‰  W n¨ tyä   |jd dkrdt ¡  Y S zddlm‰  W nj tyÞ   |jd dkr t ¡  Y  Y S zddl	m
} |j‰ W n" tyØ   t ¡  Y  Y  Y S 0 Y n0 Y n0 |jd dk‰‡ fdd„‰‡‡‡‡fd	d
„}|S )Nr   rY   ©ÚNotebookAppé   é   )Únotebookappc                     s   ˆ   ¡ }|j| i |¤Ž |S r   ©ÚinstancerŒ   ©Úargsr_   rp   rž   r   r   r—   *  s    z&Command.get_notebook.<locals>.app_initc                      s   ˆ  ˆ ˆˆ¡ d S r   ©r�   r   )r—   rQ   r+   r˜   r   r   Úrun_notebook/  s    z*Command.get_notebook.<locals>.run_notebook)rb   rZ   rf   rg   rh   Únotebook.notebookapprŸ   rc   ZIPython.html.notebookappZIPython.frontend.html.notebookr¢   )r+   rQ   rZ   r¢   r¨   r   )rŸ   r—   rQ   r+   r˜   r   Úget_notebook  s.    
"zCommand.get_notebookz--labzJupyterLab Notebookc                    sŠ   zddl m‰  W n ty*   t ¡  Y S 0 zddlm} W n tyR   d }Y n0 |rbtˆ |ƒsjˆ j‰n‡ fdd„‰‡‡‡fdd„}|S )Nr   ©ÚLabApprž   c                     s   ˆ   ¡ }|j| i |¤Ž |S r   r£   r¥   r«   r   r   r—   C  s    z(Command.get_jupyterlab.<locals>.app_initc                      s   ˆj ˆ ˆdd� d S )NF)r™   r§   r   )r—   rQ   r+   r   r   Úrun_jupyterlabH  s    z.Command.get_jupyterlab.<locals>.run_jupyterlab)	Zjupyterlab.labappr¬   rf   rg   rh   r©   rŸ   Ú
issubclassZinitialize_server)r+   rQ   rŸ   r­   r   )r¬   r—   rQ   r+   r   Úget_jupyterlab3  s    
zCommand.get_jupyterlabz--plainzplain Pythonc              	      sN  dd l ‰ |  |¡‰zdd l}W n ty0   Y nN0 dd l}| | ˆ¡j¡ t|ddƒ}|d urtd|v rt| 	d¡ n
| 	d¡ |d }|d }|s˜|�s<t
tj d	¡tj d
¡gƒD ]†}|s¾q´tj |¡sÌq´t|ƒ�}| ¡ }	W d   ƒ n1 sò0    Y  ztt|	|dƒˆƒ W q´ t�y8   t ¡  | j�r4‚ Y q´0 q´‡ ‡fdd„}
|
S )Nr   Ú__doc__rM   Úlibeditzbind ^I rl_completeztab:completer8   r6   ZPYTHONSTARTUPz~/.pythonrc.pyÚexecc                      s   ˆ j ˆd� d S )N)Úlocal)Zinteractr   ©ÚcoderW   r   r   Ú	run_plainy  s    z$Command.get_plain.<locals>.run_plain)rµ   rX   Úreadlinerf   ÚrlcompleterZset_completerZ	CompleterZcompleterO   Úparse_and_bindr   r   r   r   r   Ú
expanduserÚisfiler’   Úreadr²   Úcompilero   rg   Ú	print_excrV   )r+   rQ   r·   r¸   Úreadline_docr8   r6   ZpythonrcÚhandleZpythonrc_coder¶   r   r´   r   Ú	get_plainL  s<    


 
&
zCommand.get_plainz	--bpythonZBPythonc                    s@   zddl m‰  W n ty*   t ¡  Y S 0 ‡ ‡‡fdd„}|S )Nr   ©Úembedc                     s2   ˆ  ˆ¡} i }ˆjrˆj|d< ˆ | fi |¤Ž d S )Nr¦   )rX   rI   )rW   r_   ©rÃ   rQ   r+   r   r   Úrun_bpython„  s
    

z(Command.get_bpython.<locals>.run_bpython)ÚbpythonrÃ   rf   rg   rh   )r+   rQ   rÅ   r   rÄ   r   Úget_bpython}  s    zCommand.get_bpythonz	--ipythonrb   c                    sŽ   z"ddl m‰ ‡‡‡fdd„}|W S  tyˆ   t ¡ }zddlm‰  W n& tyn   |d t ¡   Y  Y S 0 ‡ ‡‡fdd„}| Y S 0 d S )Nr   )Ústart_ipythonc                     s*   ˆ  ˆ ¡} ˆjpˆ ˆ ¡}ˆ|| d� d S ©Nr\   )rX   rI   rS   )rW   r}   )rQ   r+   rÈ   r   r   Úrun_ipython‘  s    
z(Command.get_ipython.<locals>.run_ipython)ÚIPShellÚ
c                     s"   ˆ  ˆ¡} ˆ g | d�}| ¡  d S rÉ   )rX   Zmainloop)rW   Úshell)rË   rQ   r+   r   r   rÊ   ¡  s    
)rb   rÈ   rf   rg   rh   ZIPython.ShellrË   )r+   rQ   rÊ   Zstr_excr   )rË   rQ   r+   rÈ   r   Úget_ipythonŒ  s    zCommand.get_ipythonz
--ptpythonZPTPythonc                    sv   zddl m‰ m‰ W nJ ty^   t ¡ }zddlm‰ m‰ W n tyX   | Y  Y S 0 Y n0 ‡ ‡‡‡fdd„}|S )Nr   )rÃ   Ú
run_configc                     s.   ˆ  ˆ¡} tj d¡}ˆ | |ˆd ˆd� d S )Nú~/.ptpython_historyr;   )ÚglobalsÚhistory_filenamer;   Ú	configure©rX   r   r   rº   ©rW   rÒ   ©rÃ   rQ   rÏ   r+   r   r   Úrun_ptpython²  s
    
ÿz*Command.get_ptpython.<locals>.run_ptpython)Úptpython.replrÃ   rÏ   rf   rg   rh   Úprompt_toolkit.contrib.repl)r+   rQ   Útbr×   r   rÖ   r   Úget_ptpython§  s    zCommand.get_ptpythonz--ptipythonz
PT-IPythonc                    s†   zddl m‰ ddlm‰  W nR tyn   t ¡ }zddlm‰ ddlm‰  W n tyh   | Y  Y S 0 Y n0 ‡ ‡‡‡fdd„}|S )Nr   )rÏ   rÂ   c                     s.   ˆ  ˆ¡} tj d¡}ˆ | |ˆd ˆd� d S )NrÐ   r;   )r]   rÒ   r;   rÓ   rÔ   rÕ   rÖ   r   r   Úrun_ptipythonÆ  s
    
ÿz,Command.get_ptipython.<locals>.run_ptipython)	rØ   rÏ   Zptpython.ipythonrÃ   rf   rg   rh   rÙ   Zprompt_toolkit.contrib.ipython)r+   rQ   rÚ   rÜ   r   rÖ   r   Úget_ptipython¹  s    zCommand.get_ptipythonz--idleÚIdlec                    s   ddl m‰  ‡ fdd„}|S )Nr   ©Úmainc                      s   t jd ddgt _ˆ ƒ  d S )Nr   r>   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
)rw   rK   r   rß   r   r   Úrun_idleÑ  s
    ý
z"Command.get_idle.<locals>.run_idle)Zidlelib.pyshellrà   )r+   rQ   rá   r   rß   r   Úget_idleÍ  s    zCommand.get_idlec                    sˆ   d‰ d}d}t tdg ƒ}t ¡ D ]b}|j}t |j¡}t‡ fdd„|D ƒƒr d|| vsh||| d vr ||  	di ¡ 
||i¡ q dS )	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_psycopg2Zfallback_application_nameZdjango_shellZ	DATABASESc                 3   s   | ]}|j  ˆ ¡V  qd S r   )Ú
__module__r   )r"   Úklass©Zsupported_backendsr   r   r‚   ô  rƒ   z/Command.set_application_name.<locals>.<genexpr>ÚOPTIONSN)rO   r   r   ÚallÚaliasr'   Úgetmror-   r‡   Ú
setdefaultÚupdate)r+   rQ   Úopt_nameZdefault_app_nameZdbsÚ
connectionrè   Úmror   rå   r   Úset_application_nameà  s    	zCommand.set_application_namec                    sæ  ˆ d ‰ˆ d }t tddƒ}d }d }ˆ d dkr4d nˆ d }tˆ d pH||ˆ d d	d
���v t td	d ƒ}‡fdd„}	ˆ ˆ ¡ |sž|rž|	d| ƒ}|sžd }|}|r²|ˆ ƒ}|j}nŽ‡ ‡‡fdd„}
tƒ }g d¢}|D ]2}|	d| ƒ}| |¡ |
|ƒ}|rÔ|j} �qqÔ|�s@ˆjD ]*}||v�r|
|ƒ}|�r|j} �q@�qt|ƒ�sr|�rXt	|ƒ |�sft
dƒ‚t
d| ƒ‚ˆj�rŠW d   ƒ dS ˆ d �r¼ˆ ˆ ¡}tˆ d |ƒ W d   ƒ d S |ƒ  W d   ƒ n1 �sØ0    Y  d S )NÚ	verbosityr/   ZSHELL_PLUS_PRINT_SQLFZtruncate_sqlr   Ú	print_sqlÚprint_sql_locationZ
SHELL_PLUS)rñ   Útruncaterò   Z
confprefixc                    s"   ˆ j D ]}| |jv r|  S qd S r   )r)   r   )Úflagr/   r*   r   r   Úget_runner_by_flag  s    


z*Command.handle.<locals>.get_runner_by_flagz--%sc                    sV   | j }ˆdkr"tˆj d| ¡ƒ | ˆ ƒ}t|ƒrRˆdkrNtˆj d| ¡ƒ |S d S )NrF   z
Trying: %srG   z	Using: %s)r   rd   rU   ZNOTICErˆ   )Ú
get_runnerr   r/   ©rQ   r+   rð   r   r   Ú
try_runner  s    z"Command.handle.<locals>.try_runner)Z	ptipythonZptpythonrÆ   ZipythonÚplainzNo shell runner could be found.z"Could not load shell runner: '%s'.é‚   Úcommand)rO   r   r	   rï   r   ÚsetÚaddr)   rˆ   rd   r   rV   rX   r²   )r+   r¦   rQ   rö   rñ   r/   r   ró   ZSETTINGS_SHELL_PLUSrõ   rø   Ztried_runnersZpreferred_runnersZflag_suffixrW   r   r÷   r   rÀ   ø  s`     







zCommand.handle)TT)Ú__name__rã   Ú__qualname__r   rI   rV   r&   r?   rJ   rS   rT   rX   r   ri   rs   r   r�   rª   r¯   rÁ   rÇ   rÎ   rÛ   rÝ   râ   rï   r   rÀ   Ú__classcell__r   r   r,   r   r    -   sB   A

?
 

0




r    )N)r'   r   rw   rg   r‰   Z	django.dbr   Zdjango.confr   Zdjango.core.management.baser   r   Zdjango.utils.datastructuresr   Z#django_extensions.management.shellsr   Z"django_extensions.management.utilsr   Z)django_extensions.management.debug_cursorr	   r   r   r    r   r   r   r   Ú<module>   s   
