
    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%dMd4Z&d5 Z'd6 Z(d7 Z)d8 Z*d9 Z+d: Z,d; Z- G d< d=e          Z. G d> d?ee          Z/ G d@ dAe          Z0 G dB dCee          Z1 G dD dEe          Z2 G dF dGe          Z3 G dH dIe          Z4 G dJ dKe          Z5dLS )Nz.
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                 x    |                      d                              d                              d           S )N)djangodbmodelsquery_utilsDeferredAttribute)import_modulepy__getattribute__execute_annotation)inference_states    Z/home/ubuntu/.hermes/hermes-agent/venv/lib/python3.11/site-packages/jedi/plugins/django.py_get_deferred_attributesrE   -   s;    ((1 ,--.@.@.F.FG    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__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.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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4  /:AACC 1<@@[;;2$**,,    ##%%..-2-A-A-C-C* 1133F#667MNN $ $::<< $"#GGG$ ^^%%  KKK    ;22   rF   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).0re   s     rD   
<listcomp>z _infer_field.<locals>.<listcomp>i   s1     . . .AB'+;<<. . .rF   z1django plugin: fail to infer `%s` from class `%s`)rC   r[   rU   rJ   rE   rf   r   r4   rM   r   dbgstring_name)
r_   rN   rP   rC   resultrO   scalar_fieldnameis_many_to_manyvaluess
             rD   _infer_fieldrw   X   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MrF   c                   $     e Zd Z fdZd Z xZS )DjangoModelNamec                 f    t                                          |           || _        || _        d S rH   )super__init___cls_is_instance)selfr_   rt   rP   	__class__s       rD   r|   zDjangoModelName.__init__u   s0    	'rF   c                 B    t          | j        | j        | j                  S rH   )rw   r}   _wrapped_namer~   r   s    rD   r[   zDjangoModelName.inferz   s    DIt'94;LMMMrF   )__name__
__module____qualname__r|   r[   __classcell__r   s   @rD   ry   ry   t   sN        ( ( ( ( (
N N N N N N NrF   ry   BaseManagerc                 $   | j                             d                              |          }|D ]_}|                                rIt	          t          | g          f          }t          ||                              d           D ]}|c c S `d S )N)r;   r<   r=   manager)rC   r@   rA   is_class_mixinr   r   r   rB   )r_   manager_clsmanagersmgenerics_managercs         rD   rm   rm   ~   s    "00- %%     	2HcUOO3EFF!!%566II$OO  4rF   c                      t                               dd                    } fdt          |          D             }rt           j        d          |d<   t          |          S )NF)rP   include_metaclassesinclude_type_when_classc           	      l    i | ]0}|                                 D ]}|j        t          |          1S  )rv   rq   ry   )rn   filter_rt   r_   rP   s      rD   
<dictcomp>z$_new_dict_filter.<locals>.<dictcomp>   s[       NN$$   	/#t[AA   rF   objects)listget_filtersreversedr   rC   r
   )r_   rP   filtersdcts   ``  rD   _new_dict_filterr      s    3??! % # ' '  G
    ((  C
  K +3+>	JJIc??rF   c                     |                                  dk    o)|                                                                  dk    S )N	ModelBasezdjango.db.models.base)rJ   r]   )rc   s    rD   is_django_model_baser      sC    , M""$$//115LLMrF   c                       fd}|S )Nc                 l    |D ]$}t          |          rt          | |          gc S % | ||          S rH   )r   r   )r_   metaclassesrP   	metaclassfuncs       rD   wrapperz&get_metaclass_filters.<locals>.wrapper   sV    $ 	< 	<I#I.. <(k::;;;;< tCk222rF   r   r   r   s   ` rD   get_metaclass_filtersr      s#    3 3 3 3 3 NrF   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 rH   )QuerySetMethodWrapper)rn   modelre   s     rD   	<genexpr>z7tree_name_to_values.<locals>.wrapper.<locals>.<genexpr>   sI       (B (B,1 )>a(G(G (B (B (B (B (B (BrF   r   r   zdjango.db.models.managerc              3   4   K   | ]}t          |          V  d S rH   )ManagerWrapperrn   rs     rD   r   z7tree_name_to_values.<locals>.wrapper.<locals>.<genexpr>   s*      >>!N1-->>>>>>rF   Fieldzdjango.db.models.fieldsc              3   4   K   | ]}t          |          V  d S rH   )FieldWrapperr   s     rD   r   z7tree_name_to_values.<locals>.wrapper.<locals>.<genexpr>   s(      <<LOO<<<<<<rF   )
rc   _FILTER_LIKE_METHODSget_qualified_namesparent_context	is_modulerJ   	get_valueget_genericslenr   )rC   context	tree_namerr   qsgenericsre   r   s         @rD   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<<<<<<rF   r   r   s   ` rD   tree_name_to_valuesr      s#        0 NrF   c              #      K   t          | d                                          D ]<}|                                D ]%}|j                            d          dk    r|V  &=d S )NF)rP   T)include_module_names)r;   r<   r=   r>   r?   )r   rv   r[   rt   r   )r_   rt   rc   s      rD   _find_fieldsr      s       %888??AA  ZZ\\ 	 	Ez--4-HHUV V


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

*%0
1
1	2rF   c                 6    | 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      s7        2 2 2
A A A A ArF   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 rH   )GenericFieldWrapperr   s     rD   r   z-FieldWrapper.py__getitem__.<locals>.<genexpr>   s>       
 
  ((
 
 
 
 
 
rF   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dS )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                 X    t                                          |           || _        d S rH   )r{   r|   _field_names)r   rc   r   r   s      rD   r|   zDjangoModelSignature.__init__  s)    'rF   Fc                 $    d | j         D             S )Nc                 ,    g | ]}t          |          S r   )DjangoParamName)rn   rt   s     rD   ro   z8DjangoModelSignature.get_param_names.<locals>.<listcomp>
  s     DDD$%%DDDrF   )r   )r   resolve_starss     rD   get_param_namesz$DjangoModelSignature.get_param_names	  s    DD$2CDDDDrF   )F)r   r   r   r|   r   r   r   s   @rD   r   r     sT        ( ( ( ( (E E E E E E E ErF   r   c                   *     e Zd Z fdZd Zd Z xZS )r   c                 n    t                                          |j        |j                   || _        d S rH   )r{   r|   r   r   _field_name)r   rN   r   s     rD   r|   zDjangoParamName.__init__  s1    2J4HIII%rF   c                     t           j        S rH   )r   KEYWORD_ONLYr   s    rD   get_kindzDjangoParamName.get_kind  s    %%rF   c                 4    | j                                         S rH   )r   r[   r   s    rD   r[   zDjangoParamName.infer  s    %%'''rF   )r   r   r   r|   r   r[   r   r   s   @rD   r   r     sV        & & & & && & &( ( ( ( ( ( (rF   r   c                   $     e Zd Z fdZd Z xZS )r   c                 X    t                                          |           || _        d S rH   r{   r|   
_model_clsr   method	model_clsr   s      rD   r|   zQuerySetMethodWrapper.__init__  &       #rF   c                 l     t           fd j                            ||          D                       S )Nc                 :    h | ]}t          |j                  S r   )QuerySetBoundMethodWrapperr  )rn   re   r   s     rD   	<setcomp>z2QuerySetMethodWrapper.py__get__.<locals>.<setcomp>  s;     X X X 4AtGG X X XrF   )r   r   	py__get__)r   r   r   s   `  rD   r  zQuerySetMethodWrapper.py__get__  sX     X X X X"&"5"?"?+"V"VX X X Y Y 	YrF   )r   r   r   r|   r  r   r   s   @rD   r   r     sN        $ $ $ $ $Y Y Y Y Y Y YrF   r   c                   $     e Zd Z fdZd Z xZS )r	  c                 X    t                                          |           || _        d S rH   r  r  s      rD   r|   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   r|   r  r   r   s   @rD   r	  r	  #  sG        $ $ $ $ $0 0 0 0 0 0 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   rw   ry   rm   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r	  r   rF   rD   <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 * % .  %!" -#$ !% *=   !!G G "!G/ / /$      "  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 0rF   