
    g1                         d dl Z d dlZd dlmZ d dlmZ  edd      Z e ej                  d            Z	 G d d      Z
d	 Zdd
Z	 	 ddZddZd Zy)    N)
namedtuple)RECURSIVE_RELATIONSHIP_CONSTANTFieldReferencez
to through c                       e Zd Zd Zd Zy)RegexObjectc                 H    |j                   | _         |j                  | _        y N)patternflags)selfobjs     r/var/www/python.vincentserveurtest.ovh/public_html/venv/lib/python3.12/site-packages/django/db/migrations/utils.py__init__zRegexObject.__init__   s    {{YY
    c                     t        |t              st        S | j                  |j                  k(  xr | j                  |j                  k(  S r
   )
isinstancer   NotImplementedr   r   )r   others     r   __eq__zRegexObject.__eq__   s7    %-!!||u}},Ju{{1JJr   N)__name__
__module____qualname__r   r    r   r   r   r      s    Kr   r   c                  \    t         j                   j                         j                  d      S )Nz%Y%m%d_%H%M)datetimenowstrftimer   r   r   get_migration_name_timestampr      s"      "++M::r   c                 F   t        | t              rf| t        k(  r||t        d      ||fS d| v r'| j	                  dd      \  }}||j                         fS |t        d      || j                         fS | j                  j                  | j                  j                  fS )z
    Turn a model class or model reference string and return a model tuple.

    app_label and model_name are used to resolve the scope of recursive and
    unscoped model relationship.
    zMapp_label and model_name must be provided to resolve recursive relationships..   zCapp_label must be provided to resolve unscoped model relationships.)	r   strr   	TypeErrorsplitlower_meta	app_label
model_name)modelr(   r)   s      r   resolve_relationr+      s     %33 J$6/  j((%<$)KKQ$7!Izj..000U  %++-'';;  %++"8"888r   c                 >   |j                   }|syd}d}t        |j                  g|  |k(  r+t        |dd      }||d|v r||j                  s||v r||f}t        |dd      }	|	r't        |	g|  |k(  r|j
                  }
||
||
v r||
f}|s|syt        ||      S )at  
    Return either False or a FieldReference if `field` references provided
    context.

    False positives can be returned if `reference_field_name` is provided
    without `reference_field` because of the introspection limitation it
    incurs. This should not be an issue when this function is used to determine
    whether or not an optimization can take place.
    FN	to_fieldsthrough)remote_fieldr+   r*   getattrprimary_keythrough_fieldsr   )model_tuplefieldreference_model_tuplereference_field_namereference_fieldr/   references_toreferences_throughr-   r.   r2   s              r   field_referencesr:   5   s      %%LM**9[9=RRE;5	 (  	!$,0K0K !I-)95MlIt4G#G:k:>SS%44 ( " !N2".!?/-);<<r   c              #      K   | j                   j                         D ]@  \  }}|j                  j                         D ]  \  }}t        |||g| }|s||||f   B yw)z
    Generator of (model_state, name, field, reference) referencing
    provided context.

    If field_tuple is provided only references to this particular field of
    model_tuple will be generated.
    N)modelsitemsfieldsr:   )stater3   field_tuplestate_model_tuplemodel_statenamer4   	references           r   get_referencesrE   n   so      +0,,*<*<*>&;&--335KD%(!5+8CI !4	99 6 +?s   AA!A!c                 4    t        t        | ||      d      duS )z?Return whether `field_tuple` is referenced by any state models.N)nextrE   )r?   r3   r@   s      r   field_is_referencedrH      s    uk;?FdRRr   )NN)r   )r   recollectionsr   django.db.models.fields.relatedr   r   typecompileCOMPILED_REGEX_TYPEr   r   r+   r:   rE   rH   r   r   r   <module>rO      sb     	 " K,l;:2::b>* K K;9< 6=r:"Sr   