ó
¿b›]c           @   sØ  d  Z  d d l Z d d l Z d d l m Z d d l m Z d d l m Z d d l m Z d d l m Z d d	 l m	 Z	 d d
 l m
 Z
 d d l m Z d d l m Z d d l m Z d d l m Z d d l m Z d d l m Z d d l m Z d d l m Z d d l m Z d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e
 f d „  ƒ  YZ d e f d „  ƒ  YZ d  e	 f d! „  ƒ  YZ d" e f d# „  ƒ  YZ  e  Z! d S($   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.

iÿÿÿÿNi   (   t   _DECIMAL_TYPES(   t   _FLOAT_TYPES(   t
   _INT_TYPES(   t
   PGCompiler(   t	   PGDialect(   t   PGIdentifierPreparer(   t   UUID(   t   HSTORE(   t   JSON(   t   JSONBi   (   t   exc(   t
   processors(   t   util(   t   Null(   t   Numerict
   _PGNumericc           B   s   e  Z d  „  Z d „  Z RS(   c         C   s   d  S(   N(   t   None(   t   selft   dialect(    (    sF   lib/python2.7/site-packages/sqlalchemy/dialects/postgresql/pygresql.pyt   bind_processor,   s    c         C   s¾   t  | t ƒ s | j } n  |  j rx | t k rF t j t j |  j	 ƒ S| t
 k s^ | t k rb d  St j d | ƒ ‚ nB | t k rˆ d  S| t
 k s  | t k r§ t j St j d | ƒ ‚ d  S(   Ns   Unknown PG numeric type: %d(   t
   isinstancet   intt   oidt	   asdecimalR   R   t   to_decimal_processor_factoryt   decimalt   Decimalt   _effective_decimal_return_scaleR    R   R   R
   t   InvalidRequestErrort   to_float(   R   R   t   coltype(    (    sF   lib/python2.7/site-packages/sqlalchemy/dialects/postgresql/pygresql.pyt   result_processor/   s     	(   t   __name__t
   __module__R   R   (    (    (    sF   lib/python2.7/site-packages/sqlalchemy/dialects/postgresql/pygresql.pyR   +   s   	t	   _PGHStorec           B   s   e  Z d  „  Z d „  Z RS(   c            s>   | j  s t t |  ƒ j | ƒ S| j j ‰  ‡  f d †  } | S(   Nc            s   t  |  t ƒ r ˆ  |  ƒ S|  S(   N(   R   t   dict(   t   value(   t   hstore(    sF   lib/python2.7/site-packages/sqlalchemy/dialects/postgresql/pygresql.pyt   processP   s    
(   t   has_native_hstoret   superR"   R   t   dbapit   Hstore(   R   R   R&   (    (   R%   sF   lib/python2.7/site-packages/sqlalchemy/dialects/postgresql/pygresql.pyR   K   s
    	c         C   s&   | j  s" t t |  ƒ j | | ƒ Sd  S(   N(   R'   R(   R"   R   (   R   R   R   (    (    sF   lib/python2.7/site-packages/sqlalchemy/dialects/postgresql/pygresql.pyR   W   s    	(   R    R!   R   R   (    (    (    sF   lib/python2.7/site-packages/sqlalchemy/dialects/postgresql/pygresql.pyR"   J   s   	t   _PGJSONc           B   s   e  Z d  „  Z d „  Z RS(   c            sA   | j  s t t ˆ ƒ j | ƒ S| j j ‰  ‡  ‡ f d †  } | S(   Nc            so   |  ˆ j  k r d  }  n( t |  t ƒ s< |  d  k r@ ˆ j r@ d  S|  d  k sa t |  t t f ƒ rk ˆ  |  ƒ S|  S(   N(   t   NULLR   R   R   t   none_as_nullR#   t   list(   R$   (   t   jsonR   (    sF   lib/python2.7/site-packages/sqlalchemy/dialects/postgresql/pygresql.pyR&   b   s    	!
(   t   has_native_jsonR(   R+   R   R)   t   Json(   R   R   R&   (    (   R/   R   sF   lib/python2.7/site-packages/sqlalchemy/dialects/postgresql/pygresql.pyR   ]   s
    	c         C   s&   | j  s" t t |  ƒ j | | ƒ Sd  S(   N(   R0   R(   R+   R   (   R   R   R   (    (    sF   lib/python2.7/site-packages/sqlalchemy/dialects/postgresql/pygresql.pyR   o   s    	(   R    R!   R   R   (    (    (    sF   lib/python2.7/site-packages/sqlalchemy/dialects/postgresql/pygresql.pyR+   \   s   	t   _PGJSONBc           B   s   e  Z d  „  Z d „  Z RS(   c            sA   | j  s t t ˆ ƒ j | ƒ S| j j ‰  ‡  ‡ f d †  } | S(   Nc            so   |  ˆ j  k r d  }  n( t |  t ƒ s< |  d  k r@ ˆ j r@ d  S|  d  k sa t |  t t f ƒ rk ˆ  |  ƒ S|  S(   N(   R,   R   R   R   R-   R#   R.   (   R$   (   R/   R   (    sF   lib/python2.7/site-packages/sqlalchemy/dialects/postgresql/pygresql.pyR&   z   s    	!
(   R0   R(   R2   R   R)   R1   (   R   R   R&   (    (   R/   R   sF   lib/python2.7/site-packages/sqlalchemy/dialects/postgresql/pygresql.pyR   u   s
    	c         C   s&   | j  s" t t |  ƒ j | | ƒ Sd  S(   N(   R0   R(   R2   R   (   R   R   R   (    (    sF   lib/python2.7/site-packages/sqlalchemy/dialects/postgresql/pygresql.pyR   ‡   s    	(   R    R!   R   R   (    (    (    sF   lib/python2.7/site-packages/sqlalchemy/dialects/postgresql/pygresql.pyR2   t   s   	t   _PGUUIDc           B   s   e  Z d  „  Z d „  Z RS(   c            s>   | j  s t t |  ƒ j | ƒ S| j j ‰  ‡  f d †  } | S(   Nc            sn   |  d  k r d  St |  t t f ƒ rN t |  ƒ d k rD ˆ  d |  ƒ Sˆ  |  ƒ St |  t ƒ rj ˆ  d |  ƒ S|  S(   Ni   t   bytesR   (   R   R   t   strR4   t   lenR   (   R$   (   t   uuid(    sF   lib/python2.7/site-packages/sqlalchemy/dialects/postgresql/pygresql.pyR&   ’   s    
(   t   has_native_uuidR(   R3   R   R)   t   Uuid(   R   R   R&   (    (   R7   sF   lib/python2.7/site-packages/sqlalchemy/dialects/postgresql/pygresql.pyR      s
    	c         C   s<   | j  s" t t |  ƒ j | | ƒ S|  j s8 d „  } | Sd  S(   Nc         S   s   |  d  k	 r t |  ƒ Sd  S(   N(   R   R5   (   R$   (    (    sF   lib/python2.7/site-packages/sqlalchemy/dialects/postgresql/pygresql.pyR&   ¤   s    (   R8   R(   R3   R   t   as_uuid(   R   R   R   R&   (    (    sF   lib/python2.7/site-packages/sqlalchemy/dialects/postgresql/pygresql.pyR   Ÿ   s
    			(   R    R!   R   R   (    (    (    sF   lib/python2.7/site-packages/sqlalchemy/dialects/postgresql/pygresql.pyR3   Œ   s   	t   _PGCompilerc           B   s   e  Z d  „  Z d „  Z RS(   c         K   s*   |  j  | j |  d |  j  | j |  S(   Ns    %% (   R&   t   leftt   right(   R   t   binaryt   operatort   kw(    (    sF   lib/python2.7/site-packages/sqlalchemy/dialects/postgresql/pygresql.pyt   visit_mod_binary¬   s    c         C   s   | j  d d ƒ S(   Nt   %s   %%(   t   replace(   R   t   text(    (    sF   lib/python2.7/site-packages/sqlalchemy/dialects/postgresql/pygresql.pyt   post_process_text³   s    (   R    R!   RA   RE   (    (    (    sF   lib/python2.7/site-packages/sqlalchemy/dialects/postgresql/pygresql.pyR;   «   s   	t   _PGIdentifierPreparerc           B   s   e  Z d  „  Z RS(   c         C   s(   | j  |  j |  j ƒ } | j  d d ƒ S(   NRB   s   %%(   RC   t   escape_quotet   escape_to_quote(   R   R$   (    (    sF   lib/python2.7/site-packages/sqlalchemy/dialects/postgresql/pygresql.pyt   _escape_identifier¸   s    (   R    R!   RI   (    (    (    sF   lib/python2.7/site-packages/sqlalchemy/dialects/postgresql/pygresql.pyRF   ·   s   t   PGDialect_pygresqlc           B   sƒ   e  Z d  Z e Z e Z e d „  ƒ Z e	 j
 e j i e e 6e e 6e e 6e e 6e e 6e e 6ƒ Z d „  Z d „  Z d „  Z RS(   t   pygresqlc         C   s   d d  l  } | S(   Niÿÿÿÿ(   t   pgdb(   t   clsRL   (    (    sF   lib/python2.7/site-packages/sqlalchemy/dialects/postgresql/pygresql.pyR)   Ä   s    c         K   s  t  t |  ƒ j |   yL |  j j } t j d | ƒ } t | j d ƒ ƒ t | j d ƒ ƒ f } Wn  t	 t
 t f k
 r„ d } n X| |  _ | d k  rÇ t } } } | d	 k rç t j d ƒ qç n  t |  _ t |  _ t } } } | |  _ | |  _ | |  _ d  S(
   Ns   (\d+)\.(\d+)i   i   i    i   sA   PyGreSQL is only fully supported by SQLAlchemy since version 5.0.(   i    i    (   i   i    (   i    i    (   R(   RJ   t   __init__R)   t   versiont   ret   matchR   t   groupt   AttributeErrort
   ValueErrort	   TypeErrort   dbapi_versiont   FalseR   t   warnt   Truet   supports_unicode_statementst   supports_unicode_bindsR'   R0   R8   (   R   t   kwargsRO   t   mR'   R0   R8   (    (    sF   lib/python2.7/site-packages/sqlalchemy/dialects/postgresql/pygresql.pyRN   Ö   s&    .
					c         C   st   | j  d d ƒ } d | k rZ d | j d d ƒ j d d ƒ d	 | j d ƒ f | d <n  | j | j ƒ g  | f S(
   Nt   usernamet   usert   ports   %s:%st   hostt    t   :i   i    (   t   translate_connect_argst   gett   rsplitt   popt   updatet   query(   R   t   urlt   opts(    (    sF   lib/python2.7/site-packages/sqlalchemy/dialects/postgresql/pygresql.pyt   create_connect_argsî   s    c         C   sz   t  | |  j j ƒ rv | s t Sy | j } Wn t k
 r? n X| sJ t Sy | j SWqv t k
 rr | j d  k SXn  t S(   N(	   R   R)   t   ErrorRW   t
   connectionRS   t   closedt   _cnxR   (   R   t   eRn   t   cursor(    (    sF   lib/python2.7/site-packages/sqlalchemy/dialects/postgresql/pygresql.pyt   is_disconnectø   s    (   R    R!   t   driverR;   t   statement_compilerRF   t   preparert   classmethodR)   R   t   update_copyR   t   colspecsR   R   R"   R   R+   R1   R   R2   R	   R3   R   RN   Rl   Rs   (    (    (    sF   lib/python2.7/site-packages/sqlalchemy/dialects/postgresql/pygresql.pyRJ   ½   s    		
("   t   __doc__R   RP   t   baseR    R   R   R   R   R   R   R%   R   R/   R   R	   Rb   R
   R   R   t   sql.elementsR   t   typesR1   R   R   R"   R+   R2   R3   R;   RF   RJ   R   (    (    (    sF   lib/python2.7/site-packages/sqlalchemy/dialects/postgresql/pygresql.pyt   <module>   s6   M