3
,$Zo                 @   s  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rejZe Zej \ZZejryd dlm Z  W n( e!k
r   ed ej"d  Y nX e#ed k r@ed! ej$  ej"d  eeZ%ed( Z&dZ'ej'rrd"d# ej'j(d$D Z'eej)e&fe%Z*ej+rd%j,ed d Z-ee-e* ee*e'ejd& 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   @/tmp/pip-build-mhgsk_di/peewee/peewee-3.3.1.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r`| sz||kr` || q`W d S )N)Ztable_namesc                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   e   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>n   s    z6print_models.<locals>._print_table.<locals>.<listcomp>c             s   s   | ]}d | V  qdS )z'%s'Nr   )r	   pkr   r   r   r   p   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   r5   7   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   )r7   tablesr8   r.   r-   r   )r5   r6   r7   r8   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_liner7   	timestampr   r   r   print_header~   s    
rF   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+ | S ),Nz$usage: %prog [options] database_name)usagez-Hz--hosthost)r0   z-pz--portportint)r0   typez-uz--useruserz-Pz
--passwordpassword
store_true)r0   actionz-ez--engineenginer   zIDatabase type, e.g. sqlite, mysql or postgresql. Default is "postgresql".)r0   defaultchoiceshelpz-sz--schemar   z-tz--tablesr>   zWOnly generate the specified tables. Multiple table names should be separated by commas.)r0   rW   z-iz--infoinfozIAdd database information and other metadata to top of the generated file.)r0   rS   rW   z-oz--preserve-orderr8   z6Model definition column ordering matches source table.)rS   r0   rW   )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 )	NrL   rM   rP   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>rQ   )rL   rM   rP   r   )dictrQ   r   )r^   opsr   r   )r^   r   get_connect_kwargs   s
    
ra   __main__)OrderedDictz&Preserve order requires Python >= 2.7.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!   , )r8   )NF).r@   r   r   optparser   Zpeeweer   r   rC   Zplayhouse.reflectionr9   ZMySQLDatabaseZPostgresqlDatabaseZSqliteDatabaser   r_   r   r   r?   rF   r   r[   ra   r:   argvZraw_argvrZ   
parse_argsr^   argsr8   collectionsrc   ImportErrorr   r*   
print_helpconnectr6   r>   splitrT   r7   rX   r   rD   r   r   r   r   <module>   sV   

P



