Ë
    ¸2ÚiA  ã                   óž   — d dl mZ d dlmZmZmZmZmZ d dlm	Z	 d dl
mZ ddlmZmZ ddlmZ  edd	¬
«      Z G d„ d	ej"                  «      Zy)é    )ÚCounter)ÚDictÚOptionalÚTupleÚTypeÚTypeVar)Úmodels)Úqueryé   )ÚHARD_DELETEÚ	NO_DELETE)ÚSafeDeleteQueryÚ_QSÚSafeDeleteQueryset)Úboundc                   ód  ‡ — e Zd ZdZ	 	 	 	 ddeeej                        dee   dee	   dee
e	ej                  f      fˆ fd„Zed„ «       Zde_        dd	ee   d
eee
e	ef   f   fd„Zde_        d
eee
e	ef   f   fˆ fd„Zdd	ee   d
eee
e	ef   f   fd„Zde_        dded
efˆ fd„Zˆ fd„Zˆ xZS )r   a7  Default queryset for the SafeDeleteManager.

    Takes care of "lazily evaluating" safedelete QuerySets. QuerySets passed
    within the ``SafeDeleteQueryset`` will have all of the models available.
    The deleted policy is evaluated at the very end of the chain when the
    QuerySet itself is evaluated.
    Úmodelr
   ÚusingÚhintsc                 óp   •— t         t        | �  ||||¬«       |xs t        | j                  «      | _        y )N)r   r
   r   r   )Úsuperr   Ú__init__r   r   r
   )Úselfr   r
   r   r   Ú	__class__s        €úJ/var/www/html/acx/venv/lib/python3.12/site-packages/safedelete/queryset.pyr   zSafeDeleteQueryset.__init__   s5   ø€ ô 	Ô  $Ñ0°uÀEÐQVÐ^cÐ0ÔdØ&+Ò&J¬¸t¿z¹zÓ/Jˆ�
ó    c                 óL   — ddl m}  |j                  | «      «       }d|_        |S )zNOverride as_manager behavior to ensure we create a SafeDeleteManager.
        r   )ÚSafeDeleteManagerT)Úmanagersr   Úfrom_querysetÚ_built_with_as_manager)Úclsr   Úmanagers      r   Ú
as_managerzSafeDeleteQueryset.as_manager    s*   € õ
 	0à6Ð#×1Ñ1°#Ó6Ó8ˆØ)-ˆÔ&Øˆr   TÚforce_policyÚreturnc                 óp  — | j                   j                  «       sJ d«       ‚|t        k(  rdi fS |t        k(  r| j	                  «       S t        «       }| j                  «       D ](  }|j                  |¬«      \  }}|j                  |«       Œ* d| _	        t        |j                  «       «      t        |«      fS )a1  Overrides bulk delete behaviour.

        .. note::
            The current implementation loses performance on bulk deletes in order
            to safely delete objects according to the deletion policies set.

        .. seealso::
            :py:func:`safedelete.models.SafeDeleteModel.delete`
        z+Cannot use 'limit' or 'offset' with delete.r   ©r%   N)r
   Ú
can_filterr   r   Úhard_delete_policy_actionr   ÚallÚdeleteÚupdateÚ_result_cacheÚsumÚvaluesÚdict)r   r%   Údeleted_counterÚobjÚ_Údelete_responses         r   r,   zSafeDeleteQueryset.delete,   s¯   € ð �z‰z×$Ñ$Ô&ÐUÐ(UÓUÐ&àœ9Ò$Ø�r�7ˆNØœ[Ò(Ø×1Ñ1Ó3Ð3ä'.£yˆOà—x‘x“zò 8�Ø%(§Z¡Z¸\ ZÓ%JÑ"��?Ø×&Ñ& Õ7ð8ð "&ˆDÔÜ�×-Ñ-Ó/Ó0´$°Ó2GÐGÐGr   c                 óT   •— | j                   j                  «        t        ‰| �  «       S ©N)r
   Ú_filter_visibilityr   r,   )r   r   s    €r   r*   z,SafeDeleteQueryset.hard_delete_policy_actionF   s    ø€ à�
‰
×%Ñ%Ô'Ü‰w‰~ÓÐr   c                 ó$  — | j                   j                  «       sJ d«       ‚t        «       }| j                  «       D ](  }|j	                  |¬«      \  }}|j                  |«       Œ* d| _        t        |j                  «       «      t        |«      fS )a  Undelete all soft deleted models.

        .. note::
            The current implementation loses performance on bulk undeletes in
            order to call the pre/post-save signals.

        .. seealso::
            :py:func:`safedelete.models.SafeDeleteModel.undelete`
        z-Cannot use 'limit' or 'offset' with undelete.r(   N)
r
   r)   r   r+   Úundeleter-   r.   r/   r0   r1   )r   r%   Úundeleted_counterr3   r4   Úundelete_responses         r   r:   zSafeDeleteQueryset.undeleteK   sŒ   € ð �z‰z×$Ñ$Ô&ÐWÐ(WÓWÐ&Ü%,£YÐà—8‘8“:ò 	8ˆCØ#&§<¡<¸\ <Ó#JÑ ˆAÐ Ø×$Ñ$Ð%6Õ7ð	8ð "ˆÔÜÐ$×+Ñ+Ó-Ó.´Ð5FÓ0GÐGÐGr   r   c                 óN   •— |�|| j                   _        t        t        | �  «       S )aÆ  Override so related managers can also see the deleted models.

        A model's m2m field does not easily have access to `all_objects` and
        so setting `force_visibility` to True is a way of getting all of the
        models. It is not recommended to use `force_visibility` outside of related
        models because it will create a new queryset.

        Args:
            force_visibility: Force a deletion visibility. (default: {None})
        )r
   Ú_safedelete_force_visibilityr   r   r+   )r   Úforce_visibilityr   s     €r   r+   zSafeDeleteQueryset.all_   s(   ø€ ð Ð'Ø6FˆD�J‰JÔ3ÜÔ'¨Ñ2Ó4Ð4r   c                 ó‚   •— | j                  «       } |j                  j                  di |¤Ž t        t        |�  |i |¤ŽS )N© )Ú_cloner
   Úcheck_field_filterr   r   Úfilter)r   ÚargsÚkwargsÚquerysetr   s       €r   rD   zSafeDeleteQueryset.filtern   s=   ø€ à—;‘;“=ˆØ)ˆ�‰×)Ñ)Ñ3¨FÒ3ÜÔ'¨Ñ9¸4ÐJÀ6ÑJÐJr   )NNNNr7   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r	   ÚModelr   Ústrr   r   Úclassmethodr$   Úqueryset_onlyÚintr   r,   Úalters_datar*   r:   r   r+   rD   Ú__classcell__)r   s   @r   r   r      s9  ø„ ñð 37Ø/3Ø#'Ø7;ñKà˜D §¡Ñ.Ñ/ðKð ˜OÑ,ðKð ˜C‘=ð	Kð
 ˜D  f§l¡lÐ!2Ñ3Ñ4õKð ñó ðð  $€JÔñH 8¨C¡=ð H¸EÀ#ÀtÈCÐQTÈHÁ~ÐBUÑ<Vó Hð0 €FÔð ¨5°°d¸3À¸8±nÐ1DÑ+Eõ  ñ
H X¨c¡]ð H¸eÀCÈÈcÐSVÈhÉÐDWÑ>Xó Hð$  €HÔñ5�#ð 5°õ 5÷Kð Kr   N)Úcollectionsr   Útypingr   r   r   r   r   Ú	django.dbr	   Údjango.db.modelsr
   Úconfigr   r   r   r   ÚQuerySetr   rA   r   r   ú<module>rY      s;   ðÝ ß 7Õ 7å Ý "ç *Ý "áˆeÐ/Ô0€ôeK˜Ÿ™õ eKr   