
v^o                 @   s   d  d l  Z  d  d l Z d  d l m Z d  d l m Z d  d l m Z Gd d   d  Z Gd d   d e j	 e   Z
 Gd	 d
   d
  Z Gd d   d e
  Z d S)    N)import_module)router)QuerySetc                   s   e  Z d  Z d Z d Z d Z   f d d   Z   f d d   Z d d   Z d	 d
   Z	 d d   Z
 e d d    Z e d d d   Z d d   Z d d   Z d d d d  Z e d d    Z d d   Z d d   Z d d   Z d  d!   Z   S)"BaseManagerr   Fc                s%   t    j |   } | | f | _ | S)N)super__new___constructor_args)clsargskwargsobj)	__class__ :/tmp/pip-build-8lau8j11/django/django/db/models/manager.pyr      s    zBaseManager.__new__c                s?   t    j   |  j   d  |  _ d  |  _ d  |  _ i  |  _ d  S)N)r   __init___set_creation_countermodelname_db_hints)self)r   r   r   r      s    
			zBaseManager.__init__c             C   s   d |  j  j j |  j f S)z,Return "app_label.model_label.manager_name".z%s.%s)r   _metalabelr   )r   r   r   r   __str__"   s    zBaseManager.__str__c             C   s   |  j  } t |  d d  r> d d d | j | j f d d f S|  j } |  j j } t |  } t | |  s t d | | f   d d | | f d |  j d |  j d f Sd S)	z
        Return a 5-tuple of the form (as_manager (True), manager_class,
        queryset_class, args, kwargs).

        Raise a ValueError if the manager is dynamically generated.
        Z_built_with_as_managerFTNz%s.%szCould not find manager %s in %s.
Please note that you need to inherit from managers you dynamically generated with 'from_queryset()'.r      )	_queryset_classgetattr
__module____name__r   r   hasattr
ValueErrorr   )r   Zqs_classmodule_namer   moduler   r   r   deconstruct&   s&    		
zBaseManager.deconstructc             K   s   g  S)Nr   )r   r   r   r   r   checkK   s    zBaseManager.checkc             C   s   d d   } i  } x t  j | d t  j D]g \ } } t |  |  rI q+ t | d d   } | s+ | d  k r | j d  r q+ | | |  | | <q+ W| S)Nc                s.     f d d   } | j  | _  | j | _ | S)Nc                s   t  |  j      | |   S)N)r   get_queryset)r   r
   r   )r   r   r   manager_methodQ   s    zPBaseManager._get_queryset_methods.<locals>.create_method.<locals>.manager_method)r   __doc__)r   methodr&   r   )r   r   create_methodP   s    z8BaseManager._get_queryset_methods.<locals>.create_method	predicatequeryset_only_)inspect
getmembersZ
isfunctionr   r   
startswith)r	   queryset_classr)   Znew_methodsr   r(   r+   r   r   r   _get_queryset_methodsN   s    %!z!BaseManager._get_queryset_methodsNc             C   sJ   | d  k r" d |  j  | j  f } t | |  f d | i |  j |    S)Nz%sFrom%sr   )r   typer1   )r	   r0   
class_namer   r   r   from_querysetd   s
    	zBaseManager.from_querysetc             C   sE   |  j  p | |  _  | |  _ t | | t |    | j j |   d  S)N)r   r   setattrManagerDescriptorr   Zadd_manager)r   r   r   r   r   r   contribute_to_classm   s    	zBaseManager.contribute_to_classc             C   s   t  j |  _ t  j d 7_ d S)zn
        Set the creation counter value for this instance and increment the
        class-level copy.
        r   N)r   creation_counter)r   r   r   r   r   u   s    z!BaseManager._set_creation_counterc             C   s7   t  j  |   } | p |  j | _ | p- |  j | _ | S)N)copyr   r   )r   usinghintsr   r   r   r   
db_manager}   s    zBaseManager.db_managerc             C   s   |  j  p t j |  j |  j  S)N)r   r   Zdb_for_readr   r   )r   r   r   r   db   s    zBaseManager.dbc             C   s%   |  j  d |  j d |  j d |  j  S)z
        Return a new QuerySet object. Subclasses can override this method to
        customize the behavior of the Manager.
        r   r:   r;   )r   r   r   r   )r   r   r   r   r%      s    zBaseManager.get_querysetc             C   s
   |  j    S)N)r%   )r   r   r   r   all   s    zBaseManager.allc             C   s"   t  | |  j  o! |  j | j k S)N)
isinstancer   r   )r   otherr   r   r   __eq__   s    zBaseManager.__eq__c             C   s
   t  |   S)N)id)r   r   r   r   __hash__   s    zBaseManager.__hash__)r   r   __qualname__r8   Zauto_createdZuse_in_migrationsr   r   r   r#   r$   classmethodr1   r4   r7   r   r<   propertyr=   r%   r>   rA   rC   r   r   )r   r   r   	   s&   %	r   c               @   s   e  Z d  Z d S)ManagerN)r   r   rD   r   r   r   r   rG      s   rG   c               @   s+   e  Z d  Z d d   Z d d d  Z d S)r6   c             C   s   | |  _  d  S)N)manager)r   rH   r   r   r   r      s    zManagerDescriptor.__init__Nc             C   s   | d  k	 r t  d | j   | j j rD t  d | j j f   | j j r{ t  d | j j | j j | j j f   | j j |  j j	 S)Nz)Manager isn't accessible via %s instancesz'Manager isn't available; %s is abstractz:Manager isn't available; '%s.%s' has been swapped for '%s')
AttributeErrorr   r   ZabstractZobject_nameZswappedZ	app_labelZmanagers_maprH   r   )r   instancer	   r   r   r   __get__   s    		zManagerDescriptor.__get__)r   r   rD   r   rK   r   r   r   r   r6      s   r6   c                   s4   e  Z d  Z   f d d   Z   f d d   Z   S)EmptyManagerc                s   t    j   | |  _ d  S)N)r   r   r   )r   r   )r   r   r   r      s    zEmptyManager.__init__c                s   t    j   j   S)N)r   r%   none)r   )r   r   r   r%      s    zEmptyManager.get_queryset)r   r   rD   r   r%   r   r   )r   r   rL      s   rL   )r9   r-   	importlibr   Z	django.dbr   Zdjango.db.models.queryr   r   r4   rG   r6   rL   r   r   r   r   <module>   s   