o
    ѷ6i                     @  s|   d dl mZ d dlZd dlmZ d dlmZ d dlmZ d dlm	Z	 d dlm
Z
 d dlmZ d d	lmZ G d
d deZdS )    )annotationsN)Any)BaseCommand)CommandError)DEFAULT_DB_ALIAS)connections)ConnectionDoesNotExist)settings_to_cmd_argsc                   @  sR   e Zd ZU dZdjedZg Zded< dd
dZ	dddZ
dddZdddZdS ) Commandz<optional connection alias>zOutputs shell parameters representing database connection suitable for inclusion in various tools' commandlines. The connection alias should be a name from DATABASES - defaults to '{default}'.)defaultz	list[str]requires_system_checksparserargparse.ArgumentParserreturnNonec                 C  s@   |j dddtdd |j ddddd	d
 |j dddddd
 d S )Nalias?z?Specify the database connection alias to output parameters for.)metavarnargsr   helpz--mysql
store_true
show_mysqlFzOutputs flags for tools that take parameters in the same format as the mysql client, e.g. mysql $(./manage.py dbparams --mysql))actiondestr   r   z--dsnshow_dsnz_Output a DSN for e.g. percona tools, e.g. pt-online-schema-change $(./manage.py dbparams --dsn))add_argumentr   )selfr    r   n/var/www/hoanhtaovolam_webdjango/env/lib/python3.10/site-packages/django_mysql/management/commands/dbparams.pyadd_arguments   s*   	
zCommand.add_argumentsargsr   r   strr   boolr   optionsc                O  s   zt | }W n ty   td|dw |jdkr"t|d|r*|r*td|s0|s0d}|j}|r<| | d S |rE| | d S td)NzConnection z does not existmysqlz# is not a MySQL database connectionz"Pass only one of --mysql and --dsnT
Impossible)r   r   r   vendorsettings_dictoutput_for_mysqloutput_for_dsnAssertionError)r   r   r   r   r    r#   
connectionr'   r   r   r   handle6   s"   
zCommand.handler'   dict[str, Any]c                 C  s.   t |}|dd  }| jjd|dd d S )N     ending)r	   stdoutwritejoin)r   r'   r    r   r   r   r(   N   s   zCommand.output_for_mysqlc                 C  sL  |d  di  d}|r| jd |d  d|d }|d  d|d }|d  d	|d
 }|d  d|d }|d  d|d }|d  d}g }	|rX|	d|  |rb|	d|  |rl|	d|  |rd|v r{|	d|  n|	d|  |r|	d|  |r|	d|  d|	}
| jj|
dd d S )NOPTIONSsslcazWarning: SSL params can't be passed in the DSN syntax; you must pass them in your my.cnf. See: https://www.percona.com/blog/2014/10/16/percona-toolkit-for-mysql-with-mysql-ssl-connections/dbNAMEuserUSERpasswdPASSWORDhostHOSTportPORTread_default_filezF=zu=zp=/zS=zh=zP=zD=,r0   r1   )getstderrr4   appendr5   r3   )r   r'   certr9   r;   r=   r?   rA   defaults_filer    dsnr   r   r   r)   S   s8   
zCommand.output_for_dsnN)r   r   r   r   )r    r   r   r!   r   r"   r   r"   r#   r   r   r   )r'   r-   r   r   )__name__
__module____qualname__r    formatr   r   r   __annotations__r   r,   r(   r)   r   r   r   r   r
      s   
 


r
   )
__future__r   argparsetypingr   django.core.managementr   r   	django.dbr   r   django.db.utilsr   django_mysql.utilsr	   r
   r   r   r   r   <module>   s    