o
    uvXj³  ã                   @   sH   d Z ddlZddlmZ ddlmZmZ ddlmZ G dd„ deƒZ	dS )z.
sqldns.py

Prints Data Source Name on stdout
é    N)Úsettings)ÚBaseCommandÚCommandError)Úcolor_stylec                       sJ   e Zd ZdZdZdZ‡ fdd„Zdd„ Zdd	„ Zd
d„ Z	ddd„Z
‡  ZS )ÚCommandzrPrints DSN on stdout, as specified in settings.py

    ./manage.py sqldsn [--router=<routername>] [--style=pgpass]FTc                    sl   t t| ƒ |¡ |jddddddd� |jdd	dd
d dd� |jddddddd� |jddddddd� d S )Nz-Rz--routerÚstoreÚrouterÚdefaultz+Use this router-database other then default)ÚactionÚdestr	   Úhelpz-sz--styleÚstylez,DSN format style: keyvalue, uri, pgpass, allz-az--allÚ
store_trueÚallFz Show DSN for all database routesz-qz--quietÚquietzQuiet mode only show DSN)Úsuperr   Úadd_argumentsÚadd_argument)ÚselfÚparser©Ú	__class__© úi/var/www/html/myproject/venv/lib/python3.10/site-packages/django_extensions/management/commands/sqldsn.pyr      s*   ýýý
ýzCommand.add_argumentsc                 O   s`   t ƒ | _|d }|rtj ¡ }n|d g}t|ƒD ]\}}|dkr'tj d¡ |  	||¡ qd S )Nr   r   r   Ú
)
r   r   r   Ú	DATABASESÚkeysÚ	enumerateÚsysÚstdoutÚwriteÚshow_dsn)r   ÚargsÚoptionsÚall_routersÚroutersÚir   r   r   r   Úhandle-   s   
ýzCommand.handlec              
   C   s.  t j |¡}|d }|d }|d u rtd| ƒ‚| d¡ d¡d }| d¡}| d¡}| d	¡}	| d
¡}
| d¡}g }|dkrN| |  |
||	||¡¡ n)|dv ra| | j|
||	|||d�¡ n|dkrn| d 	|	¡¡ n	| | j
 d¡¡ |s‡tj | j
 d||f ¡¡ |D ]}tj d 	|¡¡ q‰d S )Nr   r   zUnknown database router %sÚENGINEÚ.éÿÿÿÿÚUSERÚPASSWORDÚNAMEÚHOSTÚPORTÚmysql)Ú
postgresqlÚpostgresql_psycopg2Úpostgis)Ú	dsn_styleÚsqlite3z{}z#Unknown database, cant generate DSNz&DSN for router '%s' with engine '%s':
z{}
)r   r   Úgetr   ÚsplitÚappendÚ_mysqlÚextendÚ_postgresqlÚformatr   ÚERRORr   r   r    Ú	SQL_TABLE)r   r   r#   Údbinfor   r4   ÚengineÚdbuserÚdbpassÚdbnameÚdbhostÚdbportÚdsnÚoutputr   r   r   r!   ;   s4   





ÿÿzCommand.show_dsnc                 C   s&   d}|d ur
|d7 }|  |||||¡S )Nz.host="{0}", db="{2}", user="{3}", passwd="{4}"z, port="{1}")r<   )r   rD   rE   rC   rA   rB   Údsnstrr   r   r   r9   \   s   zCommand._mysqlNc           	      C   sü   g }|du s|dks|dkr$d}|dur|d7 }|  | |||||¡¡ |dks,|dkrBd}|dur6|d7 }|  | |||||¡¡ |dksJ|d	krad
}|  |j|rYdj||d�n||||d�¡ |dksi|dkr||  d tttd|||||gƒƒ¡¡ |S )z`PostgreSQL psycopg2 driver accepts two syntaxes

        Plus a string for .pgpass file
        Nr   Úkeyvaluez1host='{0}' dbname='{2}' user='{3}' password='{4}'z port='{1}'Úkwargsz6host='{0}', database='{2}', user='{3}', password='{4}'z, port='{1}'Úuriz,postgresql://{user}:{password}@{host}/{name}z{host}:{port})ÚhostÚport)rL   ÚnameÚuserÚpasswordÚpgpassú:)r8   r<   ÚjoinÚmapÚstrÚfilter)	r   rD   rE   rC   rA   rB   r4   rF   rH   r   r   r   r;   d   s@   
ü
üþ
ÿzCommand._postgresql)N)Ú__name__Ú
__module__Ú__qualname__r   Úrequires_system_checksÚcan_import_settingsr   r'   r!   r9   r;   Ú__classcell__r   r   r   r   r      s    !r   )
Ú__doc__r   Údjango.confr   Údjango.core.management.baser   r   Údjango.core.management.colorr   r   r   r   r   r   Ú<module>   s   