
h
\c           @   s  d  d l  Z  d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l m Z d  d l Z d  d l	 Z	 d  d l
 Z
 y d  d l Z Wn e k
 r d Z n Xe j e  Z d e f d     YZ d e f d     YZ d e f d     YZ d	   Z d
   Z d S(   iN(   t   contextmanagert   Basec           B   s   e  Z d    Z d   Z RS(   c         C   s   t     d  S(   N(   t   NotImplemented(   t   selft   urlt   content(    (    s?   /data/av2000/b2b/venv/lib/python2.7/site-packages/zeep/cache.pyt   add   s    c         C   s   t     d  S(   N(   R   (   R   R   (    (    s?   /data/av2000/b2b/venv/lib/python2.7/site-packages/zeep/cache.pyt   get   s    (   t   __name__t
   __module__R   R   (    (    (    s?   /data/av2000/b2b/venv/lib/python2.7/site-packages/zeep/cache.pyR      s   	t   InMemoryCachec           B   s2   e  Z d  Z i  Z d d  Z d   Z d   Z RS(   sD   Simple in-memory caching using dict lookup with support for timeoutsi  c         C   s   | |  _  d  S(   N(   t   _timeout(   R   t   timeout(    (    s?   /data/av2000/b2b/venv/lib/python2.7/site-packages/zeep/cache.pyt   __init__%   s    c         C   sf   t  j d |  t | t t f  sF t d j t |  j    n  t	 j	 j
   | f |  j | <d  S(   Ns   Caching contents of %ss'   a bytes-like object is required, not {}(   t   loggert   debugt
   isinstancet   strt   bytest	   TypeErrort   formatt   typeR   t   datetimet   utcnowt   _cache(   R   R   R   (    (    s?   /data/av2000/b2b/venv/lib/python2.7/site-packages/zeep/cache.pyR   (   s
    c         C   se   y |  j  | \ } } Wn t k
 r* n' Xt | |  j  sQ t j d |  | St j d |  d  S(   Ns   Cache HIT for %ss   Cache MISS for %s(   R   t   KeyErrort   _is_expiredR   R   R   t   None(   R   R   t   createdR   (    (    s?   /data/av2000/b2b/venv/lib/python2.7/site-packages/zeep/cache.pyR   /   s    (   R   R	   t   __doc__R   R   R   R   (    (    (    s?   /data/av2000/b2b/venv/lib/python2.7/site-packages/zeep/cache.pyR
   !   s
   	t   SqliteCachec           B   se   e  Z d  Z d Z d
 d d  Z e d    Z d   Z d   Z	 d   Z
 d   Z e d	    Z RS(   s7   Cache contents via an sqlite database on the filesystemt   1i  c         C   s   t  d  k r t d   n  | d k r: t d d   n  t j   |  _ | |  _ | r^ | n t   |  _	 |  j
   * } | j   } | j d  | j   Wd  QXd  S(   Ns.   sqlite3 module is required for the SqliteCaches   :memory:s9   The SqliteCache doesn't support :memory: since it is not s2   thread-safe. Please use zeep.cache.InMemoryCache()s   
                    CREATE TABLE IF NOT EXISTS request
                    (created timestamp, url text, content text)
                (   t   sqlite3R   t   RuntimeErrort
   ValueErrort	   threadingt   RLockt   _lockR   t   _get_default_cache_patht   _db_patht   db_connectiont   cursort   executet   commit(   R   t   pathR   t   connR)   (    (    s?   /data/av2000/b2b/venv/lib/python2.7/site-packages/zeep/cache.pyR   @   s    	c         c   s>   |  j  / t j |  j d t j } | V| j   Wd  QXd  S(   Nt   detect_types(   R%   R    t   connectR'   t   PARSE_DECLTYPESt   close(   R   t
   connection(    (    s?   /data/av2000/b2b/venv/lib/python2.7/site-packages/zeep/cache.pyR(   Y   s
    
c      	   C   s   t  j d |  |  j |  } |  j   R } | j   } | j d | f  | j d t j j   | | f  | j   Wd  QXd  S(   Ns   Caching contents of %ss!   DELETE FROM request WHERE url = ?s<   INSERT INTO request (created, url, content) VALUES (?, ?, ?)(	   R   R   t   _encode_dataR(   R)   R*   R   R   R+   (   R   R   R   t   dataR-   R)   (    (    s?   /data/av2000/b2b/venv/lib/python2.7/site-packages/zeep/cache.pyR   a   s    c         C   s   |  j    2 } | j   } | j d | f  | j   } Wd  QX| r | d \ } } t | |  j  s t j d |  |  j |  Sn  t j d |  d  S(   Ns0   SELECT created, content FROM request WHERE url=?i    s   Cache HIT for %ss   Cache MISS for %s(	   R(   R)   R*   t   fetchallR   R   R   R   t   _decode_data(   R   R   R-   R)   t   rowsR   R4   (    (    s?   /data/av2000/b2b/venv/lib/python2.7/site-packages/zeep/cache.pyR   m   s    c         C   s4   t  j |  } t j r) t |  j |  S|  j | S(   N(   t   base64t	   b64encodet   sixt   PY2t   buffert   _version_string(   R   R4   (    (    s?   /data/av2000/b2b/venv/lib/python2.7/site-packages/zeep/cache.pyR3   {   s    	c         C   sH   t  j r t |  } n  | j |  j  rD t j | t |  j   Sd  S(   N(   R:   R;   R   t
   startswithR=   R8   t	   b64decodet   len(   R   R4   (    (    s?   /data/av2000/b2b/venv/lib/python2.7/site-packages/zeep/cache.pyR6      s    	c         C   s    d |  j  } t | j d   S(   Nu	   $ZEEP:%s$t   ascii(   t   _versionR   t   encode(   R   t   prefix(    (    s?   /data/av2000/b2b/venv/lib/python2.7/site-packages/zeep/cache.pyR=      s    N(   R   R	   R   RB   R   R   R    R(   R   R   R3   R6   t   propertyR=   (    (    (    s?   /data/av2000/b2b/venv/lib/python2.7/site-packages/zeep/cache.pyR   <   s   				c         C   sc   | d k r t St j j   j d t j  } |  j d t j  } | t j d |  7} | | k S(   s&   Return boolean if the value is expiredt   tzinfot   secondsN(   R   t   FalseR   R   t   replacet   pytzt   utct	   timedelta(   t   valueR   t   nowt   max_age(    (    s?   /data/av2000/b2b/venv/lib/python2.7/site-packages/zeep/cache.pyR      s    c          C   sv   t  j d t  }  y t j |   Wn= t k
 rb } | j t j k r\ t j j	 |   r\ qc   n Xt j j
 |  d  S(   Nt   zeeps   cache.db(   t   appdirst   user_cache_dirRH   t   ost   makedirst   OSErrort   errnot   EEXISTR,   t   isdirt   join(   R,   t   exc(    (    s?   /data/av2000/b2b/venv/lib/python2.7/site-packages/zeep/cache.pyR&      s    $(   R8   R   RV   t   loggingRS   R#   t
   contextlibR    RQ   RJ   R:   R    t   ImportErrorR   t	   getLoggerR   R   t   objectR   R
   R   R   R&   (    (    (    s?   /data/av2000/b2b/venv/lib/python2.7/site-packages/zeep/cache.pyt   <module>   s&   
	Q	