U
    7h1                     @   s   d dl Z d dlZd dlmZ d dlmZ eddZeedZ	G dd dZ
d	d
 ZdddZdddZdddZdd ZdS )    N)
namedtuple)RECURSIVE_RELATIONSHIP_CONSTANTFieldReferencez
to through c                   @   s   e Zd Zdd Zdd ZdS )RegexObjectc                 C   s   |j | _ |j| _d S N)patternflags)selfobj r   T/var/www/formularioweb/env/lib/python3.8/site-packages/django/db/migrations/utils.py__init__   s    zRegexObject.__init__c                 C   s&   t |tstS | j|jko$| j|jkS r   )
isinstancer   NotImplementedr   r	   )r
   otherr   r   r   __eq__   s    
zRegexObject.__eq__N)__name__
__module____qualname__r   r   r   r   r   r   r      s   r   c                   C   s   t j  dS )Nz%Y%m%d_%H%M)datetimenowstrftimer   r   r   r   get_migration_name_timestamp   s    r   c                 C   s   t | trr| tkr2|dks"|dkr*td||fS d| krV| dd\}}|| fS |dkrftd||  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.
    NzMapp_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"   r   r   r   resolve_relation   s     
r$   c                 C   s   |j }|sdS d}d}t|jf|  |krlt|dd}|dksd|dksdd|kr\|dksd|jsd||krl||f}t|dd}	|	rt|	f|  |kr|j}
|dks|
dks||
kr||
f}|s|sdS 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#   getattrZprimary_keythrough_fieldsr   )model_tuplefieldZreference_model_tupleZreference_field_nameZreference_fieldr'   Zreferences_toZreferences_throughr%   r&   r)   r   r   r   field_references5   sB    			r,   r   c                 c   sP   | j  D ]@\}}|j D ],\}}t|||f| }|r||||fV  qq
dS )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,   )stater*   field_tupleZstate_model_tupleZmodel_statenamer+   	referencer   r   r   get_referencesn   s      r4   c                 C   s   t t| ||ddk	S )z?Return whether `field_tuple` is referenced by any state models.N)nextr4   )r0   r*   r1   r   r   r   field_is_referenced   s    r6   )NN)NN)r   )r   recollectionsr   Zdjango.db.models.fields.relatedr   r   typecompileZCOMPILED_REGEX_TYPEr   r   r$   r,   r4   r6   r   r   r   r   <module>   s   

  
9
