ÿØÿà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@sdZddlmZddlmZddlmZddlm Z m Z ddlm Z dZ d efd YZd Zd Zd ZdZdZejdZejdZejdZejdZejddZejddZejddZejddZejddZejddZ ejddZ!ejddZ"dS( sNOTE: copied/adapted from SQLAlchemy master for backwards compatibility; this should be removable when Alembic targets SQLAlchemy 1.0.0 i(turl(ttexti(tcompati(tconfigtengines(tget_url_backend_nametregistercBs2eZdZedZdZdZRS(cCs i|_dS(N(tfns(tself((sJ/opt/alt/python27/lib/python2.7/site-packages/alembic/testing/provision.pyt__init__scCstjd|S(Nt*(Rtfor_db(tclstfn((sJ/opt/alt/python27/lib/python2.7/site-packages/alembic/testing/provision.pytinitscsfd}|S(Ncs|j<S(N(R(R (tdbnameR(sJ/opt/alt/python27/lib/python2.7/site-packages/alembic/testing/provision.pytdecorates ((RRR((RRsJ/opt/alt/python27/lib/python2.7/site-packages/alembic/testing/provision.pyR scGst|tjr$tj|}n't|tjr?|}n |jj}t|}||j krz|j |||S|j d||SdS(NR ( t isinstanceRt string_typestsa_urltmake_urltURLtdbRRR(RtcfgtargRtbackend((sJ/opt/alt/python27/lib/python2.7/site-packages/alembic/testing/provision.pyt__call__s   (t__name__t __module__R t classmethodRR R(((sJ/opt/alt/python27/lib/python2.7/site-packages/alembic/testing/provision.pyR s  cCs+x$tD]}t||j|q WdS(N(t_configs_for_db_operationt _create_dbR(tfollower_identR((sJ/opt/alt/python27/lib/python2.7/site-packages/alembic/testing/provision.pytcreate_follower_db)scCs+x$tjjD]}t||qWdS(N(RtConfigt all_configst_configure_follower(R R((sJ/opt/alt/python27/lib/python2.7/site-packages/alembic/testing/provision.pytconfigure_follower/scCso|rt||}ntj||}|jjtjj||||}|rkt||n|S(N( t_follower_url_from_mainRttesting_enginetconnecttcloseRR"RR$(tdb_urltdb_optstoptionst file_configR tengR((sJ/opt/alt/python27/lib/python2.7/site-packages/alembic/testing/provision.pyt setup_config4scCs+x$tD]}t||j|q WdS(N(Rt_drop_dbR(R R((sJ/opt/alt/python27/lib/python2.7/site-packages/alembic/testing/provision.pytdrop_follower_db?sccst}x$tjjD]}|jjqWxktjjD]Z}|jj}t|}||j|j |j f}||kr@|V|j |q@q@Wx$tjjD]}|jjqWdS(N( tsetRR"R#RtdisposeRRtusernamethosttdatabasetadd(thostsRRRt host_conf((sJ/opt/alt/python27/lib/python2.7/site-packages/alembic/testing/provision.pyRDs    cCstd|jdS(Ns"no DB creation routine for cfg: %s(tNotImplementedErrorR(RR.tident((sJ/opt/alt/python27/lib/python2.7/site-packages/alembic/testing/provision.pyRYscCstd|jdS(Nsno DB drop routine for cfg: %s(R:R(RR.R;((sJ/opt/alt/python27/lib/python2.7/site-packages/alembic/testing/provision.pyR0^scCsdS(N((RR;((sJ/opt/alt/python27/lib/python2.7/site-packages/alembic/testing/provision.pyR$cscCstj|}||_|S(N(RRR6(RR;((sJ/opt/alt/python27/lib/python2.7/site-packages/alembic/testing/provision.pyR&hs tsqlitecCsAtj|}|j s(|jdkr,|Stjd|SdS(Ns:memory:ssqlite:///%s.db(RRR6(RR;((sJ/opt/alt/python27/lib/python2.7/site-packages/alembic/testing/provision.pyt_sqlite_follower_url_from_mainost postgresqlcCsi|jjddK}yt|||WnnX|jd}|jd||fWdQXdS(Ntisolation_levelt AUTOCOMMITsselect current_database()sCREATE DATABASE %s TEMPLATE %s(R(texecution_optionst _pg_drop_dbtscalartexecute(RR.R;tconnt currentdb((sJ/opt/alt/python27/lib/python2.7/site-packages/alembic/testing/provision.pyt _pg_create_dbxs tmysqlcCsj|jX}yt|||WnnX|jd||jd||jd|WdQXdS(NsCREATE DATABASE %ssCREATE DATABASE %s_test_schemas CREATE DATABASE %s_test_schema_2(R(t_mysql_drop_dbRD(RR.R;RE((sJ/opt/alt/python27/lib/python2.7/site-packages/alembic/testing/provision.pyt_mysql_create_dbscCsd||_d||_dS(Ns%s_test_schemas%s_test_schema_2(t test_schemat test_schema_2(RR;((sJ/opt/alt/python27/lib/python2.7/site-packages/alembic/testing/provision.pyt_mysql_configure_followers cCsdS(N((RR.R;((sJ/opt/alt/python27/lib/python2.7/site-packages/alembic/testing/provision.pyt_sqlite_create_dbscCsO|jjdd1}|jtdd||jd|WdQXdS(NR?R@sselect pg_terminate_backend(pid) from pg_stat_activity where usename=current_user and pid != pg_backend_pid() and datname=:dnametdnamesDROP DATABASE %s(R(RARDR(RR.R;RE((sJ/opt/alt/python27/lib/python2.7/site-packages/alembic/testing/provision.pyRBs  cCsdS(N((RR.R;((sJ/opt/alt/python27/lib/python2.7/site-packages/alembic/testing/provision.pyt_sqlite_drop_dbscCsv|jd}y|jd|WnnXy|jd|WnnXy|jd|WnnXWdQXdS(NsDROP DATABASE %s_test_schemasDROP DATABASE %s_test_schema_2sDROP DATABASE %s(R(RD(RR.R;RE((sJ/opt/alt/python27/lib/python2.7/site-packages/alembic/testing/provision.pyRIsN(#t__doc__tsqlalchemy.engineRRt sqlalchemyRtutilRtRRRtNonetFOLLOWER_IDENTtobjectRR!R%R/R1RRRR0R$R&R R=RGRJRMRNRBRPRI(((sJ/opt/alt/python27/lib/python2.7/site-packages/alembic/testing/provision.pyts0