ó
®â0_c           @  sÇ  d  d l  m Z d  d l Z d  d l Z d  d l m Z d  d l m Z d  d l m	 Z	 d  d l
 m Z m Z d  d l m Z d  d l m Z d  d	 l m Z d  d
 l m Z d  d l m Z m Z d  d l m Z d  d l m Z d  d l m Z d  d l m  Z  d  d l! m" Z" d  d l# m$ Z$ d  d l% m& Z& d d l' m( Z( d d „ Z) d „  Z* d „  Z+ d „  Z, d e- f d „  ƒ  YZ. d e	 f d „  ƒ  YZ/ d e f d „  ƒ  YZ0 d  e- f d! „  ƒ  YZ1 d S("   iÿÿÿÿ(   t   unicode_literalsN(   t   OrderedDict(   t   contextmanager(   t	   AppConfig(   t   Appst   apps(   t   settings(   t   models(   t   OrderWrt(   t   RECURSIVE_RELATIONSHIP_CONSTANT(   t   DEFAULT_NAMESt   normalize_together(   t   make_model_tuple(   t   six(   t   RemovedInDjango20Warning(   t
   force_text(   t   cached_property(   t   import_string(   t   get_docs_versioni   (   t   InvalidBasesErroru    c         C  sh   t  |  t j ƒ rN |  j d d ƒ } t | ƒ d k r@ t | ƒ S| | d f S|  j j |  j j f Sd  S(   Nu   .i   i   i    (	   t
   isinstanceR   t   string_typest   splitt   lent   tuplet   _metat	   app_labelt
   model_name(   t   modelR   R   (    (    s<   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/state.pyt   _get_app_label_and_model_name   s    *c         C  sæ   g  |  j  ƒ  D] } t | t j ƒ r | ^ q } t ƒ  } xt |  j j d t d t ƒ D]W } | j rV | j	 d k	 rV t | j	 t j ƒ rV | j | j ƒ | j | j	 ƒ qV qV W|  j } | j râ |  | k râ | j | j ƒ n  | S(   uO   
    Return all models that have a direct relationship to the given model.
    t   include_parentst   include_hiddenN(   t   __subclasses__t
   issubclassR   t   Modelt   setR   t
   get_fieldst   Truet   is_relationt   related_modelt   NoneR   R   R   t   addR   t   appendt   proxyt   concrete_model(   t   mt   subclasst   related_modelst   related_fields_modelst   ft   opts(    (    s<   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/state.pyt   _get_related_models"   s    	".	c         C  s   d „  t  |  ƒ Dƒ S(   uq   
    Return a list of typical (app_label, model_name) tuples for all related
    models for the given model.
    c         S  s(   h  |  ] } | j  j | j  j f ’ q S(    (   R   R   R   (   t   .0t   rel_mod(    (    s<   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/state.pys	   <setcomp>=   s   	(   R3   (   R   (    (    s<   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/state.pyt   get_related_models_tuples7   s    c         C  sš   t  ƒ  } t |  ƒ } xe | D]] } | j j | j j } } | | f | k rS q n  | j | | f ƒ | j t | ƒ ƒ q W| |  j j |  j j f h S(   uå  
    Return all models that have a direct or indirect relationship
    to the given model.

    Relationships are either defined by explicit relational fields, like
    ForeignKey, ManyToManyField or OneToOneField, or by inheriting from another
    model (a superclass is related to its subclasses, but not vice versa). Note,
    however, that a model inheriting from a concrete model is also related to
    its superclass through the implicit *_ptr OneToOneField on the subclass.
    (   R#   R3   R   R   R   R)   t   extend(   R   t   seent   queueR5   t   rel_app_labelt   rel_model_name(    (    s<   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/state.pyt   get_related_models_recursiveB   s    	t   ProjectStatec           B  s­   e  Z d  Z d d d „ Z d „  Z d „  Z e d „ Z e d „ Z	 e
 d „ Z d „  Z d „  Z d	 „  Z e d
 „  ƒ Z e d „  ƒ Z e d „  ƒ Z d „  Z d „  Z RS(   uÁ   
    Represents the entire project's overall state.
    This is the item that is passed around - we do it here rather than at the
    app level so that cross-app FKs/etc. resolve properly.
    c         C  s+   | p	 i  |  _  | p g  |  _ t |  _ d  S(   N(   R   t	   real_appst   Falset
   is_delayed(   t   selfR   R>   (    (    s<   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/state.pyt   __init___   s    c         C  sL   | j  | j } } | |  j | | f <d |  j k rH |  j | | ƒ n  d  S(   Nu   apps(   R   t
   name_lowerR   t   __dict__t   reload_model(   RA   t   model_stateR   R   (    (    s<   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/state.pyt	   add_modele   s    c         C  sF   |  j  | | f =d |  j k rB |  j j | | ƒ |  j j ƒ  n  d  S(   Nu   apps(   R   RD   R   t   unregister_modelt   clear_cache(   RA   R   R   (    (    s<   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/state.pyt   remove_modelk   s    c         C  s‹  | r t  |  _ n  t ƒ  } y |  j j | | ƒ } Wn t k
 rG n" X| r] t | ƒ } n t | ƒ } |  j | | f } t ƒ  } xl | j	 D]a \ } }	 |	 j
 r |	 j j t k r¼ q n  t |	 j | ƒ \ }
 } | j |
 | j ƒ  f ƒ q q W| j | ƒ xp | D]h \ }
 } y |  j j |
 | ƒ } Wn t k
 r@qX| r]| j t | ƒ ƒ q| j t | ƒ ƒ qW| j | | f ƒ | S(   N(   R%   R@   R#   R   t	   get_modelt   LookupErrorR6   R<   R   t   fieldsR&   t   remote_fieldR   R	   R   R'   R)   t   lowert   update(   RA   R   R   t   delayR/   t	   old_modelRF   t   direct_related_modelst   namet   fieldR:   R;   t	   rel_model(    (    s<   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/state.pyt   _find_reload_models   s:    			 c         C  s8   d |  j  k r4 |  j | | | ƒ } |  j | ƒ n  d  S(   Nu   apps(   RD   RW   t   _reload(   RA   R   R   RQ   R/   (    (    s<   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/state.pyRE   £   s    c         C  s_   d |  j  k r[ t ƒ  } x0 | D]( \ } } | j |  j | | | ƒ ƒ q W|  j | ƒ n  d  S(   Nu   apps(   RD   R#   RP   RW   RX   (   RA   R   RQ   R/   R   R   (    (    s<   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/state.pyt   reload_models¨   s
    	 c         C  sè   |  j  j ƒ  / x' | D] \ } } |  j  j | | ƒ q WWd  QXg  } x< |  j  j D]. } | j | j f | k rS | j | ƒ qS qS WxL | D]D \ } } y |  j | | f } Wn t k
 rÂ qŒ X| j | ƒ qŒ W|  j  j	 | ƒ d  S(   N(
   R   t   bulk_updateRH   t   real_modelsR   RC   R*   R   t   KeyErrort   render_multiple(   RA   R/   R:   R;   t   states_to_be_renderedRF   (    (    s<   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/state.pyRX   ¯   s    c         C  s_   t  d d „  |  j j ƒ  Dƒ d |  j ƒ } d |  j k rO |  j j ƒ  | _ n  |  j | _ | S(   u*   Returns an exact copy of this ProjectStateR   c         S  s%   i  |  ] \ } } | j  ƒ  | “ q S(    (   t   clone(   R4   t   kt   v(    (    s<   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/state.pys
   <dictcomp>Ì   s   	 R>   u   apps(   R=   R   t   itemsR>   RD   R   R_   R@   (   RA   t	   new_state(    (    s<   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/state.pyR_   É   s    c         C  s)   |  j  r% d |  j k r% |  j d =n  d  S(   Nu   apps(   R@   RD   (   RA   (    (    s<   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/state.pyt   clear_delayed_apps_cacheÔ   s    c         C  s   t  |  j |  j ƒ S(   N(   t	   StateAppsR>   R   (   RA   (    (    s<   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/state.pyR   Ø   s    c         C  s%   t  |  j |  j d t ƒ|  _ |  j S(   Nt   ignore_swappable(   Re   R>   R   R%   R   (   RA   (    (    s<   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/state.pyt   concrete_appsÜ   s    c         C  sR   i  } x? | j  d t ƒ D]+ } t j | ƒ } | | | j | j f <q W|  | ƒ S(   u7   Takes in an Apps and returns a ProjectState matching itt   include_swapped(   t
   get_modelsR%   t
   ModelStatet
   from_modelR   RC   (   t   clsR   t
   app_modelsR   RF   (    (    s<   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/state.pyt	   from_appsá   s
    c           ss   t  |  j j ƒ  ƒ t  ˆ  j j ƒ  ƒ k r. t St  |  j ƒ t  ˆ  j ƒ k rP t St ‡  f d †  |  j j ƒ  Dƒ ƒ S(   Nc         3  s(   |  ] \ } } | ˆ  j  | k Vq d  S(   N(   R   (   R4   t   keyR   (   t   other(    s<   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/state.pys	   <genexpr>ï   s    (   R#   R   t   keysR?   R>   t   allRb   (   RA   Rp   (    (   Rp   s<   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/state.pyt   __eq__ê   s
    *c         C  s   |  | k S(   N(    (   RA   Rp   (    (    s<   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/state.pyt   __ne__ñ   s    N(   t   __name__t
   __module__t   __doc__R(   RB   RG   RJ   R?   RW   RE   R%   RY   RX   R_   Rd   R   R   t   propertyRg   t   classmethodRn   Rs   Rt   (    (    (    s<   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/state.pyR=   X   s   		0					t   AppConfigStubc           B  s&   e  Z d  Z d Z d „  Z d „  Z RS(   uP   
    Stubs a Django AppConfig. Only provides a label, and a dict of models.
    u    c         C  s&   | |  _  t t |  ƒ j | d  ƒ d  S(   N(   t   labelt   superRz   RB   R(   (   RA   R{   (    (    s<   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/state.pyRB   ü   s    	c         C  s   |  j  j |  j |  _ d  S(   N(   R   t
   all_modelsR{   R   (   RA   (    (    s<   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/state.pyt   import_models  s    (   Ru   Rv   Rw   t   pathRB   R~   (    (    (    s<   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/state.pyRz   õ   s   	Re   c           B  sM   e  Z d  Z e d „ Z e d „  ƒ Z d „  Z d „  Z d „  Z	 d „  Z
 RS(   uo   
    Subclass of the global Apps registry class to better handle dynamic model
    additions and removals.
    c         C  sR  g  |  _  xS | D]K } t j | ƒ } x3 | j ƒ  D]% } |  j  j t j | d t ƒƒ q2 Wq Wd „  | j ƒ  Dƒ } g  t	 | t
 | ƒ ƒ D] } t | ƒ ^ qŒ }	 t t |  ƒ j |	 ƒ d  |  _ |  j t
 | j ƒ  ƒ |  j  ƒ d d l m }
 | rt t j ƒ h n t ƒ  } |
 |  d | ƒ} | rNt d j d „  | Dƒ ƒ ƒ ‚ n  d  S(   Nt   exclude_relsc         S  s   h  |  ] } | j  ’ q S(    (   R   (   R4   RF   (    (    s<   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/state.pys	   <setcomp>  s   	 iÿÿÿÿ(   t   _check_lazy_referencest   ignoreu   
c         s  s   |  ] } | j  Vq d  S(   N(   t   msg(   R4   t   error(    (    s<   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/state.pys	   <genexpr>'  s    (   R[   t   global_appst   get_app_configRi   R*   Rj   Rk   R%   t   valuest   sortedt   listRz   R|   Re   RB   R(   t   _lockR]   t   django.core.checks.model_checksR   R   R   t   AUTH_USER_MODELR#   t
   ValueErrort   join(   RA   R>   R   Rf   R   t   appR   t
   app_labelsR{   t   app_configsR   R‚   t   errors(    (    s<   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/state.pyRB     s    	'/	 !c         c  s6   |  j  } t |  _  z	 d  VWd  | |  _  |  j ƒ  Xd  S(   N(   t   readyR?   RI   (   RA   R“   (    (    s<   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/state.pyRZ   )  s    				c      
   C  s·   | s
 d  S|  j  ƒ  › | } x | r¬ g  } x@ | D]8 } y | j |  ƒ Wq3 t k
 rj | j | ƒ q3 Xq3 Wt | ƒ t | ƒ k r£ t d | t ƒ  f ƒ ‚ n  | } q  WWd  QXd  S(   Nué   Cannot resolve bases for %r
This can happen if you are inheriting models from an app with migrations (e.g. contrib.auth)
 in an app with no migrations; see https://docs.djangoproject.com/en/%s/topics/migrations/#dependencies for more(   RZ   t   renderR   R*   R   R   (   RA   t   model_statest   unrendered_modelst   new_unrendered_modelsR   (    (    s<   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/state.pyR]   5  s     	c         C  sl   t  g  i  ƒ } t j |  j ƒ | _ t j |  j ƒ | _ x  | j j ƒ  D] } | | _ qI W|  j | _ | S(   uZ   
        Return a clone of this registry, mainly used by the migration framework.
        (   Re   t   copyt   deepcopyR}   R‘   R‡   R   R[   (   RA   R_   t
   app_config(    (    s<   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/state.pyR_   O  s    c         C  s”   | |  j  | | j j <| |  j k r_ t | ƒ |  j | <|  |  j | _ t ƒ  |  j | _ n  | |  j | j | j j <|  j | ƒ |  j	 ƒ  d  S(   N(
   R}   R   R   R‘   Rz   R   R   R   t   do_pending_operationsRI   (   RA   R   R   (    (    s<   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/state.pyt   register_model]  s    c         C  s;   y# |  j  | | =|  j | j | =Wn t k
 r6 n Xd  S(   N(   R}   R‘   R   R\   (   RA   R   R   (    (    s<   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/state.pyRH   g  s
    (   Ru   Rv   Rw   R?   RB   R   RZ   R]   R_   Rœ   RH   (    (    (    s<   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/state.pyRe     s   			
Rj   c           B  s˜   e  Z d  Z d d d d „ Z e d „  ƒ Z e e d „ ƒ Z	 e d „  ƒ Z
 d „  Z d „  Z d „  Z d „  Z d	 „  Z d
 „  Z d „  Z d „  Z RS(   u¤  
    Represents a Django Model. We don't use the actual Model class
    as it's not designed to have its options changed - instead, we
    mutate this one and then render it into a Model as required.

    Note that while you are allowed to mutate .fields, you are not allowed
    to mutate the Field instances inside there themselves - you must instead
    assign new ones, as these are not detached during a clone.
    c   	      C  sX  | |  _  t | ƒ |  _ | |  _ | p* i  |  _ |  j j d g  ƒ | pR t j f |  _ | pa g  |  _	 t
 |  j t ƒ rˆ t d ƒ ‚ n  x• | D] \ } } t | d ƒ r½ t d | ƒ ‚ n  | j rë t | j d ƒ rë t d | ƒ ‚ n  | j r t | j j d ƒ r t d | ƒ ‚ q q Wx1 |  j d D]" } | j s.t d | ƒ ‚ q.q.Wd  S(	   Nu   indexesuC   ModelState.fields cannot be a dict - it must be a list of 2-tuples.u   modelu7   ModelState.fields cannot be bound to a model - "%s" is.u   _metau_   ModelState.fields cannot refer to a model class - "%s.to" does. Use a string reference instead.ud   ModelState.fields cannot refer to a model class - "%s.through" does. Use a string reference instead.uK   Indexes passed to ModelState require a name attribute. %r doesn't have one.(   R   R   RT   RM   t   optionst
   setdefaultR   R"   t   basest   managersR   t   dictR   t   hasattrR&   R'   t   many_to_manyRN   t   through(	   RA   R   RT   RM   R   RŸ   R    RU   t   index(    (    s<   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/state.pyRB   z  s4    			c         C  s   |  j  j ƒ  S(   N(   RT   RO   (   RA   (    (    s<   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/state.pyRC   ž  s    c           s  g  } x® ˆ j  j D]  } t | d d ƒ r7 | r7 q n  t | t ƒ rL q n  t | j d t ƒ} y | j	 | | j
 ƒ  f ƒ Wq t k
 r² } t d | ˆ j  j | f ƒ ‚ q Xq W| s>x~ ˆ j  j D]m } t | j d t ƒ} y | j	 | | j
 ƒ  f ƒ WqÊ t k
 r6} t d | ˆ j  j | f ƒ ‚ qÊ XqÊ Wn  i  } xt D]} | d k rcqKqK| ˆ j  j k rK| d k rªˆ j  j d } t t | ƒ ƒ | | <q^| d k rßˆ j  j d }	 t t |	 ƒ ƒ | | <q^| d	 k rGg  ˆ j  j D] }
 |
 j
 ƒ  ^ qø} x' | D] } | j s| j ˆ ƒ qqW| | d	 <q^ˆ j  j | | | <qKqKW|  j | ƒ } | rªx_ d d d
 g D] } | | k r‡| | =q‡q‡Wn/ | j d
 ƒ d „  ˆ j  j Dƒ k rÙ| d
 =n  ‡  f d †  ‰  t t ˆ  ˆ ƒ ƒ d ‡ f d †  ƒ} t d „  | Dƒ ƒ } t d „  | Dƒ ƒ sJt j f } n  g  } t ƒ  } d } xÚ ˆ j  j D]Ì } t | j ƒ } | | k r“qln… | j r¸t j | ƒ } | j  ƒ  n` | ˆ j! k sÖ| ˆ j" k rlt j# ƒ  } | j$ | _$ | j | _ | ˆ j" k r| } qn ql| j% | ƒ | j	 | | f ƒ qlW| d | f g k rZg  } n  |  ˆ j  j& ˆ j  j | | | | ƒ S(   uH   
        Feed me a model, get a ModelState representing it out.
        u   remote_fieldt   strings_onlyu'   Couldn't reconstruct field %s on %s: %su+   Couldn't reconstruct m2m field %s on %s: %su   appsu	   app_labelu   unique_togetheru   index_togetheru   indexesu   order_with_respect_toc         S  s   h  |  ] } | j  ’ q S(    (   RT   (   R4   RU   (    (    s<   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/state.pys	   <setcomp>à  s   	 c           s\   g  } xO |  j  D]D } t | d ƒ rG | j j rG | j ˆ  | ƒ ƒ q | j | ƒ q W| S(   Nu   _meta(   t	   __bases__R¢   R   t   abstractR7   R*   (   R   RŸ   t   base(   t   flatten_bases(    s<   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/state.pyRª   ã  s    Ro   c           s   ˆ  j  j |  ƒ S(   N(   t   __mro__R¥   (   t   x(   R   (    s<   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/state.pyt   <lambda>ñ  t    c         s  s0   |  ]& } t  | d  ƒ r$ | j j n | Vq d S(   u   _metaN(   R¢   R   t   label_lower(   R4   R©   (    (    s<   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/state.pys	   <genexpr>õ  s   c         s  s3   |  ]) } t  | t j ƒ p* t | t j ƒ Vq d  S(   N(   R   R   R   R!   R   R"   (   R4   R©   (    (    s<   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/state.pys	   <genexpr>ý  s    u   objectsN(   u   appsu	   app_label('   R   t   local_fieldst   getattrR(   R   R   R   RT   R%   R*   R_   t	   TypeErrorR{   t   local_many_to_manyt   object_nameR
   t   original_attrsR#   R   t   indexest   set_name_with_modelt   force_text_recursivet   gett   private_fieldsRˆ   R   t   anyR   R"   R    t   use_in_migrationsR˜   t   _set_creation_countert   _base_managert   _default_managert   ManagerR   R)   R   (   Rl   R   R€   RM   RU   RT   t   eR   t   utt   itt   idxR¶   R¥   Ro   t   flattened_basesRŸ   R    t   manager_namest   default_manager_shimt   managert   manager_namet   new_manager(    (   Rª   R   s<   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/state.pyRk   ¢  s¨    		%	%
'					c           sÊ   t  | t j ƒ r t | ƒ St  | t ƒ rK g  | D] } ˆ  j | ƒ ^ q2 St  | t ƒ rt t ‡  f d †  | Dƒ ƒ St  | t ƒ r t ‡  f d †  | Dƒ ƒ St  | t ƒ rÆ ‡  f d †  | j	 ƒ  Dƒ S| S(   Nc         3  s   |  ] } ˆ  j  | ƒ Vq d  S(   N(   R¸   (   R4   R¬   (   Rl   (    s<   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/state.pys	   <genexpr>-  s    c         3  s   |  ] } ˆ  j  | ƒ Vq d  S(   N(   R¸   (   R4   R¬   (   Rl   (    s<   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/state.pys	   <genexpr>/  s    c           s1   i  |  ]' \ } } ˆ  j  | ƒ ˆ  j  | ƒ “ q S(    (   R¸   (   R4   R`   Ra   (   Rl   (    s<   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/state.pys
   <dictcomp>2  s   	(
   R   R   R   R   R‰   R¸   R   R#   R¡   Rb   (   Rl   t   valueR¬   (    (   Rl   s<   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/state.pyR¸   &  s    
 c         c  s    t  |  j d d „  ƒ} x | D]y \ } } t | ƒ } | j ƒ  \ } } } } } | rx t | ƒ }	 | |	 j ƒ  f Vq t | ƒ }
 | |
 | | Ž  f Vq Wd S(   u,   Deep-clone the managers using deconstructionRo   c         S  s   |  d j  S(   Ni   (   t   creation_counter(   Ra   (    (    s<   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/state.pyR­   :  R®   N(   Rˆ   R    R   t   deconstructR   t
   as_manager(   RA   t   sorted_managerst   mgr_nameRÈ   RÎ   t   manager_patht   qs_patht   argst   kwargst   qs_classt   manager_class(    (    s<   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/state.pyt   construct_managers7  s    c         C  sR   |  j  d |  j d |  j d t |  j ƒ d t |  j ƒ d |  j d t |  j ƒ ƒ S(   u(   Returns an exact copy of this ModelStateR   RT   RM   R   RŸ   R    (	   t	   __class__R   RT   R‰   RM   R¡   R   RŸ   R    (   RA   (    (    s<   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/state.pyR_   E  s    				c           s  i |  j  d 6ˆ  d 6} | j |  j ƒ t t d ƒ t ƒ  | ƒ } y# t ‡  f d †  |  j Dƒ ƒ } Wn' t k
 rŽ t d |  j f ƒ ‚ n Xd „  |  j	 Dƒ } | | d <d | d <| j |  j
 ƒ  ƒ t j ƒ  1 t j d	 d
 t ƒ t t |  j ƒ | | ƒ SWd QXd S(   uA   Creates a Model object from our current state into the given appsu	   app_labelu   appsu   Metac         3  s6   |  ], } t  | t j ƒ r* ˆ  j | ƒ n | Vq d  S(   N(   R   R   R   RK   (   R4   R©   (   R   (    s<   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/state.pys	   <genexpr>\  s   u(   Cannot resolve one or more bases from %rc         S  s%   i  |  ] \ } } | j  ƒ  | “ q S(    (   R_   (   R4   RT   RU   (    (    s<   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/state.pys
   <dictcomp>b  s   	 u   __fake__u
   __module__u   ignoreuD   Managers from concrete parents will soon qualify as default managersN(   R   RP   R   t   typet   strR   RŸ   RL   R   RM   R×   t   warningst   catch_warningst   filterwarningsR   RT   (   RA   R   t   meta_contentst   metaRŸ   t   body(    (   R   s<   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/state.pyR”   S  s*    

c         C  sG   x' |  j  D] \ } } | | k r
 | Sq
 Wt d | |  j f ƒ ‚ d  S(   Nu   No field called %s on model %s(   RM   R   RT   (   RA   RT   t   fnameRU   (    (    s<   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/state.pyt   get_field_by_nameu  s    c         C  sH   x( |  j  d D] } | j | k r | Sq Wt d | |  j f ƒ ‚ d  S(   Nu   indexesu   No index named %s on model %s(   R   RT   R   (   RA   RT   R¥   (    (    s<   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/state.pyt   get_index_by_name{  s    c         C  s   d |  j  j |  j |  j f S(   Nu   <%s: '%s.%s'>(   RØ   Ru   R   RT   (   RA   (    (    s<   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/state.pyt   __repr__  s    c         C  s›   |  j  | j  k oš |  j | j k oš t |  j ƒ t | j ƒ k oš t d „  t |  j | j ƒ Dƒ ƒ oš |  j | j k oš |  j | j k oš |  j | j k S(   Nc         s  sM   |  ]C \ \ } } \ } } | | k oD | j  ƒ  d  | j  ƒ  d  k Vq d S(   i   N(   RÍ   (   R4   t   k1t   f1t   k2t   f2(    (    s<   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/state.pys	   <genexpr>‰  s   (	   R   RT   R   RM   Rr   t   zipR   RŸ   R    (   RA   Rp   (    (    s<   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/state.pyRs   „  s    	c         C  s   |  | k S(   N(    (   RA   Rp   (    (    s<   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/state.pyRt     s    N(   Ru   Rv   Rw   R(   RB   R   RC   Ry   R?   Rk   R¸   R×   R_   R”   Râ   Rã   Rä   Rs   Rt   (    (    (    s<   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/state.pyRj   o  s   	$ƒ			"				(2   t
   __future__R    R˜   RÛ   t   collectionsR   t
   contextlibR   t   django.appsR   t   django.apps.registryR   R   R…   t   django.confR   t	   django.dbR   t   django.db.models.fields.proxyR   t   django.db.models.fields.relatedR	   t   django.db.models.optionsR
   R   t   django.db.models.utilsR   t   django.utilsR   t   django.utils.deprecationR   t   django.utils.encodingR   t   django.utils.functionalR   t   django.utils.module_loadingR   t   django.utils.versionR   t
   exceptionsR   R   R3   R6   R<   t   objectR=   Rz   Re   Rj   (    (    (    s<   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/state.pyt   <module>   s6   			h