3
vÅÏ^Ò  ã               @   sB   d dl mZ d dlmZ dd„ ZG dd„ deddƒƒZd
d„ ZdS )é    )Ú
namedtuple)ÚRECURSIVE_RELATIONSHIP_CONSTANTc             C   s~   xx| j D ]n\}}xd| j ||f jD ]P\}}|jr"d||f |jjƒ kr"t|dƒr"|jd d krd|jsn||jkr"dS q"W qW dS )Nz%s.%sÚ	to_fieldsr   TF)ÚmodelsÚfieldsÚrelated_modelÚlowerÚhasattrr   Úprimary_key)ÚstateÚmodel_name_lowerÚfieldÚ
field_nameZstate_app_labelZstate_modelÚ_Úf© r   úI/usr/lib/python3.6/site-packages/django/db/migrations/operations/utils.pyÚis_referenced_by_foreign_key   s    
r   c                   s*   e Zd Zeddd„ƒZ‡ fdd„Z‡  ZS )Ú
ModelTupleNc             C   sX   t |tƒrF|tkr| ||ƒS d|kr8| |jƒ jddƒŽ S | ||jƒ ƒS | |jj|jjƒS )zø
        Take a model class or an 'app_label.ModelName' string and return a
        ModelTuple('app_label', 'modelname'). The optional app_label and
        model_name arguments are the defaults if "self" or "ModelName" are
        passed.
        Ú.é   )Ú
isinstanceÚstrr   r   ÚsplitÚ_metaÚ	app_labelÚ
model_name)ÚclsÚmodelr   r   r   r   r   Ú
from_model   s    

zModelTuple.from_modelc                sB   t |tƒr6| j|jko4| jd kp4|jd kp4| j|jkS tƒ j|ƒS )N)r   r   r   r   ÚsuperÚ__eq__)ÚselfÚother)Ú	__class__r   r   r!   "   s    
 zModelTuple.__eq__)NN)Ú__name__Ú
__module__Ú__qualname__Úclassmethodr   r!   Ú__classcell__r   r   )r$   r   r      s   r   ZModelTupleBaser   r   c             C   sD   | j }|r@tj|jƒ|krdS t|ddƒ}|r@tj|ƒ|kr@dS dS )z3Return whether or not field references model_tuple.TÚthroughNF)Úremote_fieldr   r   r   Úgetattr)r   Úmodel_tupler+   r*   r   r   r   Úfield_references_model,   s    r.   N)r   r   )Úcollectionsr   Údjango.db.models.fields.relatedr   r   r   r.   r   r   r   r   Ú<module>   s   