
    Viy                     d    S SK Jr  S SK Jr  S SKJr  S SKrS SKrS SK	7  S SK	J
r
  S SK	Jr  S SK	Jr  S S	K	Jr  S S
K	Jr  S SK	Jr   S SKJr   S SKJr   S SKJr  \" / SQ5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r \" SS5      r! " S  S!\!5      r" " S" S#\5      r#S)S$ jr$S)S% jr%S*S& jr&S' r'S( r(g! \ a    \r Nf = f! \ a     S SKJr   N! \ a    Sr  Nf = ff = f! \ a    Sr Nf = f! \ a    Sr Nf = f)+    )OrderedDict)
namedtuple)isclassN)*)_StringField)_query_val_transform)CommaNodeList)SCOPE_VALUES)make_snake_case)	text_type)
FIELD_TYPE)postgres_ext)CockroachDatabase)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                       \ rS rSrSrg)UnknownField)    N)__name__
__module____qualname____firstlineno____static_attributes__r2       g/home/james-whalen/.local/share/pipx/venvs/semgrep/lib/python3.13/site-packages/playhouse/reflection.pyr0   r0   )   s    r8   r0   c                   `    \ rS rSrSr\\4r  SS jrS r	S r
S rS rS	 r  SS
 jrS rSrg)Column-   z)
Store metadata about a database column.
Nc                     Xl         X l        X0l        X@l        XPl        X`l        Xpl        Xl        Xl        Xl	        S U l
        S U l        S U l        g N)namefield_classraw_column_typenullableprimary_keycolumn_nameindexuniquedefaultextra_parameters	rel_modelrelated_nameto_field)selfr?   r@   rA   rB   rC   rD   rE   rF   rG   rH   s              r9   __init__Column.__init__3   sS     	&. &&
 0  r8   c                 l   ^  / SQnSR                  U 4S jU 5       5      nST R                  < SU< S3$ )N)r@   rA   rB   rC   rD   , c              3   J   >#    U  H  nU< S [        TU5      < 3v   M     g7f=N)getattr).0attrrL   s     r9   	<genexpr>"Column.__repr__.<locals>.<genexpr>M   s$      ! WT401s    #zColumn())joinr?   )rL   attrskeyword_argss   `  r9   __repr__Column.__repr__F   s8     yy !!  $(99l;;r8   c                 P   0 nU R                   b  UR                  U R                   5        U R                  (       a  SUS'   U R                  [        L d  U R
                  U R                  :w  a  SU R                  -  US'   U R                  (       a$  [        U R                  [        5      (       d  SUS'   U R                  b"  SU R                  R                  SS5      -  US	'   U R                  5       (       aU  U R                  US
'   U R                  (       a  SU R                  -  US'   U R                  (       a  SU R                  -  US'   U R!                  5       (       dC  U R"                  (       a  SUS'   U$ U R$                  (       a  U R                  5       (       d  SUS'   U$ )NTnull'%s'rD   rC   z[SQL("DEFAULT %s")]"z\"constraintsmodelfieldbackrefTruerF   rE   )rH   updaterB   r@   ForeignKeyFieldr?   rD   rC   
issubclass	AutoFieldrG   replaceis_foreign_keyrI   rK   rJ   is_primary_keyrF   rE   )rL   paramss     r9   get_field_parametersColumn.get_field_parametersR   s`     ,MM$//0 ==!F6N.$))t?O?O2O$*T-=-=$=F=!Jt/?/?$K$K$(F=!<<#$9LL((e4%5F=!   "nnF7O}}"(4=="8w  $*T->->$>y! ""$${{#)x   D$7$7$9$9"(wr8   c                 L    U R                   [        L =(       d    U R                  $ r>   )r@   rk   rC   rL   s    r9   rn   Column.is_primary_keys   s    9,@0@0@@r8   c                 &    U R                   [        L $ r>   )r@   ri   rs   s    r9   rm   Column.is_foreign_keyv   s    ?22r8   c                 R    U R                   [        L =(       a    U R                  S:H  $ Nz'self')r@   ri   rI   rs   s    r9   is_self_referential_fkColumn.is_self_referential_fky   s&      O3 +(*	,r8   c                     Xl         [        U l        UR                  UR                  :X  a  SU l        OX!R                     U l        U=(       a    UR                  =(       d    S U l        U=(       d    S U l        g rx   )	foreign_keyri   r@   
dest_tabletablerI   r?   rK   rJ   )rL   r|   model_namesdestrJ   s        r9   set_foreign_keyColumn.set_foreign_key}   s]    &*!![%6%66%DN()?)?@DN*2d(0Dr8   c                    0 nU R                  5       R                  5        H:  u  p#[        U5      (       a!  [        U[        5      (       a  UR
                  nX1U'   M<     SR                  S [        UR                  5       5       5       5      nU R                  < SU R                  R
                  < SU< S3nU R                  [        L a  U< SU R                  < 3nU$ )NrP   c              3   8   #    U  H  u  pU< S U< 3v   M     g7frR   r2   )rU   kvs      r9   rW   #Column.get_field.<locals>.<genexpr>   s      H*F$! *+A.*F   z = (rY   z  # )rp   itemsr   rj   Fieldr3   rZ   sortedr?   r@   r0   rA   )rL   field_paramskeyvalue	param_strre   s         r9   	get_fieldColumn.get_field   s    335;;=JCu~~*UE":": % >
 II H*01C1C1E*FH H	 II%%
 |+"')=)=>Er8   )rD   rG   rH   r@   r|   rE   r?   rB   rC   rA   rI   rJ   rK   rF   )FNFFNN)NN)r3   r4   r5   r6   __doc__IntegerFieldrk   primary_key_typesrM   r]   rp   rn   rm   ry   r   r   r7   r2   r8   r9   r;   r;   -   sP     &y1 =B>B&
<BA3, >B%)	1r8   r;   c                   `    \ rS rSr0 rSrS rS rSS jrSS jr	S r
SS	 jrSS
 jrSS jrSrg)Metadata    c                     Xl         SU l        g )NFdatabaserequires_extension)rL   r   s     r9   rM   Metadata.__init__   s     "'r8   c                 8    U R                   R                  X5      $ r>   )r   execute_sql)rL   sqlro   s      r9   executeMetadata.execute   s    }}((55r8   Nc                    [        S U R                  R                  X5       5       5      nU R                  X5      u  pEU R	                  X5      n[        U5      S:X  a,  US   nXG   [        L a	  [        XG'   OXG   [        L a  [        XG'   [        5       nUR                  5        Hc  u  pXI   nU R                  XR                  5      n[        U	UU
R                  U
R                  U
R                   U	UUR#                  U	5      S9X'   Me     U$ )Nc              3   >   #    U  H  nUR                   U4v   M     g 7fr>   )r?   )rU   metadatas     r9   rW   'Metadata.get_columns.<locals>.<genexpr>   s!      FD ]]H%Ds      r   )r@   rA   rB   rC   rD   rG   rH   )r   r   get_columnsget_column_typesget_primary_keyslenr   rk   BigIntegerFieldBigAutoFieldr   _clean_defaultrG   r;   	data_typer`   rC   get)rL   r~   schemar   column_typesextra_paramspk_namespkcolumnsr?   column_datar@   rG   s                r9   r   Metadata.get_columns   s    F MM55eDF F
 &*%:%:5%I" ((7x=A!B</#, !_4#/ -!)!1D&,K))+7J7JKG"' + 5 5$))'33 !-!1!1$!79GM	 "2 r8   c                     [         er>   )NotImplementedErrorrL   r~   r   s      r9   r   Metadata.get_column_types   s    !!r8   c                     Ub$  U[         [        4;   d  UR                  5       S:X  a  g [        U[        5      (       a0  [        U[        5      (       a  UR                  S5      (       d  SU-  nU=(       d    S$ )Nr`   'ra   z'')rk   r   lowerrj   r   
isinstancer   
startswith)rL   r@   rG   s      r9   r   Metadata._clean_default   sb    ?ki-FF==?f$k<00gy))'2D2DS2I2Iw&G$r8   c                 8    U R                   R                  X5      $ r>   )r   get_foreign_keysr   s      r9   r   Metadata.get_foreign_keys       }}--e<<r8   c                 8    U R                   R                  X5      $ r>   )r   r   r   s      r9   r   Metadata.get_primary_keys   r   r8   c                 8    U R                   R                  X5      $ r>   )r   get_indexesr   s      r9   r   Metadata.get_indexes   s    }}((77r8   r   r>   )r3   r4   r5   r6   
column_mapextension_importrM   r   r   r   r   r   r   r   r7   r2   r8   r9   r   r      s6    J(6 D"==8r8   r   c                      ^  \ rS rSr0 S\_S\_S\_S\_S\_S\	_S\
_S	\_S
\_S\_S\_S\_S\_S\_S\_S\_S\_r\\\\\	\\\\\\\S.rSrU 4S jrS rSU 4S jjrSU 4S jjrSU 4S jjrSU 4S jjrSrU =r$ )PostgresqlMetadata                     i  i  i  i  i:  iZ  i  i;  i  i  i  )i  i  i  i  i  i  i    i[  i  i  i  z$from playhouse.postgres_ext import *c                   > [         [        U ]  U5        [        b  U R	                  S5      nUR                  5       nU H  u  pEnUS:X  a  [        R                  U R                  U'   M+  US:X  a  [        R                  U R                  U'   MP  US:X  a  [        R                  U R                  U'   Mu  US:X  d  M}  [        R                  U R                  U'   M     U R                   H   n[        R                  U R                  U'   M"     g g )N9select oid, typname, format_type(oid, NULL) from pg_type;jsonjsonbhstoretsvector)superr   rM   r   r   fetchall	JSONFieldr   BinaryJSONFieldHStoreFieldTSVectorFieldarray_types
ArrayField)rL   r   cursorresultsoidtypnameformatted_type	__class__s          r9   rM   PostgresqlMetadata.__init__  s     $0:#\\ #3 4Foo'G07,nf$+7+A+ADOOC('+7+G+GDOOC((+7+C+CDOOC(
*+7+E+EDOOC( 18 '''3'>'>$ (! $r8   c                    0 n0 n[         bV  [        [         R                  [         R                  [         R                  [         R
                  [         R                  45      O	[        5       nU< SU< S3nU R                  SUS5      nUR                  5        HZ  u  pU R                  R                  U	[        5      X8'   X8   U;   a  SU l        XR                  ;   d  MG  SU R                  U	   0XH'   M\     X44$ )Nz."rb   zcSELECT attname, atttypid FROM pg_catalog.pg_attribute WHERE attrelid = %s::regclass AND attnum > %sr   Tr@   )r   setr   r   r   r   r   r   r   r   r   r0   r   r   )
rL   r~   r   r   r   extension_types
identifierr   r?   r   s
             r9   r   #PostgresqlMetadata.get_column_types  s     +7*B ##((""&&$$& '
 IL 	 #)%0
<=GL
  *ID!%!4!4S,!GL!_4*.'&&&&3T5E5Ec5J%K" + ))r8   c                 @   > U=(       d    Sn[         [        U ]  X5      $ Npublic)r   r   r   rL   r~   r   r   s      r9   r   PostgresqlMetadata.get_columns4       #8':5IIr8   c                 @   > U=(       d    Sn[         [        U ]  X5      $ r   )r   r   r   r   s      r9   r   #PostgresqlMetadata.get_foreign_keys8       #8'?NNr8   c                 @   > U=(       d    Sn[         [        U ]  X5      $ r   )r   r   r   r   s      r9   r   #PostgresqlMetadata.get_primary_keys<  r   r8   c                 @   > U=(       d    Sn[         [        U ]  X5      $ r   )r   r   r   r   s      r9   r   PostgresqlMetadata.get_indexes@  r   r8   r   r>   )r3   r4   r5   r6   BooleanField	BlobFieldr   SmallIntegerFieldr   	TextField
FloatFieldDoubleField	CharField	DateFieldDateTimeField	TimeFieldDecimalField	UUIDFieldr   r   r   rM   r   r   r   r   r   r7   __classcell__r   s   @r9   r   r      s0   
L
I 	O 		
 	L 	I 	Z 	[ 	i 	i 	i 	m 	m 	i 	i  	l!" 	i#J( K >?,*4JOOJ Jr8   r   c                       \ rS rSr\R
                  R                  5       r\\S'   \R                  R                  5       r\\S'   Sr	S r
Srg)CockroachDBMetadataiE  r   r   z#from playhouse.cockroachdb import *c                 P   [         R                  X5        SU l        [        b  U R	                  S5      nUR                  5       nU H+  u  pEnUS:X  d  M  [        R                  U R                  U'   M-     U R                   H   n[        R                  U R                  U'   M"     g g )NTr   r   )
r   rM   r   r   r   r   r   r   r   r   )rL   r   r   r   r   r   r   s          r9   rM   CockroachDBMetadata.__init__N  s    $)"&#\\ #3 4Foo'G07,ng%+7+G+GDOOC( 18 '''3'>'>$ ( $r8   r   N)r3   r4   r5   r6   r   r   copyr   r   r   rM   r7   r2   r8   r9   r  r  E  sJ     $..335J!JrN$00557K$K<?r8   r  c                   J  ^  \ rS rSr\c  0 rGO0 \R                  \_\R                  \	_\R                  \_\R                  \_\R                  \_\R                   \_\R$                  \_\R&                  \_\R*                  \_\R,                  \_\R.                  \_\R2                  \_\R4                  \_\R6                  \_\R8                  \	_\R:                  \_\R<                  \_\R@                  \\RB                  \\RD                  \	0ErU 4S jr#SS jr$Sr%U =r&$ )MySQLMetadatai`  c                 d   > SU;   a  UR                  S5      US'   [        [        U ]  " U40 UD6  g )Npasswordpasswd)popr   r  rM   )rL   r   kwargsr   s      r9   rM   MySQLMetadata.__init__{  s2    %zz*5F8mT+H??r8   c                     0 nU R                  SU-  5      nUR                   H,  nUS S u  pgU R                  R                  U[        5      X6'   M.     U0 4$ )NzSELECT * FROM `%s` LIMIT 1   )r   descriptionr   r   r0   )rL   r~   r   r   r   column_descriptionr?   	type_codes           r9   r   MySQLMetadata.get_column_types  sd     :UBC #)"4"40!4OD!%!4!4Y!ML #5 Rr8   r2   r>   )'r3   r4   r5   r6   r   r   BLOBr  CHARr  DATEr  DATETIMEr	  DECIMALr  DOUBLEr  FLOATINT24r   	LONG_BLOBLONGLONGLONGr   MEDIUM_BLOB
NEWDECIMALSHORTSTRING	TIMESTAMPTIMEr
  	TINY_BLOBTINY
VAR_STRINGrM   r   r7   r  r  s   @r9   r  r  `  so   

OOY
OOY
 OOY
 	

 
 z
 j
 l
   )
 OO\
 
 ""I
 !!<
 l
 y
    -!
" OOY#
$   )OO\!!9)

.@
   r8   r  c                       \ rS rSr0 S\_S\_S\_S\_S\_S\_S\	_S	\
_S
\_S\_S\_S\_S\_S\
_S\_S\_S\_\\\\S.ErSrSrSR%                  \\S9rSrS rSS jrSrg)SqliteMetadatai  bigintblobboolbooleanchardatedatetimedecimalfloatintegerzinteger unsignedintlongnumericrealsmallintegersmallint)zsmallint unsignedtexttimevarcharz(?:["\[\(]+)?z(?:["\]\)]+)?zi(?:FOREIGN KEY\s*)?{begin}(.+?){end}\s+(?:.+\s+)?references\s+{begin}(.+?){end}\s*\(["|\[]?(.+?)["|\]]?\))beginendz&^\s*(?:var)?char\s*\(\s*(\d+)\s*\)\s*$c                 N   UR                  5       nX R                  ;   a  U R                  U   nU$ [        R                  " U R                  U5      (       a  [
        nU$ [        R                  " SSU5      nUS:X  a  [        nU$ U R                  R                  U[        5      nU$ )Nz\(.+\)r   )
r   r   research
re_varcharr  sub	BareFieldr   r0   )rL   column_typerA   r@   s       r9   _map_colSqliteMetadata._map_col  s    %++-oo-///:K  YYt88#K  &&B@Kb '  #oo11+|Lr8   Nc                     0 nU R                   R                  U5      nU H*  nU R                  UR                  5      X5R                  '   M,     U0 4$ r>   )r   r   rT  r   r?   )rL   r~   r   r   r   columns         r9   r   SqliteMetadata.get_column_types  sM    --++E2F(,f6F6F(GL%  Rr8   r2   r>   )r3   r4   r5   r6   r   r  r  r  r  r	  r  r  r   r  r
  r   rK  rL  formatre_foreign_keyrP  rT  r   r7   r2   r8   r9   r7  r7    s   /	 	 	<	
 		 		 	M 	< 	 	< 	L 	| 	 	< 	
  	!" 	L#$ *+J0 E
C	& (.vEsv'C	 
 ;J r8   r7  _DatabaseMetadata)r   primary_keysforeign_keysr   indexesc                        \ rS rSrS rS rSrg)DatabaseMetadatai  c                 B   / nU R                   U    H  n[        UR                  5      S:  d  M  UR                   Vs/ s H3  nX@R                  U   ;   d  M  U R                  U   U   R                  PM5     nnUR	                  XSR
                  45        M     U$ s  snf )Nr   )r^  r   r   r?   appendrF   )rL   r~   accumrE   rW  field_namess         r9   multi_column_indexes%DatabaseMetadata.multi_column_indexes  s    \\%(E5==!A%-2]]A-:6"(LL,?"?  @t||E26:??-:  A k<<89 ) 	As   B Bc                     0 nU R                   U    H9  n[        UR                  5      S:X  d  M  UR                  X#R                  S   '   M;     U$ )Nr   r   )r^  r   r   rF   )rL   r~   rc  rE   s       r9   column_indexesDatabaseMetadata.column_indexes  sG    \\%(E5==!Q&*/,,mmA&' ) r8   r2   N)r3   r4   r5   r6   re  rh  r7   r2   r8   r9   r`  r`    s    r8   r`  c                       \ rS rSr\\/rSS jrS r\	SS j5       r
S rS rS rS	 rSS
 jrSS jr  SS jr   SS jrSrg)Introspectori  Nc                     Xl         X l        g r>   r   r   )rL   r   r   s      r9   rM   Introspector.__init__  s     r8   c                 4    SU R                   R                  -  $ )Nz<Introspector: %s>r   r   rs   s    r9   r]   Introspector.__repr__  s    #dmm&<&<<<r8   c                    [        U[        5      (       a$  UR                  c  [        S5      eUR                  n[        (       a!  [        U[        5      (       a  [        U5      nOq[        U[        5      (       a  [        U5      nOP[        U[        5      (       a  [        U5      nO/[        U[        5      (       a  [        U5      nO[        SU-  5      eU " X2S9$ )Nz)Cannot introspect an uninitialized Proxy.z"Introspection not supported for %rr   )r   Proxyobj
ValueErrorr   r  PostgresqlDatabaser   MySQLDatabaser  SqliteDatabaser7  )clsr   r   r   s       r9   from_databaseIntrospector.from_database  s    h&&||# !LMM||HH6G!H!H*84H"455)(3H-00$X.H.11%h/HAHLMM8++r8   c                 @    [        U R                  R                  5      $ r>   )typer   r   rs   s    r9   get_database_classIntrospector.get_database_class  s    DMM**++r8   c                 B    U R                   R                  R                  $ r>   rp  rs   s    r9   get_database_nameIntrospector.get_database_name  s    }}%%...r8   c                 B    U R                   R                  R                  $ r>   )r   r   connect_paramsrs   s    r9   get_database_kwargs Introspector.get_database_kwargs  s    }}%%444r8   c                 l    U R                   R                  (       a  SU R                   R                  -   $ g)N
r   )r   r   r   rs   s    r9   get_additional_imports#Introspector.get_additional_imports  s'    ==++$--8888r8   c                     U(       a  [        U5      n[        R                  " SSU5      nSR                  S UR	                  S5       5       5      nUS   R                  5       (       d  SU-   nU$ )N[^\w]+r   c              3   @   #    U  H  oR                  5       v   M     g 7fr>   )title)rU   rQ  s     r9   rW   /Introspector.make_model_name.<locals>.<genexpr>  s     E4DSYY[[4Ds   _r   T)r   rN  rQ  rZ   splitisalpha)rL   r~   
snake_caserd   
model_names        r9   make_model_nameIntrospector.make_model_name  sa    #E*Ey"e,WWEEKK4DEE
!}$$&&z)Jr8   c                 b   UR                  5       nU(       a  [        U5      nUR                  5       nU(       a!  [        R                  " SSU5      =(       d    Un[        R                  " SSU5      nU[
        ;   a  US-  n[        U5      (       a  US   R                  5       (       a  SU-   nU$ )Nz_id$r   r  r  r   )stripr   r   rN  rQ  RESERVED_WORDSr   isdigit)rL   rW  rm   r  s       r9   make_column_nameIntrospector.make_column_name  s    $V,F VVFB/96F 	3/^#cMFv;;6!9,,..6\Fr8   c           
      J   U R                   R                  R                  U R                  S9nU(       aX  U R                   R                  R	                  U R                  S9nUR                  U Vs/ s H  owR                  PM     sn5        Ub  U Vs/ s H  oU;   d  M
  UPM     nn[        U5      n	0 n
0 n0 n0 n0 nU GH   nU R                   R                  XR                  5      nU R                   R                  XR                  5      n U R                   R                  XR                  5      X'   UbS  X    HK  nUR                  U	;  d  M  UR                  UR                  5        U	R                  UR                  5        MM     U R                  X5      X'   [        S U 5       5      n[        S X    5       5      nUR!                  5        H  u  nnU(       a  ["        R$                  " SSU5      nOU R'                  UUU;   U5      nUR)                  5       nUR+                  S5      (       a  UU;   a  UR)                  5       nUUl        M     U HS  n[-        UR.                  5      S:X  d  M  UR.                  S   nUU;   d  M5  UR0                  UU   l        S	UU   l        MU     U R                   R5                  XR                  5      X'   UX'   XU'   GM#     0 nS
 nU Hn  n[        5       n[7        X   US9 HQ  n X   UR8                     nUR                  nUU;   a  U< SUR                  < S3UU'   M@  UR                  U5        MS     Mp     U Hh  nX    H]  nU
UR<                     UR8                     n U
UR                     UR>                     nURA                  UUUURC                  U5      S9  M_     Mj     [E        U
UUUU5      $ s  snf s  snf ! [         a  n/ X'    S nAGNmS nAff = f! [:         a     GM
  f = f! [:         a    S n N~f = f)Nrs  c              3   B   #    U  H  nUR                  5       v   M     g 7fr>   )r   )rU   rD   s     r9   rW   *Introspector.introspect.<locals>.<genexpr>Y  s$      "D5Bk #."3"3"5"55Bs   c              3   8   #    U  H  oR                   v   M     g 7fr>   rW  )rU   fk_cols     r9   rW   r  [  s     F2Emm2Er   r  r  _idr   r   Tc                     U R                   $ r>   r  )r|   s    r9   <lambda>)Introspector.introspect.<locals>.<lambda>|  s
    k&8&8r8   )r   _set)r|   r   r   rJ   )#r   r   
get_tablesr   	get_viewsextendr?   r   r   r   r   r}   rb  addrv  r  r   rN  rQ  r  r   endswithr   r   rF   rE   r   r   rW  KeyErrorr~   dest_columnr   r   r`  ) rL   table_namesliteral_column_namesinclude_viewsr  tablesviewsviewr~   	table_setr   r\  r]  r   r^  table_indexestable_columnsr|   exclower_col_namesfkscol_namerW  new_name
lower_namerE   related_namessort_fnmodels_referencedr}   srcr   s                                    r9   
introspectIntrospector.introspect(  s    ''22$++2FMM**44DKK4HEMM79978")/HK3GeFHK	      E MM55e[[IM MM55e[[IMB&*mm&D&D;;'(# *'3':&11B"MM+*@*@A%MM+*@*@A (;
 "&!5!5e!HK " "D5B"D DOF,2EFFC$1$7$7$9 &'!vvih?H#44Xx35? AH
 &^^-
&&u--(o2M'~~/H& %: 'u}}%*"]]1-F.7<||f-46:f-3 ' #'--"@"@{{#$L*GN*ENe n 8E #%l&9wG$^K,>,>?F )33
!22"-%M&) &))*5  H " E+2k//01C1CD ";#9#9:#//1D
 ## + +!.!2!23!7	 $ 9  3    	_ 8 I2  )&(#)p   $    D sN   1O	O !O 'O%	PP%
O>/O99O>
PPP"!P"c                    ^ ^^^	^
^^ T R                  X#U5      m0 n " U 4S jS[        5      m	[        5       mU	U
UUUU4S jm
[        TR                  R                  5       5       H  u  pxXv;  d  M  T
" Xv5        M     U$ )Nc                   0   > \ rS rSr " U 4S jS5      rSrg)/Introspector.generate_models.<locals>.BaseModeli  c                   ^   > \ rS rSr Y R                  R
                  r Y R                  rSrg)4Introspector.generate_models.<locals>.BaseModel.Metai  r2   N)r3   r4   r5   r6   r   r   r   r7   rs   s   r9   Metar    s    ==11r8   r  r2   N)r3   r4   r5   r6   r  r7   rs   s   r9   	BaseModelr    s    % %r8   r  c                 Z  >^ ^ TR                  T 5        TR                  T     HL  nUR                  nX1;  d  M  UT :w  d  M  UT;   a   [        R                  " ST < SU< 35        MD  T" X15        MN     / nTR
                  T    nUR                  5        H3  u  pgUR                  (       d  M  UR                  UR                  5        M5     TR                  T 5      mTR                  T 5      n " UU 4S jS5      n	Sn
[        U5      S:X  a  SU;  a  SU	l        OUR                  5       n[        U5      S:  aC  [        UR                  5        VVs/ s H  u  pX;   d  M  UR                  PM     snn6 U	l        S	n
SU	0nUR                  5        GH  u  pgUR                  nU[         La  T(       a  ["        nOU[$        L a  ["        nUUR&                  S
.nUR                  (       a  U
(       a  U[(        L a  [*        nSUS'   OUR                  (       a  U[(        La  S	US'   UR-                  5       (       ax  UR/                  5       (       a  SUS'   O0UR0                  R                  nUU;   a	  UU   US'   O[2        nUUS'   UR4                  (       a  UR4                  US'   T < SU< S3US'   UR6                  b  [9        SUR6                  -  5      nU/US'   UR;                  5       (       d4  Xh;   a*  X   (       a  S	US'   O UR-                  5       (       d  S	US'   OSUS'   U" S0 UD6XR                  '   GM      [=        [?        T 5      T4U5      UT '   T T;   a  TRC                  T 5        g g s  snnf ! [@         a    T(       d  e  N3f = f! T T;   a  TRC                  T 5        f f = f)Nz'Possible reference cycle found between z and c                   "   > \ rS rSr Y r YrSrg)AIntrospector.generate_models.<locals>._create_model.<locals>.Metai  r2   N)r3   r4   r5   r6   r^  
table_namer7   )re  r~   s   r9   r  r    s    ."
r8   r  Fr   idr   T)rD   r`   rC   rL   rd   rel_model_namere   r  _relrf   z
DEFAULT %src   rF   rE   r2   )"r  r]  r}   warningswarnr   r   rC   rb  r?   re  rh  r   keysCompositeKeyr@   ri   rR  r0   rB   rk   r   rm   ry   r|   DeferredForeignKeyrK   rG   SQLrn   r~  strrv  remove)r~   modelsr|   r   r\  r   rD   rW  rh  r  composite_keycolre   r[   
FieldClassro   r}   
constraintre  r  _create_modelbare_fieldsr   pendingskip_invalids   `                 @r9   r  3Introspector.generate_models.<locals>._create_model  sk   KK'44U;"--%$%-w 5:D'B C &d3  < L&&u-G'.}}#%%% ''4 (7 $,#@#@#G %44U;N# #
 "M< A%w&',D$#*<<>L< 1$#/182,1@:3* EJJ2, $-  !%TNE'.}}##//
_4!*J</!*J $/"OO- %%-!Y.%1
,1F=)''Ji,G,0F=)((**4466*0w%+%7%7%B%B
%/.4Z.@F7O);J7AF#34*0//w 8=k(JF9%>>-!$\FNN%B!CJ-7LF=),,.."4)6/3F8,!'!6!6!8!8.2F7O*/w%/%9&%9kk"[ (7^* $SZ)u Eu
 G#NN5) $w2,n  # $ G#NN5) $s0   M2
!M2
?M8 8N
N NN N*)r  Modelr   r   r   r   )rL   r  r  r  r  r  r  r~   rd   r  r  r   r  s   ``  `    @@@@r9   generate_modelsIntrospector.generate_models  sw     ??;#02	% 	%
 %^	* ^	*B #8#7#7#=#=#?@LE"e, A r8   rm  r>   )T)FT)NFFT)FNFFF)r3   r4   r5   r6   rk   r   
pk_classesrM   r]   classmethodr{  r  r  r  r  r  r  r  r  r7   r2   r8   r9   rk  rk    sk    \*J= , ,",/5
$ AF37zx ?C@E&+sr8   rk  c                 H    [         R                  XS9nUR                  5       $ )Nrs  )rk  r{  r  )r   r   introspectors      r9   r  r    s$    --h-FL""$$r8   c                 L    [         R                  XS9nUR                  " S0 UD6$ )Nrs  r2   )rk  r{  r  )r   r   optionsr  s       r9   r  r    s)    --h-FL''2'22r8   c                 x   [        U R                  R                  5        U R                  R                   GH  nSUR                  < SUR                  < 3/nUR
                  (       a  UR                  S5        OLU(       aE  UR                  (       a  UR                  S5        O"UR                  (       a  UR                  S5        [        U[        5      (       aA  UR                  SUR                  R                  < SUR                  R                  < 35        [        SR                  U5      5        GM     U(       Gae  U R                  R                  5       nU(       d  g [        S	5        U GH0  nS/nU R                  R                   R#                  5       nUR%                  S
SS9   UR'                  [)        UR*                  5      5        UR,                  (       a,  UR/                  S5        UR'                  UR,                  5        UR1                  5       u  pS S S 5        W[3        [5        [6        W	5      5      -  n
UR                  U
R9                  SS5      5        UR:                  (       a  UR                  S5        [        SR                  U5      5        GM3     g g ! , (       d  f       N= f)Nz   z PKz UNIQUEz INDEXz FK: .r   z

index(es)%sz"")paramquotez WHERE rb   )r(   _metar?   sorted_fields
field_typerC   rb  rF   rE   r   ri   rI   r3   	rel_fieldrZ   fields_to_indexr   get_sql_contextscope_valuesr   r	   _expressions_whereliteralquerytuplemapr   rl   _unique)rd   r^  inline_indexesre   parts
index_listrE   ctxr   ro   cleans              r9   print_modelr  $  s   	%++

**#jj%*:*:;<LL||Y'X&e_--LL)A)A).)=)=? @bggen + [[002
mEFE++&&668C!!D!9e&8&89:<<KK	*GGELL)!iik : %$8& ABBELLsB/0}}Y'"''%.!    :9s   /A4J++
J9	c                    U R                   R                  5       R                  5       u  pU R                  R                  R
                  S:w  a0  UR                  U R                  R                  R
                  S5      n[        R                  " SU5      nUR                  5       u  pEnSR                  S UR                  S5       5       5      nSR                  XGU45      R                  5       nU[        [        [        U5      5      -  $ )Nr  z^(.+?\()(.+)(\).*)z,
c              3   ,   #    U  H
  nS U-  v   M     g7f)z  %sNr2   )rU   rW  s     r9   rW    get_table_sql.<locals>.<genexpr>T  s     L8Kf&6/8Ks   rP   r  )_schema_create_tabler  r  r   r  rl   rN  matchgroupsrZ   r  r  r   r  r   )	rd   r   ro   	match_objcreater   extraindentedr  s	            r9   get_table_sqlr  L  s    ----/557KC{{!!T)kk%++..44d; .4I&--/FUzzLd8KLLHIIv/0668E516:;;;r8   c                 ,    [        [        U 5      5        g r>   )r(   r  )rd   s    r9   print_table_sqlr  Y  s    	-
r8   r>   )TF))collectionsr   ImportErrordictr   inspectr   rN  r  peeweer   r   r	   r
   r   r   pymysql.constantsr   MySQLdb.constants	playhouser   playhouse.cockroachdbr   r   r  objectr0   r;   r   r   r  r  r7  r[  r`  rk  r  r  r  r  r  r2   r8   r9   <module>r!     st  ' #  	    '    " ,&7   	6 	mV m`@8v @8FbJ bJJ?, ?6+ H + \7 X 7 t 2 5  ( &t6 tn	%
3
%"P< m  K   0 
  L  s_   C& C4 D D$ &C10C14D;DDDDDD! D!$D/.D/