1#
2# This file is part of pysnmp software.
3#
4# Copyright (c) 2005-2019, Ilya Etingof <etingof@gmail.com>
5# License: http://snmplabs.com/pysnmp/license.html
6#
7# THESE FUNCTIONS ARE OBSOLETE AND MUST NOT BE USED!
8# USE pysnmp.entity.rfc3413.oneliner.mibvar INSTEAD
9#
10from pyasn1.type import univ
11from pysnmp.smi.error import NoSuchObjectError
12
13
14# Name
15
16def mibNameToOid(mibView, name):
17    if isinstance(name[0], tuple):
18        f = lambda x='', y='': (x, y)
19        modName, symName = f(*name[0])
20        if modName:  # load module if needed
21            mibView.mibBuilder.loadModules(modName)
22        else:
23            mibView.mibBuilder.loadModules()  # load all (slow)
24        if symName:
25            oid, label, suffix = mibView.getNodeNameByDesc(symName, modName)
26        else:
27            oid, label, suffix = mibView.getFirstNodeName(modName)
28        suffix = name[1:]
29        modName, symName, _s = mibView.getNodeLocation(oid)
30        mibNode, = mibView.mibBuilder.importSymbols(
31            modName, symName
32        )
33        if hasattr(mibNode, 'createTest'):  # table column XXX
34            modName, symName, _s = mibView.getNodeLocation(oid[:-1])
35            rowNode, = mibView.mibBuilder.importSymbols(modName, symName)
36            return oid, rowNode.getInstIdFromIndices(*suffix)
37        else:  # scalar or incomplete spec
38            return oid, suffix
39    elif not isinstance(name, tuple):
40        name = tuple(univ.ObjectIdentifier(name))
41
42    oid, label, suffix = mibView.getNodeNameByOid(name)
43
44    return oid, suffix
45
46
47__scalarSuffix = (univ.Integer(0),)
48
49
50def oidToMibName(mibView, oid):
51    if not isinstance(oid, tuple):
52        oid = tuple(univ.ObjectIdentifier(oid))
53    _oid, label, suffix = mibView.getNodeNameByOid(oid)
54    modName, symName, __suffix = mibView.getNodeLocation(_oid)
55    mibNode, = mibView.mibBuilder.importSymbols(
56        modName, symName
57    )
58    if hasattr(mibNode, 'createTest'):  # table column
59        __modName, __symName, __s = mibView.getNodeLocation(_oid[:-1])
60        rowNode, = mibView.mibBuilder.importSymbols(__modName, __symName)
61        return (symName, modName), rowNode.getIndicesFromInstId(suffix)
62    elif not suffix:  # scalar
63        return (symName, modName), suffix
64    elif suffix == (0,):  # scalar
65        return (symName, modName), __scalarSuffix
66    else:
67        raise NoSuchObjectError(
68            str='No MIB registered that defines %s object, closest known parent is %s (%s::%s)' % (
69                univ.ObjectIdentifier(oid), univ.ObjectIdentifier(mibNode.name), modName, symName)
70        )
71
72
73# Value
74
75def cloneFromMibValue(mibView, modName, symName, value):
76    mibNode, = mibView.mibBuilder.importSymbols(
77        modName, symName
78    )
79    if hasattr(mibNode, 'syntax'):  # scalar
80        return mibNode.syntax.clone(value)
81    else:
82        return  # identifier
83