a
    lc*                     @   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 dddddddddddddddddddZdZe dd Zdd Z e	dd  Z!d!d" Z"G d#d$ d$eZ#dGd&d'Z$d(d) Z%d*d+ Z&d,d- Z'd.d/ Z(d0d1 Z)d2d3 Z*d4d5 Z+G d6d7 d7e
Z,G d8d9 d9eeZ-G d:d; d;e
Z.G d<d= d=eeZ/G d>d? d?eZ0G d@dA dAeZ1G dBdC dCe
Z2G dDdE dEe
Z3dFS )Hz.
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)AbstractSignature)Nint)Nstr)Nfloat)Nbytes)Nbool)decimalDecimal)datetimetime)r   	timedelta)r   date)r   r   )uuidUUID)ZIntegerFieldZBigIntegerFieldZPositiveIntegerFieldZSmallIntegerFieldZ	CharFieldZ	TextFieldZ
EmailFieldZGenericIPAddressFieldZURLFieldZ
FloatFieldZBinaryFieldZBooleanFieldZDecimalFieldZ	TimeFieldZDurationFieldZ	DateFieldZDateTimeFieldZ	UUIDField)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-   O/var/www/html/django/DPS/env/lib/python3.9/site-packages/jedi/plugins/django.py_get_deferred_attributes,   s
    r/   c                 C   sp   zt |  \}}W n ty(   Y d S 0 |s6t| S |d u rF| 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r|j }t|d\}}|d u r|d ur| D ]N}| dkrz| }|  }|	|D ]}|
 rd|V  qdq:|
 r:|V  q:d S )N)NNr   )
isinstancer   
_argumentsunpacknextinferr2   Zget_safe_valueget_root_contextr*   Zis_class)	clsr6   Zargument_iteratorkeyZlazy_valuesvalueZforeign_key_class_namer9   vr-   r-   r.   _get_foreign_key_valuesE   s    


rF   c           
      C   s   | j }| }|D ]}t||||}|d ur4|  S | }|dk}|dv sP|r|s`t|  S t| |}	|rt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.0rE   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/   rF   r   r    r4   r   Zdbgstring_name)
rB   r5   r7   r,   resultr6   Zscalar_fieldnameZis_many_to_manyvaluesr-   r-   r.   _infer_fieldW   s.    

rO   c                       s$   e Zd Z fddZdd Z  ZS )DjangoModelNamec                    s   t  | || _|| _d S r0   )super__init___cls_is_instance)selfrB   rM   r7   	__class__r-   r.   rR   t   s    zDjangoModelName.__init__c                 C   s   t | j| j| jS r0   )rO   rS   Z_wrapped_namerT   rU   r-   r-   r.   r@   y   s    zDjangoModelName.infer)__name__
__module____qualname__rR   r@   __classcell__r-   r-   rV   r.   rP   s   s   rP   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+   )rB   Zmanager_clsZmanagersmZgenerics_managercr-   r-   r.   rG   }   s    rG   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-   )rN   rK   rP   )rI   filter_rM   rB   r7   r-   r.   
<dictcomp>   s   z$_new_dict_filter.<locals>.<dictcomp>objects)listZget_filtersreversedr   r,   r   )rB   r7   filtersdctr-   rb   r.   _new_dict_filter   s    ri   c                 C   s   |   dko|    dkS )NZ	ModelBasezdjango.db.models.base)r2   rA   )rD   r-   r-   r.   is_django_model_base   s    rj   c                    s    fdd}|S )Nc                    s.   |D ]}t |rt| |g  S q | ||S r0   )rj   ri   )rB   metaclassesr7   	metaclassfuncr-   r.   wrapper   s    z&get_metaclass_filters.<locals>.wrapperr-   rn   ro   r-   rm   r.   get_metaclass_filters   s    rq   c                    s    fdd}|S )Nc                    s   | ||}|j tv r|D ]h   d|j fkr j r j dkr| }| }t|dkrt	 fdd|d D   S qn`|j dkr| r| dkrt	d	d |D S |j d
kr| r| dkrt	dd |D S |S )NZ_BaseQuerySetzdjango.db.models.query   c                 3   s   | ]}t  |V  qd S r0   )QuerySetMethodWrapper)rI   modelrE   r-   r.   	<genexpr>   s   z7tree_name_to_values.<locals>.wrapper.<locals>.<genexpr>r   r]   zdjango.db.models.managerc                 s   s   | ]}t |V  qd S r0   )ManagerWrapperrI   rr-   r-   r.   rv          Fieldzdjango.db.models.fieldsc                 s   s   | ]}t |V  qd S r0   )FieldWrapperrx   r-   r-   r.   rv      rz   )
rD   _FILTER_LIKE_METHODSget_qualified_namesparent_contextZ	is_moduler2   	get_valueZget_genericslenr   )r,   context	tree_namerL   qsZgenericsrm   ru   r.   ro      s.    


z$tree_name_to_values.<locals>.wrapperr-   rp   r-   rm   r.   tree_name_to_values   s    r   c                 c   s@   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(   )ri   rN   r@   rM   r~   )rB   rM   rD   r-   r-   r.   _find_fields   s    r   c                 C   s   t | tt| dgS )N)field_names)DjangoModelSignaturere   r   )rB   r-   r-   r.   _get_signatures   s    r   c                    s    fdd}|S )Nc                    s(   |D ]}t |rt|   S q | |S r0   )rj   r   )rB   rk   rl   rm   r-   r.   ro      s    z)get_metaclass_signatures.<locals>.wrapperr-   rp   r-   rm   r.   get_metaclass_signatures   s    r   c                   @   s   e Zd Zdd ZdS )rw   c                 C   s   t dd | j||D S )Nc                 s   s   | ]}t |V  qd S r0   )GenericManagerWrapperrI   Zgenericr-   r-   r.   rv      s   z/ManagerWrapper.py__getitem__.<locals>.<genexpr>r   _wrapped_valuepy__getitem__rU   Zindex_value_setZcontextualized_noder-   r-   r.   r      s
    zManagerWrapper.py__getitem__NrY   rZ   r[   r   r-   r-   r-   r.   rw      s   rw   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=   rU   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   )rU   Zgenerics_tupler-   r-   r.   r      s    z#GenericManagerWrapper.with_genericsN)rY   rZ   r[   r   r   r-   r-   r-   r.   r      s   r   c                   @   s   e Zd Zdd ZdS )r|   c                 C   s   t dd | j||D S )Nc                 s   s   | ]}t |V  qd S r0   )GenericFieldWrapperr   r-   r-   r.   rv      s   z-FieldWrapper.py__getitem__.<locals>.<genexpr>r   r   r-   r-   r.   r      s
    zFieldWrapper.py__getitem__Nr   r-   r-   r-   r.   r|      s   r|   c                   @   s   e Zd Zdd ZdS )r   c                 C   s
   t |hS r0   )r   r   r-   r-   r.   r      s    z%GenericFieldWrapper.py__get__on_classN)rY   rZ   r[   r   r-   r-   r-   r.   r      s   r   c                       s&   e Zd Z fddZdddZ  ZS )r   c                    s   t  | || _d S r0   )rQ   rR   _field_names)rU   rD   r   rV   r-   r.   rR     s    zDjangoModelSignature.__init__Fc                 C   s   dd | j D S )Nc                 S   s   g | ]}t |qS r-   )DjangoParamName)rI   rM   r-   r-   r.   rJ   	  rz   z8DjangoModelSignature.get_param_names.<locals>.<listcomp>)r   )rU   Zresolve_starsr-   r-   r.   get_param_names  s    z$DjangoModelSignature.get_param_names)F)rY   rZ   r[   rR   r   r\   r-   r-   rV   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   )rQ   rR   r   r   _field_name)rU   r5   rV   r-   r.   rR     s    zDjangoParamName.__init__c                 C   s   t jS r0   )r   KEYWORD_ONLYrX   r-   r-   r.   get_kind  s    zDjangoParamName.get_kindc                 C   s
   | j  S r0   )r   r@   rX   r-   r-   r.   r@     s    zDjangoParamName.infer)rY   rZ   r[   rR   r   r@   r\   r-   r-   rV   r.   r     s   r   c                       s$   e Zd Z fddZdd Z  ZS )rs   c                    s   t  | || _d S r0   rQ   rR   
_model_clsrU   methodZ	model_clsrV   r-   r.   rR     s    zQuerySetMethodWrapper.__init__c                    s    t  fdd j||D S )Nc                    s   h | ]}t | jqS r-   )QuerySetBoundMethodWrapperr   rH   rX   r-   r.   	<setcomp>  s   z2QuerySetMethodWrapper.py__get__.<locals>.<setcomp>)r   r   	py__get__)rU   r   r   r-   rX   r.   r     s    zQuerySetMethodWrapper.py__get__)rY   rZ   r[   rR   r   r\   r-   r-   rV   r.   rs     s   rs   c                       s$   e Zd Z fddZdd Z  ZS )r   c                    s   t  | || _d S r0   r   r   rV   r-   r.   rR   #  s    z#QuerySetBoundMethodWrapper.__init__c                 C   s
   t | jS r0   )r   r   rX   r-   r-   r.   get_signatures'  s    z)QuerySetBoundMethodWrapper.get_signatures)rY   rZ   r[   rR   r   r\   r-   r-   rV   r.   r   "  s   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;   rF   rO   rP   rG   ri   rj   rq   r   r   r   r   rw   r   r|   r   r   r   rs   r   r-   r-   r-   r.   <module>   sn   



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