U
    \Mh>                   	   @   s  d dl Z 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
mZ d dlT dZd	Zd
Zedddg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  \Z!Z"e#e"d%k r$ed& e$  e%d% ee!Z&e"d' Z'dZ(e!j(rVd(d) e!j()d*D Z(e!j*Z*e*dkr|ej+,e'rxdndZ*ee*e'fe&Z-e!j.rd+/ed%d Z0ee0e- ee-e(e!j1e!j2e!j3e!j4  dS )-    N)getpass)OptionParser)*)print_)__version__)CockroachDatabasez.from peewee import *%s

database = %s('%s'%s)
zDclass BaseModel(Model):
    class Meta:
        database = database
zCclass UnknownField(object):
    def __init__(self, *_, **__): pass
Z	cockroachZcockroachdbZcrdbZmysqlZmysqldbZpostgresZ
postgresqlZsqliteZsqlite3c                 c   s$   | ]}t | D ]}||fV  qqd S N)DATABASE_ALIASES).0keyvalue r   ./venv/Scripts/pwiz.py	<genexpr>'   s   
 r   c                 K   sV   | t kr(tddt    td |dd }t |  }||f|}tj||dS )Nz)Unrecognized database, must be one of: %s,    schema)r   )	DATABASE_MAPerrjoinkeyssysexitpopZIntrospectorZfrom_database)Zdatabase_typeZdatabase_namekwargsr   ZDatabaseClassZdbr   r   r   make_introspector+   s    
r   FTc           
         s   j |||d }t  j dd|rFdt| ndf }t	| sbt	t
 t	t d fdd	 t }tj D ]"}	|	|kr|r|	|kr |	| qd S )	N)Ztable_namesinclude_views
snake_case\z\\z, **%s c                    s6  |pg }j |  }|D ]Z}|j}||kr<| |kr<td|  ||kr||kr|| || kr|||| g  qtdj|    j|   }st|}j|   |D ]\}}t	| k|dkt
 dk|jjkg}	|	rq|jrt
 dkrd|_|jtk}
|
r4r4d|j|jp df }td|  qtd	|   qtd
 td td|   | }|rtd t|D ]*\}}tdddd |D |f  qtd jrtdj  t
 dkrt fdd|D }ddd |D }td|  n s td td
 ||  d S )Nz# Possible reference cycle: %szclass %s(BaseModel):idr   Fz%s - %s?z    # %sz    %sr   z    class Meta:z        table_name = '%s'z        indexes = (z            ((%s), %s),r   c                 s   s   | ]}d | V  qdS z'%s'Nr   )r
   fieldr   r   r   r   |   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>   s   z6print_models.<locals>._print_table.<locals>.<listcomp>c                 s   s   | ]}d | V  qdS r"   r   )r
   Zpkr   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_keyZUnknownFieldr$   Zraw_column_typeZ	get_fieldmulti_column_indexesr   r   )tableseenZaccumr)   Zforeign_keydestr,   r$   columnskipZ
is_unknownZdispr1   ZfieldsuniqueZpk_field_namesZpk_list_print_tabledatabaseignore_unknownintrospectorpreserve_orderr&   r   r9   I   sn    






z"print_models.<locals>._print_table)N)Z
introspectZget_database_kwargsHEADERZget_additional_importsZget_database_class__name__get_database_namereplacereprr   UNKNOWN_FIELD
BASE_MODELsetr.   r+   r   )
r<   tablesr=   r   r;   r   Z	db_kwargsheaderr3   r2   r   r8   r   print_models6   s*    FrH   c                 C   sX   t j  }td td|   td|d  td|   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   )datetimeZnowr   strftimer@   peewee_version)cmd_liner<   Z	timestampr   r   r   print_header   s    
rM   c                 C   s   t jd|   t 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/d0dd1d2d. |d3d4dd5d6d. | S )7Nz$usage: %prog [options] database_name)usagez-Hz--hosthost)r4   z-pz--portportint)r4   typez-uz--useruserz-Pz
--passwordpassword
store_true)r4   actionz-ez--engineenginezVDatabase type, e.g. sqlite, mysql, postgresql or cockroachdb. Default is "postgresql".)r4   choiceshelpz-sz--schemar   z-tz--tablesrF   zWOnly generate the specified tables. Multiple table names should be separated by commas.)r4   r]   z-vz--viewsviewsz7Generate model classes for VIEWs in addition to tables.)r4   rZ   r]   z-iz--infoinfozIAdd database information and other metadata to top of the generated file.z-oz--preserve-orderr=   z6Model definition column ordering matches source table.)rZ   r4   r]   z-Iz--ignore-unknownr;   z.Ignore fields whose type cannot be determined.z-Lz--legacy-naminglegacy_namingz-Use legacy table- and column-name generation.)r   Z
add_optionr.   r   )parserZaoZenginesr   r   r   get_option_parser   s<    






rb   c                    s.   d}t  fdd|D } jr*t |d< |S )N)rS   rT   rW   r   c                 3   s&   | ]}t  |r|t  |fV  qd S r   )getattr)r
   ooptionsr   r   r      s     
 z%get_connect_kwargs.<locals>.<genexpr>rX   )dictrX   r   )rf   Zopsr   r   re   r   get_connect_kwargs   s
    
rh   __main__r   z%Missing required parameter "database"c                 C   s   g | ]}|  r|  qS r   )strip)r
   r2   r   r   r   r(      s    r(   , )NFFFT)5rI   osr   r   Zoptparser   Zpeeweer   r   rK   Zplayhouse.cockroachdbr   Zplayhouse.reflectionr>   rD   rC   ZMySQLDatabaseZPostgresqlDatabaseZSqliteDatabaser	   rg   r   r   rH   rM   r   rb   rh   r?   argvZraw_argvra   
parse_argsrf   argsr0   
print_helpr   Zconnectr:   rF   splitr[   pathexistsr<   r_   r   rL   r=   r^   r;   r`   r   r   r   r   <module>   st             
_




 