o
    B]                     @   s  d dl Z d dlZd dlmZ d dlmZmZ d dlmZ d dl	m
Z
mZ d dlmZ d dlmZ edd	d
\ZZedddddd\ZZZZZejZejZejZejZejZejZejZej Z ej!Z!ej"Z"G dd deZ#G dd de$Z%G dd de%Z&G dd de%Z'G dd de%Z(G dd de%Z)G dd de%Z*G dd  d e*Z+G d!d" d"e+Z,G d#d$ d$e+Z-G d%d& d&e,Z.G d'd( d(e+Z/G d)d* d*e+Z0e'd+Z1e+d,2d-Z3e+d.Z4e+d/2d0Z5e)e4j6d1 Z7e)e7j6d2 Z8e)e8j6d. Z9e)e9j6d. Z:e)e9j6d/ Z;e)e;j6d. 2d3Z<e)e<j6d4 Z=e)e9j6d1 Z>e)e9j6d5 Z?e)e?j6d. Z@e)e9j6d6 ZAe)e9j6d2 ZBe)eBj6d. ZCe)eBj6d/ ZDe)eBj6d1 ZEejF	7dTi de%d8ed9ed:ed;ed<ed=ed>e d?e!d@e"de#de&de'de(d"e,d$e-de)d e+d&e.d(e/d*e0dAe1dBe3dCe4dDe5dEe7dFe8dGe9dHe:dIe;dJe<dKe=dLe>dMe?dNe@dOeAdPeBdQeCdReDdSeE dS )U    N)OidOrderedDict)exvalerror)rfc1902)cachedebug)univ)PyAsn1ErrorZASN1IntegerObjectIdentifierzASN1-REFINEMENTConstraintsIntersectionConstraintsUnionSingleValueConstraintValueRangeConstraintValueSizeConstraintc                   @   s(   e Zd Zejeeddedd ZdS )
ExtUTCTime      N)__name__
__module____qualname__OctetStringZsubtypeSpecr   r    r   r   </usr/lib/python3/dist-packages/pysnmp/smi/mibs/SNMPv2-SMI.pyr   (   s     r   c                   @   sB   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d ZdddZ	dS )MibNode c                 C   
   || _ d S Nnameselfr   r   r   r   __init__1      
zMibNode.__init__c                 C   s   d| j j| jf S )Nz%s(%r))	__class__r   r   r!   r   r   r   __repr__4      zMibNode.__repr__c                 C      | j S r   r   r%   r   r   r   getName7      zMibNode.getNamec                 C   r(   r   labelr%   r   r   r   getLabel:   r*   zMibNode.getLabelc                 C   
   || _ | S r   r+   )r!   r,   r   r   r   setLabel=      zMibNode.setLabelNc                 C   s0   |  | j}|d ur||_| jd ur| j|_|S r   )r$   r   r,   )r!   r   ZmyCloner   r   r   cloneA   s   
zMibNode.cloner   )
r   r   r   r,   r"   r&   r)   r-   r/   r1   r   r   r   r   r   .   s    r   c                   @   s   e Zd ZdZdZdZdZdZd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 Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"S )#ModuleIdentitycurrentr   r   c                 C   r(   r   statusr%   r   r   r   	getStatusU   r*   zModuleIdentity.getStatusc                 C   r.   r   r4   r!   vr   r   r   	setStatusX   r0   zModuleIdentity.setStatusc                 C   r(   r   lastUpdatedr%   r   r   r   getLastUpdated\   r*   zModuleIdentity.getLastUpdatedc                 C   r.   r   r:   r7   r   r   r   setLastUpdated_   r0   zModuleIdentity.setLastUpdatedc                 C   r(   r   organizationr%   r   r   r   getOrganizationc   r*   zModuleIdentity.getOrganizationc                 C   r.   r   r>   r7   r   r   r   setOrganizationf   r0   zModuleIdentity.setOrganizationc                 C   r(   r   contactInfor%   r   r   r   getContactInfoj   r*   zModuleIdentity.getContactInfoc                 C   r.   r   rB   r7   r   r   r   setContactInfom   r0   zModuleIdentity.setContactInfoc                 C   r(   r   descriptionr%   r   r   r   getDescriptionq   r*   zModuleIdentity.getDescriptionc                 C   r.   r   rF   r7   r   r   r   setDescriptiont   r0   zModuleIdentity.setDescriptionc                 C   r(   r   	revisionsr%   r   r   r   getRevisionsx   r*   zModuleIdentity.getRevisionsc                 C   r.   r   rJ   r!   argsr   r   r   setRevisions{   r0   zModuleIdentity.setRevisionsc                 C   r(   r   revisionsDescriptionsr%   r   r   r   getRevisionsDescriptions   r*   z'ModuleIdentity.getRevisionsDescriptionsc                 C   r.   r   rP   rM   r   r   r   setRevisionsDescriptions   r0   z'ModuleIdentity.setRevisionsDescriptionsc              
   C   s6   d|   |  |  |  ddd |  D f S )NzaMODULE-IDENTITY
  LAST-UPDATED %s
  ORGANIZATION "%s"
  CONTACT-INFO "%s"
  DESCRIPTION "%s"
  %sr   c                 S   s   g | ]}d | qS )zREVISION "%s"
r   .0xr   r   r   
<listcomp>       z,ModuleIdentity.asn1Print.<locals>.<listcomp>)r<   r@   rD   rH   joinrL   r%   r   r   r   	asn1Print   s   zModuleIdentity.asn1PrintN)r   r   r   r5   r;   r?   rC   rG   rK   rQ   r6   r9   r<   r=   r@   rA   rD   rE   rH   rI   rL   rO   rR   rS   rZ   r   r   r   r   r2   L   s.    r2   c                   @   sP   e Zd ZdZd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S )ObjectIdentityr3   r   c                 C   r(   r   r4   r%   r   r   r   r6      r*   zObjectIdentity.getStatusc                 C   r.   r   r4   r7   r   r   r   r9      r0   zObjectIdentity.setStatusc                 C   r(   r   rF   r%   r   r   r   rH      r*   zObjectIdentity.getDescriptionc                 C   r.   r   rF   r7   r   r   r   rI      r0   zObjectIdentity.setDescriptionc                 C   r(   r   	referencer%   r   r   r   getReference   r*   zObjectIdentity.getReferencec                 C   r.   r   r\   r7   r   r   r   setReference   r0   zObjectIdentity.setReferencec                 C   s   d|   |  |  f S )Nz@OBJECT-IDENTITY
  STATUS %s
  DESCRIPTION "%s"
  REFERENCE "%s"
)r6   rH   r^   r%   r   r   r   rZ      s   zObjectIdentity.asn1PrintN)r   r   r   r5   rG   r]   r6   r9   rH   rI   r^   r_   rZ   r   r   r   r   r[      s    r[   c                   @   sx   e Zd ZdZdZdZd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 Zdd Zdd Zdd ZdS )NotificationTyper   r3   r   c                 C   r(   r   )objectsr%   r   r   r   
getObjects   r*   zNotificationType.getObjectsc                 O   s&   | dr|  j|7  _| S || _| S )Nappend)getra   )r!   rN   kwargsr   r   r   
setObjects   s
   
zNotificationType.setObjectsc                 C   r(   r   r4   r%   r   r   r   r6      r*   zNotificationType.getStatusc                 C   r.   r   r4   r7   r   r   r   r9      r0   zNotificationType.setStatusc                 C   r(   r   rF   r%   r   r   r   rH      r*   zNotificationType.getDescriptionc                 C   r.   r   rF   r7   r   r   r   rI      r0   zNotificationType.setDescriptionc                 C   r(   r   r\   r%   r   r   r   r^      r*   zNotificationType.getReferencec                 C   r.   r   r\   r7   r   r   r   r_      r0   zNotificationType.setReferencec                 C   r(   r   rJ   r%   r   r   r   rL      r*   zNotificationType.getRevisionsc                 C   r.   r   rJ   r7   r   r   r   rO      r0   zNotificationType.setRevisionsc                 C   s0   dd dd |  D |  |  |  f S )NzSNOTIFICATION-TYPE
  OBJECTS { %s }
  STATUS %s
  DESCRIPTION "%s"
  REFERENCE "%s"
z, c                 S   s   g | ]}|qS r   r   rT   r   r   r   rW      s    z.NotificationType.asn1Print.<locals>.<listcomp>)rY   rb   r6   rH   r^   r%   r   r   r   rZ      s   zNotificationType.asn1PrintN)r   r   r   ra   r5   rG   r]   rK   rb   rf   r6   r9   rH   rI   r^   r_   rL   rO   rZ   r   r   r   r   r`      s"    r`   c                   @   s   e Zd Zedd ZdS )MibIdentifierc                   C   s   dS )NzOBJECT IDENTIFIERr   r   r   r   r   rZ      s   zMibIdentifier.asn1PrintN)r   r   r   staticmethodrZ   r   r   r   r   rg      s    rg   c                   @   s   e Zd ZdZdZdZdZdZd/d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 Zd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( Zd)d* Zd+d, Zd-d. ZdS )0
ObjectTyper   not-accessibler3   Nc                 C   s   t | | || _d S r   )r   r"   syntaxr!   r   rk   r   r   r   r"     s   
zObjectType.__init__c                 C   s
   | j |kS r   rk   r!   otherr   r   r   __eq__
  r#   zObjectType.__eq__c                 C   s
   | j |kS r   rm   rn   r   r   r   __ne__  r#   zObjectType.__ne__c                 C   s
   | j |k S r   rm   rn   r   r   r   __lt__  r#   zObjectType.__lt__c                 C   s
   | j |kS r   rm   rn   r   r   r   __le__  r#   zObjectType.__le__c                 C   s
   | j |kS r   rm   rn   r   r   r   __gt__  r#   zObjectType.__gt__c                 C   s
   | j |kS r   rm   rn   r   r   r   __ge__  r#   zObjectType.__ge__c                 C   s   d| j j| j| jf S )Nz
%s(%r, %r))r$   r   r   rk   r%   r   r   r   r&     s   zObjectType.__repr__c                 C   r(   r   rm   r%   r   r   r   	getSyntax!  r*   zObjectType.getSyntaxc                 C   r.   r   rm   r7   r   r   r   	setSyntax$  r0   zObjectType.setSyntaxc                 C   r(   r   unitsr%   r   r   r   getUnits(  r*   zObjectType.getUnitsc                 C   r.   r   rx   r7   r   r   r   setUnits+  r0   zObjectType.setUnitsc                 C   r(   r   	maxAccessr%   r   r   r   getMaxAccess/  r*   zObjectType.getMaxAccessc                 C   r.   r   r|   r7   r   r   r   setMaxAccess2  r0   zObjectType.setMaxAccessc                 C   r(   r   r4   r%   r   r   r   r6   6  r*   zObjectType.getStatusc                 C   r.   r   r4   r7   r   r   r   r9   9  r0   zObjectType.setStatusc                 C   r(   r   rF   r%   r   r   r   rH   =  r*   zObjectType.getDescriptionc                 C   r.   r   rF   r7   r   r   r   rI   @  r0   zObjectType.setDescriptionc                 C   r(   r   r\   r%   r   r   r   r^   D  r*   zObjectType.getReferencec                 C   r.   r   r\   r7   r   r   r   r_   G  r0   zObjectType.setReferencec                 C   s0   d|   jj|  |  |  |  |  f S )Nzf
OBJECT-TYPE
  SYNTAX %s
  UNITS "%s"
  MAX-ACCESS %s
  STATUS %s
  DESCRIPTION "%s"
  REFERENCE "%s" )rv   r$   r   rz   r~   r6   rH   r^   r%   r   r   r   rZ   K  s   
zObjectType.asn1Printr   )r   r   r   ry   r}   r5   rG   r]   r"   rp   rq   rr   rs   rt   ru   r&   rv   rw   rz   r{   r~   r   r6   r9   rH   rI   r^   r_   rZ   r   r   r   r   ri      s6    
ri   c                   @   s   e Zd ZdZdZd#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 Zdd Zd\ZZd#ddZd#ddZdd Zdd Zdd  Zd!d" ZdS )$MibTreer   rj   Nc                 C   s   t | || t | _d S r   )ri   r"   r   _varsrl   r   r   r   r"   _  s   zMibTree.__init__c                 G   sH   |  j d7  _ |D ]}|j| jv rtd|j| f || j|j< q	d S )N   z'MIB subtree %s already registered at %s)branchVersionIdr   r   r   SmiError)r!   ZsubTreesZsubTreer   r   r   registerSubtreese  s   zMibTree.registerSubtreesc                 G   s@   |  j d7  _ |D ]}|| jvrtd|| f | j|= q	d S )Nr   z#MIB subtree %s not registered at %s)r   r   r   r   r!   namesr   r   r   r   unregisterSubtreesn  s   


zMibTree.unregisterSubtreesc                 C   sB   | j  D ]}|d| }|| j v r| j |   S qtj||d)z<Return a branch of this tree where the 'name' OID may resideNr   idx)r   ZgetKeysLensr   NoSuchObjectError)r!   r   r   ZkeyLenZsubNamer   r   r   	getBranch  s   
zMibTree.getBranchc                 C   sh   | j rt| j  d }nd}| j r||k r| j | S z
| j | j | W S  ty3   tj||dw )Nr   r   r   r   )r   listkeysnextKeyKeyErrorr   r   )r!   r   r   firstr   r   r   getNextBranch  s   
zMibTree.getNextBranchc                 C   s"   || j kr| S | ||||S )zReturn tree node found by name)r   r   getNoder!   r   r   r   r   r   r     s   
zMibTree.getNodec                 C   s   z|  ||}W n tjtjfy   | || Y S w z|||W S  tjtjfyJ   z| j| j|j W  Y S  t	yI   tj||dw w )zReturn tree node next to namer   )
r   r   NoSuchInstanceErrorr   r   getNextNoder   r   r   r   )r!   r   r   ZnextNoder   r   r   r     s   zMibTree.getNextNodec              	   C   s   |\}}|| j kr$|r | jdvs||| j|d|r"tj||dd S d S z| ||}W n tjtjfy:   Y d S w ||||| d S Nreadonly	readwrite
readcreatereadr   )	r   r}   rk   r   NoAccessErrorr   r   r   readTestr!   r   valr   acInfoacFunacCtxnoder   r   r   r     s   

zMibTree.readTestc              	   C   sF   z|  ||}W n tjtjfy   |tjf Y S w |||||S r   )r   r   r   r   r   ZnoSuchObjectreadGetr!   r   r   r   r   r   r   r   r   r     s   zMibTree.readGet)r   r   c           
   
   C   s   |d u r	|}d}nd}|}| j }	 || j kr/| j}z| ||}	W n- tjtjfy.   Y qw z| ||}	W n tjtjfyH   |rGY d S  w | j }|	j}z
|	|||||W S  tj	tjtjfyh   Y nw qNTF)

depthFirstbreadthFirstr   r   r   r   r   r   readTestNextr   
r!   r   r   r   r   oNameZtopOfTheMibZnextNameZ	directionr   r   r   r   r     s:   
zMibTree.readTestNextc           
   
   C   s   |d u r	|}d}nd}|}| j }	 || j kr/| j}z| ||}	W n1 tjtjfy.   Y qw z| ||}	W n tjtjfyL   |rK|tjf Y S  w | j }|	j	}z
|	
|||||W S  tjtjtjfyl   Y nw qr   )r   r   r   r   r   r   r   r   ZendOfMibr   readGetNextr   r   r   r   r   r     s:   
zMibTree.readGetNextc                 C   sh   |\}}|| j kr$|r | jdvs||| j|d|r"tj||dd S d S | ||}||||| d S )Nr   r   writer   )r   r}   rk   r   NotWritableErrorr   	writeTestr   r   r   r   r   
  s   

zMibTree.writeTestc                 C      |  |||||| d S r   )r   writeCommitr!   r   r   r   r   r   r   r   r        zMibTree.writeCommitc                 C   s*   |  j d7  _ | |||||| d S Nr   )r   r   writeCleanupr   r   r   r   r     s   zMibTree.writeCleanupc                 C   r   r   )r   	writeUndor   r   r   r   r     r   zMibTree.writeUndor   )r   r   r   r   r}   r"   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   [  s&    
	
	




r   c                   @   sf   e Zd ZdZdZdd ZdddZddd	Zdd
dZdd Z	dd Z
dddZdddZdd ZdS )	MibScalarz8Scalar MIB variable. Implements access control checking.r   c              	   C   6   zt | ||W S  tjtjfy   tj||dw Nr   r   r   r   r   r   r   r   r   r   r   +  
   zMibScalar.getBranchNc              	   C   r   r   r   r   r   r   r   r   r   r   r   r   1  r   zMibScalar.getNextBranchc              	   C   r   r   )r   r   r   r   r   r   r   r   r   r   7  r   zMibScalar.getNodec              	   C   r   r   )r   r   r   r   r   r   r   r   r   r   =  r   zMibScalar.getNextNodec                 C   sd   |\}}|| j krtj||d|r'| jdvs ||| j|d|r'tj||dt| |||| d S )Nr   r   r   )r   r   r   r}   rk   r   r   r!   r   r   r   r   r   r   r   r   r   r   G  s   

zMibScalar.readTestc                 C   s@   z|  ||}W n tjy   |tjf Y S w |||||S r   )r   r   r   r   ZnoSuchInstancer   r   r   r   r   r   R  s   zMibScalar.readGetc                 C   sN   |\}}|r| j dvs||| j|d|rtj||dt| ||||| d S r   )r}   rk   r   r   r   r   r!   r   r   r   r   r   r   r   r   r   r   r   Z  s   
zMibScalar.readTestNextc                 C   sJ   |\}}|r| j dvs||| j|d|rtj||dt| |||||S r   )r}   rk   r   r   r   r   r   r   r   r   r   c  s   
zMibScalar.readGetNextc                 C   sd   |\}}|| j krtj||d|r'| jdvs ||| j|d|r'tj||dt| |||| d S )Nr   r   r   )r   r   r   r}   rk   r   r   r   r   r   r   r   r   q  s   

zMibScalar.writeTestr   )r   r   r   __doc__r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   !  s    





	r   c                   @   s   e Zd ZdZdd Zdd Zdd Zdd	 Zd1ddZd1ddZ	d1ddZ
dd Zdd Zd1ddZd1d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( Zd)d* Zd+d, Zd-d. Zd/d0 Zd
S )2MibScalarInstancez?Scalar MIB variable instance. Implements read/write operations.c                 C   s(   t | || | || _|| _d | _d S r   )r   r"   typeNameinstId_MibScalarInstance__oldSyntax)r!   r   r   rk   r   r   r   r"     s   
zMibScalarInstance.__init__c                 C   s8   t jt j@ ot d| j| jf  | j S  | j S )NzgetValue: returning %r for %s)r   loggerflagInsrk   r   r1   r   r   r   r   getValue  s   "

zMibScalarInstance.getValuec                 C   s   |d u rt j}zt| jdr| j|W S | j|W S  tyO   t \}}}t	j
t	j@ o>t	
d| j|t|||f  t|tjrG|tj|||dw )NsetValuez(setValue: %s=%r failed with traceback %sr   r   msg)r   ZnoValuehasattrrk   r   r1   r	   sysexc_infor   r   r   r   	tracebackformat_exception
isinstancer   ZTableRowManagementWrongValueError)r!   valuer   r   Zexc_tZexc_vexc_tbr   r   r   r     s    zMibScalarInstance.setValuec              	   C   r   r   r   r   r   r   r   r     r   zMibScalarInstance.getBranchNc              	   C   r   r   r   r   r   r   r   r     r   zMibScalarInstance.getNextBranchc                 C   s   || j kr| S tj||dr   r   r   r   r   r   r   r   r     s   
zMibScalarInstance.getNodec                 C   s   t j||dr   )r   r   r   r   r   r   r     s   zMibScalarInstance.getNextNodec                 C   s   || j krtj||dd S r   r   r   r   r   r   r     s   
zMibScalarInstance.readTestc                 C   s`   || j kr)tjtj@ otd| j | jf  | j | ||fS  | j | ||fS tj||d)NzreadGet: %s=%rr   )r   r   r   r   rk   r   r   r   r   r   r   r   r     s   
"zMibScalarInstance.readGetc                 C   s$   || j ks	||krtj||dd S r   r   r!   r   r   r   r   r   r   r   r   r     s   zMibScalarInstance.readTestNextc                 C   sd   || j kr+||kr+tjtj@ o"td| j | jf  | ||||S  | ||||S tj||d)NzreadGetNext: %s=%rr   )r   r   r   r   rk   r   r   r   r   r   r   r   r     s   "zMibScalarInstance.readGetNextc                 C   sz   || j kr6z| |||| _W d S  tjy5   t d }d|v r)|d | _|tj||t d dw tj||dNr   rk   r   r   	r   r   _MibScalarInstance__newSyntaxr   MibOperationErrorr   r   r   r   r!   r   r   r   r   whyr   r   r   r     s   

	zMibScalarInstance.writeTestc                 C   s   | j d u r	| j| _ | j| _d S r   r   rk   r   r   r   r   r   r     s   
zMibScalarInstance.writeCommitc                 C   sN   |  j d7  _ tjtj@ otd||f  d  | _| _d S  d  | _| _d S )Nr   zwriteCleanup: %s=%r)r   r   r   r   r   r   r   r   r   r   r     s
   zMibScalarInstance.writeCleanupc                 C   s   | j | _d  | _| _ d S r   r   r   r   r   r   r     s   zMibScalarInstance.writeUndoc                 C   s~   || j kr8z| |||| _W d S  tjy7   t d }d|v r(|d | _ntj||t d dY d S w tj||dr   r   r   r   r   r   
createTest  s   
zMibScalarInstance.createTestc                 C       |d ur|  |||| d S d S r   )r   r   r   r   r   createCommit     zMibScalarInstance.createCommitc                 C   sL   |  j d7  _ tjtj@ otd||f  |d ur$| |||| d S d S )Nr   zcreateCleanup: %s=%r)r   r   r   r   r   r   r   r   r   createCleanup  s   zMibScalarInstance.createCleanupc                 C   r   r   )r   r   r   r   r   
createUndo  r   zMibScalarInstance.createUndoc                 C   sj   || j kr.z| |||| _W d S  tjy-   t d }d|v r*|d | _Y d S Y d S w tj||d)Nr   rk   r   )r   r   r   r   r   r   r   r   r   r   r   r   destroyTest   s   
zMibScalarInstance.destroyTestc                 C      d S r   r   r   r   r   r   destroyCommit,     zMibScalarInstance.destroyCommitc                 C   s   |  j d7  _ d S r   )r   r   r   r   r   destroyCleanup0  r'   z MibScalarInstance.destroyCleanupc                 C   r   r   r   r   r   r   r   destroyUndo3  r   zMibScalarInstance.destroyUndor   )r   r   r   r   r"   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   |  s2    






r   c                   @   s   e Zd ZdZeZd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 Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"S )#MibTableColumnz<MIB table column. Manages a set of column instance variablesc                 C   s$   t | || i | _i | _i | _d S r   )r   r"   !_MibTableColumn__createdInstances#_MibTableColumn__destroyedInstances_MibTableColumn__rowOpWantedrl   r   r   r   r"   =  s   
zMibTableColumn.__init__c                 C   s"   || j v r
| j | S tj||d)Nr   )r   r   r   r   r   r   r   r   I  s   

zMibTableColumn.getBranchc                 C   r   r   )protoInstance)r!   r   r   r   r   setProtoInstanceN  r#   zMibTableColumn.setProtoInstancec                 C   s   |\}}|| j krtj||d|rF|d ur| jdks$||| j|d|rFtjtj@ o>td||| j| j f  tj||d tj||d|d u rQ|| j	v rQd S | 
| j |t| j d  | j | j	|< | j	| |||| d S )Nr   r   r   zcreateTest: %s=%r %s at %s)r   r   r   r}   rk   r   r   ZflagACLZNoCreationErrorr   r   lenr1   r   r   r   r   r   r   U  s&   

zMibTableColumn.createTestc                 C   sl   || j v r|| jv r| j | |||| d S | j| |||| | j| | j || j |< | j|< d S r   )r   r   r   rd   r   r   r   r   r   j  s   

zMibTableColumn.createCommitc                 C   sp   |  j d7  _ || jv r$| j| d ur| j| |||| | j|= d S || jv r6| j| |||| d S d S r   )r   r   r   r   r   r   r   r   r   u  s   

zMibTableColumn.createCleanupc                 C   s   || j v rC| j | | j|< | j |= | j| d u r| j|= d S z	| j| dk W n ty5   | j|= Y d S w | j| |||| d S d S )Nr   )r   r   r	   r   r   r   r   r   r     s   
zMibTableColumn.createUndoc                 C   s~   |\}}|| j krtj||d|| jvrd S |r2|d ur"| jdks+||| j|d|r2tj||d| j| |||| d S )Nr   r   r   )r   r   r   r   r}   rk   r   r   r   r   r   r     s   

zMibTableColumn.destroyTestc                 C   s@   || j v r| j | |||| | j | | j|< | j |= d S d S r   )r   r   r   r   r   r   r   r     s
   
zMibTableColumn.destroyCommitc                 C   s\   |  j d7  _ || jv r,| j| |||| tjtj@ o%td||f  | j|= d S d S )Nr   zdestroyCleanup: %s=%r)r   r   r   r   r   r   r   r   r   r   r     s   
zMibTableColumn.destroyCleanupc                 C   s@   || j v r| j | | j|< | j| |||| | j |= d S d S r   )r   r   r   r   r   r   r   r     s
   
zMibTableColumn.destroyUndoc              	   C   s   zt | |||| W nF tjtjfy9   t d }t|tjr(|| j|< nt | j|< | 	|||| Y n tj
yQ   t
 | j|< | |||| Y nw || jv rztjtj@ ottd| j| ||t d f  | j|  | j| d S )Nr   z!%s flagged by %s=%r, exception %s)r   r   r   r   RowCreationWantedr   r   r   r   r   RowDestructionWantedr   r   r   r   )r!   r   r   r   r   ZexcValuer   r   r   r     s(   


zMibTableColumn.writeTestc                 C   s   || j vrttd| | |||| d S t| j | tjr)t| d| |||| t| j | tjr@t| d| |||| d S d S )Nr   createdestroy)r   getattrr   r   r   r   r   )r!   	subActionr   r   r   r   r   r   r   Z__delegateWrite  s   
zMibTableColumn.__delegateWritec                 C   s*   |  d|||| || jv r| j| d S )NCommit)_MibTableColumn__delegateWriter   r   r   r   r   r     s   

zMibTableColumn.writeCommitc                 C   sj   |  j d7  _ | d|||| || jv r3| j| }| j|= tjtj@ o0td|||f  | |d S )Nr   Cleanup%s dropped by %s=%r)r   r   r   r   r   r   r!   r   r   r   r   er   r   r   r     s   

 zMibTableColumn.writeCleanupc                 C   st   || j v rt | j |< | d|||| || j v r8| j | }| j |= tjtj@ o5td|||f  | |d S )NUndor   )r   r   r   r   r   r   r   r   r   r   r   r     s   


 zMibTableColumn.writeUndoN)r   r   r   r   r   r   r"   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   9  s&    				r   c                   @   s   e Zd ZdZdd Zej Ze	j Z
ej ZejZej Zd)ddZd)d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 Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Z d%d& Z!d'd( Z"dS )*MibTableRowzmMIB table row (SMI 'Entry'). Manages a set of table columns.
       Implements row creation/destruction.
    c                 C   s0   t | | t | _t | _d| _i | _d S )Nr   )r   r"   r   ZCache_MibTableRow__idToIdxCache_MibTableRow__idxToIdCache
indexNamesaugmentingRowsr    r   r   r   r"     s
   


zMibTableRow.__init__Nc                 C   s  |s
t d|f t|dr|j||| |dS |  }|| jkr0||d |dd  fS | j	| rO|d
dd |d d	 D |d	d  fS || jkr|r_|t|d
fS | rx| }|t|d | ||d  fS |t|d|d d  ||d d d  fS || jkr|r||d
fS ||d|d d  ||d d d  fS || jkr|t|d|d d  ||d d d  fS t d|f )NzShort OID for index %rcloneFromNameZ	parentRowparentIndicesr   r   .c                 S   s   g | ]}t |qS r   )strrT   r   r   r   rW     rX   z+MibTableRow.setFromName.<locals>.<listcomp>   r   Unknown value type for index %r)r   r   r   r  	getTagSet
getBaseTag_MibTableRow__intBaseTagr1   _MibTableRow__ipaddrTagSetisSuperTagSetOfrY   _MibTableRow__strBaseTagtupleisFixedLengthZgetFixedLength_MibTableRow__oidBaseTag_MibTableRow__bitsBaseTag)r!   objr   impliedFlagr  baseTaglr   r   r   setFromName  s.   

.
"2
.
2zMibTableRow.setFromNamec                 C   s   t |dr|j|| |dS |  }|| jkrt|fS | j| r)| S || j	krB|s4|
 r7d}nt|f}||  S || jkrV|rMt|S t|ft| S || jkrdt|f|  S td|f )NcloneAsNamer  r   r
  )r   r  r  r  r  intr  r  Z	asNumbersr  r  r   r  r  r  r   r   )r!   r  r  r  r  initialr   r   r   	getAsName%  s&   






zMibTableRow.getAsNamec                 C   s   |t | jd d  }g }g }| jD ].\}	}
}t|
|\}| |j||	|\}}| j|jd d kr;||j|f || q|rLt	d| |f |sPd S | j
 D ]#\}
}t|
|\}tjtj@ ontd||f  |||||| qUd S )Nr   5Excessive instance identifier sub-OIDs left at %s: %sz announceManagementEvent %s to %s)r   r   r  
mibBuilderimportSymbolsr  rk   rc   r   r   r  r   r   r   r   receiveManagementEvent)r!   actionr   r   r   r   r   baseIndicesindicesr  modNamesymNamemibObjrk   ZmibSymr   r   r   announceManagementEventA  s.   

z#MibTableRow.announceManagementEventc                 C   s   d}| j D ](\}}}	t||	\}
g }|D ]\}}||
jkr'|| |||7 }|| qq|rKtjtj@ o>td||f  | 	|d|||| d S d S )Nr   z'receiveManagementEvent %s for suffix %s)
r  r   r!  r   r  rc   r   r   r   _MibTableRow__manageColumns)r!   r#  r$  r   r   r   Z	newSuffixr  r&  r'  r(  r  r   rk   r   r   r   r"  ]  s    

z"MibTableRow.receiveManagementEventc                 G   sD   |D ]\}}||f| j v rtd| j||f d| j ||f< q| S )Nz"Row %s already augmented by %s::%sr   )r  r   r   r   )r!   r   r&  r'  r   r   r   registerAugmentionsn  s   zMibTableRow.registerAugmentionsc                 G   s   |D ]
}|  j |f7  _ q| S r   r  r   r   r   r   setIndexNamesw  s   zMibTableRow.setIndexNamesc                 C   r(   r   r,  r%   r   r   r   getIndexNames|  r*   zMibTableRow.getIndexNamesc                 C   s   i }|}g }	| j D ]!\}
}}t||\}| |j||
|	\}}|||j< |	| q	| j D ]D\}}||kr9q0||v rLt	|||| || |d nt	|||| ||| t
jt
j@ ost
d|||||v rjdpkd|||f  q0d S )NNNz7__manageColumns: action %s name %s suffix %s %svalue %rzindex r   )r  r   r!  r  rk   r   rc   r   itemsr   r   r   r   rd   )r!   r#  ZexcludeNameZ
nameSuffixr   r   r   Z	indexValsr   r%  r  r&  r'  r(  rk   r   varr   r   r   Z__manageColumns  s.   

zMibTableRow.__manageColumnsc                 C   s  d}zt | ||d| |||| W |S  tjyU   | d| |d t| jd  |t| jd d  d || | d| |d || t	 d 
dddk}Y |S  tjy   | d| |d t| jd  |t| jd d  d || | d| |d || Y |S w )NFr   r   r   rk   r   r   )r   r   r   r   r*  r   r   r)  r   r   rd   r   )r!   r   r   r   r   r   rowIsActiver   r   r   Z
__delegate  s4   zMibTableRow.__delegatec                 C      |  d|||| d S )NZTest_MibTableRow__delegater   r   r   r   r        zMibTableRow.writeTestc                 C   sj   |  d||||}|r1| j D ]"}||j|t| jd d   }|j s0tj	d| dqd S d S )Nr   r   z#Row consistency check failed for %r)r   )
r5  r   valuesr   r   r   rk   ZhasValuer   ZInconsistentValueError)r!   r   r   r   r   r2  ZmibNodeZcolNoder   r   r   r     s   "
zMibTableRow.writeCommitc                 C   s$   |  j d7  _ | d|||| d S )Nr   r   )r   r5  r   r   r   r   r     s   zMibTableRow.writeCleanupc                 C   r3  )Nr   r4  r   r   r   r   r     r6  zMibTableRow.writeUndoc                 C   s   | j |f | S r   r   )r!   colIdr   r   r   r   getInstName     zMibTableRow.getInstNamec                 C   s   || j v r
| j | S g }| jD ]D\}}}t||\}z| |j|||\}}W n% tyM   tjtj	@ oDtd| j
j|t d f  |g}d}Y  nw || q|r_td| |f t|}|| j |< |S )z/Return index values for instance identificationz+error resolving table indices at %s, %s: %sr   r   r  )r   r  r   r!  r  rk   r	   r   r   r   r$   r   r   r   rc   r   r   r  )r!   r   r%  r  r&  r'  r(  rk   r   r   r   getIndicesFromInstId  s0   

*
z MibTableRow.getIndicesFromInstIdc                 G   s   z| j | W S  ty   d}Y n ty   d}Y nw d}d}g }| jD ].\}}}|t|kr2 n"t||\}	|	j|| }
|| 	|
||7 }|
|
 |d7 }q%|r[|| j |< |S )z2Return column instance identification from indicesFTr   r   r   )r  	TypeErrorr   r  r   r   r!  rk   r1   r  rc   )r!   r%  Z	cacheabler   r   r  r  r&  r'  r(  rk   r   r   r   getInstIdFromIndices  s*   


z MibTableRow.getInstIdFromIndicesc                 G   s   | j |f | j|  S )z*Build column instance name from components)r   r=  )r!   r8  r%  r   r   r   getInstNameByIndex  s   zMibTableRow.getInstNameByIndexc                 G   s6   g }| j  D ]}|| j|d f|   qt|S )z(Build column instance names from indicesr  )r   r   rc   r>  r  )r!   r%  Z	instNamesZ
columnNamer   r   r   getInstNamesByIndex  s   zMibTableRow.getInstNamesByIndexr/  )#r   r   r   r   r"   r
   ZtagSetr  r  r   r  r   r  	IpAddressr  Bitsr  r  r  r)  r"  r+  r-  r.  r*  r5  r   r   r   r   r9  r;  r=  r>  r?  r   r   r   r   r     s4    





	!r   c                   @   s   e Zd ZdZdd ZdS )MibTablez&MIB table. Manages a set of TableRow'sc                 C   s   t | | d S r   )r   r"   r    r   r   r   r"     r:  zMibTable.__init__N)r   r   r   r   r"   r   r   r   r   rB    s    rB  )r   r   )r   zitu-t)r   )   zjoint-iso-itu-t)   )   zmib-2)
   )r	  )   
SNMPv2-SMI	Integer32rA  r@  	Counter32Gauge32
Unsigned32	TimeTicksOpaque	Counter64zeroDotZeroitu_tisojoint_iso_itu_torgdodinternet	directorymgmtmib_2transmissionexperimentalprivateenterprisessecuritysnmpV2snmpDomains
snmpProxyssnmpModules)rH  )Gr   r   Zpysnmp.smi.indicesr   Z
pysnmp.smir   r   Zpysnmp.protor   Zpysnmpr   r   Zpyasn1.typer   Zpyasn1.errorr	   r   r!  r
   r   r   r   r   r   r   r   rA  rI  r@  rJ  rK  rL  rM  rN  rO  r   objectr   r2   r[   r`   rg   ri   r   r   r   r   r   rB  rP  r/   rQ  rR  rS  r   rT  rU  rV  rW  rX  rY  rZ  r[  r\  r]  r^  r_  r`  ra  rb  ZexportSymbolsr   r   r   r   <module>   s&  H'=] G[ > 8  ,		

