o
    /h                     @   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   g/var/www/html/env_mimamsha/lib/python3.10/site-packages/django_extensions/management/commands/sqldsn.py_sqlite_name   s   r   c              	   C   :   d|  d| d| d| d	}|d ur|d| d7 }|S )Nzhost="z", db="z	", user="z", passwd=""z, port="r   r   r   r   r   r   dsnstrr   r   r   _mysql_keyvalue      r   c              	   C   s8   d|  d| d| d| d	}|d ur|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   r   )Nzhost='z
' dbname='z' user='z' password=''z port='r   r   r   r   r   _postgresql_keyvalue&   r   r   c                 C   s6   d| d|d|d|}|d ur|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>7   s    z%_postgresql_pgpass.<locals>.<genexpr>)joinr   r   r   r   _postgresql_pgpass6   s   r&   c                    s    fdd}|S )Nc                    sz   | pd}|d ur|dkr|d| 7 }|d ur3|dkr3|}|d ur,|dkr,|d| 7 }| d| }  d| d| S )N r    @z:///r   )r   r   r   r   r   hostuserenginer   r   inner;   s   z_uri.<locals>.innerr   )r-   r.   r   r,   r   _uri:   s   r/   filenameurisqlitekeyvalueargsmysqlkwargs
postgresql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.)r?   r@   c                 S   s   g | ]\}}}|d ur|qS r   r   )r"   _styler   r   r   
<listcomp>v   s    z)Command.add_arguments.<locals>.<listcomp>z-sz--stylerB   allzDSN format style.)r=   r>   r?   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parserdbspecstyles	__class__r   r   rI   ^   sZ   		
zCommand.add_argumentsc                 O   s   t  | _|d }|rtj }n|d g}|d tkr(tjdtdd |d g}t	|D ]\}}|dkr:t
jd | || q,d S )	NrD   databaser<   z2--router is deprecated. You should use --database.   )
stacklevelr   
)r   rB   r   	DATABASESkeysr   warningswarnr   	enumeratesysstdoutwriteshow_dsn)rO   r4   optionsall_databases	databasesirU   r   r   r   handle   s"   

zCommand.handlec              	      s"  t j|}|d }|d |d u rtd| |d|d|d|d|d |d	d
kr<d  fddtD }|sndfddtD }| j|rjd d d| dndg}|stj	
| jd|dd |D ]}tj	
| d qd S )NrG   rB   zUnknown database %sENGINEUSERPASSWORDNAMEHOSTPORTr'   c                    sB   g | ]\}}}|v r|ksd kr|dur| qS )rD   Nr   )r"   enginesrB   	formatterr   r   r   r   r   	dsn_styler-   r   r   rC      s    z$Command.show_dsn.<locals>.<listcomp>z, c                 3   s*    | ]\}}} |v r|d ur|V  qd S r   r   )r"   rm   rB   rA   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:
rX   )r   rY   getr   rN   r%   rB   ERRORr^   r_   r`   	SQL_TABLE)rO   rU   rb   dbinforG   dsn	availableoutputr   ro   r   ra      sF   





zCommand.show_dsn)__name__
__module____qualname__r@   r:   r   r!   __annotations__can_import_settingsrI   rf   ra   __classcell__r   r   rS   r   r9   Y   s   
 4r9   )__doc__r^   r[   typingr   django.confr   django.core.management.baser   r   django.core.management.colorr   	django.dbr   django_extensions.settingsr   r	   r
   #django_extensions.utils.deprecationr   r   r   r   r   r   r&   r/   rN   r9   r   r   r   r   <module>   s>   	