Ë
    ¹ûàg˜  ã                   ó  — d dl Z d dl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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 d dl m!Z!  e"«       Z#dZ$dZ%dZ&d„ Z'd„ Z( G d„ d«      Z)y)é    N)Údefaultdict)Úapps)Úsettings)ÚFieldDoesNotExistÚImproperlyConfigured)Úsetting_changed)Úconnections)Ú	AutoFieldÚManagerÚOrderWrtÚUniqueConstraint)ÚPathInfo)ÚImmutableListÚ
OrderedSet)Úcached_property)Úimport_string)Úcamel_case_to_spacesÚformat_lazy)Úoverride© zyThe return type of '%s' should never be mutated. If you want to manipulate this list for your own use, make a copy first.)Úverbose_nameÚverbose_name_pluralÚdb_tableÚdb_table_commentÚorderingÚunique_togetherÚpermissionsÚget_latest_byÚorder_with_respect_toÚ	app_labelÚdb_tablespaceÚabstractÚmanagedÚproxyÚ	swappableÚauto_createdr   Údefault_permissionsÚselect_on_saveÚdefault_related_nameÚrequired_db_featuresÚrequired_db_vendorÚbase_manager_nameÚdefault_manager_nameÚindexesÚconstraintsc                 óÄ   — 	 | syt        | t        t        f«      st        ‚| d   }t        |t        t        f«      s| f} t        d„ | D «       «      S # t        $ r | cY S w xY w)z·
    option_together can be either a tuple of tuples, or a single
    tuple of two strings. Normalize it to a tuple of tuples, so that
    calling code can uniformly expect that.
    r   r   c              3   ó2   K  — | ]  }t        |«      –— Œ y ­w©N)Útuple)Ú.0Úots     úV/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/django/db/models/options.pyú	<genexpr>z%normalize_together.<locals>.<genexpr>H   s   è ø€ Ò9 2”U˜2—YÑ9ùs   ‚)Ú
isinstancer3   ÚlistÚ	TypeError)Úoption_togetherÚfirst_elements     r6   Únormalize_togetherr=   9   sh   € ðÙØÜ˜/¬E´4¨=Ô9ÜˆOØ'¨Ñ*ˆÜ˜-¬%´¨Ô7Ø.Ð0ˆOäÑ9¨Ô9Ó9Ð9øÜò ð Òðús   ‚A …AA ÁAÁAc                 ó*   — t        |t        | z  ¬«      S )N)Úwarning)r   ÚIMMUTABLE_WARNING)ÚnameÚdatas     r6   Úmake_immutable_fields_listrC   O   s   € Ü˜Ô'8¸4Ñ'?Ô@Ð@ó    c                   ó.  — e Zd Zh d£Zh d£ZeZd2d„Zed„ «       Z	ed„ «       Z
ed„ «       Zd„ Zd	„ Zd
„ Zd„ Zd„ Zd3d„Zd„ Zd„ Zd„ Zd„ Zd„ Zed„ «       Zed„ «       Zd„ Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Z ed„ «       Z!ed„ «       Z"ed„ «       Z#ed„ «       Z$ed „ «       Z%d!„ Z&d"„ Z'ed#„ «       Z(d$„ Z)d%„ Z*d&„ Z+d'„ Z,d(„ Z-ed)„ «       Z.d4d*„Z/d5d+„Z0	 	 	 	 	 d6d,„Z1ed-„ «       Z2ed.„ «       Z3ed/„ «       Z4ed0„ «       Z5ed1„ «       Z6y)7ÚOptions>   ÚfieldsÚmanagersÚbase_managerÚmanagers_mapÚmany_to_manyÚconcrete_fieldsÚdefault_managerÚ_forward_fields_mapÚlocal_concrete_fieldsÚ_non_pk_concrete_field_namesÚ_reverse_one_to_one_field_names>   Ú
fields_mapÚ_relation_treeÚrelated_objectsNc                 ór  — i | _         g | _        g | _        g | _        g | _        d | _        d | _        d | _        d | _        d | _	        d| _
        d| _        g | _        d| _        g | _        g | _        g | _        d| _        d| _        g | _        d | _        || _        d | _        d | _        t0        j2                  | _        g | _        d | _        || _        d | _        d | _        d| _         d| _!        d| _"        d | _#        d | _$        d | _%        i | _&        d| _'        g | _(        | jR                  | _*        d | _+        y )NÚ F)ÚaddÚchangeÚdeleteÚviewT),Ú_get_fields_cacheÚlocal_fieldsÚlocal_many_to_manyÚprivate_fieldsÚlocal_managersr,   r-   Ú
model_namer   r   r   r   r   Ú_ordering_clashr.   r/   r   r(   r'   r   Úobject_namer    r   r   r   ÚDEFAULT_TABLESPACEr!   r*   r+   ÚmetaÚpkÚ
auto_fieldr"   r#   r$   Úproxy_for_modelÚconcrete_modelr%   Úparentsr&   Úrelated_fkey_lookupsÚdefault_appsr   r)   )Úselfrd   r    s      r6   Ú__init__zOptions.__init__e   sP  € Ø!#ˆÔØˆÔØ"$ˆÔØ ˆÔØ ˆÔØ!%ˆÔØ$(ˆÔ!ØˆŒØ ˆÔØ#'ˆÔ ØˆŒØ "ˆÔØˆŒØ$ˆÔØˆŒØˆÔØ!ˆÔØ#ˆÔØ#FˆÔ ØˆÔØˆÔØ"ˆŒØ!ˆÔØ%)ˆÔ"Ü%×8Ñ8ˆÔØ$&ˆÔ!Ø"&ˆÔØˆŒ	ØˆŒØˆŒØˆŒØˆŒØˆŒ
ð  $ˆÔð #ˆÔØˆŒØˆŒØ!ˆÔð %'ˆÔ!ð ×%Ñ%ˆŒ	à$(ˆÕ!rD   c                 ó8   — | j                   ›d| j                  ›�S ©Nú.)r    rb   ©rl   s    r6   ÚlabelzOptions.labelž   s   € àŸ.›.¨$×*:Ò*:Ð;Ð;rD   c                 ó8   — | j                   ›d| j                  ›�S ro   )r    r`   rq   s    r6   Úlabel_lowerzOptions.label_lower¢   s   € àŸ.›.¨$¯/ª/Ð:Ð:rD   c                 ó`   — | j                   j                  j                  | j                  «      S r2   )r   Úapp_configsÚgetr    rq   s    r6   Ú
app_configzOptions.app_config¦   s#   € ð �y‰y×$Ñ$×(Ñ(¨¯©Ó8Ð8rD   c           	      óÀ  — ddl m} ddlm} | |_        || _        |j                  | _        | j                  j                  «       | _	        t        | j                  «      | _        i | _        | j                  �rÁ| j                  j                  j                  «       }| j                  j                  D ]  }|j!                  d«      sŒ||= Œ t"        D ]�  }||v r6t%        | ||j'                  |«      «       t)        | |«      | j                  |<   Œ=t+        | j                  |«      sŒTt%        | |t)        | j                  |«      «       t)        | |«      | j                  |<   Œ� t-        | j.                  «      | _        | j0                  s@| j3                  | j4                  «      | _        | j3                  | j6                  «      | _        | j8                  €t;        d| j                  «      | _        t=        | j>                  xr | j@                  «      | _!        |i k7  r8tE        ddjG                  |«      z  «      ‚t;        d| j                  «      | _        | `| jH                  sP| jJ                  ›d| j                  ›�| _$         || jH                  |jL                  jO                  «       «      | _$        | jP                  r tS        jT                  | jR                  «       y y )Nr   )Ú
connection)Útruncate_nameÚ_z{}sz)'class Meta' got invalid attribute(s): %sú,)+Ú	django.dbrz   Údjango.db.backends.utilsr{   Ú_metaÚmodelÚ__name__rb   Úlowerr`   r   r   Úoriginal_attrsrd   Ú__dict__ÚcopyÚ
startswithÚDEFAULT_NAMESÚsetattrÚpopÚgetattrÚhasattrr=   r   r"   Ú_format_namesr/   r.   r   r   Úboolr   r   ra   r:   Újoinr   r    ÚopsÚmax_name_lengthr%   r   Úconnect)rl   ÚclsrA   rz   r{   Ú
meta_attrsÚ	attr_names          r6   Úcontribute_to_classzOptions.contribute_to_class«   s[  € Ý(Ý:àˆŒ	ØˆŒ
àŸ<™<ˆÔØ×*Ñ*×0Ñ0Ó2ˆŒÜ0°×1AÑ1AÓBˆÔð !ˆÔð �9‹9ØŸ™×+Ñ+×0Ñ0Ó2ˆJØŸ	™	×*Ñ*ò )�ð —?‘? 3Õ'Ø" 4Ñ(ð)ô +ò N�	Ø 
Ñ*Ü˜D )¨Z¯^©^¸IÓ-FÔGÜ5<¸TÀ9Ó5M�D×'Ñ'¨	Ò2Ü˜TŸY™Y¨	Õ2Ü˜D )¬W°T·Y±YÀ	Ó-JÔKÜ5<¸TÀ9Ó5M�D×'Ñ'¨	Ò2ðNô $6°d×6JÑ6JÓ#KˆDÔ ð —=’=Ø#'×#5Ñ#5°d×6FÑ6FÓ#G�Ô Ø#×1Ñ1°$·,±,Ó?�”ð ×'Ñ'Ð/Ü+6°u¸d×>OÑ>OÓ+P�Ô(ô $(¨¯©Ò(T¸$×:TÑ:TÓ#UˆDÔ ð ˜RÒÜØ?À#Ç(Á(È:ÓBVÑVóð ô (3°5¸$×:KÑ:KÓ'LˆDÔ$ØˆIð �}Š}Ø'+§~£~°t·²ÐGˆDŒMÙ)Ø—‘˜zŸ~™~×=Ñ=Ó?óˆDŒMð �>Š>Ü×#Ñ# D×$8Ñ$8Õ9ð rD   c                 óÒ   — | j                   j                  «       | j                  dœ}g }|D ]8  }|j                  «       }|xj                  |z  c_        |j                  |«       Œ: |S )z4App label/class name interpolation for object names.)r    Úclass)r    rƒ   r`   ÚclonerA   Úappend)rl   ÚobjsÚnamesÚnew_objsÚobjs        r6   r�   zOptions._format_namesí   s]   € à"Ÿn™n×2Ñ2Ó4¸t¿¹ÑOˆØˆØò 	!ˆCØ—)‘)“+ˆCØ�HŠH˜Ñ�HØ�O‰O˜CÕ ð	!ð ˆrD   c                 óÂ  — t        | j                  dt        j                  «      }| j                  rH| j                  j                  r2t        | j                  «      }|j                  › d|j                  › d�}nd}|st        |› d�«      ‚	 t        |«      }t        |t        «      st        d|› d	|› d
�«      ‚|S # t        $ r}|› d|› d�}t        |«      |‚d }~ww xY w)NÚdefault_auto_fieldrp   z.default_auto_fieldÚDEFAULT_AUTO_FIELDz must not be empty.z refers to the module 'z' that could not be imported.zPrimary key 'z' referred by z must subclass AutoField.)r‹   rx   r   r¡   Ú!_is_default_auto_field_overriddenÚtypeÚ
__module__Ú__qualname__r   r   ÚImportErrorÚ
issubclassr
   Ú
ValueError)rl   Úpk_class_pathÚapp_config_classÚsourceÚpk_classÚeÚmsgs          r6   Ú_get_default_pk_classzOptions._get_default_pk_class÷   s  € ÜØ�O‰OØ Ü×'Ñ'ó
ˆð
 �?Š?˜tŸ™×PÒPÜ# D§O¡OÓ4Ðà#×.Ñ.Ð/¨qØ#×0Ñ0Ð1Ð1DðFñ ð
 *ˆFÙÜ&¨&¨Ð1DÐ'EÓFÐFð	3Ü$ ]Ó3ˆHô ˜(¤IÔ.ÜØ ˜¨n¸V¸Hð E&ð 'óð ð ˆøô ò 	3à�(Ð1°-°ð A#ð $ð ô ' sÓ+°Ð2ûð	3ús   ÂB< Â<	CÃCÃCc                 ó  ‡— | j                   r~| j                   Š	 t        ˆfd„| j                  d¬«      D «       «      | _         d| _        t        d„ |j                  j                  D «       «      s"|j                  dt        «       «       nd | _         | j                  €¹| j                  rt        t        | j                  j                  «       «      «      }| j                  D �cg c]  }|j                   |j                   k(  sŒ|‘Œ  }}|r|d	   }d
|_        | j%                  |«       y | j'                  «       } |dd
d
¬«      }|j                  d|«       y y # t        $ r t	        | j
                  ›d‰›d�«      ‚w xY wc c}w )Nc              3   ó^   •K  — | ]$  }|j                   ‰k(  s|j                  ‰k(  r|–— Œ& y ­wr2   )rA   Úattname)r4   ÚfÚquerys     €r6   r7   z#Options._prepare.<locals>.<genexpr>  s/   øè ø€ ò 2àØ—v‘v ’¨!¯)©)°uÒ*<ô ñ2ùs   ƒ*-F©Úreverseú has no field named 'ú')Ú_orderc              3   ó<   K  — | ]  }t        |t        «      –— Œ y ­wr2   )r8   r   ©r4   Úfields     r6   r7   z#Options._prepare.<locals>.<genexpr>'  s   è ø€ ò Ø05”
˜5¤(×+ñùs   ‚r¹   r   TÚID)r   Úprimary_keyr&   Úid)r   ÚnextÚ_get_fieldsÚStopIterationr   rb   r   Úanyr€   r\   Úadd_to_classr   re   ri   ÚiterÚvaluesrA   r¾   Úsetup_pkr¯   )rl   r�   r¼   ÚfldÚalready_createdr¬   Úautor´   s          @r6   Ú_preparezOptions._prepare  sn  ø€ Ø×%Ò%ð ×.Ñ.ˆEð	Ü-1ó 2à!×-Ñ-°eÐ-Ó<ô2ó .�Ô*ð (ˆDŒMÜñ Ø9>¿¹×9QÑ9Qôô ð ×"Ñ" 8¬X«ZÕ8à)-ˆDÔ&à�7‰7ˆ?Ø�|Š|ô œT $§,¡,×"5Ñ"5Ó"7Ó8Ó9�ð
 $(×#4Ñ#4ö#Ø¸¿¹ÀEÇJÁJÓ8N’Cð#�ð #ñ #Ø+¨AÑ.�EØ$(�Ô!Ø—‘˜eÕ$à×5Ñ5Ó7�Ù¨T¸tÐRVÔW�Ø×"Ñ" 4¨Õ.ð% øô !ò Ü'Ø48×4DÓ4DÂeÐLóð ðüò*#s   ›)E Ã%FÄFÅ%E>c                 óZ   — | j                   j                  |«       | j                  «        y r2   )r_   rš   Ú_expire_cache©rl   Úmanagers     r6   Úadd_managerzOptions.add_managerB  s"   € Ø×Ñ×"Ñ" 7Ô+Ø×ÑÕrD   c                 óJ  — |r| j                   j                  |«       nj|j                  r-|j                  r!t	        j
                  | j                  |«       n1t	        j
                  | j                  |«       | j                  |«       |j                  rnt        |j                  d«      rX|j                  j                  rB	 |j                  j                  j                  j                  d¬«       | j                  «        y | j                  d¬«       y # t        $ r Y Œ/w xY w)Nr�   F)Úforwardrµ   )r^   rš   Úis_relationrK   ÚbisectÚinsortr]   r\   rÇ   rŒ   Úremote_fieldr�   r€   rÍ   ÚAttributeError)rl   r¼   Úprivates      r6   Ú	add_fieldzOptions.add_fieldF  så   € ñ
 Ø×Ñ×&Ñ& uÕ-Ø×Ò 5×#5Ò#5Ü�M‰M˜$×1Ñ1°5Õ9ä�M‰M˜$×+Ñ+¨UÔ3Ø�M‰M˜%Ô ð ×ÒÜ˜×*Ñ*¨GÔ4Ø×"Ñ"×(Ò(ðØ×"Ñ"×(Ñ(×.Ñ.×<Ñ<ÀUÐ<ÔKð ×ÑÕ à×Ñ uÐÕ-øô	 "ò Ùðús   Ã0D Ä	D"Ä!D"c                 óT   — | j                   s|j                  r|| _         d|_        y y y )NF)re   r¾   Ú	serialize©rl   r¼   s     r6   rÇ   zOptions.setup_pkh  s&   € Ø�wŠw˜5×,Ò,ØˆDŒGØ#ˆE�Oð -ˆwrD   c                 ó~   — |j                   j                  | _        || _        |j                   j                  | _        y)zb
        Do the internal setup so that the current model is a proxy for
        "target".
        N)r€   re   rg   r   )rl   Útargets     r6   Úsetup_proxyzOptions.setup_proxym  s,   € ð
 —,‘,—/‘/ˆŒØ%ˆÔØŸ™×-Ñ-ˆ�rD   c                 ó    — d| j                   z  S )Nz<Options for %s>)rb   rq   s    r6   Ú__repr__zOptions.__repr__v  s   € Ø! D×$4Ñ$4Ñ4Ð4rD   c                 ó   — | j                   S r2   )rt   rq   s    r6   Ú__str__zOptions.__str__y  s   € Ø×ÑÐrD   c                 ó   ‡— | j                   s| j                  s| j                  syt        ‰t        «      r	t
        ‰   Š| j                  r| j                  ‰j                  k(  S | j                  rt        ˆfd„| j                  D «       «      S y)z¢
        Return True if the model can/should be migrated on the `connection`.
        `connection` can be either a real connection or a connection alias.
        Fc              3   óL   •K  — | ]  }t        ‰j                  |d «      –— Œ y­w)FN)r‹   Úfeatures)r4   Úfeatrz   s     €r6   r7   z&Options.can_migrate.<locals>.<genexpr>ˆ  s(   øè ø€ ò àô ˜
×+Ñ+¨T°5×9ñùs   ƒ!$T)
r$   Úswappedr#   r8   Ústrr	   r+   Úvendorr*   Úall)rl   rz   s    `r6   Úcan_migratezOptions.can_migrate|  s}   ø€ ð
 �:Š:˜Ÿš¨T¯\ª\ØÜ�j¤#Ô&Ü$ ZÑ0ˆJØ×"Ò"Ø×*Ñ*¨j×.?Ñ.?Ñ?Ð?Ø×$Ò$Üó à ×5Ñ5ôó ð ð rD   c                 óº   — t        | j                  t        «      r| j                  S t        d«      5  t        | j                  «      cddd«       S # 1 sw Y   yxY w)z%Return the untranslated verbose name.N)r8   r   ré   r   rq   s    r6   Úverbose_name_rawzOptions.verbose_name_rawŽ  sJ   € ô �d×'Ñ'¬Ô-Ø×$Ñ$Ð$Ü�d‹^ñ 	*Ü�t×(Ñ(Ó)÷	*÷ 	*ò 	*ús   ²AÁAc                 óê   — | j                   rVt        t        | j                   d«      }|r9	 |j                  d«      \  }}|›d|j                  «       ›�| j                  k7  r|S y# t        $ r |cY S w xY w)a!  
        Has this model been swapped out for another? If so, return the model
        name of the replacement; otherwise, return None.

        For historical reasons, model name lookups using get_model() are
        case insensitive, so we make sure we are case insensitive here.
        Nrp   )r%   r‹   r   Úsplitr¨   rƒ   rt   )rl   Úswapped_forÚswapped_labelÚswapped_objects       r6   rè   zOptions.swapped–  s   € ð �>Š>Ü!¤(¨D¯N©N¸DÓAˆKÙð'Ø4?×4EÑ4EÀcÓ4JÑ1�M >ò  -¨n×.BÑ.BÔ.DÐEØ×'Ñ'ò(ð 'Ð&Øøô "ò 'ð
 'Ò&ð'ús   «A$ Á$A2Á1A2c                óF   — || j                   k(  rd| j                  v r| `y y y )Nrè   )r%   r…   rè   )rl   ÚsettingÚkwargss      r6   r   zOptions.setting_changed²  s'   € Ø�d—n‘nÒ$¨°d·m±mÑ)CØ‘ð *DÐ$rD   c                 óÌ  — g }t        «       }d„ | j                  j                  «       D «       }t        |«      D ]Ž  \  }}|j                  j
                  D ]p  }|j                  |v rŒt        j                  |«      }| j                  |_        |j                  |j                  «       |j                  ||j                  |f«       Œr Œ� t        dd„ t        |«      D «       «      S )Nc              3   ó:   K  — | ]  }t        |d «      sŒ|–— Œ y­w)r€   N)rŒ   )r4   Úbs     r6   r7   z#Options.managers.<locals>.<genexpr>º  s   è ø€ ÒD�q´¸¸7Õ0C”ÑDùó   ‚”rH   c              3   ó&   K  — | ]	  }|d    –— Œ y­w)é   Nr   )r4   Úms     r6   r7   z#Options.managers.<locals>.<genexpr>Ç  s   è ø€ Ò,�aˆQˆq�TÑ,ùs   ‚)Úsetr�   ÚmroÚ	enumerater€   r_   rA   r†   rW   rš   Úcreation_counterrC   Úsorted)rl   rH   Úseen_managersÚbasesÚdepthÚbaserÏ   s          r6   rH   zOptions.managers¶  sÊ   € àˆÜ›ˆÙD˜DŸJ™JŸN™NÓ,ÔDˆÜ$ UÓ+ò 	L‰KˆE�4ØŸ:™:×4Ñ4ò L�Ø—<‘< =Ñ0ØäŸ)™) GÓ,�Ø $§
¡
�”Ø×!Ñ! '§,¡,Ô/Ø—‘ ¨×(@Ñ(@À'Ð JÕKñLð	Lô *ØÙ,œ6 (Ó+Ô,ó
ð 	
rD   c                 óV   — | j                   D �ci c]  }|j                  |“Œ c}S c c}w r2   )rH   rA   rÎ   s     r6   rJ   zOptions.managers_mapÊ  s#   € à59·]±]ÖC¨'�—‘˜gÑ%ÒCÐCùÒCs   �&c                 ó¤  — | j                   }|s_| j                  j                  «       dd  D ]?  }t        |d«      sŒ|j                  j
                  dk7  r|j                  j
                  } n |r	 | j                  |   S t        «       }d|_        | j                  |_        d|_        |S # t        $ r t        | j                  ›d|›�«      ‚w xY w)Né   r€   Ú_base_managerú has no manager named T)r,   r�   rÿ   rŒ   r
  rA   rJ   ÚKeyErrorr¨   rb   r   r&   )rl   r,   ÚparentrÏ   s       r6   rI   zOptions.base_managerÎ  sÚ   € à ×2Ñ2ÐÙ àŸ*™*Ÿ.™.Ó*¨1¨2Ð.ò �Ü˜6 7Õ+Ø×+Ñ+×0Ñ0°OÒCØ,2×,@Ñ,@×,EÑ,EÐ)Ùð	ñ ð	Ø×(Ñ(Ð):Ñ;Ð;ô “)ˆØ&ˆŒØŸ
™
ˆŒØ#ˆÔØˆøô ò Ü ð ×(Ó(Ù)ðóð ðús   Á1B+ Â+$Cc                 ól  — | j                   }|sR| j                  sF| j                  j                  «       dd  D ]&  }t	        |d«      sŒ|j
                  j                   } n |r	 | j                  |   S | j                  r| j                  d   S y # t        $ r t        | j                  ›d|›�«      ‚w xY w)Nr	  r€   r  r   )r-   r_   r�   rÿ   rŒ   r€   rJ   r  r¨   rb   rH   )rl   r-   r  s      r6   rM   zOptions.default_managerë  sÁ   € à#×8Ñ8ÐÙ#¨D×,?Ò,?àŸ*™*Ÿ.™.Ó*¨1¨2Ð.ò �Ü˜6 7Õ+Ø+1¯<©<×+LÑ+LÐ(Ùðñ
  ð	Ø×(Ñ(Ð)=Ñ>Ð>ð �=Š=Ø—=‘= Ñ#Ð#ð øô ò Ü ð ×(Ó(Ù,ðóð ðús   Á$B Â$B3c                 óh   ‡‡‡— d„ Šd„ Šd„ Št        dˆˆˆfd„| j                  d¬«      D «       «      S )a1  
        Return a list of all forward fields on the model and its parents,
        excluding ManyToManyFields.

        Private API intended only to be used by Django itself; get_fields()
        combined with filtering of field properties is the public API for
        obtaining this field list.
        c                 ó8   — | j                   xr | j                   S r2   ©rÓ   rK   ©r³   s    r6   Úis_not_an_m2m_fieldz+Options.fields.<locals>.is_not_an_m2m_field  s   € ØŸ™Ò8¨!¯.©.Ð9Ð9rD   c                 ó8   — | j                   xr | j                   S r2   )rÓ   Úone_to_manyr  s    r6   Úis_not_a_generic_relationz1Options.fields.<locals>.is_not_a_generic_relation  s   € ØŸ™Ò7¨!¯-©-Ð8Ð8rD   c                 óš   — | j                   xr= | j                  xr/ t        | j                  d«      xr | j                  j                    S )Nr�   )rÓ   Úmany_to_onerŒ   rÖ   r�   r  s    r6   Úis_not_a_generic_foreign_keyz4Options.fields.<locals>.is_not_a_generic_foreign_key  sF   € à—‘ò TØ—M‘MòTä  §¡°Ó9ÒR¸a¿n¹n×>RÑ>RÐSðð rD   rG   c              3   óR   •K  — | ]  } ‰|«      r ‰|«      r ‰|«      r|–— Œ  y ­wr2   r   )r4   r³   r  r  r  s     €€€r6   r7   z!Options.fields.<locals>.<genexpr>%  s1   øè ø€ ò àÙ& qÔ)Ù-¨aÔ0Ù0°Ô3ô	 ñùs   ƒ$'Frµ   ©rC   rÁ   )rl   r  r  r  s    @@@r6   rG   zOptions.fields  s?   ú€ ò$	:ò	9ò	ô *Øõà×)Ñ)°%Ð)Ó8ôó	
ð 		
rD   c                 ó<   — t        dd„ | j                  D «       «      S )a  
        Return a list of all concrete fields on the model and its parents.

        Private API intended only to be used by Django itself; get_fields()
        combined with filtering of field properties is the public API for
        obtaining this field list.
        rL   c              3   ó:   K  — | ]  }|j                   sŒ|–— Œ y ­wr2   ©Úconcrete©r4   r³   s     r6   r7   z*Options.concrete_fields.<locals>.<genexpr>8  s   è ø€ ÒE a¸!¿*»*¤ÑEùrú   )rC   rG   rq   s    r6   rL   zOptions.concrete_fields.  s    € ô *ØÑE¨4¯;©;ÔEó
ð 	
rD   c                 ó<   — t        dd„ | j                  D «       «      S )zþ
        Return a list of all concrete fields on the model.

        Private API intended only to be used by Django itself; get_fields()
        combined with filtering of field properties is the public API for
        obtaining this field list.
        rO   c              3   ó:   K  — | ]  }|j                   sŒ|–— Œ y ­wr2   r  r   s     r6   r7   z0Options.local_concrete_fields.<locals>.<genexpr>E  s   è ø€ Ò%Q¨AÀaÇjÃj¤aÑ%Qùrú   )rC   r\   rq   s    r6   rO   zOptions.local_concrete_fields;  s"   € ô *Ø#Ñ%Q°×1BÑ1BÔ%Qó
ð 	
rD   c                 óH   — t        dd„ | j                  d¬«      D «       «      S )a  
        Return a list of all many to many fields on the model and its parents.

        Private API intended only to be used by Django itself; get_fields()
        combined with filtering of field properties is the public API for
        obtaining this list.
        rK   c              3   óP   K  — | ]  }|j                   r|j                  r|–— Œ  y ­wr2   r  r   s     r6   r7   z'Options.many_to_many.<locals>.<genexpr>S  s%   è ø€ ò àØ—=’= Q§^¢^ô ñùó   ‚$&Frµ   r  rq   s    r6   rK   zOptions.many_to_manyH  s/   € ô *Øñà×)Ñ)°%Ð)Ó8ôó
ð 	
rD   c                 óP   — | j                  ddd¬«      }t        dd„ |D «       «      S )aw  
        Return all related objects pointing to the current model. The related
        objects can come from a one-to-one, one-to-many, or many-to-many field
        relation type.

        Private API intended only to be used by Django itself; get_fields()
        combined with filtering of field properties is the public API for
        obtaining this field list.
        FT)rÒ   r¶   Úinclude_hiddenrT   c              3   ód   K  — | ](  }|j                   r|j                  j                  r|–— Œ* y ­wr2   )Úhiddenr¼   rK   )r4   rž   s     r6   r7   z*Options.related_objects.<locals>.<genexpr>j  s+   è ø€ ò àØ—z’z S§Y¡Y×%;Ò%;ô ñùs   ‚.0)rÁ   rC   )rl   Úall_related_fieldss     r6   rT   zOptions.related_objectsZ  s@   € ð "×-Ñ-Ø 4¸ð .ó 
Ðô *Øñà-ôó
ð 	
rD   c                 ó˜   — i }| j                  d¬«      }|D ]!  }|||j                  <   	 |||j                  <   Œ# |S # t        $ r Y Œ1w xY w)NFrµ   ©rÁ   rA   r²   r×   ©rl   ÚresrG   r¼   s       r6   rN   zOptions._forward_fields_mapq  sd   € àˆØ×!Ñ!¨%Ð!Ó0ˆØò 	ˆEØ#ˆC�—
‘
‰OðØ%*��E—M‘MÒ"ð	ð ˆ
øô "ò Ùðús   ª=½	A	ÁA	c                 óš   — i }| j                  dd¬«      }|D ]!  }|||j                  <   	 |||j                  <   Œ# |S # t        $ r Y Œ1w xY w)NFT)rÒ   r'  r,  r-  s       r6   rR   zOptions.fields_map€  sf   € àˆØ×!Ñ!¨%ÀÐ!ÓEˆØò 	ˆEØ#ˆC�—
‘
‰OðØ%*��E—M‘MÒ"ð	ð ˆ
øô "ò Ùðús   «>¾	A
Á	A
c                 ó  — 	 | j                   |   S # t        $ r4 | j                  j                  st	        | j
                  ›d|›d�«      ‚Y nw xY w	 | j                  |   S # t        $ r t	        | j
                  ›d|›d�«      ‚w xY w)zW
        Return a field instance given the name of a forward or reverse field.
        r·   zi'. The app cache isn't ready yet, so if this is an auto-created related field, it won't be available yet.r¸   )rN   r  r   Úmodels_readyr   rb   rR   )rl   Ú
field_names     r6   Ú	get_fieldzOptions.get_field�  s�   € ð	ð ×+Ñ+¨JÑ7Ð7øÜò 	ð —9‘9×)Ò)Ü'ð ,0×+;Ó+;ºZðIóð ñ *ð	úð	ð —?‘? :Ñ.Ð.øÜò 	Ü#Ø04×0@Ó0@Â*ÐMóð ð	ús   ‚ ‘:AÁAÁA! Á!%Bc                 óÌ   — | j                   sg S || j                   v r|gS | j                   D ]5  }|j                  j                  |«      }|sŒ!|j                  d|«       |c S  g S )zß
        Return a list of parent classes leading to `model` (ordered from
        closest to most distant ancestor). This has to handle the case where
        `model` is a grandparent or even more distant relation.
        r   )ri   r€   Úget_base_chainÚinsert)rl   r�   r  r.  s       r6   r5  zOptions.get_base_chainª  sg   € ð �|Š|ØˆIØ�D—L‘LÑ Ø�7ˆNØ—l‘lò 	ˆFØ—,‘,×-Ñ-¨eÓ4ˆCÚØ—
‘
˜1˜fÔ%Ø’
ð		ð
 ˆ	rD   c                 ó¼   — t        | j                  «      }| j                  D ].  }|j                  j                  D ]  }|j	                  |«       Œ Œ0 t        |«      S )z¦
        Return all the ancestors of this model as a tuple ordered by MRO.
        Useful for determining if something is an ancestor, regardless of lineage.
        )r   ri   r€   Úall_parentsrW   r3   )rl   Úresultr  Úancestors       r6   r8  zOptions.all_parents»  sV   € ô ˜DŸL™LÓ)ˆØ—l‘lò 	%ˆFØ"ŸL™L×4Ñ4ò %�Ø—
‘
˜8Õ$ñ%ð	%ô �V‹}ÐrD   c                 ó,   — t        | j                  «      S )zy
        Return all the ancestors of this model as a list ordered by MRO.
        Backward compatibility method.
        )r9   r8  rq   s    r6   Úget_parent_listzOptions.get_parent_listÇ  s   € ô
 �D×$Ñ$Ó%Ð%rD   c                 óÄ   — || j                   v r| j                   |   S | j                   D ]4  }|j                  j                  |«      }|sŒ!| j                   |   xs |c S  y)a\  
        Return the field on the current model which points to the given
        "ancestor". This is possible an indirect link (a pointer to a parent
        model, which points, eventually, to the ancestor). Used when
        constructing table joins for model inheritance.

        Return None if the model isn't an ancestor of this one.
        N)ri   r€   Úget_ancestor_link)rl   r:  r  Úparent_links       r6   r>  zOptions.get_ancestor_linkÎ  s_   € ð �t—|‘|Ñ#Ø—<‘< Ñ)Ð)Ø—l‘lò 	;ˆFà Ÿ,™,×8Ñ8¸ÓBˆKÚð —|‘| FÑ+Ò:¨{Ò:ñ	;rD   c                 ój  — | j                   |u rg S | j                  }g }| }| j                  |«      D ]~  }||u r|j                  }Œ|j                  |   }|j
                  j                  «       f}|j                  }|j                  t        |j                   j                  |||ddd¬«      «       Œ€ |S )z½
        Return a list of PathInfos containing the path from the current
        model to the parent model, or an empty list if parent is not a
        parent of the current model.
        FTN)Ú	from_optsÚto_optsÚtarget_fieldsÚ
join_fieldÚm2mÚdirectÚfiltered_relation)	r�   rh   r5  r€   ri   rÖ   Úget_related_fieldrš   r   )rl   r  Úproxied_modelÚpathÚoptsÚ	int_modelÚfinal_fieldÚtargetss           r6   Úget_path_to_parentzOptions.get_path_to_parentâ  s¿   € ð �:‰:˜ÑØˆIà×+Ñ+ˆØˆØˆØ×,Ñ,¨VÓ4ò 	ˆIØ˜MÑ)Ø —‘‘à"Ÿl™l¨9Ñ5�Ø&×3Ñ3×EÑEÓGÐI�Ø —‘�Ø—‘ÜØ"-×"3Ñ"3×"9Ñ"9Ø $Ø&-Ø#.Ø!Ø#Ø*.ôõ
ð	ð$ ˆrD   c                 ób  — | j                   |u rg S | j                  }|j                  j                  |«      }|j	                  «        |j                  |«       g }t        |dd «      D ]C  \  }}||dz      }|j                  j                  |«      }|j                  |j                  «       ŒE |S )z½
        Return a list of PathInfos containing the path from the parent
        model to the current model, or an empty list if parent is not a
        parent of the current model.
        Néÿÿÿÿr	  )
r�   rh   r€   r5  r¶   rš   r   r>  ÚextendÚreverse_path_infos)	rl   r  r�   ÚchainrJ  Úir:  ÚchildÚlinks	            r6   Úget_path_from_parentzOptions.get_path_from_parent  s¨   € ð �:‰:˜ÑØˆIØ×#Ñ#ˆð —‘×*Ñ*¨6Ó2ˆØ�‰ŒØ�‰�UÔàˆÜ$ U¨3¨B ZÓ0ò 	1‰KˆAˆxØ˜!˜a™%‘LˆEØ—;‘;×0Ñ0°Ó:ˆDØ�K‰K˜×/Ñ/Õ0ð	1ð ˆrD   c                 ó¢  — t        t        «      }| j                  j                  d¬«      }|D ]³  }|j                  }|j
                  rŒd„ |j                  dd¬«      D «       }|D ]y  }t        |j                  j                  t        «      rŒ(|j                  j                  j                  j                  j                  j                  }||   j                  |«       Œ{ Œµ |D ]H  }||j                  j                  j                  j                     }||j                  j                  d<   ŒJ | j                  j                  dt         «      S )a%  
        This method is used by each model to find its reverse objects. As this
        method is very expensive and is accessed frequently (it looks up every
        field in a model, in every app), it is computed on first access and then
        is set as a property on every model.
        T)Úinclude_auto_createdc              3   óP   K  — | ]  }|j                   r|j                  �|–— Œ  y ­wr2   )rÓ   Úrelated_modelr   s     r6   r7   z<Options._populate_directed_relation_graph.<locals>.<genexpr>(  s(   è ø€ ò %àØ—=’= Q§_¡_Ð%@ô ñ%ùr%  F)r¶   Úinclude_parentsrS   )r   r9   r   Ú
get_modelsr€   r"   rÁ   r8   rÖ   r�   ré   rh   rr   rš   r…   rw   ÚEMPTY_RELATION_TREE)	rl   Úrelated_objects_graphÚ
all_modelsr�   rK  Úfields_with_relationsr³   Úremote_labelrT   s	            r6   Ú!_populate_directed_relation_graphz)Options._populate_directed_relation_graph  s8  € ô !,¬DÓ 1Ðà—Y‘Y×)Ñ)¸tÐ)ÓDˆ
Øò 	BˆEØ—;‘;ˆDð �}Š}Øñ%à×)Ñ)°%ÈÐ)ÓOô%Ð!ð
 +ò B�Ü! !§.¡.×"6Ñ"6¼Õ<Ø#$§>¡>×#7Ñ#7×#=Ñ#=×#LÑ#L×#RÑ#R×#XÑ#X�LØ)¨,Ñ7×>Ñ>¸qÕAñBð	Bð   ò 		EˆEð 4Ø—‘×*Ñ*×0Ñ0×6Ñ6ñˆOð 6EˆE�K‰K× Ñ Ð!1Ò2ð		Eð �}‰}× Ñ Ð!1Ô3FÓGÐGrD   c                 ó"   — | j                  «       S r2   )rd  rq   s    r6   rS   zOptions._relation_tree@  s   € à×5Ñ5Ó7Ð7rD   c                 óâ   — |r,| j                   D ]  }|| j                  v sŒt        | |«       Œ |r8| j                  s,| j                  D ]  }|| j                  v sŒt        | |«       Œ i | _        y r2   )ÚFORWARD_PROPERTIESr…   Údelattrr"   ÚREVERSE_PROPERTIESr[   )rl   rÒ   r¶   Ú	cache_keys       r6   rÍ   zOptions._expire_cacheD  sr   € ñ Ø!×4Ñ4ò -�	Ø §¡Ò-Ü˜D )Õ,ð-ñ ˜4Ÿ=š=Ø!×4Ñ4ò -�	Ø §¡Ò-Ü˜D )Õ,ð-ð "$ˆÕrD   c                 ó<   — |du rt         }| j                  ||¬«      S )a¬  
        Return a list of fields associated to the model. By default, include
        forward and reverse fields, fields derived from inheritance, but not
        hidden fields. The returned fields can be changed using the parameters:

        - include_parents: include fields derived from inheritance
        - include_hidden:  include fields that have a related_name that
                           starts with a "+"
        F)r]  r'  )ÚPROXY_PARENTSrÁ   )rl   r]  r'  s      r6   Ú
get_fieldszOptions.get_fieldsQ  s.   € ð ˜eÑ#Ü+ˆOØ×ÑØ+¸Nð  ó 
ð 	
rD   c                 óH  — |ddt         fvrt        d|›�«      ‚|||||f}	 | j                  |   S # t        $ r Y nw xY wg }|dur»t	        «       }| j
                  D ]¢  }	|	j                  j                  | j                  k7  r
|t         k(  rŒ0|	j                  j                  ||||d¬«      D ]P  }
t        |
dd«      r|
j                  | j                  k(  sŒ*|
|vsŒ/|j                  |
«       |j                  |
«       ŒR Œ¤ |rS| j                  sG| j                  }|D ]6  }|s|j                  j                   rŒ|j                  |j                  «       Œ8 |r/|| j"                  z  }|| j$                  z  }|r|| j&                  z  }t)        d|«      }|| j                  |<   |S )a’  
        Internal helper function to return fields of the model.
        * If forward=True, then fields defined on this model are returned.
        * If reverse=True, then relations pointing to this model are returned.
        * If include_hidden=True, then fields with is_hidden=True are returned.
        * The include_parents argument toggles if fields from parent models
          should be included. It has three values: True, False, and
          PROXY_PARENTS. When set to PROXY_PARENTS, the call will return all
          fields defined for the current model or any of its parents in the
          parent chain to the model's concrete model.
        TFz&Invalid argument for include_parents: )rÒ   r¶   r]  r'  Útopmost_callr?  zget_fields())rl  r:   r[   r  rþ   ri   r€   rh   rÁ   r‹   r�   rš   rW   r$   rS   rÖ   r)  r\   r]   r^   rC   )rl   rÒ   r¶   r]  r'  ro  rj  rG   Úparent_fieldsr  rž   Ú
all_fieldsr¼   s                r6   rÁ   zOptions._get_fieldsa  sÑ  € ð&  4¨´Ð">Ñ>ÝÙ>MÐOóð ð ˜g ¸ÈÐUˆ	ð	ð ×)Ñ)¨)Ñ4Ð4øÜò 	Ùð	úð ˆð  %Ñ'ô  ›EˆMØŸ,™,ò /�à—L‘L×/Ñ/°4×3FÑ3FÒFØ'¬=Ò8àØ!Ÿ<™<×3Ñ3Ø#Ø#Ø$3Ø#1Ø!&ð 4ó ò /�Cô $ C¨¸Ô>ØŸ9™9¨×(;Ñ(;Ó;Ø ]Ò2ØŸ™ cÔ*Ø%×)Ñ)¨#Õ.ñ/ð/ñ( ˜4Ÿ:š:ð ×,Ñ,ˆJØ#ò 6�ñ "¨×);Ñ);×)BÓ)BØ—M‘M %×"4Ñ"4Õ5ð	6ñ Ø�d×'Ñ'Ñ'ˆFØ�d×-Ñ-Ñ-ˆFñ Ø˜$×-Ñ-Ñ-�ô ,¨N¸FÓCˆð -3ˆ×Ñ˜yÑ)Øˆs   ¢1 ±	=¼=c                 ó�   — | j                   D �cg c],  }t        |t        «      r|j                  €|j                  s|‘Œ. c}S c c}w )z�
        Return a list of total unique constraints. Useful for determining set
        of fields guaranteed to be unique for all rows.
        )r/   r8   r   Ú	conditionÚcontains_expressions)rl   Ú
constraints     r6   Útotal_unique_constraintsz Options.total_unique_constraintsÀ  sJ   € ð #×.Ñ.ö
àä˜:Ô'7Ô8Ø×(Ñ(Ð0Ø"×7Ò7ò ò
ð 	
ùò 
s   �1Ac           
      ó:  — t        «       }t        «       }| j                  j                  D ]^  }||j                  j	                  «       D ��ch c]  \  }}t        |t        «      r||vr|’Œ c}}z  }|t        |j                  «      z  }Œ` t        |«      S c c}}w )zAReturn a set of the names of the properties defined on the model.)rþ   r�   Ú__mro__r…   Úitemsr8   ÚpropertyÚ	frozenset)rl   rœ   ÚseenÚklassrA   Úvalues         r6   Ú_property_nameszOptions._property_namesÐ  s”   € ô “ˆÜ‹uˆØ—Z‘Z×'Ñ'ò 	(ˆEØà#(§>¡>×#7Ñ#7Ó#9÷á�D˜%Ü˜e¤XÔ.°4¸tÑ3Cò óñ ˆEð
 ”C˜Ÿ™Ó'Ñ'‰Dð	(ô ˜ÓÐùós   Á B
c                 óø   — g }| j                   D ]_  }|j                  rŒ|j                  |j                  «       |j                  |j                  k7  sŒE|j                  |j                  «       Œa t        |«      S )zW
        Return a set of the non-pk concrete field names defined on the model.
        )rL   r¾   rš   rA   r²   r{  )rl   rœ   r¼   s      r6   rP   z$Options._non_pk_concrete_field_namesÞ  sd   € ð
 ˆØ×)Ñ)ò 	0ˆEØ×$Ó$Ø—‘˜UŸZ™ZÔ(Ø—:‘: §¡Ó.Ø—L‘L §¡Õ/ð		0ô
 ˜ÓÐrD   c                 ó:   — t        d„ | j                  D «       «      S )zg
        Return a set of reverse one to one field names pointing to the current
        model.
        c              3   óN   K  — | ]  }|j                   sŒ|j                  –— Œ y ­wr2   )Ú
one_to_onerA   r»   s     r6   r7   z:Options._reverse_one_to_one_field_names.<locals>.<genexpr>ñ  s!   è ø€ ò 
Ø ¸E×<LÓ<LˆE�J�Jñ
ùs   ‚%”%)r{  rT   rq   s    r6   rQ   z'Options._reverse_one_to_one_field_namesë  s$   € ô ñ 
Ø$(×$8Ñ$8ô
ó 
ð 	
rD   c                 ór   — | j                  ddt        ¬«      D �cg c]  }t        |dd«      r|‘Œ c}S c c}w )z
        Private API intended only to be used by Django itself.
        Fields to be returned after a database insert.
        TF)rÒ   r¶   r]  Údb_returning)rÁ   rl  r‹   rÜ   s     r6   Údb_returning_fieldszOptions.db_returning_fieldsõ  sI   € ð ×)Ñ)Ø e¼]ð *ó ö
àô �u˜n¨eÔ4ò	 ò
ð 	
ùò 
s   ›4r2   )F)TT)TF)TTTFT)7r‚   r¤   r¥   rg  ri  r   rk   rm   rz  rr   rt   rx   r–   r�   r¯   rË   rÐ   rÙ   rÇ   rß   rá   rã   rì   r   rî   rè   r   rH   rJ   rI   rM   rG   rL   rO   rK   rT   rN   rR   r3  r5  r8  r<  r>  rO  rX  rd  rS   rÍ   rm  rÁ   rv  r  rP   rQ   r†  r   rD   r6   rF   rF   S   su  „ òÐò MÐà€Ló7)ðr ñ<ó ð<ð ñ;ó ð;ð ñ9ó ð9ò@:òDòò>*/òXó .òD$ò
.ò5ò òð$ ñ*ó ð*ð ñó ðò6ð ñ
ó ð
ð& ñDó ðDð ñó ðð8 ñ$ó ð$ð0 ñ'
ó ð'
ðR ñ

ó ð

ð ñ

ó ð

ð ñ
ó ð
ð" ñ
ó ð
ð, ñó ðð ñó ðòò6ð" ñ	ó ð	ò&ò;ò(ò@ò,&HðP ñ8ó ð8ó$ó
ð$ ØØØØó]ð~ ñ
ó ð
ð ñ ó ð ð ñ
 ó ð
 ð ñ
ó ð
ð ñ
ó ñ
rD   rF   )*rÔ   r†   Úcollectionsr   Údjango.appsr   Údjango.confr   Údjango.core.exceptionsr   r   Údjango.core.signalsr   r~   r	   Údjango.db.modelsr
   r   r   r   Údjango.db.models.query_utilsr   Údjango.utils.datastructuresr   r   Údjango.utils.functionalr   Údjango.utils.module_loadingr   Údjango.utils.textr   r   Údjango.utils.translationr   Úobjectrl  r_  r@   rˆ   r=   rC   rF   r   rD   r6   ú<module>r”     sj   ðÛ Û Ý #å Ý  ß JÝ /Ý !ß KÓ KÝ 1ß AÝ 3Ý 5ß ?Ý -á“€àÐ ð0ð ð
€ò<ò,A÷n
ò n
rD   