o
    ð›h�*  ã                   @   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-   úIc:\Users\shubh\Videos\agent\nova\Lib\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”    ÿþýüûúùø	÷
öõôóòñðïî



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