+
    Vjc                       ^ RI Ht ^ RIHt ^ RIHt ^ RIHtHt ^ RI	H
t
HtHt ^ RIHt ^ RIHt ^ RIHt ^ R	IHt ^ R
IHt ^ RIHtHtHt ^RIHt ]! R4      tR R ltR R ltR R ltR R lt R R lt!R R lt"]! ]"]#4      t$R R lt%R+R R llt&R R lt'R,R! R" llt(]R-R# R$ ll4       t)]R.R% R& ll4       t*R' R( lt+R) R* lt,R # )/    )annotations)chain)contextmanager)AnyTypeVar)	GeneratorIterableIterator)models)lazy)get_languageget_language_info)settings)fallbacks_enabledset_auto_populateset_enable_fallbacks)AutoPopulate_Tc                   V ^8  d   QhRR/# )   returnstr )formats   "K/var/www/idalgo/venv/lib/python3.14/site-packages/modeltranslation/utils.py__annotate__r      s     % %c %    c                     \        4       p V f   \        P                  # V \        P                  9  d    RV 9   d   V P	                  R4      ^ ,          p V \        P                  9   d   V # \        P                  # )z
Return an active language code that is guaranteed to be in
settings.LANGUAGES (Django does not seem to guarantee this for us).
-)_get_languager   DEFAULT_LANGUAGEAVAILABLE_LANGUAGESsplitlangs    r   r   r      sa    
 ?D|(((8///C4Kzz#q!x+++$$$r   c                    V ^8  d   QhRRRR/# )r   r&   r   r   boolr   )r   s   "r   r   r   '   s      C D r   c                *    \        V 4      pVR,          # )z(
Check if a language is bi-directional.
bidir   )r&   	lang_infos   & r   get_language_bidir,   '   s     "$'IVr   c                    V ^8  d   QhRRRR/# )r   fieldsr   r   	list[str]r   )r   s   "r   r   r   /   s     	 	C 	I 	r   c                 N    \        \        P                  ! R V  4       4      4      # )z<
Returns a list of localized fieldnames for a given fields.
c              3  ~   "   T F.  p\         P                   Uu. uF  p\        W4      NK  	  upx  K0  	  R # u upi 5iN)r   r#   build_localized_fieldname).0fieldr&   s   &  r   	<genexpr>)get_translation_fields.<locals>.<genexpr>4   s<      
 AI@\@\]@\&u3@\] ^s   =8=)listr   from_iterable)r.   s   *r   get_translation_fieldsr:   /   s,      

 	
 r   c                    V ^8  d   QhRRRR/# )r   r&   r   r   r   )r   s   "r   r   r   ;   s     " "S "S "r   c                8    V R 8X  d   Rp V P                  RR4      # )idindr    _)replacer%   s   &r   
build_langrA   ;   s!    t| <<S!!r   c               $    V ^8  d   QhRRRRRR/# )r   
field_namer   r&   r   r   )r   s   "r   r   r   C   s!     = =# =S =S =r   c                J    \        R P                  V \        V4      4      4      # )z{}_{})r   r   rA   )rC   r&   s   &&r   r3   r3   C   s    w~~j*T*:;<<r   c               $    V ^8  d   QhRRRRRR/# )r   verbose_namer   r&   r   r   r   )r   s   "r   r   r   G   s&     E E E3 E3 Er   c                @    VR 8X  d   Rp\         P                  ! W4      # )r=   r>   )r   BUILD_LOCALIZED_VERBOSE_NAME)rF   r&   s   &&r   _build_localized_verbose_namerI   G   s    t|00DDr   c               $    V ^8  d   QhRRRRRR/# )r   bitsr/   offsetintr   r   r   )r   s   "r   r   r   P   s!      ) S S r   c           	         R P                  W) R 4      \        P                  RR.,           9   dG   RP                  RP                  V R\	        V 4      V,
           4      RP                  W) R 4      4      # R# )r    Nzen-usr>   {}-{}r?    )joinr   r#   r   len)rK   rL   s   &&r   _join_css_classrS   P   sh    
xxWX8#?#?7EBR#RR~~chht,@c$i&.@'ABCHHTRYRZ^D\]]r   c                    V ^8  d   QhRRRR/# )r   localized_fieldnamer   prefixr   )r   s   "r   r   r   V   s     F F Fc Fr   c                :   V P                  R4      pRp\        V4      ^8X  d   \        V 4      pMR\        V4      ^8X  d   RP                  V4      pM0\        V4      ^8  d!   \	        V^4      pV'       g   \	        V^4      pV'       d   RP                  W4      # T# )z
Returns a css class based on ``localized_fieldname`` which is easily
splittable and capable of regionalized language codes.

Takes an optional ``prefix`` which is prepended to the returned string.
r?   rP   r    rO   )r$   rR   r   rQ   rS   r   )rU   rV   rK   	css_classs   &&  r   build_css_classrY   V   s     $$S)DI
4yA~+,		Ta
 HHTN		TQ
 $D!,	
 (a0I067>>&,EIEr   c                    V ^8  d   QhRRRR/# )r   seqzIterable[_T]r   zGenerator[_T]r   )r   s   "r   r   r   v   s     
A 
A 
A 
Ar   c                0   a \        4       oV3R lV  4       # )z
Returns a generator yielding unique sequence members in order

A set by itself will return unique values without any regard for order.

>>> list(unique([1, 2, 3, 2, 2, 4, 1]))
[1, 2, 3, 4]
c              3  j   <"   T F(  qS9  g   K  SP                  V4      '       d   K$  Vx  K*  	  R # 5ir2   )add)r4   xseens   & r   r6   unique.<locals>.<genexpr>   s#     @s!tmADHHQKAAss   33
3)set)r[   r`   s   &@r   uniquerc   v   s     5D@s@@r   Nc               $    V ^8  d   QhRRRRRR/# )r   r&   r   overridez!dict[str, tuple[str, ...]] | Noner   ztuple[str, ...]r   )r   s   "r   r   r      s$        
 :  r   c                ,   \        4       '       g   V 3# Vf   / pVP                  V \        P                  P                  V R4      4      pVP                  R\        P                  R,          4      pV 3V,           V,           p\	        \        V4      4      # )z
Return order of languages which should be checked for parameter language.
First is always the parameter language, later are fallback languages.
Override parameter has priority over FALLBACK_LANGUAGES.
defaultr   )r   getr   FALLBACK_LANGUAGEStuplerc   )r&   re   fallback_for_langfallback_deforders   &&   r   resolution_orderrn      s     w T8+F+F+J+J4QS+TU<<	8+F+Fy+QRLG'',6Er   c                    V ^8  d   QhRRRR/# )r   moder   r   Iterator[None]r   )r   s   "r   r   r      s            r   c              #  d   "   \        V 4        Rx  \        R4       R#   \        R4       i ; i5i)a  
Overrides translation fields population mode (population mode decides which
unprovided translations will be filled during model construction / loading).

Example:

    with auto_populate('all'):
        s = Slugged.objects.create(title='foo')
    s.title_en == 'foo' // True
    s.title_de == 'foo' // True

This method may be used to ensure consistency loading untranslated fixtures,
with non-default language active:

    with auto_populate('required'):
        call_command('loaddata', 'fixture.json')
N)r   )rp   s   &r   auto_populaters      s(     & d $$   0  0-0c                    V ^8  d   QhRRRR/# )r   enablezbool | Noner   rq   r   )r   s   "r   r   r      s     # #k #^ #r   c              #  d   "   \        V 4        Rx  \        R4       R#   \        R4       i ; i5i)a)  
Temporarily switch all language fallbacks on or off.

Example:

    with fallbacks(False):
        lang_has_slug = bool(self.slug)

May be used to enable fallbacks just when they're needed saving on some
processing or check if there is a value for the current language (not
knowing the language)
N)r   )rv   s   &r   	fallbacksrx      s(       #T"T"rt   c               (    V ^8  d   QhRRRRRRRR/# )r   settingzAny | dict[str, Any]rC   r   rg   r   r   r   )r   s   "r   r   r      s*      - 3  QT r   c                T    \        V \        4      '       d   V P                  W4      # V # )zM
Extract result from single-value or dict-type setting like fallback_values.
)
isinstancedictrh   )rz   rC   rg   s   &&&r   parse_fieldr~      s%     '4  {{://r   c               $    V ^8  d   QhRRRRRR/# )r   intermediary_modelztype[models.Model]r&   r   r   r   )r   s   "r   r   r      s$     ) )*)25))r   c                l   ^ RI Hp \        RRR\        V P                  P
                  V4      RV P                  P                  RV P                  P                  RV P                  P                  RV P                  P                  R\        V P                  P                  V4      R	\        V P                  P                  V4      R
V P                  P                  /4      p\        \        V P                  V4      \        P                   3/ \#        V P$                  4      P'                  4        UUu/ uF  w  rEVR8w  g   K  WEbK  	  uppCV P                  P(                   Uu/ uF  qfP*                  VP-                  4       bK  	  upCRV/C4      pR pVP/                  WV4       V# u uppi u upi )r   )
translatorMetadb_tableauto_created	app_labeldb_tablespaceunique_togetherrF   verbose_name_pluralapps_metac                    VP                  V 4      pVP                  '       dO   WP                  9  d=   R VP                  ,          pVP	                  V\        WCP                  3/ 4      4       R# R# R# )z%sTranslationOptionsN)_get_options_for_model
registered	_registry__name__registertype	__class__)	old_model	new_modelr   cls_optsnames   &&&  r   lazy_register_model?build_localized_intermediary_model.<locals>.lazy_register_model   sb    44Y?94H4H#H)I,>,>>D	47I7I6KR+PQ $Ir   r   )modeltranslation.translatorr   r   r3   r   r   r   r   r   r   build_localized_verbose_namerF   r   r   r   r   Modelr}   __dict__itemsr.   r   clonelazy_operation)	r   r&   r   metakvfklassr   s	   &&       r   "build_localized_intermediary_modelr      s    7
12D2J2J2S2SUYZ.44AA+11;;/55CC177GG8"((55t "#?"((<<d$ &,,11	
D$ !"4"="=tD		
 $%7%@%@ A G G IZ IQRY\tqt IZ	
*<*B*B*I*IJ*IQvvqwwy *IJ	
 D	
ER 1uML [Js   3F+F+%#F1)rP   r2   )all)T)-
__future__r   	itertoolsr   
contextlibr   typingr   r   collections.abcr   r	   r
   	django.dbr   django.utils.functionalr   django.utils.translationr   r!   r   modeltranslationr   modeltranslation.thread_contextr   r   r   _typingr   r   r,   r:   rA   r3   rI   r   r   rS   rY   rc   rn   rs   rx   r~   r   r   r   r   <module>r      s    "  %  9 9  ( B 6 %  "T]%	"=E  $$A3G F@
A &    2 # #()r   