
    Mh*                        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#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
          Z. G dA dBee          Z/ G dC dDe          Z0 G dE dFe          Z1 G dG dHe
          Z2 G dI dJe
          Z3dKS )Mz.
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                 v    |                      d                              d                                          S )N)djangodbmodelsquery_utilsDeferredAttribute)import_modulepy__getattribute__execute_annotation)inference_states    S/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/jedi/plugins/django.py_get_deferred_attributesrD   ,   s9    ((1 ,--.@.@.B.BC    c                 ,   	 t           |                                         \  }}n# t          $ r Y d S w xY w|st          |           S || j        }n|                     |f          }|                    |          D ]}|                                c S d S 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.N&O#^^   tt  9'888 0 ..~>>..~>> / /	,,...../ /s   "% 
33c              #     K   t          |t                    r|j                                        }t	          |d          \  }}|||                                D ]}|                                dk    rY|                                }|                                 }|	                    |          D ]}|
                                r|V  s|
                                r|V  d S d S d S d S )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4  /:AACC 1<@@[;;2$**,,    ##%%..-2-A-A-C-C* 1133F#667MNN $ $::<< $"#GGG$ ^^%%  KKK    ;22   rE   c                    | j         }|                                }|D ]}t          ||||          }||c S |                                }|dk    }|dv s|rd|st	          |          c S t          | |          }	|r)t          t          d d |	D                                 c S |	                                c S t          j
        d|j        |                                            |S )NManyToManyField)
ForeignKeyOneToOneFieldc                 .    g | ]}t          |d           S )RelatedManager)_create_manager_for).0rd   s     rC   
<listcomp>z _infer_field.<locals>.<listcomp>h   s1     . . .AB'+;<<. . .rE   z1django plugin: fail to infer `%s` from class `%s`)rB   rZ   rT   rI   rD   re   r   r3   rL   r   dbgstring_name)
r^   rM   rO   rB   resultrN   scalar_fieldnameis_many_to_manyvaluess
             rC   _infer_fieldrv   W   sO   )OF% 4 4*Z)<kK K#"--//"33222o2 A/@@@@@,S2EFFF 4t . .FL. . . ! !      1133333 3 
IA$cnn&6&68 8 8MrE   c                   $     e Zd Z fdZd Z xZS )DjangoModelNamec                 f    t                                          |           || _        || _        d S rG   )super__init___cls_is_instance)selfr^   rs   rO   	__class__s       rC   r{   zDjangoModelName.__init__t   s0    	'rE   c                 B    t          | j        | j        | j                  S rG   )rv   r|   _wrapped_namer}   r~   s    rC   rZ   zDjangoModelName.infery   s    DIt'94;LMMMrE   )__name__
__module____qualname__r{   rZ   __classcell__r   s   @rC   rx   rx   s   sN        ( ( ( ( (
N N N N N N NrE   rx   BaseManagerc                 "   | j                             d                              |          }|D ]^}|                                rHt	          t          | g          f          }t          ||                                          D ]}|c c S _d S )N)r:   r;   r<   manager)rB   r?   r@   is_class_mixinr   r   r   rA   )r^   manager_clsmanagersmgenerics_managercs         rC   rl   rl   }   s    "00- %%     	2HcUOO3EFF!!%566IIKK  4rE   c                      t                               dd                    } fdt          |          D             }rt           j        d          |d<   t          |          S )NF)rO   include_metaclassesinclude_type_when_classc           	      l    i | ]0}|                                 D ]}|j        t          |          1S  )ru   rp   rx   )rm   filter_rs   r^   rO   s      rC   
<dictcomp>z$_new_dict_filter.<locals>.<dictcomp>   s[       NN$$   	/#t[AA   rE   objects)listget_filtersreversedr   rB   r	   )r^   rO   filtersdcts   ``  rC   _new_dict_filterr      s    3??! % # ' '  G
    ((  C
  K +3+>	JJIc??rE   c                     |                                  dk    o)|                                                                  dk    S )N	ModelBasezdjango.db.models.base)rI   r\   )rb   s    rC   is_django_model_baser      sC    , M""$$//115LLMrE   c                       fd}|S )Nc                 l    |D ]$}t          |          rt          | |          gc S % | ||          S rG   )r   r   )r^   metaclassesrO   	metaclassfuncs       rC   wrapperz&get_metaclass_filters.<locals>.wrapper   sV    $ 	< 	<I#I.. <(k::;;;;< tCk222rE   r   r   r   s   ` rC   get_metaclass_filtersr      s#    3 3 3 3 3 NrE   c                       fd}|S )Nc                     | ||          }|j         t          v r|D ]                                d|j         fk    rj                                        r{j                                        dk    r^|                                }|                                }t          |          dk    r#t          fd|d         D                       c S n|j         dk    rE|                                r1|                                dk    rt          d |D                       S |j         d	k    rE|                                r1|                                d
k    rt          d |D                       S |S )N_BaseQuerySetzdjango.db.models.query   c              3   8   K   | ]}t          |          V  d S rG   )QuerySetMethodWrapper)rm   modelrd   s     rC   	<genexpr>z7tree_name_to_values.<locals>.wrapper.<locals>.<genexpr>   sI       (B (B,1 )>a(G(G (B (B (B (B (B (BrE   r   r   zdjango.db.models.managerc              3   4   K   | ]}t          |          V  d S rG   )ManagerWrapperrm   rs     rC   r   z7tree_name_to_values.<locals>.wrapper.<locals>.<genexpr>   s*      >>!N1-->>>>>>rE   Fieldzdjango.db.models.fieldsc              3   4   K   | ]}t          |          V  d S rG   )FieldWrapperr   s     rC   r   z7tree_name_to_values.<locals>.wrapper.<locals>.<genexpr>   s(      <<LOO<<<<<<rE   )
rb   _FILTER_LIKE_METHODSget_qualified_namesparent_context	is_modulerI   	get_valueget_genericslenr   )rB   context	tree_namerq   qsgenericsrd   r   s         @rC   r   z$tree_name_to_values.<locals>.wrapper   s   ow	::?222  B B((**	.PPP,6688 Q,7799=UUU **,,B!00H8}}))' (B (B (B (B5=a[(B (B (B  B  B B B BB _--'2C2C2E2E-&&((,FFF>>v>>>>>>_''G,=,=,?,?'&&((,EEE<<V<<<<<<rE   r   r   s   ` rC   tree_name_to_valuesr      s#        0 NrE   c              #      K   t          | d                                          D ]<}|                                D ]%}|j                            d          dk    r|V  &=d S )NF)rO   T)include_module_names)r:   r;   r<   r=   r>   )r   ru   rZ   rs   r   )r^   rs   rb   s      rC   _find_fieldsr      s       %888??AA  ZZ\\ 	 	Ez--4-HHUV V


	 rE   c                 Z    t          | t          t          |                               gS )N)field_names)DjangoModelSignaturer   r   )r^   s    rC   _get_signaturesr      s(     $|C7H7H2I2IJJJKKrE   c                       fd}|S )Nc                 f    |D ]"}t          |          rt          |           c S # | |          S rG   )r   r   )r^   r   r   r   s      rC   r   z)get_metaclass_signatures.<locals>.wrapper   sM    $ 	, 	,I#I.. ,&s+++++,tC###rE   r   r   s   ` rC   get_metaclass_signaturesr      s#    $ $ $ $ $
 NrE   c                       e Zd Zd ZdS )r   c                 f    t          d | j                            ||          D                       S )Nc              3   4   K   | ]}t          |          V  d S rG   )GenericManagerWrapperrm   generics     rC   r   z/ManagerWrapper.py__getitem__.<locals>.<genexpr>   s>       
 
 "'**
 
 
 
 
 
rE   r   _wrapped_valuepy__getitem__r~   index_value_setcontextualized_nodes      rC   r   zManagerWrapper.py__getitem__   I     
 
.<<!46 6
 
 
 
 
 	
rE   Nr   r   r   r   r   rE   rC   r   r      #        
 
 
 
 
rE   r   c                       e Zd Zd Zd ZdS )r   c                     |j                             t          |h          f                              |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   s>    +99{m$$&
 

*%0
1
1	2rE   c                 6    | 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      s7        2 2 2
A A A A ArE   r   c                       e Zd Zd ZdS )r   c                 f    t          d | j                            ||          D                       S )Nc              3   4   K   | ]}t          |          V  d S rG   )GenericFieldWrapperr   s     rC   r   z-FieldWrapper.py__getitem__.<locals>.<genexpr>   s>       
 
  ((
 
 
 
 
 
rE   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dS )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                 X    t                                          |           || _        d S rG   )rz   r{   _field_names)r~   rb   r   r   s      rC   r{   zDjangoModelSignature.__init__  s)    'rE   Fc                 $    d | j         D             S )Nc                 ,    g | ]}t          |          S r   )DjangoParamName)rm   rs   s     rC   rn   z8DjangoModelSignature.get_param_names.<locals>.<listcomp>	  s     DDD$%%DDDrE   )r   )r~   resolve_starss     rC   get_param_namesz$DjangoModelSignature.get_param_names  s    DD$2CDDDDrE   )F)r   r   r   r{   r   r   r   s   @rC   r   r     sT        ( ( ( ( (E E E E E E E ErE   r   c                   *     e Zd Z fdZd Zd Z xZS )r   c                 n    t                                          |j        |j                   || _        d S rG   )rz   r{   r   r   _field_name)r~   rM   r   s     rC   r{   zDjangoParamName.__init__  s1    2J4HIII%rE   c                     t           j        S rG   )r   KEYWORD_ONLYr   s    rC   get_kindzDjangoParamName.get_kind  s    %%rE   c                 4    | j                                         S rG   )r   rZ   r   s    rC   rZ   zDjangoParamName.infer  s    %%'''rE   )r   r   r   r{   r   rZ   r   r   s   @rC   r   r     sV        & & & & && & &( ( ( ( ( ( (rE   r   c                   $     e Zd Z fdZd Z xZS )r   c                 X    t                                          |           || _        d S rG   rz   r{   
_model_clsr~   method	model_clsr   s      rC   r{   zQuerySetMethodWrapper.__init__  &       #rE   c                 l     t           fd j                            ||          D                       S )Nc                 :    h | ]}t          |j                  S r   )QuerySetBoundMethodWrapperr  )rm   rd   r~   s     rC   	<setcomp>z2QuerySetMethodWrapper.py__get__.<locals>.<setcomp>  s;     X X X 4AtGG X X XrE   )r   r   	py__get__)r~   r   r   s   `  rC   r
  zQuerySetMethodWrapper.py__get__  sX     X X X X"&"5"?"?+"V"VX X X Y Y 	YrE   )r   r   r   r{   r
  r   r   s   @rC   r   r     sN        $ $ $ $ $Y Y Y Y Y Y YrE   r   c                   $     e Zd Z fdZd Z xZS )r  c                 X    t                                          |           || _        d S rG   r   r  s      rC   r{   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   r{   r  r   r   s   @rC   r  r  "  sG        $ $ $ $ $0 0 0 0 0 0 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   rv   rx   rl   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r   rE   rC   <module>r     s                ? ? ? ? ? ? S S S S S S S S S S A A A A A A A A ? ? ? ? ? ? ? ? ; ; ; ; ; ; 6 6 6 6 6 6 1 1 1 1 1 1 4 4 4 4 4 4 ? ? ? ? ? ? 6 6 6 6 6 6M} M 	
   - ]  / ? N * % .  %!" -#$ !% *=   !!C C "!C/ / /$      "  8N N N N Nk N N N	 	 	 	  .M M M
    8  L L L  
 
 
 
 
\ 
 
 
A A A A A.
 A A A
 
 
 
 
< 
 
 
, , , , ,,j , , ,E E E E E, E E E	( 	( 	( 	( 	(' 	( 	( 	(Y Y Y Y YL Y Y Y0 0 0 0 0 0 0 0 0 0rE   