o
    BŠ]rA  ã                   @   sv  d dl Z d dlZd dlZd dlZd dlZd dlZzd dlZzejjZ	ej
jZej
jZW n
 ey5   eƒ ‚w W n# eyZ   d dlZe ¡ Z	dd„ e ¡ D ƒZdd„ e ¡ D ƒZY nw ee Zzd dlmZ W n eyr   dZY nw d dlmZ d dlmZ d d	lmZ ejd  d
kr–d dlZejefZnef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$dS )é    Nc                 C   ó"   g | ]}|d  t jkr|d ‘qS ©é   r   )ÚimpZ	PY_SOURCE©Ú.0Ús© r	   ú4/usr/lib/python3/dist-packages/pysnmp/smi/builder.pyÚ
<listcomp>   ó    ÿr   c                 C   r   r   )r   ZPY_COMPILEDr   r	   r	   r
   r      r   )ÚENOENTéÿÿÿÿ)Úversion)Úerror)Údebugr   c                   @   sf   e Zd Zdd„ Zdd„ Z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S )Ú__AbstractMibSourcec                 C   s0   || _ d | _tjtj@ ot d|  ¡ d S  d S )Nz	trying %s)Ú_srcNameÚ_AbstractMibSource__initedr   ÚloggerÚflagBld)ÚselfZsrcNamer	   r	   r
   Ú__init__6   s   $z__AbstractMibSource.__init__c                 C   s   d| j j| jf S )Nz%s(%r))Ú	__class__Ú__name__r   ©r   r	   r	   r
   Ú__repr__;   s   z__AbstractMibSource.__repr__c                    s<   t ƒ }|D ]‰ ˆ  d¡rq| ‡ fdd„tD ƒ¡ qt|ƒS )Nz	__init__.c                 3   s,    | ]}ˆ   |¡rˆ d t|ƒ … V  qd S ©N)ÚendswithÚlen)r   Úsfx©Úfr	   r
   Ú	<genexpr>E   s   €* z1__AbstractMibSource._uniqNames.<locals>.<genexpr>)ÚsetÚ
startswithÚupdateÚPY_SUFFIXESÚtuple)r   ÚfilesÚur	   r!   r
   Ú
_uniqNames>   s   
z__AbstractMibSource._uniqNamesÚ c                 C   s   | j |rtj| | pd S )Nr,   )r   ÚosÚsep)r   r"   r    r	   r	   r
   ÚfullPathK   s   z__AbstractMibSource.fullPathc                 C   s8   | j d u r|  ¡ | _ | j | u rd| _ | j du r| S | j S )NT)r   Ú_initr   r	   r	   r
   ÚinitN   s   



z__AbstractMibSource.initc                 C   s   |   ¡ S r   )Ú_listdirr   r	   r	   r
   ÚlistdirY   s   z__AbstractMibSource.listdirc              	   C   s  d }}t D ]‚}z|  || d¡\}}W n5 tyI   t ¡ d }tdks*|jtkr<tjtj	@ o:t d|| |f ¡ nt
 d|| |f ¡‚Y qw t|d d… kr{|dd … }t d|d d… ¡d }|dd … }tjtj	@ oxt d	||f ¡  ntjtj	@ o‡t d
| ¡ qtD ]R}z	|  || ¡}W n5 tyË   t ¡ d }tdks¬|jtkr¾tjtj	@ o¼t d|| |f ¡ nt
 d|| |f ¡‚Y q‹w tjtj	@ oÜt d	|| |f ¡  |dkrí||krít |¡|fS |dkr|  || d¡\}	}
t|	|
dƒ|
fS ttd|ƒ‚)Nr   Úrbé   zfile %s access error: %szMIB file %s access error: %sé   z<Lr   zfile %s mtime %dzbad magic in %sÚrÚexeczNo suitable module found)ÚBYTECODE_SUFFIXESÚ_getDataÚIOErrorÚsysÚexc_infor   Úerrnor   r   r   r   ÚMibLoadErrorÚPY_MAGIC_NUMBERÚstructÚunpackÚSOURCE_SUFFIXESÚ_getTimestampÚmarshalÚloadsÚcompile)r   r"   ZpycTimeZpyTimeZpycSfxZpycDataZpycPathÚwhyZpySfxZmodDataZpyPathr	   r	   r
   Úread\   s^   ÿ€€ø
ÿ€€ÿ€€ø €
z__AbstractMibSource.readc                 C   ó   t ƒ ‚r   ©ÚNotImplementedErrorr   r	   r	   r
   r0   ˜   ó   z__AbstractMibSource._initc                 C   rJ   r   rK   r   r	   r	   r
   r2   ›   rM   z__AbstractMibSource._listdirc                 C   rJ   r   rK   )r   r"   r	   r	   r
   rD   ž   rM   z!__AbstractMibSource._getTimestampc                 C   s
   t ƒ  d S r   rK   )r   r"   Úmoder	   r	   r
   r:   ¡   ó   
z__AbstractMibSource._getDataN)r,   r,   )r   Ú
__module__Ú__qualname__r   r   r+   r/   r1   r3   rI   r0   r2   rD   r:   r	   r	   r	   r
   r   5   s    
<r   c                   @   s:   e Zd Zdd„ Zedd„ ƒZdd„ Zdd„ Zdd
d„Zd	S )ÚZipMibSourcec                 C   s¤   zAt | jtƒ tƒ dgƒ}t|dƒr't|jdƒr'|j| _| j dtj	¡| _| W S t|dƒr:t
tj |j¡d ƒ ¡ W S t d|f ¡‚ tyQ   t
| jƒ ¡  Y S w )Nr   Ú
__loader__Ú_filesÚ.Ú__file__r   z%s access error)Ú
__import__r   ÚglobalsÚlocalsÚhasattrrS   Ú_ZipMibSource__loaderÚreplacer-   r.   ÚDirMibSourceÚpathÚsplitrV   r1   r   r?   ÚImportError)r   Úpr	   r	   r
   r0   ¦   s   
þzZipMibSource._initc              	   C   sP   | d? d@ d | d? d@ | d@ |d? d@ |d? d@ |d@ d	 d
d
d
f	}t  |¡S )Né	   é   i¼  é   é   é   é   é?   r   r   )ÚtimeÚmktime)ZdosdateZdostimeÚtr	   r	   r
   Ú_parseDosTime·   s   



ø
	zZipMibSource._parseDosTimec                 C   sH   g }| j j ¡ D ]}tj |¡\}}|| jkr| |¡ qt|  	|¡ƒS r   )
r[   rT   Úkeysr-   r^   r_   r   Úappendr(   r+   )r   Úlr"   Údr	   r	   r
   r2   Ä   s   

€zZipMibSource._listdirc                 C   sL   t j | j|¡}|| jjv r |  | jj| d | jj| d ¡S ttd|ƒ‚)Né   rd   zNo such file in ZIP archive)	r-   r^   Újoinr   r[   rT   rl   r;   r   ©r   r"   ra   r	   r	   r
   rD   Í   s   ÿzZipMibSource._getTimestampNc              	   C   sP   t j | j|¡}z	| j |¡|fW S  ty'   t ¡ }t	t
d||d f ƒ‚w )Nz'File or ZIP archive %s access error: %sr5   )r-   r^   rr   r   r[   Úget_dataÚ	Exceptionr<   r=   r;   r   )r   r"   rN   ra   rH   r	   r	   r
   r:   Ø   s   þzZipMibSource._getDatar   )	r   rP   rQ   r0   Ústaticmethodrl   r2   rD   r:   r	   r	   r	   r
   rR   ¥   s    
	rR   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
r]   c                 C   s   t j | j¡| _| S r   )r-   r^   Únormpathr   r   r	   r	   r
   r0   ã   s   zDirMibSource._initc              	   C   s^   z
|   t | j¡¡W S  ty.   t ¡ }tjtj	@ o*t d| j|d f ¡ Y dS  Y dS w )Nzlistdir() failed for %s: %sr5   r	   )
r+   r-   r3   r   ÚOSErrorr<   r=   r   r   r   )r   rH   r	   r	   r
   r2   ç   s   ÿþüzDirMibSource._listdirc                 C   sH   t j | j|¡}zt  |¡d W S  ty#   ttdt 	¡ d  |ƒ‚w )Né   zNo such file: %sr5   )
r-   r^   rr   r   Ústatrx   r;   r   r<   r=   rs   r	   r	   r
   rD   ð   s   ÿzDirMibSource._getTimestampc              	   C   sš   t j | jd¡}z$|t  | j¡v r+t j | j|¡}t||ƒ}| ¡ }| ¡  ||fW S W n tt	fyC   t
 ¡ }d||d f }Y nw d| }tt|ƒ‚)NÚ*z%File or directory %s access error: %sr5   zNo such file or directory: %s)r-   r^   rr   r   r3   ÚopenrI   Úcloser;   rx   r<   r=   r   )r   r"   rN   ra   ÚfpÚdatarH   Úmsgr	   r	   r
   r:   ÷   s   

ûþ
zDirMibSource._getDataN)r   rP   rQ   r0   r2   rD   r:   r	   r	   r	   r
   r]   â   s
    	r]   c                   @   s˜   e Zd Zej d¡Zd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!S )"Ú
MibBuilder)zpysnmp.smi.mibs.instanceszpysnmp.smi.mibsZpysnmp_mibsZPYSNMP_MODULE_IDFc                 C   sÈ   d | _ | _g }dD ]}|tjv r$tj|  tj¡D ]	}| t|ƒ¡ qq
|s;| jr;| j tj¡D ]	}| t|ƒ¡ q1| j	 tj¡D ]
}| 
dt|ƒ¡ qBi | _g | _i | _tƒ | _d | _| j|Ž  d S )Nr   )ZPYSNMP_MIB_PKGSZPYSNMP_MIB_DIRSZPYSNMP_MIB_DIR)ÚlastBuildIdÚ	_autoNamer-   Úenvironr_   Úpathseprn   rR   ÚdefaultMiscMibsÚdefaultCoreMibsÚinsertÚ
mibSymbolsÚ_MibBuilder__mibSourcesÚ_MibBuilder__modSeenr$   Ú_MibBuilder__modPathsSeenÚ_MibBuilder__mibCompilerÚsetMibSources)r   ZsourcesZevÚmr	   r	   r
   r     s$   
€
zMibBuilder.__init__c                 C   s   | j S r   )r   r   r	   r	   r
   ÚgetMibCompiler,  rM   zMibBuilder.getMibCompilerc                 C   s   |   t|ƒ¡ || _| S r   )ÚaddMibSourcesr]   r   )r   ZmibCompilerZdestDirr	   r	   r
   ÚsetMibCompiler/  s   zMibBuilder.setMibCompilerc                 G   s>   | j  dd„ |D ƒ¡ tjtj@ ot d| j f ¡ d S  d S )Nc                 S   ó   g | ]}|  ¡ ‘qS r	   ©r1   r   r	   r	   r
   r   7  ó    z,MibBuilder.addMibSources.<locals>.<listcomp>z!addMibSources: new MIB sources %s)rŠ   Úextendr   r   r   ©r   Z
mibSourcesr	   r	   r
   r‘   6  s   (zMibBuilder.addMibSourcesc                 G   s8   dd„ |D ƒ| _ tjtj@ ot d| j f ¡ d S  d S )Nc                 S   r“   r	   r”   r   r	   r	   r
   r   ;  r•   z,MibBuilder.setMibSources.<locals>.<listcomp>z!setMibSources: new MIB sources %s)rŠ   r   r   r   r—   r	   r	   r
   rŽ   :  s   (zMibBuilder.setMibSourcesc                 C   s
   t | jƒS r   )r(   rŠ   r   r	   r	   r
   ÚgetMibSources>  rO   zMibBuilder.getMibSourcesc                 G   s   | j dd„ |D ƒŽ  d S )Nc                 S   ó   g | ]}t |ƒ‘qS r	   )r]   ©r   Úxr	   r	   r
   r   C  r•   z)MibBuilder.setMibPath.<locals>.<listcomp>)rŽ   )r   ZmibPathsr	   r	   r
   Ú
setMibPathB  s   zMibBuilder.setMibPathc                 C   s>   d}|   ¡ D ]}t|tƒr|| ¡ f7 }qt d|f ¡‚|S )Nr	   z'MIB source is not a plain directory: %s)r˜   Ú
isinstancer]   r/   r   r?   )r   ÚpathsÚ	mibSourcer	   r	   r
   Ú
getMibPathE  s   
ÿzMibBuilder.getMibPathc                 K   s€  | j D ]Ÿ}tjtj@ ot d||f ¡ z	| |¡\}}W n ty:   tjtj@ o7t d||t ¡ d f ¡ Y qw | ||¡}|| j	v rUtjtj@ oRt d| ¡  nN| j	 
|¡ tjtj@ ogt d| ¡ | |dœ}zt||ƒ W n ty   | j	 |¡ t d|tjt ¡ Ž f ¡‚w || j|< tjtj@ o¡t d| ¡  || jvr¾t d	|o°|d
 d dd„ | j D ƒ¡f ¡‚| S )z+Load and execute MIB modules as Python codezloadModule: trying %s at %sz&loadModule: read %s from %s failed: %sr5   zloadModule: seen %szloadModule: evaluating %s)Z
mibBuilderÚuserCtxzMIB module '%s' load error: %szloadModule: loaded %sz+MIB file "%s" not found in search path (%s)z.py[co]z, c                 S   r™   r	   )Ústrrš   r	   r	   r
   r   {  r•   z)MibBuilder.loadModule.<locals>.<listcomp>)rŠ   r   r   r   rI   r;   r<   r=   r/   rŒ   Úaddr8   ru   Úremover   r?   Ú	tracebackÚformat_exceptionr‹   ÚMibNotFoundErrorrr   )r   ÚmodNamer¡   rŸ   ZcodeObjr    ZmodPathÚgr	   r	   r
   Ú
loadModuleP  sP   
€ÿ€ý
€€
ÿþ
€
ÿÿzMibBuilder.loadModulec              	   O   sð   |si }| j D ]}| ¡ D ]}d||< qqt|ƒ}|s#t d| f ¡‚|D ]P}z| j|fi |¤Ž W q% tjyu   | jrstjtj	@ oIt d| ¡ | jj
|| jd}d dd„ | ¡ D ƒ¡}|rjt d||f ¡‚| j|fi |¤Ž Y q%w | S )	z/Load (optionally, compiling) pysnmp MIB modulesNzNo MIB module to load at %sz(loadModules: calling MIB compiler for %s)ZgenTextsz; c                 S   s,   g | ]}|d v rt |dƒrt|jƒp|‘qS ))ZfailedÚmissingr   )rZ   r¢   r   rš   r	   r	   r
   r   —  s    ÿz*MibBuilder.loadModules.<locals>.<listcomp>z%s compilation error(s): %s)rŠ   r3   Úlistr   r§   rª   r   r   r   r   rG   Ú	loadTextsrr   Úvalues)r   ÚmodNamesr¡   rŸ   r¨   ÚstatusZerrsr	   r	   r
   ÚloadModules€  s4   

ÿÿ€€özMibBuilder.loadModulesc                 G   sz   |s	t | j ¡ ƒ}|D ]/}|| jvrt d|| f ¡‚|  |¡ | j | j| ¡ | j|= t	j
t	j@ o9t	 
d| ¡ q| S )NúNo module %s at %szunloadModules: %s)r¬   r‰   rm   r   r§   ÚunexportSymbolsrŒ   r¤   r‹   r   r   r   )r   r¯   r¨   r	   r	   r
   ÚunloadModules¡  s   

ÿ
€zMibBuilder.unloadModulesc                 O   sŽ   |st  d¡‚d}|D ]9}|| jvr| j|fi |¤Ž || jvr)t  d|| f ¡‚|| j| vr:t  d||| f ¡‚|| j| | f }q|S )Nz$importSymbols: empty MIB module namer	   zNo module %s loaded at %súNo symbol %s::%s at %s)r   ÚSmiErrorr‰   r±   r§   )r   r¨   ÚsymNamesr¡   r7   ÚsymNamer	   r	   r
   ÚimportSymbols±  s$   ÿ


ÿÿzMibBuilder.importSymbolsc                 O   sø   || j vr
i | j |< | j | }|D ] }tjtj@ o"t d|| jf ¡ ||d| j < |  jd7  _q| ¡ D ]<\}}||v rGt d||f ¡‚|| jkr_t	|t
ƒs_| ¡ }|rZ|}n| |¡ |||< tjtj@ oqt d||f ¡ q6|  jd7  _d S )Nz0exportSymbols: anonymous symbol %s::__pysnmp_%ldz__pysnmp_%ldr5   z Symbol %s already exported at %szexportSymbols: symbol %s::%s)r‰   r   r   r   rƒ   Úitemsr   r¶   ÚmoduleIDr   Ú
classTypesZgetLabelZsetLabelr‚   )r   r¨   ZanonymousSymsZ	namedSymsr‰   ZsymObjr¸   Zlabelr	   r	   r
   ÚexportSymbolsÅ  s4   


ÿ€
ÿ
ÿ
€zMibBuilder.exportSymbolsc                 G   s¤   || j vrt d|| f ¡‚| j | }|st| ¡ ƒ}|D ]"}||vr-t d||| f ¡‚||= tjtj@ o>t d||f ¡ q| j | sI| j |= |  jd7  _d S )Nr²   rµ   zunexportSymbols: symbol %s::%sr5   )	r‰   r   r¶   r¬   rm   r   r   r   r‚   )r   r¨   r·   r‰   r¸   r	   r	   r
   r³   ã  s    

ÿ€
zMibBuilder.unexportSymbolsN)r   rP   rQ   r-   r…   rr   r‡   r†   r»   r­   Úpysnmp_versionr   r   r   r’   r‘   rŽ   r˜   rœ   r    rª   r±   r´   r¹   r½   r³   r	   r	   r	   r
   r   
  s,    ÿ0!r   )%r-   r<   rA   rE   ri   r¥   Ú	importlibÚutilÚMAGIC_NUMBERr@   Ú	machineryrC   r9   ru   r`   r   Z	get_magicZget_suffixesr'   r>   r   Zpysnmpr   r¾   Z
pysnmp.smir   r   Úversion_infoÚtypesZ	ClassTypeÚtyper¼   Úobjectr   rR   r]   r   r	   r	   r	   r
   Ú<module>   sN   ÿþú	ÿp=(