a
    ÆZEgº  ã                   @   s0  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m	Z	 ddl
mZ ddlmZ ddlmZmZmZ dd	lmZ d
d„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zedefedefededƒfedefedefedefededƒfedefedefedefededƒfed efgZG d!d"„ d"eƒZdS )#z.
sqldns.py

Prints Data Source Name on stdout
é    N)ÚList)Úsettings)ÚBaseCommandÚCommandError)Úcolor_style)ÚDEFAULT_DB_ALIAS)ÚSQLITE_ENGINESÚPOSTGRESQL_ENGINESÚMYSQL_ENGINES)ÚRemovedInNextVersionWarningc                 C   s   |S ©N© ©ÚdbhostÚdbportÚdbnameÚdbuserÚdbpassr   r   úe/var/www/sistema_ama/venv/lib/python3.9/site-packages/django_extensions/management/commands/sqldsn.pyÚ_sqlite_name   s    r   c              	   C   s:   d| › d|› d|› d|› d�	}|d ur6|d|› d�7 }|S )Nzhost="z", db="z	", user="z", passwd="ú"z, port="r   ©r   r   r   r   r   Zdsnstrr   r   r   Ú_mysql_keyvalue   s    r   c              	   C   s8   d| › d|› d|› d|› d�	}|d ur4|d|› �7 }|S )Nz-h "z" -D "z" -u "z" -p "r   z -P r   r   r   r   r   Ú_mysql_args   s    r   c              	   C   s:   d| › d|› d|› d|› d�	}|d ur6|d|› d�7 }|S )Nzhost='z
' dbname='z' user='z' password='ú'z port='r   r   r   r   r   Ú_postgresql_keyvalue&   s    r   c                 C   s6   d| ›d|›d|›d|›�}|d ur2|d|›�7 }|S )Nzhost=z, database=z, user=z, password=z, port=r   r   r   r   r   Ú_postgresql_kwargs-   s    r   c                 C   s   d  dd„ | ||||fD ƒ¡S )Nú:c                 s   s   | ]}t |ƒV  qd S r   )Ústr)Ú.0Úsr   r   r   Ú	<genexpr>5   ó    z%_postgresql_pgpass.<locals>.<genexpr>)Újoinr   r   r   r   Ú_postgresql_pgpass4   s    r$   c                    s   ‡ fdd„}|S )Nc                    sz   | pd}|d ur&|dkr&|d|› �7 }|d urf|dkrf|}|d urX|dkrX|d|› �7 }|› d|› �}ˆ › d|› d|› �S )NÚ r   ú@z://ú/r   )r   r   r   r   r   ÚhostÚuser©Úenginer   r   Úinner9   s    z_uri.<locals>.innerr   )r+   r,   r   r*   r   Ú_uri8   s    
r-   ÚfilenameÚuriZsqliteZkeyvalueÚargsZmysqlÚkwargsZ
postgresqlZpgpassc                       sF   e Zd ZU dZg Zee ed< dZ‡ fdd„Z	dd„ Z
dd	„ Z‡  ZS )
ÚCommandz1Prints DSN on stdout, as specified in settings.pyÚrequires_system_checksTc              	      s¢   t ƒ  |¡ | ¡ }|jddddtdd� |jdtdt d	� ttd
d„ tD ƒƒƒ}|jddddd |dg dd� |jddddddd� |jddddddd� d S )Nz-Rz--routerÚstoreÚrouterzPUse this router-database other then default (deprecated: use --database instead))ÚactionÚdestÚdefaultÚhelpz
--databasezGNominates a database to run command for. Defaults to the "%s" database.)r8   r9   c                 S   s   g | ]\}}}|d ur|‘qS r   r   )r   Ú_Ústyler   r   r   Ú
<listcomp>g   r"   z)Command.add_arguments.<locals>.<listcomp>z-sz--styler;   ÚallzDSN format style.)r6   r7   r8   Úchoicesr9   z-az--allÚ
store_trueFz Show DSN for all database routesz-qz--quietÚquietzQuiet mode only show DSN)ÚsuperÚadd_argumentsÚadd_mutually_exclusive_groupÚadd_argumentr   ÚsortedÚsetÚ_FORMATTERS)ÚselfÚparserZdbspecZstyles©Ú	__class__r   r   rB   [   s6    ýþýýýzCommand.add_argumentsc                 O   s†   t ƒ | _|d }|r tj ¡ }n0|d g}|d tkrPtjdtdd� |d g}t	|ƒD ](\}}|dkrtt
j d¡ |  ||¡ qXd S )	Nr=   Údatabaser5   z2--router is deprecated. You should use --database.é   )Ú
stacklevelr   Ú
)r   r;   r   Ú	DATABASESÚkeysr   ÚwarningsÚwarnr   Ú	enumerateÚsysÚstdoutÚwriteÚshow_dsn)rH   r0   ÚoptionsZall_databasesZ	databasesÚirL   r   r   r   Úhandlex   s    

zCommand.handlec              	      s&  t j |¡}|d }|d ‰|d u r0td| ƒ‚| d¡‰| d¡‰| d¡‰| d¡‰| d¡‰ | d	¡‰ˆd
krxd ‰‡ ‡‡‡‡‡‡fdd„tD ƒ}|sÜd ‡fdd„tD ƒ¡}| j |rÔdˆ› dˆ› d|› d�nd¡g}|�stj	 
| j d|›dˆ›d�¡¡ |D ]}tj	 
|› d�¡ �qd S )Nr@   r;   zUnknown database %sZENGINEÚUSERZPASSWORDÚNAMEZHOSTZPORTr%   c                    sB   g | ]:\}}}ˆ|v rˆ|ks.ˆd kr|dur|ˆ ˆˆˆˆƒ‘qS )r=   Nr   )r   Úenginesr;   Ú	formatter©r   r   r   r   r   Z	dsn_styler+   r   r   r<   š   s   ýz$Command.show_dsn.<locals>.<listcomp>z, c                 3   s(   | ] \}}}ˆ |v r|d ur|V  qd S r   r   )r   r^   r;   r:   r*   r   r   r!   ¢   s   ÿz#Command.show_dsn.<locals>.<genexpr>zInvalid style z for z (available: ú)z$Unknown database, can't generate DSNzDSN for database z with engine z:
rO   )r   rP   Úgetr   rG   r#   r;   ÚERRORrU   rV   rW   Z	SQL_TABLE)rH   rL   rY   Zdbinfor@   ZdsnÚ	availableÚoutputr   r`   r   rX   ‰   s:    





þÿÿþ"zCommand.show_dsn)Ú__name__Ú
__module__Ú__qualname__r9   r3   r   r   Ú__annotations__Zcan_import_settingsrB   r[   rX   Ú__classcell__r   r   rJ   r   r2   V   s   
r2   )Ú__doc__rU   rR   Útypingr   Zdjango.confr   Zdjango.core.management.baser   r   Zdjango.core.management.colorr   Z	django.dbr   Zdjango_extensions.settingsr   r	   r
   Z#django_extensions.utils.deprecationr   r   r   r   r   r   r$   r-   rG   r2   r   r   r   r   Ú<module>   s<   ô