B
    ©0H[¬  ã               @   sz   d dl Z d dlZd dlmZ d dlmZ d dlmZ G dd„ dƒZG dd„ de 	e¡ƒZ
G d	d
„ d
ƒZG d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„Zedd„ ƒZdd„ Zdd„ Zdd„ Zd d!„ Z‡  ZS )$ÚBaseManagerr   Fc                s   t ƒ  | ¡}||f|_|S )N)ÚsuperÚ__new__Ú_constructor_args)ÚclsÚargsÚkwargsÚobj)Ú	__class__© ú\C:\Users\HIRONO~1\AppData\Local\Temp\pip-install-6bm3nxem\django\django\db\models\manager.pyr      s    
zBaseManager.__new__c                s.   t ƒ  ¡  |  ¡  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S d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.%sz…Could 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   sl   dd„ }i }xZt j|t jd�D ]F\}}t| |ƒr2qt|dd ƒ}|s|d krV| d¡rVq|||ƒ||< qW |S )Nc                s    ‡ fdd„}|j |_ |j|_|S )Nc                s   t |  ¡ ˆ ƒ||Ž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Ú
getmembersÚ
isfunctionr   r   Ú
startswith)r	   Úqueryset_classr)   Znew_methodsr   r(   r+   r   r   r   Ú_get_queryset_methodsN   s    
z!BaseManager._get_queryset_methodsNc             C   s>   |d krd| j |j f }d|i}| |  |¡¡ t|| f|ƒS )Nz%sFrom%sr   )r   Úupdater2   Útype)r	   r1   Ú
class_nameÚ
class_dictr   r   r   Úfrom_querysetd   s
    zBaseManager.from_querysetc             C   s2   | j s|| _ || _t||t| ƒƒ |j | ¡ d S )N)r   r   ÚsetattrÚManagerDescriptorr   Zadd_manager)r   r   r   r   r   r   Úcontribute_to_classn   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   w   s    z!BaseManager._set_creation_counterc             C   s&   t   | ¡}|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f| jŽS )N)r   r   Zdb_for_readr   r   )r   r   r   r   Údb…   s    zBaseManager.dbc             C   s   | j | j| j| jd�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   |   ¡ 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__)N)NN)r   r   Ú__qualname__r;   Zauto_createdZuse_in_migrationsr   r   r   r#   r$   Úclassmethodr2   r7   r:   r   r?   Úpropertyr@   r%   rA   rD   rF   Ú__classcell__r   r   )r   r   r   	   s&   %		
	r   c               @   s   e Zd ZdS )ÚManagerN)r   r   rG   r   r   r   r   rK   §   s   rK   c               @   s   e Zd Zdd„ Zddd„ZdS )r9   c             C   s
   || _ d S )N)Úmanager)r   rL   r   r   r   r   ­   s    zManagerDescriptor.__init__Nc             C   sf   |d k	rt d|j ƒ‚|jjr0t d|jjf ƒ‚|jjrVt 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_maprL   r   )r   Úinstancer	   r   r   r   Ú__get__°   s    zManagerDescriptor.__get__)N)r   r   rG   r   rO   r   r   r   r   r9   «   s   r9   c                   s(   e Zd Z‡ fdd„Z‡ fdd„Z‡  ZS )ÚEmptyManagerc                s   t ƒ  ¡  || _d S )N)r   r   r   )r   r   )r   r   r   r   Æ   s    
zEmptyManager.__init__c                s   t ƒ  ¡  ¡ S )N)r   r%   Únone)r   )r   r   r   r%   Ê   s    zEmptyManager.get_queryset)r   r   rG   r   r%   rJ   r   r   )r   r   rP   Å   s   rP   )r<   r-   Ú	importlibr   Z	django.dbr   Zdjango.db.models.queryr   r   r7   rK   r9   rP   r   r   r   r   Ú<module>   s    