a
    lcS                     @   s   d Z ddlmZ ddlmZ ddlmZ dedfdedfd	e	d
fde
dfde
dfde
dfde
dfde
dfde
dfde
dfde
dfde
dfde
dfdedfdedfdZG dd dZG dd deZdedfddZdd  Zd!d" Zd%d#d$ZdS )&z
Module for statical analysis.
    )tree)debug)	is_string   zPotential AttributeError.   zPotential NameError.   zPotential ImportError.   N            	   
                  )attribute-errorz
name-errorzimport-errorztype-error-too-many-argumentsztype-error-too-few-argumentsztype-error-keyword-argumentztype-error-multiple-valuesztype-error-star-starztype-error-starztype-error-operationztype-error-not-iterableztype-error-isinstanceztype-error-not-subscriptablezvalue-error-too-many-valueszvalue-error-too-few-valuesc                   @   sb   e Zd ZdddZedd Zedd Zedd	 Zd
d Zdd Z	dd Z
dd Zdd ZdS )ErrorNc                 C   s2   || _ || _|| _|d u r(t| j d }|| _d S )Nr   )path
_start_posnameCODESmessage)selfr   module_path	start_posr    r   S/var/www/html/django/DPS/env/lib/python3.9/site-packages/jedi/inference/analysis.py__init__   s    zError.__init__c                 C   s
   | j d S Nr   r   r   r   r   r   line&   s    z
Error.linec                 C   s
   | j d S )Nr   r"   r#   r   r   r   column*   s    zError.columnc                 C   s"   | j jd }|tt| j d  S r!   )	__class____name__strr   r   )r   firstr   r   r   code.   s    z
Error.codec                 C   s   d| j | j| j| j| jf S )Nz%s:%s:%s: %s %s)r   r$   r%   r*   r   r#   r   r   r   __str__4   s    zError.__str__c                 C   s$   | j |j ko"| j|jko"| j|jkS N)r   r   r   r   otherr   r   r   __eq__8   s    
zError.__eq__c                 C   s   |  | S r,   )r/   r-   r   r   r   __ne__<   s    zError.__ne__c                 C   s   t | j| j| jfS r,   )hashr   r   r   r#   r   r   r   __hash__?   s    zError.__hash__c                 C   s&   d| j j| j| j| jd | jd f S )Nz<%s %s: %s@%s,%s>r   r   )r&   r'   r   r   r   r#   r   r   r   __repr__B   s    zError.__repr__)N)r'   
__module____qualname__r    propertyr$   r%   r*   r+   r/   r0   r2   r3   r   r   r   r   r      s   



r   c                   @   s   e Zd ZdS )WarningN)r'   r4   r5   r   r   r   r   r7   H   s   r7   c           
      C   sb   t | d }t| |||rd S |  }| }||||j|}	tjt|	dd | jj	
|	 |	S )Nr   F)format)r   _check_for_exception_catchget_root_contextZ
py__file__r   r   warningr(   inference_stateZanalysisappend)
node_contextZ
error_namenoder   typpayload	exceptionZmodule_contextr   Zissue_instancer   r   r   addL   s    rC   c                    sV   |   }|j  du rdS z  d }W n ty>   Y dS 0 t fdd|D S )zU
    Check if there's any setattr method inside an instance. If so, return True.
    NFsetattrc                 3   sF   | ]>} j |j   k o jk n  o<|jjd ko:|jj|k V  qdS )ZfuncdefN)r   end_posparenttyper   ).0nr?   r   r   	<genexpr>i   s   z%_check_for_setattr.<locals>.<genexpr>)r:   Z	tree_nodeZget_used_namesKeyErrorany)instancemoduleZ
stmt_namesr   rJ   r   _check_for_setattrZ   s    rP   c                 C   sJ   d||f }t }| r,| s,t|r,t}||f}t| d|||| d S )Nz'AttributeError: %s has no attribute %s.r   )r   Zis_instanceZis_compiledrP   r7   rC   )Zname_contextZlookup_valuer   r   r@   rA   r   r   r   add_attribute_erroro   s    rQ   c                    s   dd   fdd}fdd}}|durt |tjtjfst |tjr|jdkrj|||rjd	S |tkr|jd
v r||jd |jd rd	S |j}q,dS )a  
    Checks if a jedi object (e.g. `Statement`) sits inside a try/catch and
    doesn't count as an error (if equal to `exception`).
    Also checks `hasattr` for AttributeErrors and uses the `payload` to compare
    it.
    Returns True if the exception was catched.
    c                 S   s<   |   sdS | D ]"}|  |jkr| j r dS qdS )NFT)Zis_classmroZ
py__name__r'   Zparent_contextZis_builtins_module)clsrB   Z
python_clsr   r   r   check_match   s    z/_check_for_exception_catch.<locals>.check_matchc                    s   t | j}|D ]>}t| t|}|dkr|jj  k rD|jksn  dS q|  D ]}|d u rh dS |}|D ]l}ddlm} t	||j
r|jdkr| D ](}	|	 D ]}
 |
|r    dS qqqv ||rv  dS qvqVd S )NtryFTr   )iterabletuple)iterchildrennextr   rE   Zget_except_clause_testsZ
infer_nodeZjedi.inference.valuerV   
isinstanceSequenceZ
array_typeZ
py__iter__infer)objrB   iteratorZbranch_typesuiter?   Zexcept_classesrS   rV   
lazy_valuer@   )rT   	jedi_namer>   r   r   check_try_for_except   s2    



z8_check_for_exception_catch.<locals>.check_try_for_exceptc                    sF  z(|j  j   kr|jk s$n J | jdv s2J | jd }|jdkrP|jdksTJ | jd }|jdkslJ |jd }|jdksJ ddlm} |j|}t|	 }t
|d	ksJ |d \}}	t|	 }
t
|
dkrt|
d sJ |
d  d jks
J |d \}}	|	 }d |v W S  ty@   Y d
S 0 d S )N)powerZ	atom_exprr   r   hasattrr   trailerarglist)TreeArgumentsr   F)r   rE   rG   rY   valueZjedi.inference.argumentsrh   r<   listunpacklenr]   r   Zget_safe_valueAssertionError)r?   r`   baserf   rg   rh   argsZunpacked_argskeyra   namesobjects)rb   r>   rA   r   r   check_hasattr   s,     


z1_check_for_exception_catch.<locals>.check_hasattrNZtry_stmtT)Zif_stmtZ
while_stmtr   r   F)	r[   r   FunctionClassZFlowrG   AttributeErrorrY   rF   )r>   rb   rB   rA   rc   rs   r^   r   )rT   rb   r>   rA   r   r9   ~   s    
r9   )N)__doc__Zparso.pythonr   Zjedir   Zjedi.inference.helpersr   rv   	NameErrorImportError	TypeError
ValueErrorr   r   r7   rC   rP   rQ   r9   r   r   r   r   <module>   s2   +