U
    7h                     @   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   f/var/www/formularioweb/env/lib/python3.8/site-packages/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argsmysqlkwargs
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.)r9   r:   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.)r7   r8   r9   choicesr:   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dbspecstyles	__class__r   r   rC   [   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>   databaser6   z2--router is deprecated. You should use --database.   )
stacklevelr   
)r   r<   r   	DATABASESkeysr   warningswarnr   	enumeratesysstdoutwriteshow_dsn)rI   r/   optionsZall_databasesZ	databasesirN   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 )NrA   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<   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:
rQ   )r   rR   getr   rH   r"   r<   ERRORrW   rX   rY   Z	SQL_TABLE)rI   rN   r[   ZdbinforA   Zdsn	availableoutputr   rb   r   rZ      s:    





"zCommand.show_dsn)__name__
__module____qualname__r:   r4   r   r   __annotations__Zcan_import_settingsrC   r]   rZ   __classcell__r   r   rL   r   r3   V   s   
r3   )__doc__rW   rT   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,   rH   r3   r   r   r   r   <module>   s<   