
    f*                     P   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,        Zd- Z e	d.        Z!d/ Z" G d0 d1e      Z#dKd2Z$d3 Z%d4 Z&d5 Z'd6 Z(d7 Z)d8 Z*d9 Z+ G d: d;e
      Z, G d< d=ee      Z- G d> d?e
      Z. G d@ dAee      Z/ G dB dCe      Z0 G dD dEe      Z1 G dF dGe
      Z2 G dH dIe
      Z3yJ)Lz.
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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                         S )N)djangodbmodelsquery_utilsDeferredAttribute)import_modulepy__getattribute__execute_annotation)inference_states    N/var/www/cvtools/html/venv/lib/python3.12/site-packages/jedi/plugins/django.py_get_deferred_attributesrD   ,   s.    ((1,-.@.@.BC    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__KeyErrorrD   builtins_moduler?   r@   execute_with_values)rB   
field_namefield_tree_instanceis_instancemodule_nameattribute_namemodule	attributes           rC   _infer_scalar_fieldrT   3   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inferrI   get_safe_valueget_root_contextr@   is_class)	clsrN   argument_iteratorkeylazy_valuesvalueforeign_key_class_namerR   vs	            rC   _get_foreign_key_valuesre   E   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`)rB   rZ   rT   rI   rD   re   r   r3   _create_manager_forrL   r   dbgstring_name)r^   rM   rO   rB   resultrN   scalar_fieldnameis_many_to_manyvaluesrd   s              rC   _infer_fieldrs   W   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 rG   )super__init___cls_is_instance)selfr^   rp   rO   	__class__s       rC   rx   zDjangoModelName.__init__t   s    	'rE   c                 X    t        | j                  | j                  | j                        S rG   )rs   ry   _wrapped_namerz   r{   s    rC   rZ   zDjangoModelName.infery   s!    DIIt'9'94;L;LMMrE   )__name__
__module____qualname__rx   rZ   __classcell__r|   s   @rC   ru   ru   s   s    (
NrE   ru   c                     | j                   j                  d      j                  |      }|D ]M  }|j                         st	        t        | g      f      }t        ||      j                         D ]  }|c c S  O y )N)r:   r;   r<   manager)rB   r?   r@   is_class_mixinr   r   r   rA   )r^   manager_clsmanagersmgenerics_managercs         rC   rk   rk   }   s    ""00-%   2HcUO3EF!!%56IIK 
 rE   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)rO   include_metaclassesinclude_type_when_classobjects)	listget_filtersreversedrr   rm   ru   r   rB   r	   )r^   rO   filtersfilter_rp   dcts         rC   _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)rI   r\   )rb   s    rC   is_django_model_baser      s:    , M""$//15LLMrE   c                       fd}|S )Nc                 Z    |D ]  }t        |      st        | |      gc S   | ||      S rG   )r   r   )r^   metaclassesrO   	metaclassfuncs       rC   wrapperz&get_metaclass_filters.<locals>.wrapper   s;    $ 	<I#I.(k:;;	< Ck22rE    r   r   s   ` rC   get_metaclass_filtersr      s    3 NrE   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rG   )QuerySetMethodWrapper).0modelrd   s     rC   	<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rG   )ManagerWrapperr   rs     rC   r   z7tree_name_to_values.<locals>.wrapper.<locals>.<genexpr>   s     >!N1->   Fieldzdjango.db.models.fieldsc              3   2   K   | ]  }t        |        y wrG   )FieldWrapperr   s     rC   r   z7tree_name_to_values.<locals>.wrapper.<locals>.<genexpr>   s     <LO<r   )
rb   _FILTER_LIKE_METHODSget_qualified_namesparent_context	is_modulerI   	get_valueget_genericslenr   )rB   context	tree_namern   qsgenericsrd   r   s         @rC   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<<<rE   r   r   s   ` rC   tree_name_to_valuesr      s    0 NrE   c              #      K   t        | d      j                         D ];  }|j                         D ]&  }|j                  j	                  d      dk(  s#| ( = y w)NF)rO   T)include_module_names)r:   r;   r<   r=   r>   )r   rr   rZ   rp   r   )r^   rp   rb   s      rC   _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    rC   _get_signaturesr      s     $|C7H2IJKKrE   c                       fd}|S )Nc                 T    |D ]  }t        |      st        |       c S   |       S rG   )r   r   )r^   r   r   r   s      rC   r   z)get_metaclass_signatures.<locals>.wrapper   s4    $ 	,I#I.&s++	, C##rE   r   r   s   ` rC   get_metaclass_signaturesr      s    $
 NrE   c                       e Zd Zd Zy)r   c                 Z    t        d | j                  j                  ||      D              S )Nc              3   2   K   | ]  }t        |        y wrG   )GenericManagerWrapperr   generics     rC   r   z/ManagerWrapper.py__getitem__.<locals>.<genexpr>   s      
 "'*
r   r   _wrapped_valuepy__getitem__r{   index_value_setcontextualized_nodes      rC   r   zManagerWrapper.py__getitem__   3     
..<<!46
 
 	
rE   Nr   r   r   r   r   rE   rC   r   r          
rE   r   c                       e Zd Zd Zd Zy)r   c                     |j                   j                  t        |h      f      j                  |j                        S rG   )class_valuewith_genericsr   
py__call__rW   r{   calling_instanceinstancer   s       rC   py__get__on_classz'GenericManagerWrapper.py__get__on_class   s9    ++99{m$&

*%00
1	2rE   c                 8    | j                   j                  |      S rG   )r   r   )r{   generics_tuples     rC   r   z#GenericManagerWrapper.with_generics   s    ""00@@rE   N)r   r   r   r   r   r   rE   rC   r   r      s    2
ArE   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rG   )GenericFieldWrapperr   s     rC   r   z-FieldWrapper.py__getitem__.<locals>.<genexpr>   s      
  (
r   r   r   s      rC   r   zFieldWrapper.py__getitem__   r   rE   Nr   r   rE   rC   r   r      r   rE   r   c                       e Zd Zd Zy)r   c                     t        |h      S rG   )r   r   s       rC   r   z%GenericFieldWrapper.py__get__on_class   s     )*++rE   N)r   r   r   r   r   rE   rC   r   r      s    ,rE   r   c                   &     e Zd Z fdZddZ xZS )r   c                 2    t         |   |       || _        y rG   )rw   rx   _field_names)r{   rb   r   r|   s      rC   rx   zDjangoModelSignature.__init__  s    'rE   c                 R    | j                   D cg c]  }t        |       c}S c c}w rG   )r   DjangoParamName)r{   resolve_starsrp   s      rC   get_param_namesz$DjangoModelSignature.get_param_names  s!    262C2CD$%DDDs   $)F)r   r   r   rx   r   r   r   s   @rC   r   r     s    (ErE   r   c                   *     e Zd Z fdZd Zd Z xZS )r   c                 \    t         |   |j                  |j                         || _        y rG   )rw   rx   r   r   _field_name)r{   rM   r|   s     rC   rx   zDjangoParamName.__init__  s&    22J4H4HI%rE   c                 "    t         j                  S rG   )r   KEYWORD_ONLYr   s    rC   get_kindzDjangoParamName.get_kind  s    %%%rE   c                 6    | j                   j                         S rG   )r   rZ   r   s    rC   rZ   zDjangoParamName.infer  s    %%''rE   )r   r   r   rx   r   rZ   r   r   s   @rC   r   r     s    &&(rE   r   c                   $     e Zd Z fdZd Z xZS )r   c                 2    t         |   |       || _        y rG   rw   rx   
_model_clsr{   method	model_clsr|   s      rC   rx   zQuerySetMethodWrapper.__init__       #rE   c           	          t        | j                  j                  ||      D ch c]  }t        || j                         c}      S c c}w rG   )r   r   	py__get__QuerySetBoundMethodWrapperr   )r{   r   r   rd   s       rC   r  zQuerySetMethodWrapper.py__get__  sM    "&"5"5"?"?+"VX 4AtG X Y 	Y Xs   A)r   r   r   rx   r  r   r   s   @rC   r   r     s    $YrE   r   c                   $     e Zd Z fdZd Z xZS )r  c                 2    t         |   |       || _        y rG   r   r   s      rC   rx   z#QuerySetBoundMethodWrapper.__init__#  r  rE   c                 ,    t        | j                        S rG   )r   r   r   s    rC   get_signaturesz)QuerySetBoundMethodWrapper.get_signatures'  s    t//rE   )r   r   r   rx   r  r   r   s   @rC   r  r  "  s    $0rE   r  N)r   )4__doc__inspectr   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   rH   r   rD   rT   re   rs   ru   rk   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r   rE   rC   <module>r     s     ? S S A ? ; 6 1 4 ? 6M} M 	
   - ]  / ? N * % .  %!" -#$ !%*=   !C "C/$    "8Nk N	.M
8L
\ 
A.
 A
< 
,,j ,E, E	(' 	(YL Y0 0rE   