o
    ZU                     @   sr   d dl Z d dl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 jd  dkr/eZeZG dd	 d	eZdS )
    N)	iskeyword)MibInfo)AbstractCodeGendorepr)error)debug   c                   @   st  e Zd Zddddddddd	dd
dZddddZg d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g d0Zd1Zd2Z	d3Z
d4d5 Zd6d7 Zed8d9 Zdd;d<Zd=d> Zd?d@ ZddBdCZdDdE ZddFdGZddHdIZddJdKZddLdMZddNdOZddPdQZddRdSZddTdUZddVdWZddXdYZddZd[Zdd\d]Zdd^d_Z dd`daZ!ddbdcZ"ddddeZ#ddfdgZ$ddhdiZ%ddjdkZ&ddldmZ'ddndoZ(ddpdqZ)ddrdsZ*ddtduZ+ddvdwZ,ddxdyZ-ddzd{Z.dd|d}Z/dd~dZ0dddZ1dddZ2dddZ3dddZ4dddZ5dddZ6dddZ7dddZ8dddZ9i dededededededededededede7dede de!de"de#i de$de%de&de'de(de)de*de+de,de-de0de.de/de0de2de3de4e5e6e7e8e9e0dZ:dd Z;dS )SymtableCodeGen)ModuleIdentity)Z	MibScalarMibTableMibTableRowMibTableColumn)NotificationType)ZTextualConvention)ModuleCompliance)ObjectGroup)NotificationGroup)AgentCapabilities)ObjectIdentity)Bits)MODULE-IDENTITYOBJECT-TYPENOTIFICATION-TYPETEXTUAL-CONVENTIONMODULE-COMPLIANCEzOBJECT-GROUPNOTIFICATION-GROUPzAGENT-CAPABILITIESOBJECT-IDENTITYz	TRAP-TYPEBITS)Zisor   	Integer32	TimeTicks	Counter32	Counter64r   Gauge32r   r   r   
Unsigned32	IpAddressMibIdentifier)ZDisplayStringr   )r   r   )z
SNMPv2-SMIz	SNMPv2-TCzSNMPv2-CONF)ZIntegerr   r   ObjectIdentifierOctetStringZ	COUNTER32r   Z	COUNTER64r    ZGAUGE32r!   INTEGERr   Z	INTEGER32	IPADDRESSr#   NETWORKADDRESSzOBJECT IDENTIFIERr%   OCTET STRINGr&   ZOPAQUEZOpaqueZ	TIMETICKSr   Z
UNSIGNED32r"   CounterZGaugeZNetworkAddressZnullSpecificZzeroDotZeroZipRoutingTableZipRouteTableZsnmpEnableAuthTrapsZsnmpEnableAuthenTraps)r'   r*   r(   r)   zif mibBuilder.loadTexts: z    i  c                 C   sR   t  | _i | _t  | _i | _t  | _i | _g | _i | _dg| _	d | _
ddi| _d S )NZDUMMYtextT)set_rows_colsZ_exports_postponedSyms_parentOids
_importMap
_symsOrder_out
moduleName_moduleRevisiongenRules)self r9   8/usr/lib/python3/dist-packages/pysmi/codegen/symtable.py__init__Q   s   zSymtableCodeGen.__init__c                 C   s   || j v r
| j | S |fS N)	symsTable)r8   symbolr9   r9   r:   symTrans^   s   

zSymtableCodeGen.symTransc                 C   s   t | rd|  } | ddS )NZpysmi_-_)r   replace)r>   r9   r9   r:   
transOpersd   s   zSymtableCodeGen.transOpersFc              	   C   st   g }|D ]3}t |ts|| qt|dkr||d  q|| j|d  | | j|dd  |d|d q|S )N   r   	classmode)
isinstancetupleappendlenhandlersTableprepData)r8   ZpdatarF   dataelr9   r9   r:   rL   k   s   
2zSymtableCodeGen.prepDatac           	         s@  g }t |D ];  jv rA|  D ]/}|j  v r@| |f j  | D ]}|\}}||v r:|| | q(|g||< q(qq|D ]}||d  |d  qDjD ]  |v rg|   j  7  < qUj  | < qUt|D ]$ d}t|  D ]	}||7 }q}|rj	 fdd|D  qsi t
t|fS )Nr   rD   r9   c                    s   g | ]	} | fqS r9   )rC   ).0smoduler8   r9   r:   
<listcomp>   s    z.SymtableCodeGen.genImports.<locals>.<listcomp>)listZconvertImportv2rI   removeconstImportssortedr-   r?   r2   updaterH   )	r8   importsZtoDelr>   Z	newImportZ	newModuleZ	newSymboldsymbolsr9   rQ   r:   
genImportsy   s4   

zSymtableCodeGen.genImportsc                 C   sL   d}|D ]}|| j v s#|| jv s#|| jv s#|dv s#|| jv s#d} |S q|S )NT)r   r   r   F)r4   r2   	baseTypesr.   )r8   parentsZparentsExistsparentr9   r9   r:   allParentsExists   s    
 z SymtableCodeGen.allParentsExistsr9   c                 C   s`   || j v s
|| jv rtd| | |r'|| j |< | j| |   d S ||f| j|< d S )NzDuplicate symbol found: %s)r4   r0   r   PySmiSemanticErrorr`   r3   rI   regPostponedSyms)r8   r>   symPropsr^   r9   r9   r:   regSym   s   

zSymtableCodeGen.regSymc                 C   sd   g }| j  D ]\}}|\}}| |r$|| j|< | j| || q|D ]}| j | q'd S r<   )r0   itemsr`   r4   r3   rI   pop)r8   Z	regedSymssymvalr^   rc   r9   r9   r:   rb      s   


z SymtableCodeGen.regPostponedSymsc                 C   6   |\}}}}}}|  |}	d||d}
| |	|
 d S )Nr   typeoidorigNamerC   rd   )r8   rM   rF   rm   releasestatusdescription	referencerl   	pysmiNamerc   r9   r9   r:   genAgentCapabilities      
z$SymtableCodeGen.genAgentCapabilitiesc                 C   sF   |\}}}}}}}	|  |}
d|	|d}|r|d | _| |
| d S )Nr
   rj   r   )rC   r6   rd   )r8   rM   rF   rm   ZlastUpdatedZorganizationZcontactInforq   Z	revisionsrl   rs   rc   r9   r9   r:   genModuleIdentity   s   

z!SymtableCodeGen.genModuleIdentityc                 C   ri   )Nr   rj   rn   )r8   rM   rF   rm   rp   rq   rr   Zcompliancesrl   rs   rc   r9   r9   r:   genModuleCompliance   ru   z#SymtableCodeGen.genModuleCompliancec                 C   ri   )Nr   rj   rn   r8   rM   rF   rm   Zobjectsrp   rq   rr   rl   rs   rc   r9   r9   r:   genNotificationGroup   ru   z$SymtableCodeGen.genNotificationGroupc                 C   ri   )Nr   rj   rn   rx   r9   r9   r:   genNotificationType   ru   z#SymtableCodeGen.genNotificationTypec                 C   ri   )Nr   rj   rn   rx   r9   r9   r:   genObjectGroup
  ru   zSymtableCodeGen.genObjectGroupc           
      C   s4   |\}}}}}|  |}d||d}	| ||	 d S )Nr   rj   rn   )
r8   rM   rF   rm   rp   rq   rr   rl   rs   rc   r9   r9   r:   genObjectIdentity  s   
z!SymtableCodeGen.genObjectIdentityc                 C   s   |\}}}}}}}	}
}}}|  |}d|||d}|d d g}|
r*||  |
 |r0||d< |r[|d r[|\}}}t||D ]\}}|t| }d||f ||d}| || q@| ||| d S )NZ
ObjectType)rk   rl   syntaxrm   r   defvalrD   Z
fakeColumn)rC   rI   zipstrrd   )r8   rM   rF   rm   r}   ZunitsZ	maxaccessrp   rq   rr   Z
augmentionindexr~   rl   rs   rc   r^   ZnamepartfakeIndexesZfakeSymSyntaxZfakeIdxZ
fakeSyntaxZfakeNameZfakeSymPropsr9   r9   r:   genObjectType"  s.   

zSymtableCodeGen.genObjectTypec                 C   s>   |\}}}}}}|  |}	d|d|f |d}
| |	|
 d S )Nr   r   rj   rn   )r8   rM   rF   rm   Z
enterpriseZ	variablesrq   rr   valuers   rc   r9   r9   r:   genTrapTypeC  s   

zSymtableCodeGen.genTrapTypec           	      C   sR   |\}}|  |}|r%|\}}|r'd||d}| |||d d g d S d S d S )NZTypeDeclaration)rk   r}   rm   r   rn   )	r8   rM   rF   rm   Zdeclarationrs   
parentTypeattrsrc   r9   r9   r:   genTypeDeclarationO  s   
z"SymtableCodeGen.genTypeDeclarationc                 C   s.   |\}}|  |}d||d}| || d S )Nr$   rj   rn   )r8   rM   rF   rm   rl   rs   rc   r9   r9   r:   genValueDeclaration^  s   
z#SymtableCodeGen.genValueDeclarationc                 C   s   |d }|S Nr   r9   )r8   rM   rF   namesr9   r9   r:   genBitNamesk  s   zSymtableCodeGen.genBitNamesc                 C   s   |d }d|fS )Nr   )r    r9   )r8   rM   rF   bitsr9   r9   r:   genBitsp  s   zSymtableCodeGen.genBitsc                 C      dS Nr   r9   r8   rM   rF   r9   r9   r:   genCompliancesu     zSymtableCodeGen.genCompliancesc                 C   s:   |d }|d r|d d r| j | |d d  dS )Nr   ))r   r   r   )r.   addrC   r8   rM   rF   rowr9   r9   r:   genConceptualTabley  s   z"SymtableCodeGen.genConceptualTablec                 C   r   r   r9   r   r9   r9   r:   genContactInfo  r   zSymtableCodeGen.genContactInfoc                 C   r   r   r9   r   r9   r9   r:   genDisplayHint  r   zSymtableCodeGen.genDisplayHintc                 C   s   |d }t |ttfrt|}|S | |r"d|dd  d }|S | |rD|dd }|r:tt|ddd  p;d}d| d }|S t |trM|}|S |d |d kre|d dkret|dd }|S || j	v so|| j
v ru|d	 }|S t|}|S )
Nr   z
hexValue="rD   "r   r   z
.getName())rG   intlongr   ZisHexZisBinaryhexrT   r   r4   r2   )r8   rM   rF   r~   rh   ZbinvalZhexvalr9   r9   r:   	genDefVal  s.   


zSymtableCodeGen.genDefValc                 C   r   r   r9   r   r9   r9   r:   genDescription  r   zSymtableCodeGen.genDescriptionc                 C   r   r   r9   r   r9   r9   r:   genReference  r   zSymtableCodeGen.genReferencec                 C   r   r   r9   r   r9   r9   r:   	genStatus  r   zSymtableCodeGen.genStatusc                 C   r   r   r9   r   r9   r9   r:   genProductRelease  r   z!SymtableCodeGen.genProductReleasec                 C   s   | j ||dd S )NrE   rD   )r   r   r9   r9   r:   genEnumSpec  s   zSymtableCodeGen.genEnumSpecc                 C   s   |d }d}g g }}|D ]-}|d }|| j v r:|}	| j|	|	}
| |
}
|| j |d|
f |  jd7  _q|||fS )Nr   ZpysmiFakeColrD   )r   r   )smiv1IdxTypestypeClassesgetrC   rI   fakeidx)r8   rM   rF   ZindexesZfakeIdxNamer   ZfakeSymsSyntaxidxZidxNameZidxTypeobjTyper9   r9   r:   genIndex  s   



zSymtableCodeGen.genIndexc                 C   r   r   r9   r   r9   r9   r:   genIntegerSubType  r   z!SymtableCodeGen.genIntegerSubTypec                 C   r   r   r9   r   r9   r9   r:   genMaxAccess  r   zSymtableCodeGen.genMaxAccessc                 C   r   r   r9   r   r9   r9   r:   genOctetStringSubType  r   z%SymtableCodeGen.genOctetStringSubTypec                 C   s   d}|d D ]D}t |ttfr*| |}| j| ||| j|| jd ff7 }qt |t	t
fr7||f7 }qt |trD||d f7 }qtd| |S )Nr9   r   rD   zunknown datatype for OID: %s)rG   r   unicoderC   r1   r   r2   r   r5   r   r   rH   r   ra   )r8   rM   rF   outrN   r_   r9   r9   r:   genOid  s   
 
zSymtableCodeGen.genOidc                 C   r   r   r9   r   r9   r9   r:   
genObjects  r   zSymtableCodeGen.genObjectsc                 C   r   r   r9   r   r9   r9   r:   genTime  r   zSymtableCodeGen.genTimec                 C      |d S r   r9   r   r9   r9   r:   genLastUpdated     zSymtableCodeGen.genLastUpdatedc                 C   r   r   r9   r   r9   r9   r:   genOrganization  r   zSymtableCodeGen.genOrganizationc                 C   s.   |d d d |d d d d }}||fS )Nr   rD   r9   )r8   rM   rF   ZlastRevisionZlastDescriptionr9   r9   r:   genRevisions  s   &zSymtableCodeGen.genRevisionsc                 C   s.   |d }|  |}|| jv rdp| j||dS )Nr   ))r   r   r   rE   )rC   r.   genSimpleSyntaxr   r9   r9   r:   genRow  s   
zSymtableCodeGen.genRowc                 C   s   |d }| j | dS )Nr   )r   r   )r/   rX   )r8   rM   rF   Zcolsr9   r9   r:   genSequence  s   zSymtableCodeGen.genSequencec                 C   sf   |d }d}| j ||}| |}|| jvr!| j|| jd }t|dkr+|d p,d}||f|fS )Nr   r   r   rD   )r   r   rC   r]   r2   r5   rJ   )r8   rM   rF   r   rR   Zsubtyper9   r9   r:   r   	  s   

zSymtableCodeGen.genSimpleSyntaxc           
      C   s>   t |dkr|d \}}||fS |\}}}}}	|	\}}||fS )NrD   r   )rJ   )
r8   rM   rF   r   r   Zdisplayrp   rq   rr   r}   r9   r9   r:   genTypeDeclarationRHS  s   z%SymtableCodeGen.genTypeDeclarationRHSc                 C   r   r   r9   r   r9   r9   r:   genUnits%  r   zSymtableCodeGen.genUnitsZagentCapabilitiesClauseZmoduleIdentityClauseZmoduleComplianceClauseZnotificationGroupClauseZnotificationTypeClauseZobjectGroupClauseZobjectIdentityClauseZobjectTypeClauseZtrapTypeClausetypeDeclarationZvalueDeclarationZApplicationSyntaxZBitNamesr   ZComplianceModulesZconceptualTablezCONTACT-INFOzDISPLAY-HINTZDEFVALZDESCRIPTIONZ	REFERENCEZStatuszPRODUCT-RELEASEZenumSpecZINDEXZintegerSubTypeZMaxAccessPartZNotificationsZoctetStringSubTypeZobjectIdentifierZObjectszLAST-UPDATEDZORGANIZATIONZ	Revisions)r   ZSEQUENCEZSimpleSyntaxZtypeDeclarationRHSZUNITSZVarTypesc                 K   s  | dd| jd< | j  | j  | j  g | _| j  | j  i | _	|\| j
d< }}}| |p6i \}}|p=g D ]}	|	r]|	d }
|
dk}| j|	d  | | |	dd  || q>| jrltdd| j | jD ]}|| j	vr|| jvrtd	| qot| j| j	d
< t| j| j	d< t| j| j	d< tjtj@ otd| j
d |d|pdt| j	f  td | j
d | jtdd |D d| j	fS  td | j
d | jtdd |D d| j	fS )NZgenTextsFr,   r   r   rD   zUnknown parents for symbols: %sz, zUnknown parent symbol: %sZ_symtable_orderZ_symtable_colsZ_symtable_rowszLcanonical MIB name %s (%s), imported MIB(s) %s, Symbol table size %s symbols,z<none>c                 S   s   g | ]}|qS r9   r9   )rO   xr9   r9   r:   rS   y  s    z+SymtableCodeGen.genCode.<locals>.<listcomp>)rl   nameZrevisionZimported)r   r7   r.   clearr/   r1   r3   r0   r2   r4   r5   r\   rK   rL   r   ra   joinrT   r   loggerZflagCodegenrJ   r   r6   rH   )r8   astZsymbolTablekwargsZ	moduleOidrY   Zdeclarationsr   ZimportedModulesZdeclrZ
clausetyperF   rg   r9   r9   r:   genCodeT  sZ   




&
zSymtableCodeGen.genCodeN)F)r9   )<__name__
__module____qualname__r=   rV   r]   r   r   Z	ifTextStrindentr   r;   r?   staticmethodrC   rL   r\   r`   rd   rb   rt   rv   rw   ry   rz   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   r   rK   r   r9   r9   r9   r:   r	      sn   
	


)









!




























	
 !"#$,r	   )syskeywordr   Zpysmi.mibinfor   Zpysmi.codegen.baser   r   Zpysmir   r   version_infor   r   r   r   r	   r9   r9   r9   r:   <module>   s   