o
    Zh*                     @   s  d Z ddlmZ ddlmZ ddlmZ ddlmZm	Z	m
Z
 ddlmZ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 i dddddddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*iZd+Ze d,d- Zd.d/ Z e	d0d1 Z!d2d3 Z"G d4d5 d5eZ#dXd7d8Z$d9d: Z%d;d< Z&d=d> Z'd?d@ Z(dAdB Z)dCdD Z*dEdF Z+G dGdH dHe
Z,G dIdJ dJeeZ-G dKdL dLe
Z.G dMdN dNeeZ/G dOdP dPeZ0G dQdR dReZ1G dSdT dTe
Z2G dUdV dVe
Z3dWS )Yz.
Module is used to infer Django model fields.
    )	Parameter)debug)inference_state_function_cache)ValueSetiterator_to_value_setValueWrapper)
DictFilterAttributeOverwrite)NameWrapperBaseTreeParamName)EmptyCompiledName)TreeInstance)
ClassMixin)GenericClass)TupleGenericManager)AbstractSignatureZIntegerField)NintZBigIntegerFieldZPositiveIntegerFieldZSmallIntegerFieldZ	CharField)NstrZ	TextFieldZ
EmailFieldZGenericIPAddressFieldZURLFieldZ
FloatField)NfloatZBinaryField)NbytesZBooleanField)NboolZDecimalField)decimalDecimalZ	TimeField)datetimetimeZDurationField)r   	timedeltaZ	DateField)r   dateZDateTimeField)r   r   Z	UUIDField)uuidUUID)createfilterexcludeupdategetZget_or_createZupdate_or_createc                 C   s   |  dd S )N)djangodbmodelsquery_utilsDeferredAttribute)import_modulepy__getattribute__execute_annotation)inference_state r-   J/var/www/html/lang_env/lib/python3.10/site-packages/jedi/plugins/django.py_get_deferred_attributes,   s
   
r/   c                 C   sp   z
t |  \}}W n
 ty   Y d S w |st| S |d u r#| j}n| |f}||D ]}|   S d S N)mapping
py__name__KeyErrorr/   Zbuiltins_moduler)   r*   execute_with_values)r,   
field_namefield_tree_instanceis_instancemodule_nameZattribute_namemodule	attributer-   r-   r.   _infer_scalar_field3   s   r;   c           	      c   s    t |trF|j }t|d\}}|d u rH|d urJ| D ]-}| dkr>| }|  }|	|D ]	}|
 r<|V  q3q|
 rE|V  qd S d S d S d S )N)NNr   )
isinstancer   
_argumentsunpacknextinferr2   Zget_safe_valueget_root_contextr*   is_class)	clsr6   Zargument_iteratorkeyZlazy_valuesvalueZforeign_key_class_namer9   vr-   r-   r.   _get_foreign_key_valuesE   s(   

rG   c           
      C   s   | j }| }|D ]B}t||||}|d ur|  S | }|dk}|dv s(|rK|s0t|  S t| |}	|rEttd dd |	D   S |	   S q	t	
d|j|   |S )NZManyToManyField)Z
ForeignKeyZOneToOneFieldc                 S   s   g | ]}t |d qS )ZRelatedManager)_create_manager_for.0rF   r-   r-   r.   
<listcomp>h   s    
z _infer_field.<locals>.<listcomp>z1django plugin: fail to infer `%s` from class `%s`)r,   r@   r;   r2   r/   rG   r   r    r4   r   Zdbgstring_name)
rC   r5   r7   r,   resultr6   Zscalar_fieldnameZis_many_to_manyvaluesr-   r-   r.   _infer_fieldW   s0   

rP   c                       $   e Zd Z fddZdd Z  ZS )DjangoModelNamec                    s   t  | || _|| _d S r0   )super__init___cls_is_instance)selfrC   rN   r7   	__class__r-   r.   rT   t   s   
zDjangoModelName.__init__c                 C   s   t | j| j| jS r0   )rP   rU   Z_wrapped_namerV   rW   r-   r-   r.   r@   y   s   zDjangoModelName.infer)__name__
__module____qualname__rT   r@   __classcell__r-   r-   rX   r.   rR   s   s    rR   BaseManagerc                 C   sV   | j d|}|D ]}| r(tt| gf}t|| D ]}|    S qd S )N)r$   r%   r&   manager)r,   r)   r*   Zis_class_mixinr   r   r   r+   )rC   Zmanager_clsZmanagersmZgenerics_managercr-   r-   r.   rH   }   s   rH   c                    sH   t  jddd} fddt|D }r t jd|d< t|S )NF)r7   Zinclude_metaclassesZinclude_type_when_classc                    s*   i | ]}|  D ]
}|jt |qqS r-   )rO   rL   rR   )rJ   filter_rN   rC   r7   r-   r.   
<dictcomp>   s    z$_new_dict_filter.<locals>.<dictcomp>objects)listZget_filtersreversedr   r,   r   )rC   r7   filtersdctr-   rd   r.   _new_dict_filter   s   rk   c                 C   s   |   dko|    dkS )NZ	ModelBasezdjango.db.models.base)r2   rA   )rE   r-   r-   r.   is_django_model_base   s   rl   c                        fdd}|S )Nc                    s.   |D ]}t |rt| |g  S q | ||S r0   )rl   rk   )rC   metaclassesr7   	metaclassfuncr-   r.   wrapper   s
   z&get_metaclass_filters.<locals>.wrapperr-   rq   rr   r-   rp   r.   get_metaclass_filters   s   rt   c                    rm   )Nc                    s   | ||}|j tv rD|D ]4   d|j fkrA j rA j dkrA| }| }t|dkrAt	 fdd|d D   S q|S |j dkr\| r\| dkr\t	d	d |D S |j d
krt| rt| dkrtt	dd |D S |S )NZ_BaseQuerySetzdjango.db.models.query   c                 3   s    | ]}t  |V  qd S r0   )QuerySetMethodWrapper)rJ   modelrF   r-   r.   	<genexpr>   s    z7tree_name_to_values.<locals>.wrapper.<locals>.<genexpr>r   r_   zdjango.db.models.managerc                 s       | ]}t |V  qd S r0   )ManagerWrapperrJ   rr-   r-   r.   ry          Fieldzdjango.db.models.fieldsc                 s   rz   r0   )FieldWrapperr|   r-   r-   r.   ry      r~   )
rE   _FILTER_LIKE_METHODSget_qualified_namesparent_contextZ	is_moduler2   	get_valueZget_genericslenr   )r,   context	tree_namerM   qsZgenericsrp   rx   r.   rr      s,   

z$tree_name_to_values.<locals>.wrapperr-   rs   r-   rp   r.   tree_name_to_values   s   r   c                 c   sB    t | dd D ]}| D ]}|jjdddkr|V  qq	d S )NF)r7   T)Zinclude_module_names)r$   r%   r&   r'   r(   )rk   rO   r@   rN   r   )rC   rN   rE   r-   r-   r.   _find_fields   s   r   c                 C   s   t | tt| dgS )N)field_names)DjangoModelSignaturerg   r   )rC   r-   r-   r.   _get_signatures   s   r   c                    rm   )Nc                    s(   |D ]}t |rt|   S q | |S r0   )rl   r   )rC   rn   ro   rp   r-   r.   rr      s
   
z)get_metaclass_signatures.<locals>.wrapperr-   rs   r-   rp   r.   get_metaclass_signatures   s   r   c                   @      e Zd Zdd ZdS )r{   c                 C      t dd | j||D S )Nc                 s   rz   r0   )GenericManagerWrapperrJ   Zgenericr-   r-   r.   ry      
    
z/ManagerWrapper.py__getitem__.<locals>.<genexpr>r   _wrapped_valuepy__getitem__rW   Zindex_value_setZcontextualized_noder-   r-   r.   r      
   zManagerWrapper.py__getitem__Nr[   r\   r]   r   r-   r-   r-   r.   r{          r{   c                   @   s   e Zd Zdd Zdd ZdS )r   c                 C   s   |j t|hf|jS r0   )class_valuewith_genericsr   Z
py__call__r=   rW   Zcalling_instanceinstancer   r-   r-   r.   py__get__on_class   s
   
z'GenericManagerWrapper.py__get__on_classc                 C   s   | j |S r0   )r   r   )rW   Zgenerics_tupler-   r-   r.   r      s   z#GenericManagerWrapper.with_genericsN)r[   r\   r]   r   r   r-   r-   r-   r.   r      s    r   c                   @   r   )r   c                 C   r   )Nc                 s   rz   r0   )GenericFieldWrapperr   r-   r-   r.   ry      r   z-FieldWrapper.py__getitem__.<locals>.<genexpr>r   r   r-   r-   r.   r      r   zFieldWrapper.py__getitem__Nr   r-   r-   r-   r.   r      r   r   c                   @   r   )r   c                 C   s
   t |hS r0   )r   r   r-   r-   r.   r      s   
z%GenericFieldWrapper.py__get__on_classN)r[   r\   r]   r   r-   r-   r-   r.   r      r   r   c                       s&   e Zd Z fddZdddZ  ZS )r   c                       t  | || _d S r0   )rS   rT   _field_names)rW   rE   r   rX   r-   r.   rT        
zDjangoModelSignature.__init__Fc                 C   s   dd | j D S )Nc                 S   s   g | ]}t |qS r-   )DjangoParamName)rJ   rN   r-   r-   r.   rK   	  s    z8DjangoModelSignature.get_param_names.<locals>.<listcomp>)r   )rW   Zresolve_starsr-   r-   r.   get_param_names  s   z$DjangoModelSignature.get_param_names)F)r[   r\   r]   rT   r   r^   r-   r-   rX   r.   r     s    r   c                       s,   e Zd Z fddZdd Zdd Z  ZS )r   c                    s   t  |j|j || _d S r0   )rS   rT   r   r   _field_name)rW   r5   rX   r-   r.   rT     s   
zDjangoParamName.__init__c                 C   s   t jS r0   )r   KEYWORD_ONLYrZ   r-   r-   r.   get_kind  s   zDjangoParamName.get_kindc                 C   s
   | j  S r0   )r   r@   rZ   r-   r-   r.   r@        
zDjangoParamName.infer)r[   r\   r]   rT   r   r@   r^   r-   r-   rX   r.   r     s    r   c                       rQ   )rv   c                    r   r0   rS   rT   
_model_clsrW   methodZ	model_clsrX   r-   r.   rT     r   zQuerySetMethodWrapper.__init__c                    s    t  fdd j||D S )Nc                    s   h | ]}t | jqS r-   )QuerySetBoundMethodWrapperr   rI   rZ   r-   r.   	<setcomp>  s    z2QuerySetMethodWrapper.py__get__.<locals>.<setcomp>)r   r   	py__get__)rW   r   r   r-   rZ   r.   r     s   zQuerySetMethodWrapper.py__get__)r[   r\   r]   rT   r   r^   r-   r-   rX   r.   rv         rv   c                       rQ   )r   c                    r   r0   r   r   rX   r-   r.   rT   #  r   z#QuerySetBoundMethodWrapper.__init__c                 C   s
   t | jS r0   )r   r   rZ   r-   r-   r.   get_signatures'  r   z)QuerySetBoundMethodWrapper.get_signatures)r[   r\   r]   rT   r   r^   r-   r-   rX   r.   r   "  r   r   N)r_   )4__doc__inspectr   Zjedir   Zjedi.inference.cacher   Zjedi.inference.base_valuer   r   r   Zjedi.inference.filtersr   r	   Zjedi.inference.namesr
   r   Zjedi.inference.compiled.valuer   Zjedi.inference.value.instancer   Zjedi.inference.value.klassr   Zjedi.inference.gradual.baser   Zjedi.inference.gradual.genericsr   Zjedi.inference.signaturer   r1   r   r/   r;   rG   rP   rR   rH   rk   rl   rt   r   r   r   r   r{   r   r   r   r   r   rv   r   r-   r-   r-   r.   <module>   s    	





		
		
