Ë
    ¸2Úi5  ã                   ó(  — d dl mZ d dlmZmZmZ d dlmZ d dlm	Z	m
Z
 d dlmZ d dlmZmZmZmZmZ d dlmZmZ  e«       Z G d„ d	ej0                  «      Z G d
„ dej0                  «      Z G d„ dej0                  «      Zd„ Zd„ Zej<                  j>                  jA                  e«       ej<                  j>                  jA                  e«       d„ Z! G d„ dej0                  «      Z" G d„ dej0                  «      Z# G d„ dej0                  «      Z$y)é    )ÚImproperlyConfigured)ÚmodelsÚrouterÚtransaction)ÚNow)Ú	post_saveÚpre_save)Úgettext_lazy)ÚAutoCreatedFieldÚAutoLastModifiedFieldÚMonitorFieldÚStatusFieldÚ	UUIDField)ÚQueryManagerÚSoftDeletableManagerc                   ón   ‡ — e Zd ZdZ e ed«      «      Z e ed«      «      Zˆ fd„Z	 G d„ d«      Z
ˆ xZS )ÚTimeStampedModelzl
    An abstract base class model that provides self-updating
    ``created`` and ``modified`` fields.

    ÚcreatedÚmodifiedc                 óˆ   •— |j                  dd«      }|rt        |«      j                  dh«      |d<   t        ‰| �  |i |¤Ž y)z¶
        Overriding the save method in order to make sure that
        modified field is updated even if it is not given as
        a parameter to the update field argument.
        Úupdate_fieldsNr   ©ÚgetÚsetÚunionÚsuperÚsave©ÚselfÚargsÚkwargsr   Ú	__class__s       €úI/var/www/html/acx/venv/lib/python3.12/site-packages/model_utils/models.pyr   zTimeStampedModel.save   sE   ø€ ð Ÿ
™
 ?°DÓ9ˆÙÜ&)¨-Ó&8×&>Ñ&>À
¸|Ó&LˆF�?Ñ#ä‰‰�dÐ%˜fÓ%ó    c                   ó   — e Zd ZdZy)úTimeStampedModel.MetaTN©Ú__name__Ú
__module__Ú__qualname__Úabstract© r$   r#   ÚMetar&   (   ó   „ Ø‰r$   r-   )r(   r)   r*   Ú__doc__r   Ú_r   r   r   r   r-   Ú__classcell__©r"   s   @r#   r   r      s5   ø„ ññ
 ™q ›|Ó,€GÙ$¡Q z£]Ó3€Hô
&÷õ r$   r   c                   ó�   — e Zd ZdZ ej
                   ed«      dd¬«      Z ej
                   ed«      dd¬«      Z G d„ d«      Z	y)	ÚTimeFramedModelzm
    An abstract base class model that provides ``start``
    and ``end`` fields to record a timeframe.

    ÚstartT)ÚnullÚblankÚendc                   ó   — e Zd ZdZy)úTimeFramedModel.MetaTNr'   r,   r$   r#   r-   r:   5   r.   r$   r-   N)
r(   r)   r*   r/   r   ÚDateTimeFieldr0   r5   r8   r-   r,   r$   r#   r4   r4   ,   sG   „ ñð
 !ˆF× Ñ ¡ 7£°$¸dÔC€EØ
ˆ&×
Ñ
™q ›x¨d¸$Ô
?€C÷ò r$   r4   c                   ór   ‡ — e Zd ZdZ e ed«      «      Z e ed«      d¬«      Zˆ fd„Z	 G d„ d«      Z
ˆ xZS )ÚStatusModelaD  
    An abstract base class model with a ``status`` field that
    automatically uses a ``STATUS`` class attribute of choices, a
    ``status_changed`` date-time field that records when ``status``
    was last modified, and an automatically-added manager for each
    status that returns objects with that status only.

    Ústatuszstatus changed)Úmonitorc                 ó�   •— |j                  dd«      }|r"d|v rt        |«      j                  dh«      |d<   t        ‰| �  |i |¤Ž y)z¼
        Overriding the save method in order to make sure that
        status_changed field is updated even if it is not given as
        a parameter to the update field argument.
        r   Nr>   Ústatus_changedr   r   s       €r#   r   zStatusModel.saveE   sN   ø€ ð Ÿ
™
 ?°DÓ9ˆÙ˜X¨Ñ6Ü&)¨-Ó&8×&>Ñ&>Ð@PÐ?QÓ&RˆF�?Ñ#ä‰‰�dÐ%˜fÓ%r$   c                   ó   — e Zd ZdZy)úStatusModel.MetaTNr'   r,   r$   r#   r-   rC   Q   r.   r$   r-   )r(   r)   r*   r/   r   r0   r>   r   rA   r   r-   r1   r2   s   @r#   r=   r=   9   s9   ø„ ññ ™˜8›Ó%€FÙ!¡!Ð$4Ó"5¸xÔH€Nô
&÷õ r$   r=   c                 ó:  — t        | t        «      sy| j                  j                  }t	        | dd«      D ]I  \  }}t        | |«      rt        d| j                  ›d|›d�«      ‚| j                  |t        |¬«      «       ŒK |j                  | j                  _        y)z?
    Add a Querymanager for each status item dynamically.

    NÚSTATUSr,   zStatusModel: Model 'z' has a field named 'z1' which conflicts with a status of the same name.)r>   )Ú
issubclassr=   Ú_metaÚdefault_managerÚgetattrÚ_field_existsr   r(   Úadd_to_classr   ÚnameÚdefault_manager_name)Úsenderr!   rH   ÚvalueÚdisplays        r#   Úadd_status_query_managersrQ   U   sŽ   € ô
 �fœkÔ*Øà—l‘l×2Ñ2€Oä! &¨(°BÓ7ò ?‰ˆˆwÜ˜ Ô'Ý&ð —?“?¢Eð+óð ð
 	×Ñ˜E¤<°uÔ#=Õ>ð?ð )8×(<Ñ(<€F‡L�LÕ%r$   c           
      óf  — t        | t        «      syt        | d«      rt        d| j                  z  «      ‚| j                  dt        t        j                  t        ¬«      t        j                  d¬«      z  t        j                  t        ¬«      t        j                  d¬«      z  z  «      «       y)	z7
    Add a QueryManager for a specific timeframe.

    NÚ
timeframedz[Model '%s' has a field named 'timeframed' which conflicts with the TimeFramedModel manager.)Ú
start__lteT)Ústart__isnull)Úend__gte)Úend__isnull)
rF   r4   rJ   r   r(   rK   r   r   ÚQÚnow)rN   r!   s     r#   Úadd_timeframed_query_managerrZ   k   s�   € ô
 �fœoÔ.ØÜ�V˜\Ô*Ü"ð@à�o‰oñó
ð 	
ð
 ×Ñ˜¤lÜ	�‰œSÔ	!¤F§H¡H¸4Ô$@Ñ	@Ü�8‰8œSÔ!¤F§H¡H¸Ô$>Ñ>ñ	@ó'õ r$   c                 ól   — || j                   j                  D �cg c]  }|j                  ‘Œ c}v S c c}w ©N)rG   Úlocal_fieldsÚattname)Úmodel_classÚ
field_nameÚfs      r#   rJ   rJ   ‚   s+   € Ø¨[×->Ñ->×-KÑ-KÖL¨˜!Ÿ)›)ÒLÐLÐLùÒLs   š1c                   ó    ‡ — e Zd ZdZ ej
                  d¬«      Z G d„ d«      Z ed¬«      Z	 e«       Z
 ej                  «       Zd	ˆ fd„	Zˆ xZS )
ÚSoftDeletableModelzÝ
    An abstract base class model with a ``is_removed`` field that
    marks entries that are not going to be used anymore, but are
    kept in db for any reason.
    Default manager returns only not-removed entries.
    F)Údefaultc                   ó   — e Zd ZdZy)úSoftDeletableModel.MetaTNr'   r,   r$   r#   r-   rf   �   r.   r$   r-   T)Ú_emit_deprecation_warningsc                 ó^   •— |rd| _         | j                  |¬«       yt        ‰| �  |d|i|¤ŽS )z‰
        Soft delete object (set its ``is_removed`` field to True).
        Actually delete object if setting ``soft`` to False.
        T)Úusingri   N)Ú
is_removedr   r   Údelete)r   ri   Úsoftr    r!   r"   s        €r#   rk   zSoftDeletableModel.delete–   s6   ø€ ñ
 Ø"ˆDŒOØ�I‰I˜EˆIÕ"ä‘7‘>°Ð?¨Ð?¸Ñ?Ð?r$   )NT)r(   r)   r*   r/   r   ÚBooleanFieldrj   r-   r   ÚobjectsÚavailable_objectsÚManagerÚall_objectsrk   r1   r2   s   @r#   rc   rc   †   sU   ø„ ñð %�×$Ñ$¨UÔ3€J÷ñ ñ #¸dÔC€GÙ,Ó.ÐØ �&—.‘.Ó"€K÷	@ñ 	@r$   rc   c                   ó:   — e Zd ZdZ eddd¬«      Z G d„ d«      Zy)	Ú	UUIDModelzz
    This abstract base class provides id field on any model that inherits from it
    which will be the primary key.
    Té   F)Úprimary_keyÚversionÚeditablec                   ó   — e Zd ZdZy)úUUIDModel.MetaTNr'   r,   r$   r#   r-   ry   ­   r.   r$   r-   N)r(   r)   r*   r/   r   Úidr-   r,   r$   r#   rs   rs   ¢   s&   „ ññ 
ØØØô
€B÷ò r$   rs   c                   óD   ‡ — e Zd ZdZ G d„ d«      Zdˆ fd„	Z	 	 dd„Zˆ xZS )ÚSaveSignalHandlingModelz„
    An abstract base class model to pass a parameter ``signals_to_disable``
    to ``save`` method in order to disable signals
    c                   ó   — e Zd ZdZy)úSaveSignalHandlingModel.MetaTNr'   r,   r$   r#   r-   r~   ¶   r.   r$   r-   c                 ó:   •— |xs g | _         t        ‰| �  |i |¤Ž y)zp
        Add an extra parameters to hold which signals to disable
        If empty, nothing will change
        N)Úsignals_to_disabler   r   )r   r€   r    r!   r"   s       €r#   r   zSaveSignalHandlingModel.save¹   s#   ø€ ð #5Ò":¸ˆÔä‰‰�dÐ%˜fÓ%r$   c           	      óâ  — |xs! t        j                  | j                  | ¬«      }|r|s|rJ ‚|�t        |«      dkD  sJ ‚| j                  x}}|j                  j
                  r|j                  j                  }|j                  }|j                  s(d| j                  vrt        j                  || |||¬«       t        j                  |d¬«      5  |s| j                  |||«       | j                  ||||||«      }	ddd«       || j                  _        d| j                  _        |j                  s*d| j                  vrt%        j                  || 	 |||¬	«       g | _        y# 1 sw Y   ŒixY w)
z÷
        Copied from base class for a minor change.
        This is an ugly overwriting but since Django's ``save_base`` method
        does not differ between versions 1.8 and 1.10,
        that way of implementing wouldn't harm the flow
        )ÚinstanceNr   r	   )rN   r‚   Úrawri   r   F)ri   Ú	savepointr   )rN   r‚   r   r   rƒ   ri   )r   Údb_for_writer"   ÚlenrG   ÚproxyÚconcrete_modelÚauto_createdr€   r	   Úsendr   ÚatomicÚ_save_parentsÚ_save_tableÚ_stateÚdbÚaddingr   )
r   rƒ   Úforce_insertÚforce_updateri   r   ÚclsÚoriginÚmetaÚupdateds
             r#   Ú	save_basez!SaveSignalHandlingModel.save_baseÃ   sS  € ð ÒKœ×,Ñ,¨T¯^©^ÀdÔKˆÙ ¡l±mÐEÐEØÐ$¬¨MÓ(:¸QÒ(>Ð>Ð>Ø—~‘~Ð%ˆˆfà�9‰9�?Š?Ø—)‘)×*Ñ*ˆCØ�y‰yˆØ× Ò  Z°t×7NÑ7NÑ%NÜ�M‰MØ¨°#¸UØ+õô ×Ñ e°uÔ=ñ 	cÙØ×"Ñ" 3¨¨}Ô=Ø×&Ñ& s¨C°¸|ÈUÐTaÓbˆG÷	cð
 ˆ�‰ŒØ"ˆ�‰Ôà× Ò  [¸×8OÑ8OÑ%OÜ�N‰NØ¨¸7°{Ø+°¸Eõð #%ˆÕ÷	cð 	cús   Ã,E%Å%E.r\   )FFFNN)r(   r)   r*   r/   r-   r   r—   r1   r2   s   @r#   r|   r|   ±   s$   ø„ ñ÷ñ õ&ð 16Ø@D÷$%r$   r|   N)%Údjango.core.exceptionsr   Ú	django.dbr   r   r   Údjango.db.models.functionsr   Údjango.db.models.signalsr   r	   Údjango.utils.translationr
   r0   Úmodel_utils.fieldsr   r   r   r   r   Úmodel_utils.managersr   r   rY   ÚModelr   r4   r=   rQ   rZ   ÚsignalsÚclass_preparedÚconnectrJ   rc   rs   r|   r,   r$   r#   ú<module>r£      sÔ   ðÝ 7ß 1Ñ 1Ý *ß 8Ý 6÷õ ÷ Dá	ƒe€ô�v—|‘|ô ô2
�f—l‘lô 
ô�&—,‘,ô ò8=ò,ð& ‡�× Ñ × %Ñ %Ð&?Ô @Ø ‡�× Ñ × %Ñ %Ð&BÔ CòMô@˜Ÿ™ô @ô8�—‘ô ô6%˜fŸl™lõ 6%r$   