
    ^j*                     \   d 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
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-        Z!d. Z"ed/        Z#d0 Z$ G d1 d2e      Z%dLd3Z&d4 Z'd5 Z(d6 Z)d7 Z*d8 Z+d9 Z,d: Z- G d; d<e      Z. G d= d>ee      Z/ G d? d@e      Z0 G dA dBee      Z1 G dC dDe      Z2 G dE dFe      Z3 G dG dHe      Z4 G dI dJe      Z5yK)Mz.
Module is used to infer Django model fields.
    )	Parameter)Any)debug)inference_state_function_cache)ValueSetiterator_to_value_setValueWrapper)
DictFilterAttributeOverwrite)NameWrapperBaseTreeParamName)EmptyCompiledName)TreeInstance)
ClassMixin)GenericClass)TupleGenericManager)AbstractSignatureIntegerField)NintBigIntegerFieldPositiveIntegerFieldSmallIntegerField	CharField)Nstr	TextField
EmailFieldGenericIPAddressFieldURLField
FloatField)NfloatBinaryField)NbytesBooleanField)NboolDecimalField)decimalDecimal	TimeField)datetimetimeDurationField)r)   	timedelta	DateField)r)   dateDateTimeField)r)   r)   	UUIDField)uuidUUID)createfilterexcludeupdategetget_or_createupdate_or_createc                 `    | j                  d      j                  d      j                  d       S )N)djangodbmodelsquery_utilsDeferredAttribute)import_modulepy__getattribute__execute_annotation)inference_states    L/opt/ringagent/.cad-venv/lib/python3.12/site-packages/jedi/plugins/django.py_get_deferred_attributesrE   -   s0    ((1,-.@.@.FG    c                    	 t         |j                            \  }}|st        |       S || j                  }n| j                  |f      }|j                  |      D ]  }|j                         c S  y # t        $ r Y y w xY wN)mapping
py__name__KeyErrorrE   builtins_moduler@   rA   execute_with_values)rC   
field_namefield_tree_instanceis_instancemodule_nameattribute_namemodule	attributes           rD   _infer_scalar_fieldrU   4   s    &-.A.L.L.N&O#^ '88 00 ..~>..~> /	,,../  s   A2 2	A>=A>c              #     K   t        |t              r|j                  j                         }t	        |d      \  }}|||j                         D ]v  }|j                         dk(  rL|j                         }| j                         }|j                  |      D ]  }|j                         s|  b|j                         ss| x y y y y w)N)NNr   )
isinstancer   
_argumentsunpacknextinferrJ   get_safe_valueget_root_contextrA   is_class)	clsrO   argument_iteratorkeylazy_valuesvalueforeign_key_class_namerS   vs	            rD   _get_foreign_key_valuesrf   F   s     %|4/::AAC 1<@[;;2$**,  ##%.-2-A-A-C* 113F#667MN $::<"#G$ ^^%K  3;	 5s   B(C+C
Cc                    | j                   }|j                         }|D ]  }t        ||||      }||c S |j                         }|dk(  }|dv s|s3|st	        |      c S t        | |      }	|r/t        t        d |	D 
cg c]  }
t        |
d       c}
            c S |	j                         c S  t        j                  d|j                  | j                                |S c c}
w )NManyToManyField)
ForeignKeyOneToOneFieldRelatedManagerz1django plugin: fail to infer `%s` from class `%s`)rC   r[   rU   rJ   rE   rf   r   r4   _create_manager_forrM   r   dbgstring_name)r_   rN   rP   rC   resultrO   scalar_fieldnameis_many_to_manyvaluesre   s              rD   _infer_fieldrt   X   s    ))OF% 4*Z)<kK#"--/"3322o/@@,S2EFFtFL.AB'+;<. !   1133%4( 
IIA$$cnn&68M.s   >C"c                   $     e Zd Z fdZd Z xZS )DjangoModelNamec                 @    t         |   |       || _        || _        y rH   )super__init___cls_is_instance)selfr_   rq   rP   	__class__s       rD   ry   zDjangoModelName.__init__u   s    	'rF   c                 X    t        | j                  | j                  | j                        S rH   )rt   rz   _wrapped_namer{   r|   s    rD   r[   zDjangoModelName.inferz   s!    DIIt'9'94;L;LMMrF   )__name__
__module____qualname__ry   r[   __classcell__r}   s   @rD   rv   rv   t   s    (
NrF   rv   c                     | j                   j                  d      j                  |      }|D ]N  }|j                         st	        t        | g      f      }t        ||      j                  d       D ]  }|c c S  P y )N)r;   r<   r=   manager)rC   r@   rA   is_class_mixinr   r   r   rB   )r_   manager_clsmanagersmgenerics_managercs         rD   rl   rl   ~   s    ""00-%   2HcUO3EF!!%56II$O 
 rF   c                    t        | j                  |dd            }t        |      D ci c]/  }|j                         D ]  }|j                  t        | ||       1 }}}|rt        | j                  d      |d<   t        |      S c c}}w )NF)rP   include_metaclassesinclude_type_when_classobjects)	listget_filtersreversedrs   rn   rv   r   rC   r
   )r_   rP   filtersfilter_rq   dcts         rD   _new_dict_filterr      s    3??! % # ' G  (NN$  	/#t[AAC 
  +3+>+>	JIc?s   4B	c                 n    | j                         dk(  xr! | j                         j                         dk(  S )N	ModelBasezdjango.db.models.base)rJ   r]   )rc   s    rD   is_django_model_baser      s:    , M""$//15LLMrF   c                       fd}|S )Nc                 Z    |D ]  }t        |      st        | |      gc S   | ||      S rH   )r   r   )r_   metaclassesrP   	metaclassfuncs       rD   wrapperz&get_metaclass_filters.<locals>.wrapper   s;    $ 	<I#I.(k:;;	< Ck22rF    r   r   s   ` rD   get_metaclass_filtersr      s    3 NrF   c                       fd}|S )Nc                     | ||      }|j                   t        v r|D ]  j                         d|j                   fk(  s#j                  j	                         s>j                  j                         dk(  s\|j                         }|j                         }t        |      dk\  st        fd|d   D              c S  |S |j                   dk(  r5|j	                         r%|j                         dk(  rt        d |D              S |j                   d	k(  r5|j	                         r%|j                         d
k(  rt        d |D              S |S )N_BaseQuerySetzdjango.db.models.query   c              3   6   K   | ]  }t        |        y wrH   )QuerySetMethodWrapper).0modelre   s     rD   	<genexpr>z7tree_name_to_values.<locals>.wrapper.<locals>.<genexpr>   s"      (B,1 )>a(G (Bs   r   BaseManagerzdjango.db.models.managerc              3   2   K   | ]  }t        |        y wrH   )ManagerWrapperr   rs     rD   r   z7tree_name_to_values.<locals>.wrapper.<locals>.<genexpr>   s     >!N1->   Fieldzdjango.db.models.fieldsc              3   2   K   | ]  }t        |        y wrH   )FieldWrapperr   s     rD   r   z7tree_name_to_values.<locals>.wrapper.<locals>.<genexpr>   s     <LO<r   )
rc   _FILTER_LIKE_METHODSget_qualified_namesparent_context	is_modulerJ   	get_valueget_genericslenr   )rC   context	tree_namero   qsgenericsre   r   s         @rD   r   z$tree_name_to_values.<locals>.wrapper   s?   ow	:??22  B((*	.PP,,668,,779=UU **,B!0H8})' (B5=a[(B  B BB"  __-'2C2C2E&&(,FF>v>>>__'G,=,=,?&&(,EE<V<<<rF   r   r   s   ` rD   tree_name_to_valuesr      s    0 NrF   c              #      K   t        | d      j                         D ];  }|j                         D ]&  }|j                  j	                  d      dk(  s#| ( = y w)NF)rP   T)include_module_names)r;   r<   r=   r>   r?   )r   rs   r[   rq   r   )r_   rq   rc   s      rD   _find_fieldsr      s]      %8??A ZZ\ 	Ezz--4-HUV
	s   AA	Ac                 B    t        | t        t        |                   gS )N)field_names)DjangoModelSignaturer   r   )r_   s    rD   _get_signaturesr      s     $|C7H2IJKKrF   c                       fd}|S )Nc                 T    |D ]  }t        |      st        |       c S   |       S rH   )r   r   )r_   r   r   r   s      rD   r   z)get_metaclass_signatures.<locals>.wrapper   s4    $ 	,I#I.&s++	, C##rF   r   r   s   ` rD   get_metaclass_signaturesr      s    $
 NrF   c                       e Zd Zd Zy)r   c                 Z    t        d | j                  j                  ||      D              S )Nc              3   2   K   | ]  }t        |        y wrH   )GenericManagerWrapperr   generics     rD   r   z/ManagerWrapper.py__getitem__.<locals>.<genexpr>   s      
 "'*
r   r   _wrapped_valuepy__getitem__r|   index_value_setcontextualized_nodes      rD   r   zManagerWrapper.py__getitem__   3     
..<<!46
 
 	
rF   Nr   r   r   r   r   rF   rD   r   r          
rF   r   c                       e Zd Zd Zd Zy)r   c                     |j                   j                  t        |h      f      j                  |j                        S rH   )class_valuewith_genericsr   
py__call__rX   r|   calling_instanceinstancer   s       rD   py__get__on_classz'GenericManagerWrapper.py__get__on_class   s9    ++99{m$&

*%00
1	2rF   c                 8    | j                   j                  |      S rH   )r   r   )r|   generics_tuples     rD   r   z#GenericManagerWrapper.with_generics   s    ""00@@rF   N)r   r   r   r   r   r   rF   rD   r   r      s    2
ArF   r   c                       e Zd Zd Zy)r   c                 Z    t        d | j                  j                  ||      D              S )Nc              3   2   K   | ]  }t        |        y wrH   )GenericFieldWrapperr   s     rD   r   z-FieldWrapper.py__getitem__.<locals>.<genexpr>   s      
  (
r   r   r   s      rD   r   zFieldWrapper.py__getitem__   r   rF   Nr   r   rF   rD   r   r      r   rF   r   c                       e Zd Zd Zy)r   c                     t        |h      S rH   )r   r   s       rD   r   z%GenericFieldWrapper.py__get__on_class   s     )*++rF   N)r   r   r   r   r   rF   rD   r   r      s    ,rF   r   c                   &     e Zd Z fdZddZ xZS )r   c                 2    t         |   |       || _        y rH   )rx   ry   _field_names)r|   rc   r   r}   s      rD   ry   zDjangoModelSignature.__init__  s    'rF   c                 R    | j                   D cg c]  }t        |       c}S c c}w rH   )r   DjangoParamName)r|   resolve_starsrq   s      rD   get_param_namesz$DjangoModelSignature.get_param_names	  s!    262C2CD$%DDDs   $)F)r   r   r   ry   r   r   r   s   @rD   r   r     s    (ErF   r   c                   *     e Zd Z fdZd Zd Z xZS )r   c                 \    t         |   |j                  |j                         || _        y rH   )rx   ry   r   r   _field_name)r|   rN   r}   s     rD   ry   zDjangoParamName.__init__  s&    22J4H4HI%rF   c                 "    t         j                  S rH   )r   KEYWORD_ONLYr   s    rD   get_kindzDjangoParamName.get_kind  s    %%%rF   c                 6    | j                   j                         S rH   )r   r[   r   s    rD   r[   zDjangoParamName.infer  s    %%''rF   )r   r   r   ry   r   r[   r   r   s   @rD   r   r     s    &&(rF   r   c                   $     e Zd Z fdZd Z xZS )r   c                 2    t         |   |       || _        y rH   rx   ry   
_model_clsr|   method	model_clsr}   s      rD   ry   zQuerySetMethodWrapper.__init__       #rF   c           	          t        | j                  j                  ||      D ch c]  }t        || j                         c}      S c c}w rH   )r   r   	py__get__QuerySetBoundMethodWrapperr   )r|   r   r   re   s       rD   r  zQuerySetMethodWrapper.py__get__  sM    "&"5"5"?"?+"VX 4AtG X Y 	Y Xs   A)r   r   r   ry   r  r   r   s   @rD   r   r     s    $YrF   r   c                   $     e Zd Z fdZd Z xZS )r  c                 2    t         |   |       || _        y rH   r   r   s      rD   ry   z#QuerySetBoundMethodWrapper.__init__$  r  rF   c                 ,    t        | j                        S rH   )r   r   r   s    rD   get_signaturesz)QuerySetBoundMethodWrapper.get_signatures(  s    t//rF   )r   r   r   ry   r	  r   r   s   @rD   r  r  #  s    $0rF   r  N)r   )6__doc__inspectr   typingr   jedir   jedi.inference.cacher   jedi.inference.base_valuer   r   r	   jedi.inference.filtersr
   r   jedi.inference.namesr   r   jedi.inference.compiled.valuer   jedi.inference.value.instancer   jedi.inference.value.klassr   jedi.inference.gradual.baser   jedi.inference.gradual.genericsr   jedi.inference.signaturer   rI   r   rE   rU   rf   rt   rv   rl   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r   rF   rD   <module>r     s      ? S S A ? ; 6 1 4 ? 6M} M 	
   - ]  / ? N * % .  %!" -#$ !%*=   !G "G/$    "8Nk N	.M
8L
\ 
A.
 A
< 
,,j ,E, E	(' 	(YL Y0 0rF   