ó
;t/Uc           @   s¨   d  d l  Z  d d l m Z d d l m Z d d l m Z d d l m Z m	 Z	 d d l
 m Z d d l m Z d	 d
 l m Z m Z m Z d e f d „  ƒ  YZ d S(   iÿÿÿÿNi   (   t   IDENTITY(   t   json(   t   couchdb(   t   Fieldt   Query(   t   SQLALL(   t   uuid2inti   (   t   BaseAdaptert   NoSQLAdaptert   SELECT_ARGSt   CouchDBAdapterc        
   B   sz  e  Z d* Z e Z i e d 6e d 6e d 6e d 6e d 6e d 6e d 6e d 6e d	 6e d
 6e d 6e	 j
 d 6e	 j d 6e	 j	 d 6e d 6e d 6e d 6e d 6e d 6Z d „  Z d e d „ Z d „  Z d+ d „ Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d d  d+ d! e i  i  e d+ d" „	 Z e e d+ d# „ Z d$ „  Z d% „  Z d& „  Z d' „  Z  d( „  Z! d+ d) „ Z" RS(,   R   t   booleant   stringt   textR   t   passwordt   blobt   uploadt   integert   bigintt   floatt   doublet   datet   timet   datetimet   idt	   references   list:strings   list:integers   list:referencec         C   s   d  S(   N(    (   t   selft   filename(    (    sS   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/packages/dal/pydal/adapters/couchdb.pyt   file_exists'   s    t   rbc         C   s   d  S(   N(    (   R   R   t   modet   lock(    (    sS   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/packages/dal/pydal/adapters/couchdb.pyt	   file_open(   s    c         C   s   d  S(   N(    (   R   t   fileobj(    (    sS   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/packages/dal/pydal/adapters/couchdb.pyt
   file_close)   s    c         C   s?   t  | t ƒ r, | j d k r, d | j Sn  t j |  | | ƒ S(   NR   s   %s._id(   t
   isinstanceR   t   typet	   tablenameR   t   expand(   R   t
   expressiont
   field_type(    (    sS   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/packages/dal/pydal/adapters/couchdb.pyR&   +   s    c         C   s    d |  j  | ƒ |  j  | ƒ f S(   Ns
   (%s && %s)(   R&   (   R   t   firstt   second(    (    sS   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/packages/dal/pydal/adapters/couchdb.pyt   AND1   s    c         C   s    d |  j  | ƒ |  j  | ƒ f S(   Ns
   (%s || %s)(   R&   (   R   R)   R*   (    (    sS   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/packages/dal/pydal/adapters/couchdb.pyt   OR4   s    c         C   sC   | d  k r d |  j | ƒ Sd |  j | ƒ |  j | | j ƒ f S(   Ns   (%s == null)s
   (%s == %s)(   t   NoneR&   R$   (   R   R)   R*   (    (    sS   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/packages/dal/pydal/adapters/couchdb.pyt   EQ7   s    c         C   sC   | d  k r d |  j | ƒ Sd |  j | ƒ |  j | | j ƒ f S(   Ns   (%s != null)s
   (%s != %s)(   R-   R&   R$   (   R   R)   R*   (    (    sS   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/packages/dal/pydal/adapters/couchdb.pyt   NE<   s    c         C   s    d |  j  | ƒ |  j  | ƒ f S(   Ns   %s + %s(   R&   (   R   R)   R*   (    (    sS   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/packages/dal/pydal/adapters/couchdb.pyt   COMMAA   s    c         C   sÈ   t  j |  | | ƒ } | d k r7 t t t | ƒ ƒ ƒ S| d	 k r™ |  j j d ƒ rh |  j j d | ƒ St j	 | ƒ S|  j
 j d ƒ s™ t d ƒ ‚ q™ n  t t | t ƒ r² | pÄ | oÄ | j d ƒ ƒ S(
   NR   R   R   R   R   R   s   No json serializers availablet   utf8(   s   dates   times   datetimes   boolean(   R   t	   representt   reprt   strt   longt   dbt   has_serializert	   serializeR   t   dumpst   _dbt   ImportErrorR#   t   unicodet   encode(   R   t   objt	   fieldtypet   value(    (    sS   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/packages/dal/pydal/adapters/couchdb.pyR2   D   s    s   couchdb://127.0.0.1:5984i    s   UTF-8c            s™   | ˆ  _  | ˆ  _ |	 r( ˆ  j | ƒ n  d ˆ  _ | ˆ  _ d | d <d ˆ  _ |
 ˆ  _ | ˆ  _ d | d } | | ‡  f d † } ˆ  j | d t	 ƒd  S(	   NR   t    t   _lastsqls   UTF-8s   http://i
   c            s   ˆ  j  j |  |  S(   N(   t   drivert   Server(   t   urlt   driver_args(   R   (    sS   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/packages/dal/pydal/adapters/couchdb.pyt	   connectora   s    t   cursor(
   R6   t   urit   find_drivert   dbenginet   foldert   db_codect   _after_connectiont	   pool_sizet	   reconnectt   False(   R   R6   RI   RO   RL   RM   t   credential_decoderRF   t   adapter_argst
   do_connectt   after_connectionRE   RG   (    (   R   sS   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/packages/dal/pydal/adapters/couchdb.pyt   __init__R   s    		 		
			c         C   s.   | r* y |  j  j | j ƒ Wq* q* Xn  d  S(   N(   t
   connectiont   createt
   _tablename(   R   t   tablet   migratet   fake_migratet	   polymodel(    (    sS   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/packages/dal/pydal/adapters/couchdb.pyt   create_tablee   s
    c            sb   t  ˆ  j j ƒ  ƒ } ˆ  j | j } t ‡  f d †  | Dƒ ƒ } t | ƒ | d <| j | ƒ | S(   Nc         3   s3   |  ]) \ } } | j  ˆ  j | | j ƒ f Vq d  S(   N(   t   nameR2   R$   (   t   .0t   kt   v(   R   (    sS   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/packages/dal/pydal/adapters/couchdb.pys	   <genexpr>o   s    t   _id(   R   R6   t   uuidRW   RY   t   dictR4   t   save(   R   RZ   t   fieldsR   t   ctablet   values(    (   R   sS   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/packages/dal/pydal/adapters/couchdb.pyt   insertl   s    c         C   ss  t  | t ƒ s t d ƒ ‚ n  x. t | j ƒ  ƒ t D] } t d | ƒ ‚ q5 Wg  } x: | D]2 } t  | t ƒ r | | j 7} q\ | j | ƒ q\ Wd „  } d „  } | } |  j	 | ƒ }	 g  | pÌ |  j
 |	 D] }
 |
 j ^ qÍ } g  | D] } d |	 | f ^ qé } d j g  | D] }
 d |	 | |
 ƒ f ^ qƒ } d t d |	 d	 |  j | ƒ d
 d |	 d | ƒ } | | f S(   Ns   Not Supporteds   invalid select attribute: %sc         S   s   |  d k r d p |  S(   NR   Rc   (    (   t   fd(    (    sS   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/packages/dal/pydal/adapters/couchdb.pyt   uid   s    c         S   s,   | d k r t  |  d ƒ p+ |  j | d  ƒ S(   NR   Rc   (   R5   t   getR-   (   t   rowRk   (    (    sS   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/packages/dal/pydal/adapters/couchdb.pyRm      s    s   %s.%st   ,s=   (function(%(t)s){if(%(query)s)emit(%(order)s,[%(fields)s]);})t   tt   queryt   orders   %s._idRg   (   R#   R   t   SyntaxErrort   sett   keysR	   R   t   _tablet   appendt	   get_tableR6   R_   t   joinRe   R&   (   R   Rq   Rg   t
   attributest   keyt
   new_fieldst   itemRl   Rm   R%   t   ft
   fieldnamesRa   t   colnamest   fn(    (    sS   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/packages/dal/pydal/adapters/couchdb.pyt   _selectt   s,    		)#2

c         C   s«   t  | t ƒ s t d ƒ ‚ n  |  j | | | ƒ \ } } | d j d ƒ d } |  j | } g  | j | ƒ D] } | d ^ qm }	 | j d |  j ƒ }
 |
 |	 | | t	 ƒ S(   Ns   Not Supportedi    t   .R@   t	   processor(
   R#   R   Rs   R‚   t   splitRW   Rq   Rm   t   parseRQ   (   R   Rq   Rg   Rz   R   R€   R%   Rh   t   colst   rowsR„   (    (    sS   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/packages/dal/pydal/adapters/couchdb.pyt   select   s    &c         C   s  t  | t ƒ s t d ƒ ‚ n  | j j d k r¯ | j |  j k r¯ | j } | j j } | | j j k so t	 ‚ |  j
 | } y | t | ƒ =d SWqt j j k
 r« d SXni |  j | ƒ } |  j | |  j | j g i  ƒ } |  j
 | } x | D] } | t | j ƒ =qô Wt | ƒ Sd  S(   Ns   Not SupportedR   i   i    (   R#   R   Rs   R)   R$   t   opR.   R*   R%   t   AssertionErrorRW   R4   R   t   httpt   ResourceNotFoundRx   R‰   R6   Rc   R   t   len(   R   R%   Rq   R   Rh   Rˆ   Rn   (    (    sS   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/packages/dal/pydal/adapters/couchdb.pyt   delete™   s$    $	"c         C   s¬  t  | t ƒ s t d ƒ ‚ n  | j j d k rè | j |  j k rè | j } | j j } |  j	 | } yf | t
 | ƒ } x> | D]6 \ } } |  j | |  j | | j j ƒ | | j <q~ W| j | ƒ d SWq¨t j j k
 rä d SXnÀ |  j | ƒ } |  j | |  j | j g i  ƒ }	 |  j	 | } |  j | }
 xh |	 D]` } | t
 | j ƒ } x7 | D]/ \ } } |  j | |
 | j j ƒ | | j <qZW| j | ƒ q:Wt |	 ƒ Sd  S(   Ns   Not SupportedR   i   i    (   R#   R   Rs   R)   R$   RŠ   R.   R*   R%   RW   R4   R2   R6   R_   Rf   R   RŒ   R   Rx   R‰   Rc   R   RŽ   (   R   R%   Rq   Rg   R   Rh   t   docR{   R@   Rˆ   RZ   Rn   (    (    sS   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/packages/dal/pydal/adapters/couchdb.pyt   update®   s0    $	."'c         C   sn   | r t  d ƒ ‚ n  t | t ƒ s3 t d ƒ ‚ n  |  j | ƒ } |  j | |  j | j g i  ƒ } t | ƒ S(   Ns   COUNT DISTINCT not supporteds   Not Supported(	   t   RuntimeErrorR#   R   Rs   Rx   R‰   R6   Rc   RŽ   (   R   Rq   t   distinctR%   Rˆ   (    (    sS   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/packages/dal/pydal/adapters/couchdb.pyt   countÉ   s    "(   s   couchdbN(#   t   __name__t
   __module__t   driverst   Truet   uploads_in_blobt   boolR4   R5   R   R   R   R   t   listt   typesR   R    R"   R-   R&   R+   R,   R.   R/   R0   R2   R    RV   RQ   R^   Rj   R‚   R‰   R   R‘   R”   (    (    (    sS   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/packages/dal/pydal/adapters/couchdb.pyR
      sV   



												
		(   R   t   _globalsR    t   _loadR   R—   R   t   objectsR   R   t   helpers.classesR   t   helpers.methodsR   t   baseR   R   R	   R
   (    (    (    sS   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/packages/dal/pydal/adapters/couchdb.pyt   <module>   s   