U
    ad                     @   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   P/tmp/pip-unpacked-wheel-portabvm/django_extensions/management/commands/sqldsn.py_sqlite_name   s    r   c              	   C   s:   d|  d| d| d| d	}|d k	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 k	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 k	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 k	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   s     z%_postgresql_pgpass.<locals>.<genexpr>)joinr   r   r   r   _postgresql_pgpass4   s    r#   c                    s    fdd}|S )Nc                    sz   | pd}|d k	r&|dkr&|d| 7 }|d k	rf|dkrf|}|d k	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.)r7   r8   c                 S   s   g | ]\}}}|d k	r|qS r   r   )r   _styler   r   r   
<listcomp>g   s      z)Command.add_arguments.<locals>.<listcomp>z-sz--styler:   allzDSN format style.)r5   r6   r7   choicesr8   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   rA   [   sR                  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<   databaser4   z2--router is deprecated. You should use --database.   )
stacklevelr   
)r   r:   r   	DATABASESkeysr   warningswarnr   	enumeratesysstdoutwriteshow_dsn)rG   r/   optionsZall_databasesZ	databasesirK   r   r   r   handlex   s    

zCommand.handlec              	      s&  t j|}|d }|d |d kr0td| |d|d|d|d|d |d	d
krxd  fddtD }|sdfddtD }| j|rd 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 | ]:\}}}|kr|ks.d kr|dk	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(   | ] \}}} |kr|d k	r|V  qd S r   r   )r   r]   r:   r9   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:
rN   )r   rO   getr   rF   r"   r:   ERRORrT   rU   rV   Z	SQL_TABLE)rG   rK   rX   Zdbinfor?   Zdsn	availableoutputr   r_   r   rW      s:    





"zCommand.show_dsn)__name__
__module____qualname__r8   r2   r   r   __annotations__Zcan_import_settingsrA   rZ   rW   __classcell__r   r   rI   r   r1   V   s   
r1   )__doc__rT   rQ   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,   rF   r1   r   r   r   r   <module>   s<   