o
    {,h	                     @   sR   d dl Z d dlmZ d dlmZ d dlmZ e ZG dd dZ	G dd dZ
dS )	    N)checks)RemovedInDjango60Warning)cached_propertyc                   @   sH   e Zd ZdZdd Zedd ZefddZdd	 Z	d
d Z
dd ZdS )FieldCacheMixinu   
    An API for working with the model's fields value cache.

    Subclasses must set self.cache_name to a unique entry for the cache -
    typically the field’s name.
    c                 C   s   t N)NotImplementedErrorself r
   T/var/www/html/rh/venv/lib/python3.10/site-packages/django/db/models/fields/mixins.pyget_cache_name   s   zFieldCacheMixin.get_cache_namec                 C   s(   |   }tjd| jj dtdd |S )Nz	Override z(.cache_name instead of get_cache_name().   )
stacklevel)r   warningswarn	__class____qualname__r   )r	   
cache_namer
   r
   r   r      s   zFieldCacheMixin.cache_namec                 C   s2   z|j j| j W S  ty   |tu r | Y S w r   )_statefields_cacher   KeyErrorNOT_PROVIDED)r	   instancedefaultr
   r
   r   get_cached_value#   s   z FieldCacheMixin.get_cached_valuec                 C   s   | j |jjv S r   )r   r   r   r	   r   r
   r
   r   	is_cached+   s   zFieldCacheMixin.is_cachedc                 C   s   ||j j| j< d S r   r   r   r   )r	   r   valuer
   r
   r   set_cached_value.   s   z FieldCacheMixin.set_cached_valuec                 C   s   |j j| j= d S r   r   r   r
   r
   r   delete_cached_value1   s   z#FieldCacheMixin.delete_cached_valueN)__name__
__module__r   __doc__r   r   r   r   r   r   r   r    r
   r
   r
   r   r   
   s    
r   c                       s(   e Zd ZdZdd Z fddZ  ZS )CheckFieldDefaultMixin)z<valid default>z<invalid default>c                 C   sD   |   r | jd ur t| js tjd| jjf d| j | ddgS g S )Nzk%s default should be a callable instead of an instance so that it's not shared between all field instances.z7Use a callable instead, e.g., use `%s` instead of `%s`.zfields.E010)hintobjid)has_defaultr   callabler   Warningr   r!   _default_hintr   r
   r
   r   _check_default8   s"   
z%CheckFieldDefaultMixin._check_defaultc                    s$   t  jdi |}||   |S )Nr
   )supercheckextendr,   )r	   kwargserrorsr   r
   r   r.   N   s   zCheckFieldDefaultMixin.check)r!   r"   r   r+   r,   r.   __classcell__r
   r
   r2   r   r$   5   s    r$   )r   django.corer   django.utils.deprecationr   django.utils.functionalr   objectr   r   r$   r
   r
   r
   r   <module>   s    +