
 X@                 @   s   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	 d  d l
 m Z e Gd d   d e   Z Gd	 d
   d
 e j e   Z Gd d   d e  Z Gd d   d e  Z d S)    N)import_module)router)QuerySet)six)python_2_unicode_compatiblec                   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 d" d#   Z   S)$BaseManagerr   Fc                s+   t  t |   j |   } | | f | _ | S)N)superr   __new___constructor_args)clsargskwargsobj)	__class__ F/home/ubuntu/projects/ifolica/build/django/django/db/models/manager.pyr	      s    zBaseManager.__new__c                sE   t  t |   j   |  j   d  |  _ d  |  _ d  |  _ i  |  _ d  S)N)r   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   n  d d | | f d |  j d |  j d f Sd S)	z
        Returns a 5-tuple of the form (as_manager (True), manager_class,
        queryset_class, args, kwargs).

        Raises 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   checkN   s    zBaseManager.checkc             C   s   d d   } i  } t  j r$ t j n t j } x t j | d | D]m \ } } t |  |  rd qC n  t | d d   } | sC | d  k r | j d  r qC n  | | |  | | <qC 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_methodT   s    zPBaseManager._get_queryset_methods.<locals>.create_method.<locals>.manager_method)r    __doc__)r   methodr(   r   )r   r   create_methodS   s    z8BaseManager._get_queryset_methods.<locals>.create_method	predicatequeryset_only_)	r   PY3inspectZ
isfunctionZismethod
getmembersr!   r   
startswith)r   queryset_classr+   Znew_methodsr,   r   r*   r-   r   r   r   _get_queryset_methodsQ   s    "!z!BaseManager._get_queryset_methodsNc             C   s[   | d  k r% d |  j  | j  f } n  i | d 6} | j |  j |   t | |  f |  S)Nz%sFrom%sr   )r    updater4   type)r   r3   
class_nameZ
class_dictr   r   r   from_queryseti   s    
zBaseManager.from_querysetc             C   sH   |  j  s | |  _  n  | |  _ t | | t |    | j j |   d  S)N)r   r   setattrManagerDescriptorr   Zadd_manager)r   r   r   r   r   r   contribute_to_classs   s
    		zBaseManager.contribute_to_classc             C   s   t  j |  _ t  j d 7_ d S)zp
        Sets the creation counter value for this instance and increments the
        class-level copy.
        r   N)r   creation_counter)r   r   r   r   r   |   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
        Returns a new QuerySet object.  Subclasses can override this method to
        easily 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   |  | k S)Nr   )r   rD   r   r   r   __ne__   s    zBaseManager.__ne__c             C   s
   t  |   S)N)id)r   r   r   r   __hash__   s    zBaseManager.__hash__)r    r   __qualname__r<   Zauto_createdZuse_in_migrationsr	   r   r   r%   r&   classmethodr4   r8   r;   r   r@   propertyrA   r'   rB   rE   rF   rH   r   r   )r   r   r      s(   %			r   c               @   s   e  Z d  Z d S)ManagerN)r    r   rI   r   r   r   r   rL      s   rL   c               @   s+   e  Z d  Z d d   Z d d d  Z d S)r:   c             C   s   | |  _  d  S)N)manager)r   rM   r   r   r   r      s    zManagerDescriptor.__init__Nc             C   s   | d  k	 r" t  d | j   n  | j j rJ t  d | j j f   n  | j j r t  d | j j | j j | j j f   n  | 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_maprM   r   )r   instancer   r   r   r   __get__   s    		zManagerDescriptor.__get__)r    r   rI   r   rP   r   r   r   r   r:      s   r:   c                   s4   e  Z d  Z   f d d   Z   f d d   Z   S)EmptyManagerc                s    t  t |   j   | |  _ d  S)N)r   rQ   r   r   )r   r   )r   r   r   r      s    zEmptyManager.__init__c                s   t  t |   j   j   S)N)r   rQ   r'   none)r   )r   r   r   r'      s    zEmptyManager.get_queryset)r    r   rI   r   r'   r   r   )r   r   rQ      s   rQ   )r=   r0   	importlibr   Z	django.dbr   Zdjango.db.models.queryr   Zdjango.utilsr   Zdjango.utils.encodingr   objectr   r8   rL   r:   rQ   r   r   r   r   <module>   s   