Ë
    ¸2Úi5  ã                   óø  — d dl 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
 d dlmZmZ d dlmZ  G d„ d	e«      Z G d
„ d«      Z G d„ dee«      Z G d„ d«      Z G d„ deej(                  «      Z G d„ d«      Z G d„ deej(                  «      Z G d„ d«      Z G d„ dee«      Z G d„ d«      Z G d„ deej(                  «      Z G d„ dej                  «      Z G d „ d!«      Z G d"„ d#eej(                  «      Zy)$é    N)ÚObjectDoesNotExist)Ú
connectionÚmodels)Ú
LOOKUP_SEP)ÚOneToOneFieldÚOneToOneRel)ÚModelIterableÚQuerySet)ÚJoinc                   ó   — e Zd Zd„ Zy)ÚInheritanceIterablec           
   #   ó  K  — | j                   }t        |«      }t        |dd«      rËt        |j                  j
                  j                  «       «      }t        |j                  t        d¬«      }|D ]|  }d }|D ]  }|j                  ||«      }|sŒ n |s|}t        |dd«      r(|j                  D ]  }t        ||t        ||«      «       Œ |D ]  }t        ||t        ||«      «       Œ |–— Œ~ y |E d {  –—†  y 7 Œ­w)NÚ
subclassesFT)ÚkeyÚreverseÚ
_annotated)Úquerysetr	   ÚgetattrÚtupleÚqueryÚextraÚkeysÚsortedr   ÚlenÚ_get_sub_obj_recurser   Úsetattr)	Úselfr   ÚiterÚextrasr   ÚobjÚsub_objÚsÚks	            úK/var/www/html/acx/venv/lib/python3.12/site-packages/model_utils/managers.pyÚ__iter__zInheritanceIterable.__iter__   s  è ø€ Ø—=‘=ˆÜ˜XÓ&ˆÜ�8˜\¨5Ô1Ü˜8Ÿ>™>×/Ñ/×4Ñ4Ó6Ó7ˆFô   × 3Ñ 3¼ÀdÔKˆJØò �Ø�Ø#ò �AØ&×;Ñ;¸CÀÓC�GÚÙðñ Ø!�Gä˜8 \°5Ô9Ø%×0Ñ0ò =˜Ü ¨¬G°C¸«OÕ<ð=ð  ò 9�AÜ˜G Q¬°°Q«Õ8ð9ð “ñ!ð$ �OŠOús   ‚BC?ÂA&C?Ã7C=Ã8C?N)Ú__name__Ú
__module__Ú__qualname__r%   © ó    r$   r   r      s   „ ór*   r   c                   ó`   ‡ — e Zd Zˆ fd„Zd„ Zˆ fd„Zd
ˆ fd„	Zˆ fd„Zdd„Zdd„Z	d„ Z
d	„ Zˆ xZS )ÚInheritanceQuerySetMixinc                 ó:   •— t        ‰| �  |i |¤Ž t        | _        y ©N)ÚsuperÚ__init__r   Ú_iterable_class©r   ÚargsÚkwargsÚ	__class__s      €r$   r0   z!InheritanceQuerySetMixin.__init__*   s   ø€ Ü‰Ñ˜$Ð) &Ò)Ü2ˆÕr*   c           	      ó~  — d }| j                  | j                  |¬«      }|s|}n}g }|D ]t  }|| j                  u rŒt        |t        f«      s| j	                  ||¬«      }||v r|j                  |«       ŒLt        dj                  |dj                  |«      «      «      ‚ |}|r | j                  |Ž }n| }||_
        |S )N©Úlevelsz3{!r} is not in the discovered subclasses, tried: {}z, )Ú_get_subclasses_recurseÚmodelÚ
isinstanceÚstrÚ_get_ancestors_pathÚappendÚ
ValueErrorÚformatÚjoinÚselect_relatedr   )r   r   r8   Úcalculated_subclassesÚverified_subclassesÚsubclassÚnew_qss          r$   Úselect_subclassesz*InheritanceQuerySetMixin.select_subclasses.   sî   € ØˆØ $× <Ñ <Ø�J‰J˜vð !=ó !'Ðñ Ø.‰Jà"$ÐØ&ò �ð ˜tŸz™zÑ)Øä! (¬S¨FÔ3Ø#×7Ñ7Ø ¨ð  8ó  1�Hð Ð4Ñ4Ø'×.Ñ.¨xÕ8ä$ØM×TÑTØ$ d§i¡iÐ0EÓ&FóHóð ðð$ -ˆJáØ(�T×(Ñ(¨*Ð5‰FàˆFØ&ˆÔØˆr*   c                 ó¦   •— i }dD ]  }t        | |«      sŒt        | |«      ||<   Œ  t        ‰| �  di |¤Ž}|j                  j                  |«       |S )N©r   r   r)   )Úhasattrr   r/   Ú_chainÚ__dict__Úupdate)r   r4   rM   ÚnameÚchainedr5   s        €r$   rK   zInheritanceQuerySetMixin._chainR   s]   ø€ ØˆØ0ò 	3ˆDÜ�t˜TÕ"Ü& t¨TÓ2��t’ð	3ô ‘'‘.Ñ* 6Ñ*ˆØ×Ñ×Ñ Ô'Øˆr*   c           	      óz   •— t         ‰| �  «       }dD ]&  }t        | |«      sŒt        ||t	        | |«      «       Œ( |S )NrI   )r/   Ú_clonerJ   r   r   )r   ÚklassÚsetupr4   ÚqsrN   r5   s         €r$   rQ   zInheritanceQuerySetMixin._clone\   sB   ø€ Ü‰W‰^ÓˆØ0ò 	7ˆDÜ�t˜TÕ"Ü˜˜D¤'¨$°Ó"5Õ6ð	7ð ˆ	r*   c                 ó¢   •— t        ‰| �  |i |¤Ž}|D �cg c]  }|j                  ‘Œ c}t        |j	                  «       «      z   |_        |S c c}w r.   )r/   ÚannotateÚdefault_aliasÚlistr   r   )r   r3   r4   ÚqsetÚar5   s        €r$   rV   z!InheritanceQuerySetMixin.annotatec   sG   ø€ Ü‰wÑ Ð0¨Ñ0ˆØ48Ö9¨q˜1Ÿ?›?Ò9¼DÀÇÁÃÓ<OÑOˆŒØˆùò :s   •Ac                 ór  — |j                   j                  «       D �cg c]  }t        |t        «      r|‘Œ }}|D �cg c]b  }t        |j                  t
        «      rFt        |j                  j                  |«      r&||j                  j                  ur|j                  r|‘Œd }}g }|r|dz  }|D ]z  }|s|€U| j                  |j                  j                  |¬«      D ]+  }|j                  |j                  «       t        z   |z   «       Œ- |j                  |j                  «       «       Œ| |S c c}w c c}w )z¼
        Given a Model class, find all related objects, exploring children
        recursively, returning a `list` of strings representing the
        relations for select_related
        é   r7   )Ú_metaÚ
get_fieldsr;   r   Úfieldr   Ú
issubclassr:   Úparent_linkr9   r>   Úget_accessor_namer   )	r   r:   r8   ÚfÚrelated_objectsÚrelÚrelsr   rE   s	            r$   r9   z0InheritanceQuerySetMixin._get_subclasses_recurseh   s5  € ð —{‘{×-Ñ-Ó/ö+ØÜ˜!œ[Ô)ò ð+ˆð +ð
 +ö
ØÜ˜#Ÿ)™)¤]Ô3Ü˜3Ÿ9™9Ÿ?™?¨EÔ2Ø˜SŸY™YŸ_™_Ñ,Ø—’ò	 ð
ˆð 
ð ˆ
ÙØ�a‰KˆFØò 	7ˆCÙ˜˜Ø $× <Ñ <ØŸ	™	Ÿ™°ð !=ó !8ò I�Hà×%Ñ%Ø×-Ñ-Ó/´*Ñ<¸xÑGõIðIð ×Ñ˜c×3Ñ3Ó5Õ6ð	7ð Ðùò-+ùò
s   �D/¼A'D4c                 óº  — t        || j                  «      st        |›d| j                  ›�«      ‚g }|j                  j	                  | j                  «      }|r|dz  }|�g|j
                  }|j                  d|j                  «       «       |s|€2|j                  }|j                  j	                  | j                  «      }nd}|�Œgt        j                  |«      S )zÎ
        Serves as an opposite to _get_subclasses_recurse, instead walking from
        the Model class up the Model's ancestry and constructing the desired
        select_related string backwards.
        z is not a subclass of r\   Nr   )
r`   r:   r?   r]   Úget_ancestor_linkÚremote_fieldÚinsertrb   r   rA   )r   r:   r8   Úancestryra   ÚrelatedÚparent_models          r$   r=   z,InheritanceQuerySetMixin._get_ancestors_path†   sÔ   € ô ˜% §¡Ô,ÜØ�)Ð1°$·*±*°Ð@óBð Bð ˆà—k‘k×3Ñ3°D·J±JÓ?ˆÙØ�a‰KˆFØÐ%Ø!×.Ñ.ˆGØ�O‰O˜A˜w×8Ñ8Ó:Ô;Ù˜˜Ø&Ÿ}™}�Ø*×0Ñ0×BÑBØ—J‘Jó ‘ð #�ð Ñ%ô �‰˜xÓ(Ð(r*   c                 óœ   — |j                  t        «      \  }}}	 t        ||«      }|r| j	                  ||«      }|S |S # t        $ r Y y w xY wr.   )Ú	partitionr   r   r   r   )r   r    r"   re   Ú_ÚnodeÚchilds          r$   r   z-InheritanceQuerySetMixin._get_sub_obj_recurse    s\   € Ø—K‘K¤
Ó+‰	ˆˆQ�ð	Ü˜3 Ó$ˆDñ Ø×-Ñ-¨d°AÓ6ˆEØˆLàˆKøô "ò 	Ùð	ús   ›? ¿	AÁ
Ac                 óB   —  | j                  «       j                  |i |¤ŽS r.   )rG   Úget©r   r3   r4   s      r$   Úget_subclassz%InheritanceQuerySetMixin.get_subclass­   s#   € Ø+ˆt×%Ñ%Ó'×+Ñ+¨TÐ<°VÑ<Ð<r*   )NFr.   )r&   r'   r(   r0   rG   rK   rQ   rV   r9   r=   r   rv   Ú__classcell__©r5   s   @r$   r,   r,   )   s1   ø„ ô3ò"ôHõôó
ó<)ò4ö=r*   r,   c                   ó   — e Zd Zd„ Zy)ÚInheritanceQuerySetc                 ó„  — g }|D ]†  }|j                  ddj                  |j                  j                  j	                  «       D �cg c]2  }dj                  |j                  j                  |j                  «      ‘Œ4 c}«      z   dz   «       Œˆ  | j                  |Ž j                  dj                  |«      g¬«      S c c}w )zQ
        Fetch only objects that are instances of the provided model(s).
        ú(z AND z"{}"."{}" IS NOT NULLú)z OR )Úwhere)
r>   rA   r]   ÚparentsÚvaluesr@   Údb_tableÚattnamerG   r   )r   r   Úwhere_queriesr:   r_   s        r$   Úinstance_ofzInheritanceQuerySet.instance_of²   sÂ   € ð ˆØò 	ˆEØ× Ñ   w§|¡|ð  %Ÿ{™{×2Ñ2×9Ñ9Ó;ö	5ð ð (×.Ñ.Ø—K‘K×(Ñ(Ø—M‘Mõò5ó (ñ "ð
 ñ"õ ð	ð &ˆt×%Ñ% vÐ.×4Ñ4¸F¿K¹KÈÓ<VÐ;WÐ4ÓXÐXùò5s   Á7B=N)r&   r'   r(   r„   r)   r*   r$   rz   rz   ±   s   „ óYr*   rz   c                   ó(   — e Zd ZeZd„ Zd„ Zd„ Zd„ Zy)ÚInheritanceManagerMixinc                 ó8   — | j                  | j                  «      S r.   )Ú_queryset_classr:   ©r   s    r$   Úget_querysetz$InheritanceManagerMixin.get_querysetÏ   s   € Ø×#Ñ# D§J¡JÓ/Ð/r*   c                 ó<   —  | j                  «       j                  |Ž S r.   )rŠ   rG   )r   r   s     r$   rG   z)InheritanceManagerMixin.select_subclassesÒ   s   € Ø4ˆt× Ñ Ó"×4Ñ4°jÐAÐAr*   c                 óB   —  | j                  «       j                  |i |¤ŽS r.   )rŠ   rv   ru   s      r$   rv   z$InheritanceManagerMixin.get_subclassÕ   s#   € Ø/ˆt× Ñ Ó"×/Ñ/°Ð@¸Ñ@Ð@r*   c                 ó<   —  | j                  «       j                  |Ž S r.   )rŠ   r„   )r   r   s     r$   r„   z#InheritanceManagerMixin.instance_ofØ   s   € Ø.ˆt× Ñ Ó"×.Ñ.°Ð7Ð7r*   N)	r&   r'   r(   rz   rˆ   rŠ   rG   rv   r„   r)   r*   r$   r†   r†   Ì   s   „ Ø)€Oò0òBòAó8r*   r†   c                   ó   — e Zd Zy)ÚInheritanceManagerN©r&   r'   r(   r)   r*   r$   r�   r�   Ü   ó   „ Ør*   r�   c                   ó.   ‡ — e Zd Zˆ fd„Zd„ Zˆ fd„Zˆ xZS )ÚQueryManagerMixinc                 ó~   •— |r|d   | _         nt        j                  di |¤Ž| _         d | _        t        ‰| �  «        y )Nr   r)   )Ú_qr   ÚQÚ	_order_byr/   r0   r2   s      €r$   r0   zQueryManagerMixin.__init__â   s6   ø€ ÙØ˜1‘gˆD�Gä—h‘hÑ( Ñ(ˆDŒGØˆŒÜ‰ÑÕr*   c                 ó   — || _         | S r.   )r—   )r   r3   s     r$   Úorder_byzQueryManagerMixin.order_byê   s   € ØˆŒØˆr*   c                 ó    •— t         ‰| �  «       j                  | j                  «      }| j                  � |j
                  | j                  Ž S |S r.   )r/   rŠ   Úfilterr•   r—   r™   )r   rT   r5   s     €r$   rŠ   zQueryManagerMixin.get_querysetî   sC   ø€ Ü‰WÑ!Ó#×*Ñ*¨4¯7©7Ó3ˆØ�>‰>Ð%Ø�2—;‘; §¡Ð/Ð/Øˆ	r*   )r&   r'   r(   r0   r™   rŠ   rw   rx   s   @r$   r“   r“   à   s   ø„ ôò÷ð r*   r“   c                   ó   — e Zd Zy)ÚQueryManagerNr�   r)   r*   r$   r�   r�   õ   r‘   r*   r�   c                   ó   — e Zd ZdZd„ Zy)ÚSoftDeletableQuerySetMixinzr
    QuerySet for SoftDeletableModel. Instead of removing instance sets
    its ``is_removed`` field to True.
    c                 ó(   — | j                  d¬«       y)zd
        Soft delete objects from queryset (set their ``is_removed``
        field to True)
        T©Ú
is_removedN)rM   r‰   s    r$   Údeletez!SoftDeletableQuerySetMixin.deleteÿ   s   € ð
 	�‰˜tˆÕ$r*   N)r&   r'   r(   Ú__doc__r£   r)   r*   r$   rŸ   rŸ   ù   s   „ ñó
%r*   rŸ   c                   ó   — e Zd Zy)ÚSoftDeletableQuerySetNr�   r)   r*   r$   r¦   r¦     r‘   r*   r¦   c                   ó2   ‡ — e Zd ZdZeZddœˆ fd„
Zd„ Zˆ xZS )ÚSoftDeletableManagerMixinzf
    Manager that limits the queryset by default to show only not removed
    instances of model.
    F)Ú_emit_deprecation_warningsc                ó2   •— || _         t        ‰| �  |i |¤Ž y r.   )Úemit_deprecation_warningsr/   r0   )r   r©   r3   r4   r5   s       €r$   r0   z"SoftDeletableManagerMixin.__init__  s   ø€ Ø)CˆÔ&Ü‰Ñ˜$Ð) &Ó)r*   c                 óX  — | j                   rIdj                  | j                  j                  j                  «      }t        j                  |t        «       | j                  | j                  dœ}t        | d«      r| j                  |d<    | j                  di |¤Žj                  d¬«      S )zA
        Return queryset limited to not removed entries.
        a  {0}.objects model manager will include soft-deleted objects in an upcoming release; please use {0}.available_objects to continue excluding soft-deleted objects. See https://django-model-utils.readthedocs.io/en/stable/models.html#softdeletablemodel for more information.©r:   ÚusingÚ_hintsÚhintsFr¡   r)   )r«   r@   r:   r5   r&   ÚwarningsÚwarnÚDeprecationWarningÚ_dbrJ   r¯   rˆ   r›   )r   Úwarning_messager4   s      r$   rŠ   z&SoftDeletableManagerMixin.get_queryset  s‘   € ð
 ×)Ò)ð<÷
 ‰f�T—Z‘Z×)Ñ)×2Ñ2Ó3ð ô �M‰M˜/Ô+=Ô>àŸ:™:°·±Ñ9ˆÜ�4˜Ô"Ø"Ÿk™kˆF�7‰Oà#ˆt×#Ñ#Ñ- fÑ-×4Ñ4ÀÐ4ÓFÐFr*   )	r&   r'   r(   r¤   r¦   rˆ   r0   rŠ   rw   rx   s   @r$   r¨   r¨     s   ø„ ñð ,€Oà9>ö *öGr*   r¨   c                   ó   — e Zd Zy)ÚSoftDeletableManagerNr�   r)   r*   r$   r·   r·   ,  r‘   r*   r·   c                   ó   — e Zd Zd„ Zdd„Zy)ÚJoinQuerysetc                 óœ   — |j                  «       \  }}|D �cg c]  }t        |t        «      rd|› d�n|‘Œ }}t        |«      }||z  S c c}w )Nú')Úsql_with_paramsr;   r<   r   )r   r   ÚparamsÚps       r$   Úget_quoted_queryzJoinQueryset.get_quoted_query2  sk   € Ø×-Ñ-Ó/‰ˆˆvð ö
ð ô ˜!œSÔ!ð ���2‰JØ'(ñ)ð
ˆð 
ô �v“ˆØ�v‰~Ðùò
s   ˜A	Nc                 ót  ‡ ‡‡‡— dŠ|rÁ|j                   j                  j                  D �cg c]  }t        |dd«      ‰ j                   k(  r|‘Œ  c}}|r|d   nd}‰ j                   j                  j                  «       › d�}|xs t        |j                   |d«      }|st        d«      ‚	 |j                  Š|j                  ‰«      }‰ }n7dŠ‰ j                  ‰«      }‰ j                   j                  j                  «       }dŠ‰ j                  |j                  «      }dj                  ‰‰t!        |«      ¬	«      }t#        j$                  «       5 }|j'                  |«       ddd«        G ˆˆˆ ˆfd
„dt(        j*                  «      }	t-        |	j                  j.                  |j                  j1                  «       dd‰ j                   j2                  j4                  d¬«      }
|j                  j7                  |
d¬«       |S c c}w # t        $ r dŠ|j                  j                  ŠY �Œtw xY w# 1 sw Y   ŒÎxY w)a÷  
        Join one queryset together with another using a temporary table. If
        no queryset is used, it will use the current queryset and join that
        to itself.

        `Join` either uses the current queryset and effectively does a self-join to
        create a new limited queryset OR it uses a queryset given by the user.

        The model of a given queryset needs to contain a valid foreign key to
        the current queryset to perform a join. A new queryset is then created.
        ÚidÚrelated_modelNr   Ú_setz(QuerySet is not related to current modelÚ
temp_stuffz÷
            DROP TABLE IF EXISTS {table_name};
            DROP INDEX IF EXISTS {table_name}_id;
            CREATE TEMPORARY TABLE {table_name} AS {query};
            CREATE INDEX {table_name}_{fk_column} ON {table_name} ({fk_column});
        )Ú
table_nameÚ	fk_columnr   c                   ó€   •— e Zd Z ej                  W °j
                  ej                  W °W °¬«      Z G ˆ fd„d«      Zy)ú$JoinQueryset.join.<locals>.TempModel)Ú	on_deleteÚ	db_columnÚto_fieldc                   ó   •— e Zd ZdZW ° Zy)ú)JoinQueryset.join.<locals>.TempModel.MetaFN)r&   r'   r(   Úmanagedr�   )Ú
TABLE_NAMEs   €r$   ÚMetarÍ   }  s   ø„ Ø�Ù%‘r*   rÐ   N)	r&   r'   r(   r   Ú
ForeignKeyr:   Ú
DO_NOTHINGÚtemp_keyrÐ   )rÏ   rÆ   r   rË   s   €€€€r$   Ú	TempModelrÈ   u  s5   ø„ Ø(�v×(Ñ(Ù—
‘
Ø ×+Ñ+Ù#Ù!ô	ˆH÷&ô &r*   rÔ   z
INNER JOINF)rÅ   Úparent_aliasÚtable_aliasÚ	join_typeÚ
join_fieldÚnullable)Úreuse)r:   r]   Úfieldsr   r&   Úlowerr?   ÚcolumnÚAttributeErrorr_   ÚonlyÚobjectsÚallr¿   r   r@   r<   r   ÚcursorÚexecuter   ÚModelr   r�   Úget_initial_aliasÚtempmodel_setre   rA   )r   rT   ÚfkÚ	model_setr   rF   r   Úsqlrâ   rÔ   ÚconnrÏ   rÆ   rË   s   `          @@@r$   rA   zJoinQueryset.joinA  sø  û€ ð ˆáàŸX™XŸ^™^×2Ñ2öØÜ˜2˜°Ó5¸¿¹ÒCò òˆBñ ��A’ $ˆBØŸ:™:×.Ñ.×4Ñ4Ó6Ð7°tÐ<ˆIØÒ:œ §¡¨)°TÓ:ˆCáÜ Ð!KÓLÐLð,ØŸJ™J�	ð
 —‘˜Ó#ˆBà‰FàˆIØ—‘˜9Ó%ˆBØ—Z‘Z×'Ñ'×+Ñ+Ó-ˆFà!ˆ
Ø×%Ñ% b§h¡hÓ/ˆð÷
 ‰F˜j°IÄSÈÃZˆFÓPð 	ô ×ÑÓ ð 	  FØ�N‰N˜3Ô÷	 ÷
	&ñ 
	&œŸ™ô 
	&ô Ø —‘×/Ñ/ØŸ™×7Ñ7Ó9ØØ"Ø—z‘z×/Ñ/×3Ñ3Øô
ˆð 	�‰×Ñ˜$ dÐÔ+Øˆùòuøô "ò ,Ø �	ØŸ9™9×+Ñ+“ð,ú÷*	 ð 	 ús#   «#HÂ*H ÅH.È!H+È*H+È.H7r.   )r&   r'   r(   r¿   rA   r)   r*   r$   r¹   r¹   0  s   „ òôIr*   r¹   c                   ó   — e Zd ZdZeZd„ Zy)ÚJoinManagerMixinze
    Manager that adds a method join. This method allows you to join two
    querysets together.
    c                 óP   — | j                  | j                  | j                  ¬«      S )Nr­   )rˆ   r:   r´   r‰   s    r$   rŠ   zJoinManagerMixin.get_queryset”  s    € Ø×#Ñ#¨$¯*©*¸D¿H¹HÐ#ÓEÐEr*   N)r&   r'   r(   r¤   r¹   rˆ   rŠ   r)   r*   r$   rì   rì   �  s   „ ñð #€OóFr*   rì   c                   ó   — e Zd Zy)ÚJoinManagerNr�   r)   r*   r$   rï   rï   ˜  r‘   r*   rï   )r±   Údjango.core.exceptionsr   Ú	django.dbr   r   Údjango.db.models.constantsr   Údjango.db.models.fields.relatedr   r   Údjango.db.models.queryr	   r
   Ú#django.db.models.sql.datastructuresr   r   r,   rz   r†   ÚManagerr�   r“   r�   rŸ   r¦   r¨   r·   r¹   rì   rï   r)   r*   r$   ú<module>r÷      sé   ðÛ å 5ß (Ý 1ß Fß :Ý 4ô˜-ô ÷<E=ñ E=ôPYÐ2°Hô Y÷68ñ 8ô 	Ð0°&·.±.ô 	÷ñ ô*	Ð$ f§n¡nô 	÷%ñ %ô	Ð6¸ô 	÷Gñ GôB	Ð4°f·n±nô 	ôZ�6—?‘?ô Z÷zFñ Fô	Ð" F§N¡Nõ 	r*   