summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorelie <elie>2012-02-11 11:44:06 +0000
committerelie <elie>2012-02-11 11:44:06 +0000
commit75726f8283730439dc618e92972912a5bc86e008 (patch)
treeffe4c884bff7b15c16e58dad977889ece3007d2e
parent7ea7ed5eee02474310d732bc4a03c7ce97ea2c87 (diff)
downloadpysnmp-75726f8283730439dc618e92972912a5bc86e008.tar.gz
out of PYTHONPATH MIB paths now supported
-rw-r--r--CHANGES1
-rw-r--r--pysnmp/smi/builder.py32
2 files changed, 22 insertions, 11 deletions
diff --git a/CHANGES b/CHANGES
index f9b737c..3ff143c 100644
--- a/CHANGES
+++ b/CHANGES
@@ -25,6 +25,7 @@ Revision 4.2.2
module namespace so it could be used by ManagedObjects implementations.
- When running on Python3, SMI will re-raise exceptions with the original
traceback for easier diagnostics.
+- Out of PYTHONPATH MIB paths now supported.
- Fix to legacy MibBuilder.getMibPath() to prevent it from missing
.egg-based components in path.
- Fix to oneliner configuration routine that used to implicitly
diff --git a/pysnmp/smi/builder.py b/pysnmp/smi/builder.py
index 55c6795..116f712 100644
--- a/pysnmp/smi/builder.py
+++ b/pysnmp/smi/builder.py
@@ -43,7 +43,12 @@ class __AbstractMibSource:
def init(self):
if self.__inited is None:
self.__inited = self._init()
- return self.__inited
+ if self.__inited is self:
+ self.__inited = True
+ if self.__inited is True:
+ return self
+ else:
+ return self.__inited
def listdir(self): return self._listdir()
def read(self, f):
for pycSfx, pycSfxLen, pycMode in self.__sfx[imp.PY_COMPILED]:
@@ -90,15 +95,20 @@ class __AbstractMibSource:
class ZipMibSource(__AbstractMibSource):
def _init(self):
- p = __import__(
- self._srcName, globals(), locals(), self._srcName.split('.')
- )
- if hasattr(p, '__loader__'):
- self.__loader = p.__loader__
- self._srcName = self._srcName.replace('.', os.sep)
- return self
- else:
- return DirMibSource(os.path.split(p.__file__)[0]).init()
+ try:
+ p = __import__(
+ self._srcName, globals(), locals(), self._srcName.split('.')
+ )
+ if hasattr(p, '__loader__'):
+ self.__loader = p.__loader__
+ self._srcName = self._srcName.replace('.', os.sep)
+ return self
+ else:
+ # Dir relative to PYTHONPATH
+ return DirMibSource(os.path.split(p.__file__)[0]).init()
+ except ImportError:
+ # Dir relative to CWD
+ return DirMibSource(self._srcName).init()
def _parseDosTime(self, dosdate, dostime):
t = ( ((dosdate >> 9) & 0x7f) + 1980, # year
@@ -177,7 +187,7 @@ class MibBuilder:
self.__mibSources = [ s.init() for s in mibSources ]
debug.logger & debug.flagBld and debug.logger('setMibPath: new MIB sources %s' % (self.__mibSources,))
- def getMibSources(self): return self.__mibSources
+ def getMibSources(self): return tuple(self.__mibSources)
# Legacy/compatibility methods (won't work for .eggs)
def setMibPath(self, *mibPaths):