3
\                 @   sz  d dl Z d dlZd dlmZ d dlmZ d dlT d dlmZ d dlmZ d dl	T dZ
edd	ged
dgeddgiZedd eD Zdd Zd$ddZdd Zdd Zdd Zdd ZedkrvejZe Zej \ZZeedk  red ej  ej d eeZ!ed% Z"dZ#ej#r0d d! ej#j$d"D Z#eej%e"fe!Z&ej'rdd#j(edd Z)ee)e& ee&e#ej*ej+ dS )&    N)getpass)OptionParser)*)print_)__version__zfrom peewee import *%s

database = %s('%s', **%s)

class UnknownField(object):
    def __init__(self, *_, **__): pass

class BaseModel(Model):
    class Meta:
        database = database
ZmysqlZmysqldbZpostgres
postgresqlZsqliteZsqlite3c             c   s$   | ]}t | D ]}||fV  qqd S )N)DATABASE_ALIASES).0keyvalue r   B/tmp/pip-install-c4ydso4_/peewee/peewee-3.8.2.data/scripts/pwiz.py	<genexpr>   s   r   c             K   sV   | t kr(tddjt j   tjd |jdd }t |  }||f|}tj||dS )Nz)Unrecognized database, must be one of: %sz,    schema)r   )	DATABASE_MAPerrjoinkeyssysexitpopZIntrospectorZfrom_database)Zdatabase_typeZdatabase_namekwargsr   ZDatabaseClassdbr   r   r   make_introspector#   s    
r   Fc                s   j ||dttj j jj tj f  d fdd	 t	 }x6t
jj D ]$}||krb| s|||krb || qbW d S )N)Ztable_namesinclude_viewsc                s
  |pg }j |  }xb|D ]Z}|j}||kr>| |kr>td|  ||kr||kr|j| || kr|||| g  qW tdj|    j|  j }st|}j|   xh|D ]`\}}t	| k|dkt
 dk|jjkg}	|	rq|jot
 dkrd|_td|j   qW td td td	|   j| }
|
rtd
 x6t|
D ]*\}}tddjdd |D |f  qTW td jrtdj  t
 dkrt fdd|D }djdd |D }td|  n std td |j|  d S )Nz# Possible reference cycle: %szclass %s(BaseModel):idr   Fz    %s z    class Meta:z        table_name = '%s'z        indexes = (z            ((%s), %s),z, c             s   s   | ]}d | V  qdS )z'%s'Nr   )r	   fieldr   r   r   r   g   s    z5print_models.<locals>._print_table.<locals>.<genexpr>z	        )z        schema = '%s'c                s   g | ]\}}| kr|j qS r   )name)r	   colr   )primary_keysr   r   
<listcomp>p   s    z6print_models.<locals>._print_table.<locals>.<listcomp>c             s   s   | ]}d | V  qdS )z'%s'Nr   )r	   pkr   r   r   r   r   s    z&        primary_key = CompositeKey(%s)z        primary_key = False)foreign_keysZ
dest_tabler   addmodel_namescolumnsitemssortedr!   alllenZfield_classZ
pk_classesZprimary_key	get_fieldmulti_column_indexesr   r   )tableseenaccumr$   Zforeign_keydestr'   r   columnskipr-   fieldsuniqueZpk_field_namesZpk_list)_print_tabledatabaseintrospectorpreserve_order)r!   r   r6   9   s`    





z"print_models.<locals>._print_table)N)Z
introspectr   TEMPLATEZget_additional_importsZget_database_class__name__get_database_namereprZget_database_kwargssetr)   r&   r   )r8   tablesr9   r   r/   r.   r   )r6   r7   r8   r9   r   print_models.   s    Ar@   c             C   sX   t j j }td td|   td|jd  td|j   tdt  td d S )Nz# Code generated by:z# python -m pwiz %sz
# Date: %sz%B %d, %Y %I:%M%pz# Database: %sz# Peewee version: %sr   )datetimenowr   strftimer<   peewee_version)cmd_liner8   	timestampr   r   r   print_header   s    
rG   c             C   s   t jjd|   t jj  d S )Nz[91m%s[0m
)r   stderrwriteflush)msgr   r   r   r      s    r   c              C   s   t dd} | j}|dddd |ddd	d
d |dddd |ddddd tt}|dddd|dd |dddd |dddd d! |d"d#d$dd%d& |d'd(d)dd*d& |d+d,dd-d.d/ | S )0Nz$usage: %prog [options] database_name)usagez-Hz--hosthost)r1   z-pz--portportint)r1   typez-uz--useruserz-Pz
--passwordpassword
store_true)r1   actionz-ez--engineenginer   zIDatabase type, e.g. sqlite, mysql or postgresql. Default is "postgresql".)r1   defaultchoiceshelpz-sz--schemar   z-tz--tablesr?   zWOnly generate the specified tables. Multiple table names should be separated by commas.)r1   rX   z-vz--viewsviewsz7Generate model classes for VIEWs in addition to tables.)r1   rT   rX   z-iz--infoinfozIAdd database information and other metadata to top of the generated file.z-oz--preserve-orderr9   z6Model definition column ordering matches source table.)rT   r1   rX   )r   
add_optionr)   r   )parserZaoZenginesr   r   r   get_option_parser   s&    



r]   c                s.   d}t  fdd|D } jr*t |d< |S )	NrM   rN   rQ   r   c             3   s&   | ]}t  |r|t  |fV  qd S )N)getattr)r	   o)optionsr   r   r      s    z%get_connect_kwargs.<locals>.<genexpr>rR   )rM   rN   rQ   r   )dictrR   r   )r`   opsr   r   )r`   r   get_connect_kwargs   s
    
rc   __main__r   z%Missing required parameter "database"c             C   s   g | ]}|j  r|j  qS r   )strip)r	   r.   r   r   r   r"      s    r"   , )NFF),rA   r   r   optparser   Zpeeweer   r   rD   Zplayhouse.reflectionr:   ZMySQLDatabaseZPostgresqlDatabaseZSqliteDatabaser   ra   r   r   r@   rG   r   r]   rc   r;   argvZraw_argvr\   
parse_argsr`   argsr+   
print_helpr   connectr7   r?   splitrU   r8   rZ   r   rE   r9   rY   r   r   r   r   <module>   sL   
 
Q



