ÿØÿàJFIFÿþ ÿÛC       ÿÛC ÿÀÿÄÿÄ"#QrÿÄÿÄ&1!A"2qQaáÿÚ ?Øy,æ/3JæÝ¹È߲؋5êXw²±ÉyˆR”¾I0ó2—PI¾IÌÚiMö¯–þrìN&"KgX:Šíµ•nTJnLK„…@!‰-ý ùúmë;ºgµŒ&ó±hw’¯Õ@”Ü— 9ñ-ë.²1<yà‚¹ïQÐU„ہ?.’¦èûbß±©Ö«Âw*VŒ) `$‰bØÔŸ’ëXÖ-ËTÜíGÚ3ð«g Ÿ§¯—Jx„–’U/ÂÅv_s(Hÿ@TñJÑãõçn­‚!ÈgfbÓc­:él[ðQe 9ÀPLbÃãCµm[5¿ç'ªjglå‡Ûí_§Úõl-;"PkÞÞÁQâ¼_Ñ^¢SŸx?"¸¦ùY騐ÒOÈ q’`~~ÚtËU¹CڒêV  I1Áß_ÿÙ M!Vc@s(ddlmZmZddlmZddlmZddlm Z ddl Z ddl m Z ddl m Z dd l mZdd lmZddlZd d lmZddlZdd lmZe jeZdZe jdeZdZejddZ dZ!dZ"dZ#dZ$ej%dZ&de'fdYZ(de(fdYZ)de(fdYZ*de(fdYZ+ejd d!Z,ejd"d#Z-ejd"d$Z.d%Z/ejd"d&Z0ejd d'Z1dS((i(tschemattypes(t Inspector(teventi(topsN(tutil(tcompat(t sqla_compat(t OrderedSeti(t_user_defined_render(t_fk_speccCs8|jd}|jd}t|||j|dS(Ni(tupgrade_ops_listtdowngrade_ops_listt_produce_net_changest reverse_into(tautogen_contexttmigration_scriptt upgrade_opst downgrade_ops((sM/opt/alt/python27/lib/python2.7/site-packages/alembic/autogenerate/compare.pyt_populate_migration_scripts   tuselistcCs|j}|jjdt}tj|}|jj}|r{t|j }|j d|j d|j |n dg}t jd|jj|||dS(Ntinclude_schemastinformation_schemaR(t connectiontoptstgettFalseRt from_enginetdialecttdefault_schema_nametsettget_schema_namestdiscardtaddtNonet comparatorstdispatchtname(RRRRt inspectortdefault_schematschemas((sM/opt/alt/python27/lib/python2.7/site-packages/alembic/autogenerate/compare.pyR s     Rc Cs|j}|j}t}|jj}|jj}xp|D]h}t|jd|} ||kr| j|jjg} n|jt |gt | | q:Wt g|j D]} | j | jf^qj||fg} t|| ||||dS(NR(R&tmetadataRtmigration_contexttversion_table_schemat version_tabletget_table_namest differencetupdatetziptlenRt sorted_tablesRR%t_compare_tables( RRR(R&R)tconn_table_namesR+R,tsttablesttabletmetadata_table_names((sM/opt/alt/python27/lib/python2.7/site-packages/alembic/autogenerate/compare.pyt_autogen_for_tables4s        '+ c s|jjj}tg|D]*\}}||kr7|nd|f^q} tfdt| |D} | }x|j|D]\} }| rd| |fn|} | | |f} |j| |dt dr|j j t j j | tjd| t j|gd| }tjd||| |d| |jsb|j j |qbqqWtj}x|j|D]\} }tj|| } | |jk}tj||d| }|stj|d|jjj||j|dn|j||dtdr|j j t j j |tjd| qqW|j!|}tj}i}x|D]\} }tj|| } | |jk}tj||d| }|stj|d|jjj||j|dn||| |fcss%s.%sR7sDetected added table %rRtcolumn_reflectsDetected removed table %rtkeycSs|dp d|dfS(Niti((tx((sM/opt/alt/python27/lib/python2.7/site-packages/alembic/autogenerate/compare.pytRA($tbindRRRR"tdictR0R.t run_filtersRRtappendt CreateTableOpt from_tabletlogtinfotModifyTableOpsR#R$tis_emptyR:tMetaDataR;R6tTableRtlistenR*timplt_compat_autogen_column_reflectt reflecttabletTruet DropTableOpt intersectiontsortedt_compare_columns(R4R8R&R)RRR'RR>t#metadata_table_names_no_dflt_schemattname_to_tableR5R%tmetadata_tabletmodify_table_opstremoval_metadatatexiststttexisting_tablestexisting_metadatatconn_column_infot conn_table((R)sM/opt/alt/python27/lib/python2.7/site-packages/alembic/autogenerate/compare.pyR3Ps7           "      cCs<tj|dd|dg|dD]}|j|^q"S(NR%tuniquet column_names(R:tIndextc(tparamsRctcname((sM/opt/alt/python27/lib/python2.7/site-packages/alembic/autogenerate/compare.pyt _make_indexs cCs5tjd|dg|dD]}|j|^qS(NR%Re(R:tUniqueConstraintRg(RhRcRi((sM/opt/alt/python27/lib/python2.7/site-packages/alembic/autogenerate/compare.pyt_make_unique_constraints cCs|d}|dr+d|d|f}n|jdi}tjg|dD]}|j|^qNg|dD]}d||f^qod|jdd|jdd |jd d |jd d |d }|j||S( Ntreferred_tabletreferred_schemas%s.%stoptionstconstrained_columnstreferred_columnstonupdatetondeletet deferrablet initiallyR%(RR:tForeignKeyConstraintRgtappend_constraint(RhRcR>RoRitntconst((sM/opt/alt/python27/lib/python2.7/site-packages/alembic/autogenerate/compare.pyt_make_foreign_keys  !'  c cs |rd||fn|}td|jD}td|jD} tt|} xr| j| D]a} |j|| | dtdrp|jj tj j |||| t j d|| qpqpWx| j| D]} || } |j| }|j| | dt|s#qntj|| d|}tjd||||| || |jr|jj |qqWdVx~t| j| D]g} |j|j| | dtdr|jj tjj |||j| t j d|| qqWdS(Ns%s.%scss|]}|j|fVqdS(N(R%(R<Rg((sM/opt/alt/python27/lib/python2.7/site-packages/alembic/autogenerate/compare.pys scss|]}|j|fVqdS(N(R%(R<Rg((sM/opt/alt/python27/lib/python2.7/site-packages/alembic/autogenerate/compare.pys stcolumnsDetected added column '%s.%s'RsDetected removed column '%s.%s'(RERgRRWR.RFRR"RRGt AddColumnOptfrom_column_and_tablenameRJRKRVt AlterColumnOpR#R$t has_changesRRTt DropColumnOp(RR>RcR[R\RR&R%tmetadata_cols_by_nametconn_col_namestmetadata_col_namesRitcolnamet metadata_coltconn_coltalter_column_op((sM/opt/alt/python27/lib/python2.7/site-packages/alembic/autogenerate/compare.pyRXsF            t_constraint_sigcBs#eZdZdZdZRS(cCs|j|jkS(N(Ry(tselftother((sM/opt/alt/python27/lib/python2.7/site-packages/alembic/autogenerate/compare.pyt__eq__scCs|j|jkS(N(Ry(RR((sM/opt/alt/python27/lib/python2.7/site-packages/alembic/autogenerate/compare.pyt__ne__scCs t|jS(N(thashRy(R((sM/opt/alt/python27/lib/python2.7/site-packages/alembic/autogenerate/compare.pyt__hash__s(t__name__t __module__RRR(((sM/opt/alt/python27/lib/python2.7/site-packages/alembic/autogenerate/compare.pyRs  t_uq_constraint_sigcBs,eZeZeZdZedZRS(cCsG||_|j|_ttg|jD]}|j^q%|_dS(N(RyR%ttupleRWtcolumnstsig(RRytcol((sM/opt/alt/python27/lib/python2.7/site-packages/alembic/autogenerate/compare.pyt__init__$s  cCs g|jjD]}|j^q S(N(RyRR%(RR((sM/opt/alt/python27/lib/python2.7/site-packages/alembic/autogenerate/compare.pyRe)s( RRRtis_indexRTt is_uniqueRtpropertyRe(((sM/opt/alt/python27/lib/python2.7/site-packages/alembic/autogenerate/compare.pyR s t_ix_constraint_sigcBs&eZeZdZedZRS(cCsY||_|j|_ttg|jD]}|j^q%|_t|j|_dS(N( RyR%RRWRRtboolRdR(RRyR((sM/opt/alt/python27/lib/python2.7/site-packages/alembic/autogenerate/compare.pyR1s  .cCstj|jS(N(Rt_get_index_column_namesRy(R((sM/opt/alt/python27/lib/python2.7/site-packages/alembic/autogenerate/compare.pyRe7s(RRRTRRRRe(((sM/opt/alt/python27/lib/python2.7/site-packages/alembic/autogenerate/compare.pyR.s t_fk_constraint_sigcBseZedZRS(c Cs-||_|j|_t|\ |_|_|_|_|_|_}}}}|j|jt |j|j|jt |jf|_ |r)|j |r|j dkrdq|j nd|r|j dkrdq|j nd|r|j dkrdn|rdndf7_ ndS(Ns no actiontdeferredtinitially_deferrableRtsnot deferrable( RyR%R t source_schemat source_tabletsource_columnst target_schemat target_tablettarget_columnsRRtlowerR"(RRytinclude_optionsRrRsRtRu((sM/opt/alt/python27/lib/python2.7/site-packages/alembic/autogenerate/compare.pyR=s  <!-- (RRRR(((sM/opt/alt/python27/lib/python2.7/site-packages/alembic/autogenerate/compare.pyR<sR7c sj}dktd|jD}t|j}t} } tdk r t|dry|jd|} t Wqt k rqXny|j d|} Wnt k rnXtfd| D} tfd| D} nj j j| | ||td|D}td|D}td| D} td | D} td |j|D} td | Dtd | Dtd | j| D} tfdtjD}td| D}td|D}td|D}td|D}fd}fd}fd}x7tt| j| D]}| |}||qWxtt| j| D]}| |}||krO||\}}|jrF|}qY|}n | |}|j|jkr||||qg}|j|jkr|jd|j|jfn|j|jkr|jd|j|jfn|r||||qqWxtt| j| D]}| |}|j rT|j|krTq%q%||kr|j|kr|j|kr||\}}||||qq%||q%Wx+|D]#}||kr|||qqWdS(Ncss'|]}t|tjr|VqdS(N(t isinstanceR:Rk(R<tuq((sM/opt/alt/python27/lib/python2.7/site-packages/alembic/autogenerate/compare.pys fstget_unique_constraintsRc3s|]}t|VqdS(N(Rl(R<tuq_def(Rc(sM/opt/alt/python27/lib/python2.7/site-packages/alembic/autogenerate/compare.pys sc3s|]}t|VqdS(N(Rj(R<tix(Rc(sM/opt/alt/python27/lib/python2.7/site-packages/alembic/autogenerate/compare.pys scss|]}t|VqdS(N(R(R<R((sM/opt/alt/python27/lib/python2.7/site-packages/alembic/autogenerate/compare.pys scss|]}t|VqdS(N(R(R<R((sM/opt/alt/python27/lib/python2.7/site-packages/alembic/autogenerate/compare.pys scss|]}t|VqdS(N(R(R<R((sM/opt/alt/python27/lib/python2.7/site-packages/alembic/autogenerate/compare.pys scss|]}t|VqdS(N(R(R<R((sM/opt/alt/python27/lib/python2.7/site-packages/alembic/autogenerate/compare.pys scss-|]#}|jdk r|j|fVqdS(N(R%R"(R<Rg((sM/opt/alt/python27/lib/python2.7/site-packages/alembic/autogenerate/compare.pys scss|]}|j|fVqdS(N(R%(R<Rg((sM/opt/alt/python27/lib/python2.7/site-packages/alembic/autogenerate/compare.pys scss|]}|j|fVqdS(N(R%(R<Rg((sM/opt/alt/python27/lib/python2.7/site-packages/alembic/autogenerate/compare.pys scss-|]#}|jdk r|j|fVqdS(N(R%R"(R<Rg((sM/opt/alt/python27/lib/python2.7/site-packages/alembic/autogenerate/compare.pys sc3s)|]}|||ffVqdS(N((R<R%(tconn_indexes_by_nametconn_uniques_by_name(sM/opt/alt/python27/lib/python2.7/site-packages/alembic/autogenerate/compare.pys scss|]}|j|fVqdS(N(R(R<R((sM/opt/alt/python27/lib/python2.7/site-packages/alembic/autogenerate/compare.pys scss|]}|j|fVqdS(N(R(R<R((sM/opt/alt/python27/lib/python2.7/site-packages/alembic/autogenerate/compare.pys scss|]}|j|fVqdS(N(R(R<R((sM/opt/alt/python27/lib/python2.7/site-packages/alembic/autogenerate/compare.pys scss-|]#}|jdkr|j|fVqdS(N(R%R"R(R<R((sM/opt/alt/python27/lib/python2.7/site-packages/alembic/autogenerate/compare.pys scs|jrxj|j|jdtdrjjtjj |jt j d|jdj d|j gqnsdSrdSj|j|jdtdrjjtjj|jt j d|jdj d|j gndS(NtindexsDetected added index '%s' on %ss, s'%s'tunique_constraints+Detected added unique constraint '%s' on %s(RRFRyR%RR"RRGt CreateIndexOpt from_indexRJRKtjoinRetAddConstraintOptfrom_constraint(tobj(Rtis_create_tablet modify_opstsupports_unique_constraints(sM/opt/alt/python27/lib/python2.7/site-packages/alembic/autogenerate/compare.pyt obj_addeds(        cs|jry|jr rdSj|j|jdtdrjjtj j |jt j d|jqnYj|j|jdtdrjjtj j|jt j d|jndS(NRs#Detected removed index '%s' on '%s'Rs/Detected removed unique constraint '%s' on '%s'(RRRFRyR%RTR"RRGt DropIndexOpRRJRKtDropConstraintOpR(R(RRRR>(sM/opt/alt/python27/lib/python2.7/site-packages/alembic/autogenerate/compare.pyt obj_removeds      cs|jrj|j|jdt|jrtjd|jdj|jj tj j |jjj tj j |jqnj|j|jdt|jrtjd|jdj|jj tj j|jjj tjj|jndS(NRs&Detected changed index '%s' on '%s':%ss, Rs2Detected changed unique constraint '%s' on '%s':%s(RRFRyR%RRJRKRRRGRRRRRR(toldtnewtmsg(RRR>(sM/opt/alt/python27/lib/python2.7/site-packages/alembic/autogenerate/compare.pyt obj_changeds&        s unique=%r to unique=%rs columns %r to %r(R&R"Rt constraintstindexest frozensetRthasattrRRTtNotImplementedErrort get_indexesR*RQtcorrect_for_autogen_constraintsREtunionRVRWR.RRRGR( RRRR>RcR[R&tmetadata_unique_constraintstmetadata_indexest conn_uniquest conn_indexestconn_unique_constraintstmetadata_namest conn_namestdoubled_constraintstconn_uniques_by_sigtmetadata_uniques_by_sigtmetadata_indexes_by_sigtunnamed_metadata_uniquesRRRt added_nameRt existing_namet metadata_objtconn_uqtconn_idxtconn_objRt removed_nametuq_sig((RRRcRRRRR>sM/opt/alt/python27/lib/python2.7/site-packages/alembic/autogenerate/compare.pyt_compare_indexes_and_uniques\s             " "          "     R{c Csf|jr dS|j}|j}||_||k rb||_tjd|rRdnd||ndS(NsDetected %s on column '%s.%s'tNULLsNOT NULL(t primary_keytnullabletexisting_nullabletmodify_nullableRJRK( RRRR>RiRRtmetadata_col_nullabletconn_col_nullable((sM/opt/alt/python27/lib/python2.7/site-packages/alembic/autogenerate/compare.pyt_compare_nullableHs       c Cs|j}||_|j}|jtjkrDtjd||dS|jtjkrmtjd||dS|jj||} | r||_ tjd||||ndS(Ns3Couldn't determine database type for column '%s.%s's:Column '%s.%s' has no type within the model; can't compares-Detected type change from %r to %r on '%s.%s'( ttypet existing_typet_type_affinitytsqltypestNullTypeRJRKR*t _compare_typet modify_type( RRRR>RiRRt conn_typet metadata_typetisdiff((sM/opt/alt/python27/lib/python2.7/site-packages/alembic/autogenerate/compare.pyR^s"           cCstd||}|tk r"|St|tjrvt|jtjrU|j}qvt|jj d|j }nt|tjr|j j t jkrtjdd|}t|S|SndSdS(Ntserver_defaultRs^'|'$RA(R RRR:t DefaultClausetargRt string_typeststrtcompileRRRRtStringtretsubtreprR"(tmetadata_defaultRRtrendered((sM/opt/alt/python27/lib/python2.7/site-packages/alembic/autogenerate/compare.pyt"_render_server_default_for_compareys   c Cs|j}|j}|dkr.|dkr.tSt|||} |jrX|jjjnd} ||_|jj||| | } | r||_ t j d||ndS(Ns)Detected server default on column '%s.%s'( RR"RRRttexttexisting_server_defaultR*t_compare_server_defaulttmodify_server_defaultRJRK( RRRR>RiRRRtconn_col_defaulttrendered_metadata_defaulttrendered_conn_defaultR((sM/opt/alt/python27/lib/python2.7/site-packages/alembic/autogenerate/compare.pyRs"      cs dkrdSj}td|jD}|j|d|}|oZd|dktfd|D}jjj||tfd|D}tfd|D}td|D} td |D} td |D} td |D} fd } fd }xht| j | D]Q}| ||| kr\j | kr| j j nd}||q\q\Wxht| j | D]Q}| ||| krj | kr| j j nd}| |qqWdS(Ncss'|]}t|tjr|VqdS(N(RR:Rv(R<tfk((sM/opt/alt/python27/lib/python2.7/site-packages/alembic/autogenerate/compare.pys sRRoic3s|]}t|VqdS(N(Rz(R<Ry(Rc(sM/opt/alt/python27/lib/python2.7/site-packages/alembic/autogenerate/compare.pys sc3s!|]}t|dVqdS(RN(R(R<R(tbackend_reflects_fk_options(sM/opt/alt/python27/lib/python2.7/site-packages/alembic/autogenerate/compare.pys sc3s!|]}t|dVqdS(RN(R(R<R(R(sM/opt/alt/python27/lib/python2.7/site-packages/alembic/autogenerate/compare.pys scss|]}|j|fVqdS(N(R(R<Rg((sM/opt/alt/python27/lib/python2.7/site-packages/alembic/autogenerate/compare.pys scss|]}|j|fVqdS(N(R(R<Rg((sM/opt/alt/python27/lib/python2.7/site-packages/alembic/autogenerate/compare.pys scss-|]#}|jdk r|j|fVqdS(N(R%R"(R<Rg((sM/opt/alt/python27/lib/python2.7/site-packages/alembic/autogenerate/compare.pys scss-|]#}|jdk r|j|fVqdS(N(R%R"(R<Rg((sM/opt/alt/python27/lib/python2.7/site-packages/alembic/autogenerate/compare.pys scsj|j|jdt|rjjtjjjtj ddj |j dj |j |j r}d|j nd|jndS(Ntforeign_key_constraints1Detected added foreign key (%s)(%s) on table %s%ss, s%s.RA(RFRyR%RRRGtCreateForeignKeyOpRRJRKRRRRR(Rt compare_to(RRyR\(sM/opt/alt/python27/lib/python2.7/site-packages/alembic/autogenerate/compare.pyt_add_fks  csj|j|jdt|rjjtjj|jtj ddj |j dj |j |j r}d|j nd|jndS(NRs3Detected removed foreign key (%s)(%s) on table %s%ss, s%s.RA(RFRyR%RTRRGRRRJRKRRRRR(RR (RR\(sM/opt/alt/python27/lib/python2.7/site-packages/alembic/autogenerate/compare.pyt _remove_fks  ( R"R&RRtget_foreign_keysR*RQtcorrect_for_autogen_foreignkeysRER.R%Ry(RR\RR>RcR[R&t metadata_fkstconn_fkstconn_fks_by_sigtmetadata_fks_by_sigtmetadata_fks_by_nametconn_fks_by_nameR R t removed_sigR t added_sig((RRRcRyR\sM/opt/alt/python27/lib/python2.7/site-packages/alembic/autogenerate/compare.pyt_compare_foreign_keyssH          %  %(2t sqlalchemyRR:RRtsqlalchemy.engine.reflectionRRt operationsRtloggingRARRRtsqlalchemy.utilRRtrenderR t contextlibtalembic.ddl.baseR t getLoggerRRJRt DispatcherRTR#R t dispatch_forR9R3RjRlRztcontextmanagerRXtobjectRRRRRRRRRR(((sM/opt/alt/python27/lib/python2.7/site-packages/alembic/autogenerate/compare.pyts@      l  2