o
    ðT·jü   ã                	   @   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T dZdZd	Ze
g d
¢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d!d"„ Zed#krueƒ  dS dS )%é    N)Úgetpass)ÚOptionParser)Ú*)Ú__version__)ÚCockroachDatabasez.from peewee import *%s

database = %s('%s'%s)
zDclass BaseModel(Model):
    class Meta:
        database = database
zCclass UnknownField(object):
    def __init__(self, *_, **__): pass
)Ú	cockroachÚcockroachdbÚcrdbÚmysqlÚmysqldbÚpostgresÚ
postgresqlÚsqliteÚsqlite3c                 c   s&   � | ]}t | D ]}||fV  qqd S ©N)ÚDATABASE_ALIASES)Ú.0ÚkeyÚvalue© r   úG/home/dinkstrade/pdmp-scanner/venv/lib/python3.10/site-packages/pwiz.pyÚ	<genexpr>&   s   € þþr   c                 K   sZ   | t vrtdd t  ¡ ¡ ƒ t d¡ | dd ¡}t |  }||fi |¤Ž}tj||d�S )Nz)Unrecognized database, must be one of: %sú, é   Úschema)r   )	ÚDATABASE_MAPÚerrÚjoinÚkeysÚsysÚexitÚpopÚIntrospectorÚfrom_database)Údatabase_typeÚdatabase_nameÚkwargsr   ÚDatabaseClassÚdbr   r   r   Úmake_introspector*   s   ÿ
r)   FTc           
         s¼   ˆj |||d�‰ˆ ¡ }tˆ ¡ ˆ ¡ jˆ ¡  dd¡|r#dt|ƒ ndf }t	|ƒ ˆs1t	t
ƒ t	tƒ d‡ ‡‡‡‡fdd„	‰ tƒ }tˆj ¡ ƒD ]}	|	|vr[|rV|	|v r[ˆ |	|ƒ qJd S )	N)Útable_namesÚinclude_viewsÚ
snake_caseú\z\\z, **%sÚ c                    sd  |pg }ˆj |  }|D ]-}|j}||v r| |vrtd| ƒ ||vr8||vr8| |¡ || kr8ˆ|||| g ƒ qtdˆj|   ƒ ˆj|   ¡ }ˆsOt|ƒ}ˆj|  ‰ |D ]I\}}t	|ˆ v |dkt
ˆ ƒdk|jˆjv gƒ}	|	rqqV|jr}t
ˆ ƒdkr}d|_|jtu }
|
r—ˆr—d|j|jp�df }td| ƒ qVtd	| ¡  ƒ qVtd
ƒ tdƒ td|  ƒ ˆ | ¡}|rÖtdƒ t|ƒD ]\}}tdd dd„ |D ƒ¡|f ƒ q½tdƒ ˆjràtdˆj ƒ t
ˆ ƒdk�rt‡ fdd„|D ƒƒ}d dd„ |D ƒ¡}td| ƒ nˆ �s
tdƒ ˆ | ¡}|�r'tdƒ |D ]}td|j�p"|j ƒ �q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   ó   � | ]}d | V  qdS ©z'%s'Nr   )r   Úfieldr   r   r   r   {   ó   € z5print_models.<locals>._print_table.<locals>.<genexpr>z	        )z        schema = '%s'c                    s   g | ]\}}|ˆ v r|j ‘qS r   )Úname)r   Úcolr3   ©Úprimary_keysr   r   Ú
<listcomp>ƒ   s
    ÿz6print_models.<locals>._print_table.<locals>.<listcomp>c                 s   r1   r2   r   )r   Úpkr   r   r   r   †   r4   z&        primary_key = CompositeKey(%s)z        primary_key = Falsez4        # Unhandled indexes (partial or expression):z        # %s)Úforeign_keysÚ
dest_tableÚprintÚaddÚmodel_namesÚcolumnsÚitemsÚsortedr8   ÚallÚlenÚfield_classÚ
pk_classesÚprimary_keyÚUnknownFieldr5   Úraw_column_typeÚ	get_fieldÚmulti_column_indexesr   r   Úunhandled_indexesÚsql)ÚtableÚseenÚaccumr;   Úforeign_keyÚdestr@   r5   ÚcolumnÚskipÚ
is_unknownÚdisprK   ÚfieldsÚuniqueÚpk_field_namesÚpk_listÚ	unhandledÚindex©Ú_print_tableÚdatabaseÚignore_unknownÚintrospectorÚpreserve_orderr7   r   r^   H   sz   

€


ü


þÿ
z"print_models.<locals>._print_tabler   )Ú
introspectÚget_database_kwargsÚHEADERÚget_additional_importsÚget_database_classÚ__name__Úget_database_nameÚreplaceÚreprr=   ÚUNKNOWN_FIELDÚ
BASE_MODELÚsetrB   r?   r   )
ra   Útablesrb   r+   r`   r,   Ú	db_kwargsÚheaderrO   rN   r   r]   r   Úprint_models5   s.   þüM
€ýrr   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.   )ÚdatetimeÚnowr=   Ústrftimeri   Úpeewee_version)Úcmd_linera   Ú	timestampr   r   r   Úprint_header›   s   
ry   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)rR   z-pz--portÚportÚint)rR   Útypez-uz--userÚuserz-Pz
--passwordÚpasswordÚ
store_true)rR   Úactionz-ez--engineÚenginezVDatabase type, e.g. sqlite, mysql, postgresql or cockroachdb. Default is "postgresql".)rR   ÚchoicesÚhelpz-sz--schemar   z-tz--tablesro   zWOnly generate the specified tables. Multiple table names should be separated by commas.)rR   r‰   z-vz--viewsÚviewsz7Generate model classes for VIEWs in addition to tables.)rR   r†   r‰   z-iz--infoÚinfozIAdd database information and other metadata to top of the generated file.z-oz--preserve-orderrb   z6Model definition column ordering matches source table.)r†   rR   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   Ú
add_optionrB   r   )ÚparserÚaoÚenginesr   r   r   Úget_option_parser©   s<   

ÿÿ
ÿ
ÿ
ÿ
ÿ
ÿr‘   c                    s.   d}t ‡ fdd„|D ƒƒ}ˆ jrtƒ |d< |S )N)r   r€   rƒ   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>r„   )Údictr„   r   )r•   Úopsr&   r   r”   r   Úget_connect_kwargsÅ   s
   
r˜   c            
      C   sä   t j} tƒ }| ¡ \}}t|ƒdk rtdƒ | ¡  t  d¡ t|ƒ}|d }d }|j	r7dd„ |j	 
d¡D ƒ}|j}|d u rHtj |¡rFdnd}t||fi |¤Ž}|jrbd	 | dd … ¡}	t|	|ƒ t|||j|j|j|j ƒ d S )
Nr   z%Missing required parameter "database"éÿÿÿÿc                 S   s   g | ]
}|  ¡ r|  ¡ ‘qS r   )Ústrip)r   rN   r   r   r   r9   Ü   s    ÿzmain.<locals>.<listcomp>ú,r   r   ú )r   Úargvr‘   Ú
parse_argsrD   r   Ú
print_helpr    r˜   ro   Úsplitr‡   ÚosÚpathÚexistsr)   r‹   r   ry   rr   rb   rŠ   r`   rŒ   )
Úraw_argvrŽ   r•   ÚargsÚconnectr_   ro   r‡   ra   rw   r   r   r   ÚmainÌ   s,   


ÿr§   Ú__main__)NFFFT)rs   r¡   r   r   Úoptparser   Úpeeweer   rv   Úplayhouse.cockroachdbr   Úplayhouse.reflectionre   rm   rl   ÚMySQLDatabaseÚPostgresqlDatabaseÚSqliteDatabaser   r–   r   r)   rr   ry   r   r‘   r˜   r§   rh   r   r   r   r   Ú<module>   s@   üÿ
ÿf
 
ÿ