3
ªôÁgè  ã               @   sN   d dl mZ d dlmZ ddd„ZeddƒZddd	„Zf fd
d„Zdd„ ZdS )é    )Ú
namedtuple)ÚRECURSIVE_RELATIONSHIP_CONSTANTNc             C   s‚   t | tƒrr| tkr2|dks"|dkr*tdƒ‚||fS d| krV| jddƒ\}}||jƒ fS |dkrft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.
    NzMapp_label and model_name must be provided to resolve recursive relationships.Ú.é   zCapp_label must be provided to resolve unscoped model relationships.)	Ú
isinstanceÚstrr   Ú	TypeErrorÚsplitÚlowerZ_metaÚ	app_labelÚ
model_name)Úmodelr   r   © r   úc/var/www/tester-filtro-web/env/lib/python3.6/site-packages/django/db/migrations/operations/utils.pyÚresolve_relation   s    
r   ÚFieldReferencez
to throughc             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ƒ}	|	r´t|	f| žŽ |kr´|j}
|dks¬|
dks¬||
kr´||
f}|pº|sÀd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_references$   s,    r   c             c   sX   xR| j jƒ D ]D\}}x:|jjƒ D ],\}}t|||f|žŽ }|r ||||fV  q W qW 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_referencesU   s
    r!   c             C   s   t t| ||ƒdƒdk	S )z?Return whether `field_tuple` is referenced by any state models.N)Únextr!   )r   r   r   r   r   r   Úfield_is_referencedd   s    r#   )NN)NN)	Úcollectionsr   Zdjango.db.models.fields.relatedr   r   r   r   r!   r#   r   r   r   r   Ú<module>   s   

 
,