ó
a#nSc           @   sŽ  d  Z  d d l Z d d l m Z d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d	 „  ƒ  YZ e d
 k rŠd d l	 m
 Z
 e
 d ƒ Z e j ƒ  Z d Ge e ƒ GHe j d ƒ e e ƒ Z xH e d ƒ D]: Z y e e Z WqÍ e k
 re d k st ‚ qÍ XqÍ Wd GHe j ƒ  Z e j d ƒ e e ƒ Z x$ e e e ƒ ƒ D] Z e e Z qHWd GHe j ƒ  Z e j d ƒ e e ƒ Z x e D] Z e \ Z Z q�Wd GHe j ƒ  Z e j d ƒ e e ƒ Z g  Z x e D] Z e j e ƒ qÚWe e ƒ d k s	t ‚ e j ƒ  Z e j d ƒ e e d d ƒZ g  Z x e D] Z e j e ƒ qAWe e ƒ d k spt ‚ e j ƒ  Z e j d ƒ e e d d ƒZ e e ƒ d k s³t ‚ e d d k sÉt ‚ e j ƒ  Z e j d ƒ e e d d ƒZ e d d k s
t ‚ e d d  k s t ‚ e d d! k s6t ‚ e j ƒ  Z e j d ƒ e e ƒ Z e d d" k sqt ‚ e d d# k sŠt ‚ n  d S($   s¤    defines class _DbResultSet_ for lazy interactions with Db query results

**Note**

  this uses the Python iterator interface, so you'll need python 2.2 or above.

iÿÿÿÿN(   t   DbInfot   DbResultBasec           B   sP   e  Z d  d d d „ Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 RS(	   iÿÿÿÿc         C   sX   | |  _  | |  _ | |  _ | |  _ | |  _ | |  _ |  j ƒ  |  j ƒ  |  j ƒ  d  S(   N(   t   cursort
   removeDupst	   transformt   cmdt   connt   extrast   Resett   _initColumnNamesAndTypes(   t   selfR   R   R   R   R   R   (    (    sY   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Dbase/DbResultSet.pyt   __init__   s    						

c         C   sw   y< |  j  s" |  j j |  j ƒ n |  j j |  j |  j  ƒ Wn4 t j j d |  j ƒ d d l } | j ƒ  n Xd S(   s    implement in subclasses

    s#   the command "%s" generated errors:
iÿÿÿÿN(	   R   R   t   executeR   t   syst   stderrt   writet	   tracebackt	   print_exc(   R
   R   (    (    sY   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Dbase/DbResultSet.pyR      s    	c         C   s   |  j  ƒ  |  S(   N(   R   (   R
   (    (    sY   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Dbase/DbResultSet.pyt   __iter__)   s    
c         C   s}   g  |  _  g  |  _ x@ t j |  j ƒ D], \ } } |  j  j | ƒ |  j j | ƒ q% Wt |  j  ƒ |  _  t |  j ƒ |  _ d  S(   N(   t   colNamest   colTypesR    t   GetColumnInfoFromCursorR   t   appendt   tuple(   R
   t   cNamet   cType(    (    sY   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Dbase/DbResultSet.pyR	   -   s    		c         C   s   |  j  S(   N(   R   (   R
   (    (    sY   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Dbase/DbResultSet.pyt   GetColumnNames6   s    c         C   s   |  j  S(   N(   R   (   R
   (    (    sY   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Dbase/DbResultSet.pyt   GetColumnTypes8   s    c         C   s^   d  g t |  j ƒ } x; t t |  j ƒ ƒ D]$ } |  j | |  j | f | | <q, Wt | ƒ S(   N(   t   Nonet   lenR   t   rangeR   R   (   R
   t   rest   i(    (    sY   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Dbase/DbResultSet.pyt   GetColumnNamesAndTypes:   s    "N(
   t   __name__t
   __module__R   R   R   R   R	   R   R   R!   (    (    (    sY   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Dbase/DbResultSet.pyR      s   						t   DbResultSetc           B   s)   e  Z d  Z d „  Z d „  Z d „  Z RS(   s$    Only supports forward iteration

  c         O   s)   t  j |  | | Ž g  |  _ d |  _ d  S(   Ni    (   R   R   t   seent   _stopped(   R
   t   argst   kwargs(    (    sY   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Dbase/DbResultSet.pyR   E   s    	c         C   s   d |  _  t j |  ƒ d  S(   Ni    (   R&   R   R   (   R
   (    (    sY   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Dbase/DbResultSet.pyR   I   s    	c         C   s¾   |  j  r t ‚ n  d  } xŸ | d  k r¹ |  j j ƒ  } | sN d |  _  t ‚ n  |  j d  k	 ro |  j | ƒ } n  |  j d k r | |  j } | |  j k r£ d  } q¶ |  j j | ƒ q q W| S(   Ni   i    (	   R&   t   StopIterationR   R   t   fetchoneR   R   R%   R   (   R
   t   rt   v(    (    sY   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Dbase/DbResultSet.pyt   nextM   s     					(   R"   R#   t   __doc__R   R   R-   (    (    (    sY   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Dbase/DbResultSet.pyR$   A   s   		t   RandomAccessDbResultSetc           B   sD   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   s    Supports random access

  c         O   s2   t  j |  | | Ž g  |  _ g  |  _ d |  _ d  S(   Niÿÿÿÿ(   R   R   t   resultsR%   t   _pos(   R
   R'   R(   (    (    sY   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Dbase/DbResultSet.pyR   f   s    		c         C   s,   d |  _  |  j d  k	 r( t j |  ƒ n  d  S(   Niÿÿÿÿ(   R1   R   R   R   R   (   R
   (    (    sY   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Dbase/DbResultSet.pyR   l   s    	c         C   sÆ   |  j  rÂ |  j  j ƒ  } x› | rµ |  j d  k	 rB |  j | ƒ } n  |  j d k r“ | |  j } | |  j k r£ |  j j | ƒ |  j j | ƒ q£ n |  j j | ƒ |  j  j ƒ  } q Wd  |  _  n  d  S(   Ni    (   R   R*   R   R   R   R%   R   R0   (   R
   R+   R,   (    (    sY   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Dbase/DbResultSet.pyt   _finishq   s    		c         C   s~  | d k  r t  d ‚ n  |  j d  k ry t |  j ƒ rm | t |  j ƒ k rv t  d | t |  j ƒ f ‚ qv qy t d ‚ n  x÷ | t |  j ƒ k rrd  } xÕ | d  k rn|  j j ƒ  } | sã d  |  _ t  d | t |  j ƒ f ‚ n  |  j d  k	 r|  j | ƒ } n  |  j d k r[| |  j } | |  j	 k r8d  } qk|  j j
 | ƒ |  j	 j
 | ƒ qš |  j j
 | ƒ qš Wq| W|  j | S(   Ni    s   negative indices not supporteds   index %d too large (%d max)s   Invalid cursor(   t
   IndexErrorR   R   R   R0   t
   ValueErrorR*   R   R   R%   R   (   R
   t   idxR+   R,   (    (    sY   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Dbase/DbResultSet.pyt   __getitem__�   s0     "		c         C   s2   |  j  d  k r t d ‚ n  |  j ƒ  t |  j  ƒ S(   Ns-   len() not supported for noMemory Results Sets(   R0   R   R4   R2   R   (   R
   (    (    sY   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Dbase/DbResultSet.pyt   __len__    s    
c         C   sG   |  j  d 7_  d  } |  j  t |  ƒ k  r= |  j |  j  } n t ‚ | S(   Ni   (   R1   R   R   R0   R)   (   R
   R   (    (    sY   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Dbase/DbResultSet.pyR-   ¦   s    (	   R"   R#   R.   R   R   R2   R6   R7   R-   (    (    (    sY   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Dbase/DbResultSet.pyR/   b   s   					t   __main__(   t	   DbConnects   TEST.GDBs   curs:s   select * from ten_elementsi   i
   s   use lens   use itert   dupss   select * from ten_elements_dupsi   R   i    i   i   i   i   i   i=   (   i    i   (   i    i   (   i   i   (   i
   i=   (   i    i   (   i    i   (   R.   R   t   rdkit.DbaseR    t   objectR   R$   R/   R"   t   rdkit.Dbase.DbConnectionR9   R   t	   GetCursort   curst   reprR   t   setR   R    t   valR3   t   AssertionErrorR   t   thingt   idR+   R   (    (    (    sY   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Dbase/DbResultSet.pyt   <module>
   sx   3!M