o
    :Zco                     @   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__ N/var/www/chikooza/env/lib/python3.10/site-packages/django/db/models/manager.pyr      s   
zBaseManager.__new__c                    s.   t    |   d | _d | _d | _i | _d S r   )r   __init___set_creation_countermodelname_db_hintsselfr   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".%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 )	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.
        _built_with_as_managerFTNr   zCould 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   qs_classmodule_namer   moduler   r   r   deconstruct&   s.   

zBaseManager.deconstructc                 K   s   g S r   r   )r   r   r   r   r   checkK   s   zBaseManager.checkc                 C   sh   dd }i }t j|t jdD ]#\}}t| |rqt|dd }|s)|d u r*|dr*q|||||< q|S )Nc                    s     fdd}|j |_ |j|_|S )Nc                    s   t |   |i |S r   )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_classr0   new_methodsr   r/   r2   r   r   r   _get_queryset_methodsN   s   
z!BaseManager._get_queryset_methodsNc                 C   s4   |d u rd| j |j f }t|| fd|i| |S )Nz%sFrom%sr    )r#   typer:   )r
   r8   
class_namer   r   r   from_querysetd   s   zBaseManager.from_querysetc                 C   s2   | j p|| _ || _t||t|  |j|  d S r   )r   r   setattrManagerDescriptorr   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_counterr   r   r   r   r   u   s   z!BaseManager._set_creation_counterc                 C   s&   t  | }|p	| j|_|p| j|_|S r   )copyr   r   )r   usinghintsr   r   r   r   
db_manager}   s   
zBaseManager.db_managerc                 C   s   | j ptj| jfi | jS r   )r   r   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   rD   rE   )r    r   r   r   r   r   r   r   r+      s   zBaseManager.get_querysetc                 C   s   |   S r   )r+   r   r   r   r   all   s   zBaseManager.allc                 C   s   t || jo| j|jkS r   )
isinstancer   r	   )r   otherr   r   r   __eq__   s   
zBaseManager.__eq__c                 C   s   t | S r   )idr   r   r   r   __hash__   s   zBaseManager.__hash__r   )NN)r#   r"   __qualname__rB   auto_createduse_in_migrationsr   r   r   r)   r*   classmethodr:   r=   rA   r   rF   propertyrH   r+   rI   rL   rN   __classcell__r   r   r   r   r   	   s,    %


	r   c                   @   s   e Zd ZdS )ManagerN)r#   r"   rO   r   r   r   r   rU      s    rU   c                   @   s   e Zd Zdd ZdddZdS )r?   c                 C   s
   || _ d S r   )manager)r   rV   r   r   r   r      s   
zManagerDescriptor.__init__Nc                 C   sf   |d urt d|j |jjr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   abstractobject_nameswapped	app_labelmanagers_maprV   r   )r   instancer
   r   r   r   __get__   s   zManagerDescriptor.__get__r   )r#   r"   rO   r   r^   r   r   r   r   r?      s    r?   c                       s(   e Zd Z fddZ fddZ  ZS )EmptyManagerc                    s   t    || _d S r   )r   r   r   )r   r   r   r   r   r      s   

zEmptyManager.__init__c                    s   t    S r   )r   r+   noner   r   r   r   r+      s   zEmptyManager.get_queryset)r#   r"   rO   r   r+   rT   r   r   r   r   r_      s    r_   )rC   r4   	importlibr   	django.dbr   django.db.models.queryr   r   r=   rU   r?   r_   r   r   r   r   <module>   s     