
vÅÏ^Ò  ã               @   s[   d  d l  m Z d  d l m Z d d „  Z Gd d „  d e d d ƒ ƒ Z d
 d „  Z d S)é    )Ú
namedtuple)ÚRECURSIVE_RELATIONSHIP_CONSTANTc             C   s«   x¤ |  j  D]™ \ } } xŠ |  j  | | f j D]r \ } } | j r- d | | f | j j ƒ  k r- t | d ƒ r- | j d d  k rŒ | j s› | | j k r- d Sq- Wq
 Wd S)Nz%s.%sÚ	to_fieldsr   TF)ÚmodelsÚfieldsZrelated_modelÚlowerÚhasattrr   Zprimary_key)ÚstateZmodel_name_lowerÚfieldÚ
field_nameZstate_app_labelZstate_modelÚ_Úf© r   úG/tmp/pip-build-8lau8j11/django/django/db/migrations/operations/utils.pyÚis_referenced_by_foreign_key   s    #	+r   c                   s:   e  Z d  Z e d d d d „ ƒ Z ‡  f d d †  Z ‡  S)Ú
ModelTupleNc             C   s|   t  | t ƒ rc | t k r( |  | | ƒ Sd | k rP |  | 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   ÚsplitZ_metaÚ	app_labelÚ
model_name)ÚclsÚmodelr   r   r   r   r   Ú
from_model   s    zModelTuple.from_modelc                s_   t  | t ƒ rO |  j | j k oN |  j d  k pN | j d  k pN |  j | j k St ƒ  j | ƒ S)N)r   r   r   r   ÚsuperÚ__eq__)ÚselfÚother)Ú	__class__r   r   r   "   s    .zModelTuple.__eq__)Ú__name__Ú
__module__Ú__qualname__Úclassmethodr   r   r   r   )r    r   r      s   r   ZModelTupleBaser   r   c             C   s`   |  j  } | r\ t j | j ƒ | k r+ d St | d d ƒ } | r\ t j | ƒ | k r\ d Sd S)z3Return whether or not field references model_tuple.TÚthroughNF)Úremote_fieldr   r   r   Úgetattr)r
   Zmodel_tupler&   r%   r   r   r   Úfield_references_model,   s    	r(   N)z	app_labelz
model_name)Úcollectionsr   Zdjango.db.models.fields.relatedr   r   r   r(   r   r   r   r   Ú<module>   s   