o
    B]0                     @   s   d dl Z d dlmZmZ d dlmZ d dlmZ dgZe j	d  dkr1d dl
Z
e
jefZe
jefZnefZefZG dd deZdS )    N)OrderedDictOidOrderedDict)error)debugMibViewController   c                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	d-ddZ
d-ddZd-ddZd-ddZd-ddZd-ddZd-ddZd-ddZd-d d!Zd-d"d#Zd-d$d%Zd-d&d'Zd-d(d)Zd-d*d+Zd,S ).r   c                 C   s   || _ d| _t | _d S N)
mibBuilderlastBuildIdr   !_MibViewController__mibSymbolsIdx)selfr
    r   1/usr/lib/python3/dist-packages/pysnmp/smi/view.py__init__   s   zMibViewController.__init__c              	   C   s$  | j | jj kr	d S tjtj@ otd | jdd\}| j  | jfdd}t| jj	
 }|j|d dg| D ]}t i i t i d | j|< }|sQ|}q;| jj	|  D ]\}}|| jjkrdqYt|tr||d	 v r}td
|||d	 | f ||d	 |< ||d	 |< qYt|trt||rqY||d v rtd|||d | f |j|d |< |j|d |< ||d |j< ||d |j< |f|d |j< |f|d |j< qYtd||f q;| jd d }	| jd d }
d}d}|	
 D ]q}t|t| }|dkr|r|dkr|	| }nE||| d 7 }n;d}n8|dk rWd}t|}|d }|rW|d | }||	v rP|	| }||d krO|||d 7 }n|d8 }|s1||	|  |	|< ||
|	| < |}q| j D ]}|d 
 D ]}|	| |d |< ||d |	| < quqm| jj | _ d S )NzindexMib: re-indexing MIB viewz
SNMPv2-SMIMibScalarInstancec                 S   s8   |j |j|  v r|j|  |j  }| }|r|d S dS )Nr   z1970-01-01 00:00)moduleID
mibSymbolsZgetRevisions)xbmrr   r   r   Z	__sortFun5   s   z-MibViewController.indexMib.<locals>.__sortFun)key )oidToLabelIdxlabelToOidIdxvarToNameIdxtypeToModIdxoidToModIdxr   z!Duplicate SMI type %s::%s, has %sr   z$Duplicate MIB variable %s::%s has %sr   r   zUnexpected object %s::%sr   r   r      r	   )r   r
   r   loggerflagMIBZimportSymbolsr   clearlistr   keyssortr   r   itemsr   
isinstance
classTypesr   SmiErrorinstanceTypesnamelenvalues)r   r   Z_MibViewController__sortFunmodNamesmodNamemibModZ
globMibModnvr   r   ZprevOidZ	baseLabelr   ZkeydiffZkeyLenikoidr   r   r   indexMib    s   
		








	zMibViewController.indexMibc                 C   s,   |    | j }|r|| S td|  )NzNo modules loaded at %s)r6   r   r$   r   r)   )r   indexr.   r   r   r   getOrderedModuleName   s
   
z&MibViewController.getOrderedModuleNamec                 C   
   |  dS Nr   r8   r   r   r   r   getFirstModuleName      
z$MibViewController.getFirstModuleNamec                 C   r9   r   r;   r<   r   r   r   getLastModuleName   r>   z#MibViewController.getLastModuleNamec                 C   s8   |    z| j|W S  ty   td|| f w )NzNo module next to %s at %s)r6   r   nextKeyKeyErrorr   r)   r   r/   r   r   r   getNextModuleName   s   
z#MibViewController.getNextModuleNamec           	      C   s   |s||dfS ||v r|| |dfS ||v r||| dfS t |dk r(||dfS | |dd ||\}}}||dd  }|tdd |D  }||v rT|| |dfS || }||v rc||| dfS |||fS )z-getOidLabel(nodeName) -> (oid, label, suffix)r   r   Nr	   c                 S   s   g | ]}t |qS r   str).0r   r   r   r   
<listcomp>   s    z3MibViewController.__getOidLabel.<locals>.<listcomp>)r,   _MibViewController__getOidLabeltuple)	r   nodeNamer   r   r5   labelsuffixZresLabelZresOidr   r   r   Z__getOidLabel   s&   



zMibViewController.__getOidLabelr   c                 C   s   |    || jv r| j| }n	td|| f | ||d |d \}}}||kr5tjd||| f dtjtj@ oKtd||||f  |||fS  |||fS )NNo module %s at %sr   r   z$Can't resolve node name %s::%s at %srD   z)getNodeNameByOid: resolved %s:%s -> %s.%s)	r6   r   r   r)   rH   NoSuchObjectErrorr   r    r!   )r   rJ   r/   r0   r5   rK   rL   r   r   r   getNodeNameByOid   s&   



z"MibViewController.getNodeNameByOidc                 C   s   |    || jv r| j| }n	td|| f ||d v r%|d | }ntjd||| f dtjtj@ oFtd|||f  | ||S  | ||S )NrM   r   zNo such symbol %s::%s at %srD   z'getNodeNameByDesc: resolved %s:%s -> %s)	r6   r   r   r)   rN   r   r    r!   rO   )r   rJ   r/   r0   r5   r   r   r   getNodeNameByDesc   s   
z#MibViewController.getNodeNameByDescc              	   C   sV   z|  ||W S  tjy*   | |d |\}}}|  || |dd   | Y S w )Nr   r   )rO   r   rN   rP   r   rJ   r/   r5   rK   rL   r   r   r   getNodeName   s    zMibViewController.getNodeNamec                 C   s   |    || jv r| j| }n	td|| f |d s&tjd|| f dz|d  | \}}W n tyD   tjd||| f dw ||dfS )NrM   r   z#No variables at MIB module %s at %srD   z/No symbol at position %s in MIB module %s at %sr   )r6   r   r   r)   rN   r&   rA   )r   r7   r/   r0   r5   rK   r   r   r   getOrderedNodeName   s    


z$MibViewController.getOrderedNodeNamec                 C      |  d|S r:   rS   rB   r   r   r   getFirstNodeName     z"MibViewController.getFirstNodeNamec                 C   rT   r   rU   rB   r   r   r   getLastNodeName
  rW   z!MibViewController.getLastNodeNamec                 C   sZ   |  ||\}}}z|  | j| d || |W S  ty,   tjd||| f dw )Nr   zNo name next to %s::%s at %srD   )rR   r   r@   rA   r   rN   rQ   r   r   r   getNextNodeName  s   z!MibViewController.getNextNodeNamec                 C   sZ   |  ||\}}}t|dk rtjd||| f d|d d |d d |dd  | fS )Nr   zNo parent name for %s::%s at %srD   r	   )rR   r,   r   rN   rQ   r   r   r   getParentNodeName  s   &z#MibViewController.getParentNodeNamec                 C   s.   |  ||\}}}| jd d | |d |fS )Nr   r   r	   )rR   r   rQ   r   r   r   getNodeLocation!  s   z!MibViewController.getNodeLocationc                 C   sf   |    || jv r| j| }n	td|| f ||d v r(|d | }||fS tjd||| f d)NrM   r   zNo such type %s::%s at %srD   )r6   r   r   r)   rN   )r   typeNamer/   r0   r   r   r   r   getTypeName'  s   

zMibViewController.getTypeNamec                 C   sl   |    || jv r| j| }n	td|| f |d s&tjd|| f d|d  | }|d | |fS )NrM   r   zNo types at MIB module %s at %srD   )r6   r   r   r)   rN   r$   )r   r7   r/   r0   tr   r   r   getOrderedTypeName7  s   

z$MibViewController.getOrderedTypeNamec                 C   rT   r:   r_   rB   r   r   r   getFirstTypeNameD  rW   z"MibViewController.getFirstTypeNamec                 C   rT   r   r`   rB   r   r   r   getLastTypeNameG  rW   z!MibViewController.getLastTypeNamec                 C   sL   |  ||\}}z| j| d |W S  ty%   tjd||| f dw )Nr   zNo type next to %s::%s at %srD   )r]   r   r@   rA   r   rN   )r   r\   r/   r   r^   r   r   r   getNextTypeJ  s   zMibViewController.getNextTypeN)r   )__name__
__module____qualname__r   r6   r8   r=   r?   rC   rH   rO   rP   rR   rS   rV   rX   rY   rZ   r[   r]   r_   ra   rb   rc   r   r   r   r   r      s,    y








	



)sysZpysnmp.smi.indicesr   r   Z
pysnmp.smir   Zpysnmpr   __all__version_infotypesZ	ClassTypetyper(   ZInstanceTypeobjectr*   r   r   r   r   r   <module>   s   
