
    (i                     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  G d
 de      Zy)    )caches)LocMemCache)ImproperlyConfigured)OperationalErrorProgrammingError)	post_save   )Backend   )settingssignalsconfigc                   6    e Zd Zd Zd Zd Zd Zd Zd Zd Z	y)	DatabaseBackendc                 &   ddl m} || _        t        j                  | _        t        j                  | _        d| _        | j                  j                  j                         st        d      t        j                  rRt        t        j                     | _        t        | j                  t               r#t        dt        j                  z        d | _        | j#                          t%        j&                  | j(                  | j                         y )N   )	Constance
autofilledzmThe constance.backends.database app isn't installed correctly. Make sure it's in your INSTALLED_APPS setting.zThe CONSTANCE_DATABASE_CACHE_BACKEND setting refers to a subclass of Django's local-memory backend (%r). Please set it to a backend that supports cross-process caching.)sender)modelsr   _modelr   DATABASE_PREFIX_prefixDATABASE_CACHE_AUTOFILL_TIMEOUT_autofill_timeout_autofill_cachekey_meta
get_fieldsr   DATABASE_CACHE_BACKENDr   _cache
isinstancer   autofillr   connectclear)selfr   s     2/opt/sopds/constance/backends/database/__init__.py__init__zDatabaseBackend.__init__   s    %//!)!I!I".{{  ++-&LM M ** !@!@ADK$++{3*O 5567 7 DK$**T[[9    c                 "    | j                   |S N)r   )r%   keys     r&   
add_prefixzDatabaseBackend.add_prefix&   s    s++r(   c                 v   | j                   r| j                  sy | j                  | j                        }| j                  j	                  |      ry i }d||<   | j                  t        j                        D ]  \  }}||| j                  |      <    | j                  j                  || j                          y )Nr   )timeout)	r   r    r,   r   getmgetr   CONFIGset_many)r%   full_cachekeyautofill_valuesr+   values        r&   r"   zDatabaseBackend.autofill)   s    %%T[[(?(?@;;??=))*&))HOO4 	:JC49ODOOC01	:_d6L6LMr(   c              #     K   |sy |D ci c]  }| j                  |      | }}	 | j                  j                  j                  |      }|D ]  }||j                     |j
                  f ! y c c}w # t        t        f$ r Y y w xY ww)N)key__in)r,   r   _default_managerfilterr+   r5   r   r   )r%   keysr+   storedconsts        r&   r0   zDatabaseBackend.mget5   s     59:c$c)::	[[11888FF 3599ou{{223 ;
 !"23 		s3   BA1BA
A6 0B6BBBBc                    | j                  |      }| j                  rI| j                  j                  |      }|.| j                          | j                  j                  |      }nd }|[	 | j                  j
                  j                  |      j                  }| j                  r| j                  j                  ||       |S |S # t        t        | j                  j                  f$ r Y |S w xY w)N)r+   )r,   r    r/   r"   r   r8   r5   addr   r   DoesNotExist)r%   r+   r5   s      r&   r/   zDatabaseBackend.get@   s    ooc";;KKOOC(E},E=04488S8AGG ;;KKOOC/u %&68P8PQ  s   ,0C $C0/C0c                    | j                  |      }	 | j                  j                  j                  | j	                  |      d|i      \  }}|s||_        |j                          | j                  r| j                  j                  ||       t        j                  j                  t        |||       y # t
        t        f$ r Y y w xY w)Nr5   )r+   defaults)r   r+   	old_value	new_value)r/   r   r8   get_or_creater,   r   r   r5   saver    setr   config_updatedsendr   )r%   r+   r5   rB   	constancecreateds         r&   rF   zDatabaseBackend.setS   s    HHSM		!%!=!=!K!KOOC(GU3C "L "Iw #IONN;;KKOOC'##si5 	$ 	
 !"23 		s   ;B7 7C	C	c                 0   | j                   r|st        j                  D cg c]  }| j                  |       }}|j	                  | j                  | j
                               | j                   j                  |       | j                          y y y c c}w r*   )r    r   r1   r,   appendr   delete_manyr"   )r%   r   instancerJ   kwargskr:   s          r&   r$   zDatabaseBackend.clearh   sk    ;;w08@1DOOA&@D@KK(?(?@AKK##D)MMO	  ';@s   BN)
__name__
__module____qualname__r'   r,   r"   r0   r/   rF   r$    r(   r&   r   r      s&    :4,
N	&
*r(   r   N)django.core.cacher   !django.core.cache.backends.locmemr   django.core.exceptionsr   	django.dbr   r   django.db.models.signalsr    r
   r   r   r   r   rT   r(   r&   <module>r[      s+    $ 9 7 8 .  ) )bg br(   