Your IP : 216.73.216.213


Current Path : /opt/alt/python35/lib64/python3.5/site-packages/playhouse/__pycache__/
Upload File :
Current File : //opt/alt/python35/lib64/python3.5/site-packages/playhouse/__pycache__/reflection.cpython-35.pyc



R6�WWU�>@syddlmZWnek
r.eZYnXddlmZddlZddlTyddlmZWnAek
r�yddl	mZWnek
r�dZYnXYnXyddl
mZWnek
r�dZYnXeddd	d
ddd
ddddddddddddddddddd d!d"d#d$d%g�Z
Gd&d'�d'e�ZGd(d)�d)e�ZGd*d+�d+e�ZGd,d-�d-e�ZGd.d/�d/e�ZGd0d1�d1e�Zed2d>�ZGd8d9�d9e�ZGd:d;�d;e�Zdd<d=�ZdS)?�)�OrderedDict)�
namedtupleN)�*)�
FIELD_TYPE)�postgres_ext�and�as�assert�break�class�continue�def�del�elif�else�except�exec�finally�for�from�global�if�import�in�is�lambda�not�or�pass�print�raise�return�try�while�with�yieldc@seZdZdS)�UnknownFieldN)�__name__�
__module__�__qualname__�r*r*�G/opt/alt/python35/lib64/python3.5/site-packages/playhouse/reflection.pyr&sr&c@s�eZdZdZeefZdddddd�Zdd�Zdd	�Z	d
d�Z
dd
�Zdd�Zdddd�Z
dd�ZdS)�Columnz1
    Store metadata about a database column.
    FNc		Csg||_||_||_||_||_||_||_||_d|_d|_	d|_
dS)N)�name�field_class�raw_column_type�nullable�primary_key�	db_column�index�unique�	rel_model�related_name�to_field)	�selfr-r.r/r0r1r2r3r4r*r*r+�__init__'s										zColumn.__init__csHdddddg}dj�fdd�|D��}d	�j|fS)
Nr.r/r0r1r2z, c3s(|]}d|t�|�fVqdS)z%s=%sN)�getattr)�.0�attr)r8r*r+�	<genexpr>?sz"Column.__repr__.<locals>.<genexpr>zColumn(%s, %s))�joinr-)r8�attrsZkeyword_argsr*)r8r+�__repr__7s	
zColumn.__repr__cCsi}|jrd|d<|jtks:|j|jkrKd|j|d<|jrm|jtk	rmd|d<|j�r�|j|d<|j	r�d|j	|d<|j
r�d|j
|d<|j�s�|jr�d	|d
<n |j
r�|j�r�d	|d<|S)NT�nullz'%s'r2r1r5r7r6�Truer4r3)r0r.�ForeignKeyFieldr-r2r1�PrimaryKeyField�is_foreign_keyr5r7r6�is_primary_keyr4r3)r8�paramsr*r*r+�get_field_parametersCs&	
!

			

zColumn.get_field_parameterscCs|jtkp|jS)N)r.rDr1)r8r*r*r+rF_szColumn.is_primary_keycCs
|jtkS)N)r.rC)r8r*r*r+rEbszColumn.is_foreign_keycCs|jtko|jdkS)Nz'self')r.rCr5)r8r*r*r+�is_self_referential_fkeszColumn.is_self_referential_fkcCsk||_t|_|j|jkr0d|_n||j|_|rO|jpRd|_|pad|_dS)Nz'self')	�foreign_keyrCr.�
dest_table�tabler5r-r7r6)r8rJ�model_names�destr6r*r*r+�set_foreign_keyis		zColumn.set_foreign_keycCsv|j�}djdd�t|j��D��}d|j|jj|f}|jtkrrd||jf}|S)Nz, css%|]\}}d||fVqdS)z%s=%sNr*)r;�k�vr*r*r+r=wsz#Column.get_field.<locals>.<genexpr>z%s = %s(%s)z%s  # %s)	rHr>�sorted�itemsr-r.r'r&r/)r8Zfield_paramsZ	param_str�fieldr*r*r+�	get_fieldts	
zColumn.get_field)r'r(r)�__doc__�IntegerFieldrDZprimary_key_typesr9r@rHrFrErIrOrUr*r*r*r+r,!s
r,c@seZdZiZdZdd�Zdd�Zddd�Zdd	d
�Zddd�Z	dd
d�Z
ddd�ZdS)�Metadata�cCs||_d|_dS)NF)�database�requires_extension)r8rZr*r*r+r9�s	zMetadata.__init__cGs|jj||�S)N)rZ�execute_sql)r8�sqlrGr*r*r+�execute�szMetadata.executeNc

Cs�tdd�|jj||�D��}|j||�}|j||�}t|�dkr�|d}||tkr�t||<t�}xU|j�D]G\}}	t	|d||d|	j
d|	jd|	jd	|�||<q�W|S)
Ncss|]}|j|fVqdS)N)r-)r;�metadatar*r*r+r=�sz'Metadata.get_columns.<locals>.<genexpr>�rr.r/r0r1r2)
rrZ�get_columns�get_column_types�get_primary_keys�lenrWrDrSr,�	data_typerAr1)
r8rL�schemar_�column_typesZpk_names�pk�columnsr-�column_datar*r*r+ra�s&	

	
			zMetadata.get_columnscCs
t�dS)N)�NotImplementedError)r8rLrfr*r*r+rb�szMetadata.get_column_typescCs|jj||�S)N)rZ�get_foreign_keys)r8rLrfr*r*r+rl�szMetadata.get_foreign_keyscCs|jj||�S)N)rZrc)r8rLrfr*r*r+rc�szMetadata.get_primary_keyscCs|jj||�S)N)rZ�get_indexes)r8rLrfr*r*r+rm�szMetadata.get_indexes)r'r(r)�
column_map�extension_importr9r^rarbrlrcrmr*r*r*r+rX�srXc"s�eZdZdedededededededed	e	d
e	de
ded
ededede
deiZdZ�fdd�Zdd�Zd�fdd�Zd�fdd�Zd�fdd�Zd�fdd�Z�S) �PostgresqlMetadata������i�i�iii:iZi�i;i�i�i�z$from playhouse.postgres_ext import *cs�tt|�j|�tdk	r�|jd�}|j�}xn|D]f\}}d|krotj|j|<qDd|kr�tj|j|<qDd|krDtj	|j|<qDWdS)Nz!select oid, typname from pg_type;ZjsonZhstoreZtsvector)
�superrpr9rr^�fetchall�	JSONFieldrn�HStoreField�
TSVectorField)r8rZ�cursor�resultsZoidZtypname)�	__class__r*r+r9�szPostgresqlMetadata.__init__cCs�i}tdk	r0ttjtjtjf�nt�}d||f}|jd|�}xL|jD]A}|jj|j	t
�||j<||j|krfd|_qfW|S)Nz	"%s"."%s"zSELECT * FROM %s LIMIT 1T)
r�setryr{rzr^�descriptionrn�get�	type_coder&r-r[)r8rLrfrgZextension_types�
identifierr|�column_descriptionr*r*r+rb�s3	
z#PostgresqlMetadata.get_column_typesNcs%|p	d}tt|�j||�S)N�public)rwrpra)r8rLrf)r~r*r+ra�szPostgresqlMetadata.get_columnscs%|p	d}tt|�j||�S)Nr�)rwrprl)r8rLrf)r~r*r+rl�sz#PostgresqlMetadata.get_foreign_keyscs%|p	d}tt|�j||�S)Nr�)rwrprc)r8rLrf)r~r*r+rc�sz#PostgresqlMetadata.get_primary_keyscs%|p	d}tt|�j||�S)Nr�)rwrprm)r8rLrf)r~r*r+rm�szPostgresqlMetadata.get_indexes)r'r(r)�BooleanField�	BlobField�BigIntegerFieldrW�	TextField�
FloatField�	CharField�	DateField�
DateTimeField�	TimeField�DecimalFieldrnror9rbrarlrcrmr*r*)r~r+rp�s0rpc(seZdZedkr!iZn�ejeejeej	e
ejeej
eejeejeejeejeejeejeejeejeejeejeejeejeejeej eej!eiZ�fdd�Z"ddd�Z#�S)�
MySQLMetadataNcs<d|kr|jd�|d<tt|�j||�dS)N�password�passwd)�poprwr�r9)r8rZ�kwargs)r~r*r+r9szMySQLMetadata.__init__cCs`i}|jd|�}x@|jD]5}|dd�\}}|jj|t�||<q#W|S)NzSELECT * FROM `%s` LIMIT 1�)r^r�rnr�r&)r8rLrfrgr|r�r-r�r*r*r+rb#szMySQLMetadata.get_column_types)$r'r(r)rrn�BLOBr��CHARr��DATEr��DATETIMEr��DECIMALr�ZDOUBLEr��FLOATZINT24rWZ	LONG_BLOBZLONGZLONGLONGr�ZMEDIUM_BLOBZ
NEWDECIMALZSHORT�STRING�	TIMESTAMP�TIMEr�Z	TINY_BLOBZTINYZ
VAR_STRINGr9rbr*r*)r~r+r�s0																				r�c$@s�eZdZdededededededede	d	e
d
e
de
ded
ede
de
de
dede
iZdZdZdjdede�ZdZdd�Zddd�ZdS)�SqliteMetadata�bigint�blob�boolZboolean�char�date�datetime�decimalZintegerzinteger unsigned�int�long�realZsmallinteger�smallintzsmallint unsigned�text�timez
(?:["\[\(]+)?z
(?:["\]\)]+)?zi(?:FOREIGN KEY\s*)?{begin}(.+?){end}\s+(?:.+\s+)?references\s+{begin}(.+?){end}\s*\(["|\[]?(.+?)["|\]]?\)�begin�endz&^\s*(?:var)?char\s*\(\s*(\d+)\s*\)\s*$cCsw|j�}||jkr+|j|}nHtj|j|�rIt}n*tjdd|�}|jj|t�}|S)Nz\(.+\)rY)	�lowerrn�re�search�
re_varcharr��subr�r&)r8�column_typer/r.r*r*r+�_map_colPs	zSqliteMetadata._map_colNcCsFi}|jj|�}x'|D]}|j|j�||j<qW|S)N)rZrar�rer-)r8rLrfrgri�columnr*r*r+rb[s

zSqliteMetadata.get_column_types)r'r(r)r�r�r�r�r�r�r�rWr�r�r�rnr�r��formatZre_foreign_keyr�r�rbr*r*r*r+r�1s2	r��_DatabaseMetadatari�primary_keys�foreign_keysrM�indexesc@s(eZdZdd�Zdd�ZdS)�DatabaseMetadatacslg}x_�j�D]P}t|j�dkr��fdd�|jD�}|j||jf�qW|S)Nr`cs7g|]-}|�j�kr�j�|j�qSr*)rir-)r;r�)r8rLr*r+�
<listcomp>rs	z9DatabaseMetadata.multi_column_indexes.<locals>.<listcomp>)r�rdri�appendr4)r8rL�accumr3�field_namesr*)r8rLr+�multi_column_indexesns
z%DatabaseMetadata.multi_column_indexescCsKi}x>|j|D]/}t|j�dkr|j||jd<qW|S)Nr`r)r�rdrir4)r8rLr�r3r*r*r+�column_indexesxs
zDatabaseMetadata.column_indexesN)r'r(r)r�r�r*r*r*r+r�ms
r�c@s�eZdZeegZddd�Zdd�Zeddd��Z	dd	�Z
d
d�Zdd
�Zdd�Z
dd�Zdd�Zddd�Zdddd�ZdS)�IntrospectorNcCs||_||_dS)N)r_rf)r8r_rfr*r*r+r9�s	zIntrospector.__init__cCsd|jjS)Nz<Introspector: %s>)r_rZ)r8r*r*r+r@�szIntrospector.__repr__cCsXt|t�rt|�}n*t|t�r<t|�}nt|�}||d|�S)Nrf)�
isinstance�PostgresqlDatabaserp�
MySQLDatabaser�r�)�clsrZrfr_r*r*r+�
from_database�szIntrospector.from_databasecCst|jj�S)N)�typer_rZ)r8r*r*r+�get_database_class�szIntrospector.get_database_classcCs
|jjjS)N)r_rZ)r8r*r*r+�get_database_name�szIntrospector.get_database_namecCs
|jjjS)N)r_rZ�connect_kwargs)r8r*r*r+�get_database_kwargs�sz Introspector.get_database_kwargscCs|jjrd|jjSdS)N�
rY)r_r[ro)r8r*r*r+�get_additional_imports�sz#Introspector.get_additional_importscCsXtjdd|�}djdd�|jd�D��}|dj�sTd|}|S)Nz[^\w]+rYcss|]}|j�VqdS)N)�title)r;r�r*r*r+r=�sz/Introspector.make_model_name.<locals>.<genexpr>�_r�T)r�r�r>�split�isalpha)r8rL�modelZ
model_namer*r*r+�make_model_name�s
%
zIntrospector.make_model_namecCs\tjdd|j�j��p*|j�}tjdd|�}|tkrX|d7}|S)Nz_id$rYz[^\w]+r�)r�r�r��strip�RESERVED_WORDS)r8r�r*r*r+�make_column_name�s
-
zIntrospector.make_column_namecs�|jr'|jjjd|j�}n|jjj�}�dk	r^�fdd�|D�}i}i}i}i}i}x�|D]�}|jj||j�}	|jj||j�}
y |jj||j�||<Wn<tk
r}zt|j	�g||<WYdd}~XnX|j
|�||<tdd�|
D��}xe|
j�D]W\}
}|j
|
�}|
j�}|jd�r�||kr�|
j�}||_qQWxY|	D]Q}t|j�dkr�|jd}||
kr�|j|
|_d	|
|_q�W|jj||j�||<|
||<|	||<q�Wi}d
d�}x�|D]�}t�}x�t||d|�D]o}y|||j}Wntk
r�w{YnX|j}||kr�d
||jf||<q{|j|�q{WqUWx�|D]�}x�||D]x}||j|j}y||j|j}Wntk
rVd}YnX|jd|d|d|d|j|��q
Wq�Wt|||||�S)Nrfcs"g|]}|�kr|�qSr*r*)r;rL)�table_namesr*r+r��s	z+Introspector.introspect.<locals>.<listcomp>css|]}|j�VqdS)N)r�)r;Zcolumn_namer*r*r+r=�sz*Introspector.introspect.<locals>.<genexpr>�_idr`rTcSs|jS)N)r�)rJr*r*r+�<lambda>�sz)Introspector.introspect.<locals>.<lambda>�keyz	%s_%s_setrJrMrNr6) rfr_rZ�
get_tablesrmrarl�
ValueError�err�messager�rrSr�r��endswithr-rdrir4r3rcrRr��KeyErrorrK�addrL�dest_columnrOr�r�)r8r�Ztablesrir�r�rMr�rLZ
table_indexesZ
table_columns�excZlower_col_names�col_namer��new_nameZ
lower_namer3Z
related_namesZsort_fnZmodels_referencedrJrK�srcrNr*)r�r+�
introspect�s�	
	




	

	
	


	zIntrospector.introspectFcs��jd|��i}G�fdd�dt������fdd��x<t�jj��D]%\}}||kre�||�qeW|S)Nr�cs)eZdZG�fdd�d�ZdS)z/Introspector.generate_models.<locals>.BaseModelcseZdZ�jjZdS)z4Introspector.generate_models.<locals>.BaseModel.MetaN)r'r(r)r_rZr*)r8r*r+�Meta!sr�N)r'r(r)r�r*)r8r*r+�	BaseModel sr�cs�xC�j|D]4}|j}||kr||kr�||�qWg��j|}x3|j�D]%\}}|jrf�j|j�qfW�j|���j|�}G�fdd�d�}d}	t	��dkr�|j
��t	��dkr*t�fdd�|j�D��|_d}	d|i}
xY|j�D]K\}}|j}|t
krjt}d	|d
|ji}|jr�|	r�|tkr�t}d|d<n|jr�|tk	r�d|d<|j�r5|j�r�d|d
<n|jj}
||
|d
<|jr!|j|d<d||f|d<||kr{|j�r{||red|d<n|j�s{d|d<||�|
|j<qCWy#tt|��f|
�||<Wntk
r��s��YnXdS)NcseZdZ�ZdS)zAIntrospector.generate_models.<locals>._create_model.<locals>.MetaN)r'r(r)r�r*)r�r*r+r�4sr�Frr`cs+g|]!\}}|�kr|j�qSr*)r-)r;�colrT)r�r*r+r�=s		zGIntrospector.generate_models.<locals>._create_model.<locals>.<listcomp>Tr2rAr1r8r5r7z	%s_%s_relr6r4r3)r�rKrirSr1r�r-r�r�rd�keys�CompositeKeyr.r&�	BareFieldr0rDrWrErIrJr7rFr��strr�)rL�modelsrJrNrir2r�r�r��
composite_keyr?Z
FieldClassrGrK)r��
_create_modelrZ�skip_invalid)r�r�r+r�$sf	
	%	


	



#
z3Introspector.generate_models.<locals>._create_model)r��ModelrRrMrS)r8r�r�r�rLr�r*)r�r�rZr8r�r+�generate_modelssF"zIntrospector.generate_models)r'r(r)rDrWZ
pk_classesr9r@�classmethodr�r�r�r�r�r�r�r�r�r*r*r*r+r��s	lr�cCstj|d|�}|j�S)Nrf)r�r�r�)rZrfZintrospectorr*r*r+r�qsr�)rir�r�rMr�)�collectionsr�ImportError�dictrr��peeweeZMySQLdb.constantsrZpymysql.constants�	playhouserrr��objectr&r,rXrpr�r�r�r�r�r�r*r*r*r+�<module>sJ




c3L.4	�