ÿØÿà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Áß_ÿÙ 4]c@@ssddlmZddlZddlZddlZddlmZddlmZddlm Z ddlm Z dd lm Z d e fd YZ e Zd Ze d Ze dZe dZe dZddZde fdYZdddZdddZddZde fdYZde fdYZeedZdS(i(tabsolute_importNi(tconfig(tuses_deprecated(t decoratori(tevent(tpooltConnectionKillercB@seZdZdZdZdZdZdZdZdZ dZ d Z e d Z e d Zd ZRS( cC@s.tj|_tj|_t|_dS(N(tweakreftWeakKeyDictionaryt proxy_refsttesting_enginestsettconns(tself((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/engines.pyt__init__scC@st|j|(texcludetdtnametmod((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/engines.pyt all_dialectsstReconnectFixturecB@sAeZdZdZdZdZedZdZRS(cC@s||_g|_t|_dS(N(tdbapit connectionsR5t is_stopped(R RW((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/engines.pyRs  cC@st|j|S(N(RORW(R tkey((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/engines.pyt __getattr__scO@st|jj||}|jr\|j|j|j}|jdtsptdn|j j ||SdS(Nsselect 1s%simulated connect failure didn't work( RWRRYR!R4tcursortexecuteR5R6RXtappend(R RFtkwargsR+tcurs((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/engines.pyRs   cC@s6y |Wn$tk r1}tjd|nXdS(Ns.ReconnectFixture couldn't close connection: %s(RRR(R RR ((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/engines.pyR!s  cC@s@||_x't|jD]}|j|jqWg|_dS(N(RYR"RXR!R4(R tstoptc((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/engines.pytshutdowns cC@s t|_dS(N(R5RY(R ((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/engines.pytrestarts( R8R9RR[RR!R5RcRd(((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/engines.pyRVs      c@s|ptjj}tjjj}|s0i}nt||dRWRcR5RY((t_disposeR(sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/engines.pyR3s( RR2turlR>RWRVttesting_engineR3Rct test_shutdownRdt test_restart(RgR-RWR3((RfRsM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/engines.pytreconnecting_engines   cC@sddlm}ddlm}|s/t}n|jdt}|pPtjj}||}|dkrtjdks|j tjjj krtj }qi}nFtjdk r|j tjjj krtj j }|j |n|||}t|_t|jtjr5d|j_d|j_n|rtj|jdtjtj|jdtjtj|jdtjtj|n|S( sBProduce an engine configured by --options with optional overrides.i(t create_engine(tmake_urlt use_reaperRRRN(t sqlalchemyRltsqlalchemy.engine.urlRmRtpopRR2RgR#t drivernametdb_optstcopytupdatet _has_eventst isinstanceRt QueuePoolt_timeoutt _max_overflowRtlistenR<RRRR(RgR-RlRmRnt default_optR((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/engines.pyRhs2   '  '  c@sddlm}|s%tjj}ngfd}fd}fd}||dddd |td st_|_|_ S( s'Provides a mocking engine based on the current testing.db. This is normally used to test DDL generation flow as emitted by an Engine. It should not be used in other cases, as assert_compile() and assert_sql_execution() are much better choices with fewer moving parts. i(Rlc@sj|dS(N(R^(tsqltaRG(tbuffer(sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/engines.pytexecutor'sc@sJgD]!}tjddt|^q}||ksFt|dS(Ns[\n\t]R@(tretsubtstrR6(tstmtststrecv(R(sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/engines.pyt assert_sql*s.c@s)jdjfdjDS(Ns c3@s'|]}t|jdVqdS(R>N(Rtcompile(t.0R(RR(sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/engines.pys 0s(R>tjointmock((R(RRsM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/engines.pyt print_sql.s s://tstrategyRR( RoRlRR2RSR=R6RRR(t dialect_nameRlRRR((RRsM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/engines.pyt mock_engines    tDBAPIProxyCursorcB@s5eZdZdZddZdZdZRS(suProxy a DBAPI cursor. Tests can provide subclasses of this to intercept DBAPI-level cursor operations. cO@s+||_||_|j|||_dS(N(RR*R\(R RR+RFR_((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/engines.pyRDs  cK@s3|r|jj|||S|jj||SdS(N(R\R](R tstmtt parametersRG((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/engines.pyR]IscK@s|jj|||S(N(R\t executemany(R RtparamsRG((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/engines.pyROscC@st|j|S(N(ROR\(R RZ((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/engines.pyR[RsN(R8R9t__doc__RR#R]RR[(((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/engines.pyR<s    tDBAPIProxyConnectioncB@s2eZdZdZdZdZdZRS(s}Proxy a DBAPI connection. Tests can provide subclasses of this to intercept DBAPI-level connection operations. cC@s/|jj|_|_||_||_dS(N(Rt_creatorR+t _sqla_unwrapRt cursor_cls(R RR((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/engines.pyR^s cO@s|j|j|j||S(N(RRR+(R RFR_((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/engines.pyR\cscC@s|jjdS(N(R+R4(R ((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/engines.pyR4fscC@st|j|S(N(ROR+(R RZ((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/engines.pyR[is(R8R9RRR\R4R[(((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/engines.pyRVs    c@s&fd}tdi|d6S(sIProduce an engine that provides proxy hooks for common methods. c@stjS(N(RR2((tconn_clsR(sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/engines.pyt mock_connusR-tcreator(Rh(RRR((RRsM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/engines.pytproxying_enginems(t __future__RRRRR@RRtutilRRRtobjectRR<RERHRIRJRKR#RURVRkRhRRRR(((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/engines.pyts.   T    .& (