î
à^Q\'  ã               @   sb   d  Z  d d l Z d d l m Z d d l m Z m Z d d l m Z Gd d „  d e ƒ Z	 d S)z0
sqldns.py - Prints Data Source Name on stdout

é    N)Úsettings)ÚBaseCommandÚCommandError)Úcolor_stylec                   s[   e  Z d  Z d Z d Z d Z ‡  f d d †  Z d d „  Z d d	 „  Z d
 d d „ Z	 ‡  S)ÚCommandzrPrints DSN on stdout, as specified in settings.py

    ./manage.py sqldsn [--router=<routername>] [--style=pgpass]FTc                sº   t  t |  ƒ j | ƒ | j d d d d d d d d d d	 ƒ| j d
 d d d d d d d  d d ƒ| j d d d d d d d d d d ƒ| j d d d d d d d d d d ƒd  S)Nz-Rz--routerÚactionÚstoreÚdestÚrouterÚdefaultÚhelpz+Use this router-database other then defaultz-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__© ú]/var/www/dbchiro/venv/build/django-extensions/django_extensions/management/commands/sqldsn.pyr      s    zCommand.add_argumentsc             O   s•   t  ƒ  |  _ | j d ƒ } | r3 t j j ƒ  } n | j d ƒ g } xI t | ƒ D]; \ } } | d k r} t j j	 d ƒ n  |  j
 | | ƒ qR Wd  S)Nr   r
   r   Ú
)r   r   Úgetr   Ú	DATABASESÚkeysÚ	enumerateÚsysÚstdoutÚwriteÚshow_dsn)r   ÚargsÚoptionsZall_routersZroutersÚir
   r   r   r   Úhandle$   s    zCommand.handlec             C   s×  t  j j | ƒ } | j d ƒ } | j d ƒ } | d  k rO t d | ƒ ‚ n  | j d ƒ j d ƒ d } | j d ƒ } | j d ƒ } | j d	 ƒ }	 | j d
 ƒ }
 | j d ƒ } g  } | d k rd } | d  k	 rç | d 7} n  | j | j |
 | |	 | | ƒ ƒ nn | d k r<|  j |
 | |	 | | d | ƒ} n> | d k ra| j d j |	 ƒ ƒ n | j |  j j	 d ƒ ƒ | s©t
 j j |  j j d | | f ƒ ƒ n  x' | D] } t
 j j d j | ƒ ƒ q°Wd  S)Nr   r   zUnknown database router %sZENGINEÚ.é   ÚUSERZPASSWORDÚNAMEZHOSTZPORTZmysqlz.host="{0}", db="{2}", user="{3}", passwd="{4}"z, port="{1}"Ú
postgresqlÚpostgresql_psycopg2ÚpostgisÚ	dsn_styleZsqlite3z{}z#Unknown database, cant generate DSNz&DSN for router '%s' with engine '%s':
z{}
éÿÿÿÿ)z
postgresqlr+   r,   )r   r   r   r   ÚsplitÚappendÚformatr*   r   ÚERRORr   r   r    Z	SQL_TABLE)r   r
   r#   Zdbinfor   r-   ZengineÚdbuserÚdbpassÚdbnameÚdbhostÚdbportÚdsnÚdsnstrÚoutputr   r   r   r!   2   s<    $)zCommand.show_dsnNc       	      C   sx  g  } | d k s* | d k s* | d k rn d } | d k	 rI | d 7} n  | j  | j | | | | | ƒ ƒ n  | d k s† | d k rÊ d } | d k	 r¥ | d 7} n  | j  | j | | | | | ƒ ƒ n  | d k sâ | d	 k r"| d k	 r÷ d
 } n d } | j  | j | | | | | ƒ ƒ n  | d k s:| d k rt| d k	 rOd } n  | j  d j | | | | | ƒ ƒ n  | S)zaPostgreSQL psycopg2 driver  accepts two syntaxes

        Plus a string for .pgpass file
        Nr   Zkeyvaluez1host='{0}' dbname='{2}' user='{3}' password='{4}'z port='{1}'Úkwargsz6host='{0}', database='{2}', user='{3}', password='{4}'z, port='{1}'Úuriz postgresql://{3}:{4}@{0}:{1}/{2}zpostgresql://{3}:{4}@{0}/{2}Zpgpassi8  z{0}:{1}:{2}:{3}:{4})r0   r1   )	r   r6   r7   r5   r3   r4   r-   r8   r9   r   r   r   r*   ]   sJ    $		zCommand.postgresql)
Ú__name__Ú
__module__Ú__qualname__r   Zrequires_system_checksZcan_import_settingsr   r%   r!   r*   r   r   )r   r   r      s   +r   )
Ú__doc__r   Zdjango.confr   Zdjango.core.management.baser   r   Zdjango.core.management.colorr   r   r   r   r   r   Ú<module>   s
   