ÿØÿà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@sdZddlZddlZddlmZddlmZddlmZddlmZddlmZdd lm Z dd lm Z dd l m Z dd l mZdd l mZddlmZddlmZddlmZddlmZdd lmZddlmZdefdYZde fdYZdefdYZdefdYZde fdYZdefdYZd e fd!YZd"efd#YZ e Z!dS($s .. dialect:: postgresql+pygresql :name: pygresql :dbapi: pgdb :connectstring: postgresql+pygresql://user:password@host:port/dbname[?key=value&key=value...] :url: http://www.pygresql.org/ .. note:: The pygresql dialect is **not tested as part of SQLAlchemy's continuous integration** and may have unresolved issues. The recommended PostgreSQL dialect is psycopg2. iNi(t_DECIMAL_TYPES(t _FLOAT_TYPES(t _INT_TYPES(t PGCompiler(t PGDialect(tPGIdentifierPreparer(tUUID(tHSTORE(tJSON(tJSONBi(texc(t processors(tutil(tNull(tNumerict _PGNumericcBseZdZdZRS(cCsdS(N(tNone(tselftdialect((sZ/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/pygresql.pytbind_processor,scCst|ts|j}n|jrx|tkrFtjtj|j S|t ks^|t krbdSt jd|nB|tkrdS|t ks|t krtjSt jd|dS(NsUnknown PG numeric type: %d(t isinstancetinttoidt asdecimalRR tto_decimal_processor_factorytdecimaltDecimalt_effective_decimal_return_scaleRRRR tInvalidRequestErrortto_float(RRtcoltype((sZ/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/pygresql.pytresult_processor/s     (t__name__t __module__RR(((sZ/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/pygresql.pyR+s t _PGHStorecBseZdZdZRS(cs>|jstt|j|S|jjfd}|S(Ncst|tr|S|S(N(Rtdict(tvalue(thstore(sZ/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/pygresql.pytprocessPs (thas_native_hstoretsuperR"RtdbapitHstore(RRR&((R%sZ/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/pygresql.pyRKs   cCs&|js"tt|j||SdS(N(R'R(R"R(RRR((sZ/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/pygresql.pyRWs (R R!RR(((sZ/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/pygresql.pyR"Js t_PGJSONcBseZdZdZRS(csA|jsttj|S|jjfd}|S(Ncso|jkrd}n(t|ts<|dkr@jr@dS|dksat|ttfrk|S|S(N(tNULLRRR t none_as_nullR#tlist(R$(tjsonR(sZ/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/pygresql.pyR&bs ! (thas_native_jsonR(R+RR)tJson(RRR&((R/RsZ/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/pygresql.pyR]s    cCs&|js"tt|j||SdS(N(R0R(R+R(RRR((sZ/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/pygresql.pyRos (R R!RR(((sZ/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/pygresql.pyR+\s t_PGJSONBcBseZdZdZRS(csA|jsttj|S|jjfd}|S(Ncso|jkrd}n(t|ts<|dkr@jr@dS|dksat|ttfrk|S|S(N(R,RRR R-R#R.(R$(R/R(sZ/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/pygresql.pyR&zs ! (R0R(R2RR)R1(RRR&((R/RsZ/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/pygresql.pyRus    cCs&|js"tt|j||SdS(N(R0R(R2R(RRR((sZ/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/pygresql.pyRs (R R!RR(((sZ/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/pygresql.pyR2ts t_PGUUIDcBseZdZdZRS(cs>|jstt|j|S|jjfd}|S(Ncsn|dkrdSt|ttfrNt|dkrDd|S|St|trjd|S|S(NitbytesR(RRtstrR4tlenR(R$(tuuid(sZ/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/pygresql.pyR&s    (thas_native_uuidR(R3RR)tUuid(RRR&((R7sZ/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/pygresql.pyRs    cCs<|js"tt|j||S|js8d}|SdS(NcSs|dk rt|SdS(N(RR5(R$((sZ/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/pygresql.pyR&s (R8R(R3Rtas_uuid(RRRR&((sZ/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/pygresql.pyRs    (R R!RR(((sZ/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/pygresql.pyR3s t _PGCompilercBseZdZdZRS(cKs*|j|j|d|j|j|S(Ns %% (R&tlefttright(Rtbinarytoperatortkw((sZ/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/pygresql.pytvisit_mod_binaryscCs|jddS(Nt%s%%(treplace(Rttext((sZ/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/pygresql.pytpost_process_texts(R R!RARE(((sZ/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/pygresql.pyR;s t_PGIdentifierPreparercBseZdZRS(cCs(|j|j|j}|jddS(NRBs%%(RCt escape_quotetescape_to_quote(RR$((sZ/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/pygresql.pyt_escape_identifiers(R R!RI(((sZ/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/pygresql.pyRFstPGDialect_pygresqlcBseZdZeZeZedZe j e j ie e6ee6ee6ee6ee6ee6Z dZdZdZRS(tpygresqlcCsddl}|S(Ni(tpgdb(tclsRL((sZ/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/pygresql.pyR)s cKstt|j|yL|jj}tjd|}t|jdt|jdf}Wn t t t fk rd}nX||_ |dkrt }}}|d krtjdqn t|_t|_t}}}||_||_||_dS( Ns (\d+)\.(\d+)iiiisAPyGreSQL is only fully supported by SQLAlchemy since version 5.0.(ii(ii(ii(R(RJt__init__R)tversiontretmatchRtgrouptAttributeErrort ValueErrort TypeErrort dbapi_versiontFalseR twarntTruetsupports_unicode_statementstsupports_unicode_bindsR'R0R8(RtkwargsROtmR'R0R8((sZ/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/pygresql.pyRNs& .         cCst|jdd}d|krZd|jddjddd |jdf|ds6   M