def deepConvertConfdHKeyPathToPyKeyPath (confdHKeyPathPtr, pyKeyPath): """ This function performs a deep convertion of a confd_hkeypath object to a python KeyPath object. It reallocates all data memory, making the python KeyPath object its owner. pyKeyPath must be pre-constructed """ for logFunc in pyconfdlib._log("deep-convert-confd-hkeypath-to-pykeypath").debug4Func(): logFunc("deepConvertConfdHKeyPathToPyKeyPath called. confdHKeyPathPtr=%s, pyKeyPath=%s", ConfdHKeyPathLow.ConfdHKeyPathToStr(confdHKeyPathPtr), pyKeyPath) if not pyKeyPath or not confdHKeyPathPtr: for logFunc in pyconfdlib._log("deep-convert-confd-value-to-pyvalue-invalid-args").errorFunc(): logFunc("deepConvertConfdValueToPyValue invalid args: confdHKeyPathPtr=%s, pyKeyPath=%s", ConfdHKeyPathLow.ConfdHKeyPathToStr(confdHKeyPathPtr), pyKeyPath) return ReturnCodes.kGeneralError confdKeyPathLen = pyconfdlib.dll.py_getHkeypathLen(confdHKeyPathPtr) for logFunc in pyconfdlib._log("deep-convert-confd-hkeypath-to-pykeypath-len").debug4Func(): logFunc("deepConvertConfdHKeyPathToPyKeyPath: confdKetPathLen=%d, confdHKeyPathPtr=%s, pyKeyPath=%s", confdKeyPathLen, ConfdHKeyPathLow.ConfdHKeyPathToStr(confdHKeyPathPtr), pyKeyPath) for i in range(confdKeyPathLen): level = [] for j in range(pyconfdlib.MAXKEYLEN): confdValPtr = pyconfdlib.dll.py_getHkeypathValue(confdHKeyPathPtr, confdKeyPathLen-1-i, j, False) pyValue = Value() rc = ConfdValueLow.deepConvertConfdValueToPyValue(confdValPtr, pyValue) if rc != ReturnCodes.kOk: for logFunc in pyconfdlib._log("deep-convert-confd-hkeypath-to-pykeypath-convert-keypath-failed").errorFunc(): logFunc("deepConvertConfdHKeyPathToPyKeyPath: deepConvertConfdValueToPyValue "\ "failed: i=%d, j=%d, confdHKeyPathPtr=%s, pyKeyPath=%s, rc=%s", i, j, ConfdHKeyPathLow.ConfdHKeyPathToStr(confdHKeyPathPtr), pyKeyPath, str(rc)) return ReturnCodes.kGeneralError if pyValue.getType() == Value.kEmpty: break level.append(pyValue) if level: #for logFunc in pyconfdlib._log("deep-convert-confd-hkeypath-to-pykeypath-appending").debug4Func(): logFunc("deepConvertConfdHKeyPathToPyKeyPath: appending level=%s", level) pyKeyPath._key.append(level) for logFunc in pyconfdlib._log("deep-convert-confd-hkeypath-to-pykeypath-done").debug4Func(): logFunc("deepConvertConfdHKeyPathToPyKeyPath done. confdHKeyPathPtr=%s, pyKeyPath=%s", ConfdHKeyPathLow.ConfdHKeyPathToStr(confdHKeyPathPtr), pyKeyPath) return ReturnCodes.kOk
def deepConvertPyValueToConfdValue (pyValue, confdValuePtr, confdValIndex=0): """ This function performs a deep convertion of a python Value object to a confd_value_t object. It reallocates data memory, making the confd_value_t object its owner. Note: When using this function the it is NOT mandatory for the python Value object to exist as long as the confd_value_t object exists Note 2: confd_free_value MUST be activated on the confd_value_t object filled by this function as it is the owner of allocated memory confdValuePtr must be pre-allocated """ for logFunc in pyconfdlib._log("deep-convert-pyvalue-to-confd-value").debug4Func(): logFunc("deepConvertPyValueToConfdValue called. pyValue=%s, confdValuePtr=%s, confdValIndex=%d", pyValue, str(confdValuePtr), confdValIndex) if not pyValue or not confdValuePtr: for logFunc in pyconfdlib._log("deep-convert-pyvalue-to-confd-value-invalid-args").errorFunc(): logFunc("deepConvertPyValueToConfdValue invalid args: pyValue=%s, confdValuePtr=%s", pyValue, str(confdValuePtr)) return ReturnCodes.kGeneralError type_ = pyValue.getType() if (type_ == Value.kString): pyconfdlib.dll.py_CONFD_SET_STR_DUP(confdValuePtr, confdValIndex, pyValue._value) elif (type_ == Value.kBuf): (buf, len_) = pyValue._value pyconfdlib.dll.py_CONFD_SET_BUF_DUP(confdValuePtr, confdValIndex, buf, len_) elif (type_ == Value.kBinary): pyconfdlib.dll.py_CONFD_SET_BINARY_DUP(confdValuePtr, confdValIndex, pyValue._value, len(pyValue._value)) elif (type_ == Value.kOid): buf = pyValue._value arr = pyconfdlib.Int32ArrCreator(buf) pyconfdlib.dll.py_CONFD_SET_OID_DUP(confdValuePtr, confdValIndex, arr, len(buf)) else: ConfdValueLow.shallowConvertPyValueToConfdValue(pyValue, confdValuePtr, confdValIndex) for logFunc in pyconfdlib._log("deep-convert-pyvalue-to-confd-value-done").debug4Func(): logFunc( "deepConvertPyValueToConfdValue done. pyValue=%s, confdValuePtr=%s, type=%d, confdValIndex=%d", pyValue, ConfdValueLow.ConfdValueToStr(confdValuePtr), ConfdValueLow.getConfdValueType(confdValuePtr), confdValIndex) return ReturnCodes.kOk
def confd_notification_send_snmp (notificationCtx, notificationName, snmpVarbinds): if not pyconfdlib.checkTypes({notificationName : str}): return pyconfdlib.CONFD_BAD_PYTHON_USAGE for logFunc in pyconfdlib._log("confd-send-snmp").debug3Func(): logFunc("called. notificationCtx=%s, notificationName=%s, snmpVarbinds=%s", notificationCtx, notificationName, snmpVarbinds) numOfVarbinds = snmpVarbinds.getLen() confdSnmpVarbindPtr = snmp_varbind.SnmpVarbindLow.allocSnmpVarbind(numOfVarbinds) res = snmp_varbind.SnmpVarbindLow.deepConvertPySnmpVarbindToConfdSnmpVarbind(snmpVarbinds, confdSnmpVarbindPtr) if res != ReturnCodes.kOk: for logFunc in pyconfdlib._log("confd-send-snmp-deep-convert-failed").errorFunc(): logFunc( "deepConvertPySnmpVarbindToConfdSnmpVarbind(snmpVarbind=%s, confdSnmpVarbindPtr=%s) res=%s", snmpVarbind, str(confdSnmpVarbindPtr), str(res)) return ReturnCodes.kGeneralError for logFunc in pyconfdlib._log("confd-send-snmp-calling-library").debug3Func(): logFunc("calling library. notificationCtx=%s, notificationName=%s, snmpVarbinds=%s", notificationCtx, notificationName, snmpVarbinds) res = pyconfdlib.dll.py_confd_notification_send_snmp(notificationCtx, notificationName, confdSnmpVarbindPtr, numOfVarbinds) if res != pyconfdlib.CONFD_OK: for logFunc in pyconfdlib._log("confd-send-snmp-lib-failed").errorFunc(): logFunc("py_confd_notification_send_snmp() failed. res=%s", res) return ReturnCodes.kGeneralError for logFunc in pyconfdlib._log("confd-send-snmp-library-done").debug3Func(): logFunc("library done.") snmp_varbind.SnmpVarbindLow.deallocSnmpVarbind(confdSnmpVarbindPtr) return ReturnCodes.kOk
def maapi_set_values (sock, thandle, tagValues, keyPath): if not pyconfdlib.checkTypes({sock : socket.socket, thandle : int}): return pyconfdlib.CONFD_BAD_PYTHON_USAGE for logFunc in pyconfdlib._log("maapi-set-values").debug3Func(): logFunc("called. keyPath=%s, thandle=%s", keyPath, thandle) numOfValues = tagValues.getLen() confdTagValueTPtr = tag_values.TagValuesLow.allocConfdTagValues(numOfValues) res = tag_values.TagValuesLow.deepConvertPyTagValuesToConfdTagValues(tagValues, confdTagValueTPtr) if res != ReturnCodes.kOk: for logFunc in pyconfdlib._log("maapi-set-values-deep-convert-failed").errorFunc(): logFunc( "deepConvertPyTagValuesToConfdTagValues(tagValues=%s, confdTagValueTPtr=%s) res=%s", tagValues, str(confdTagValueTPtr), str(res)) return ReturnCodes.kGeneralError for logFunc in pyconfdlib._log("maapi-set-values-calling-library").debug3Func(): logFunc("calling library. keyPath=%s", keyPath) res = pyconfdlib.dll.py_maapi_set_values(sock.fileno(), thandle, confdTagValueTPtr, numOfValues, keyPath.getCannonicalStr()) if res != pyconfdlib.CONFD_OK: for logFunc in pyconfdlib._log("maapi-set-values-lib-failed").errorFunc(): logFunc("py_maapi_set_values() failed. res=%s", res) return ReturnCodes.kGeneralError for logFunc in pyconfdlib._log("maapi-set-values-library-done").debug3Func(): logFunc("library done. keyPath=%s. val=%s", keyPath, tag_values.TagValuesLow.ConfdTagValueToStr(confdTagValueTPtr, 0)) tag_values.TagValuesLow.deallocConfdTagValue(confdTagValueTPtr) return ReturnCodes.kOk
def getListKeys (self): for logFunc in pyconfdlib._log("get-list-keys").debug4Func(): logFunc("getListKeys called. self=%s", str(self)) keys = [] for level in self._key: if level: if not level[0].isXmlTag(): keys.append(copy.deepcopy(level[0])) for logFunc in pyconfdlib._log("get-list-keys-done").debug4Func(): logFunc("getListKeys done. self=%s, keys=%s", str(self), [str(key) for key in keys]) return keys
def copyPartial (self, other, lenToCopy): for logFunc in pyconfdlib._log("copy-partial").debug4Func(): logFunc("copyPartial called. self=%s, other=%s, lenToCopy=%d", str(self), str(other), lenToCopy) if other.getLen() < lenToCopy: for logFunc in pyconfdlib._log("copy-partial-too-short").errorFunc(): logFunc("copyPartial other keypath is too short. self=%s, other=%s, , otherLen=%d, lenToCopy=%d", str(self), str(other), other.getLen(), lenToCopy) self._key = copy.deepcopy(other._key[:lenToCopy]) for logFunc in pyconfdlib._log("copy-partial-done").debug4Func(): logFunc("copyPartial done. self=%s, other=%s, lenToCopy=%d", str(self), str(other), lenToCopy)
def joinKeyPath (self, keyPathToAdd): for logFunc in pyconfdlib._log("join-key-path").debug4Func(): logFunc("joinKeyPath called. self=%s, keyPathToAdd=%s", str(self), str(keyPathToAdd)) if (self.getLen() + len(keyPathToAdd._key)) > pyconfdlib.MAXDEPTH: for logFunc in pyconfdlib._log("join-key-path-too-long").errorFunc(): logFunc("joinKeyPath: result is too long, cannot join keypath. self=%s, selfLen=%d, keyPathToAdd=%d", str(self), self.getLen(), str(keyPathToAdd), len(keyPathToAdd._key)) return ReturnCodes.kGeneralError self._key.extend(copy.deepcopy(keyPathToAdd._key)) for logFunc in pyconfdlib._log("join-key-path-done").debug4Func(): logFunc("joinKeyPath done. self=%s", self._key) for logFunc in pyconfdlib._log("join-key-path-done").debug4Func(): logFunc("joinKeyPath done. self=%s, keyPathToAdd=%s", str(self), str(keyPathToAdd)) return ReturnCodes.kOk
def getPrefix (self): for logFunc in pyconfdlib._log("get-prefix").debug4Func(): logFunc("called. self=%s", str(self)) if self._key and self._key[0]: val = self._key[0][0] (tag, ns, prefix) = val.asXmlTag() if not prefix: for logFunc in pyconfdlib._log("get-prefix-as-xml-tag-failed").errorFunc(): logFunc("val.asXmlTag() returned None. val=%s, self=%s", str(val), str(self)) return None for logFunc in pyconfdlib._log("get-prefix-done").debug4Func(): logFunc("done. self=%s, prefix=%s", str(self), prefix) return prefix
def getNameSpaceId (self): for logFunc in pyconfdlib._log("get-namespace-id").debug4Func(): logFunc("getNameSpaceId called. self=%s", str(self)) if self._key and self._key[0]: val = self._key[0][0] (tag, ns, prefix) = val.asXmlTag() if not ns: for logFunc in pyconfdlib._log("get-namespace-id-as-xml-tag-failed").errorFunc(): logFunc("val.asXmlTag() returned None. val=%s, self=%s", str(val), str(self)) return None for logFunc in pyconfdlib._log("get-namespace-id-done").debug4Func(): logFunc("getNameSpaceId done. self=%s, ns=%s", str(self), ns) return ns
def func2 (self, tctx, confdKeypathPtr, next): for logFunc in pyconfdlib._log("confd_register_data_cb-func2-called").debug2Func(): logFunc("confd_register_data_cb::func2() called: tctx=%s, confdKeypathPtr=%s, next=%s", tctx, confdKeypathPtr, next) pyKeyPath = key_path.KeyPath() ret = key_path.ConfdHKeyPathLow.deepConvertConfdHKeyPathToPyKeyPath(confdKeypathPtr, pyKeyPath) if ret != ReturnCodes.kOk: for logFunc in pyconfdlib._log("confd_register_data_cb-func2-failed-convert").errorFunc(): logFunc("confd_register_data_cb::func2() deepConvertConfdHKeyPathToPyKeyPath() failed: tctx=%s, confdKeypathPtr=%s, next=%s,ret=%s", tctx, confdKeypathPtr, next, ret) return pyconfdlib.CONFD_ERR ret=self.callBack(pyconfdlib.ConfdTransContext(tctx), self.callpoint, self.callBackData, pyKeyPath, next) pyconfdlib.checkTypes({ret : pyconfdlib.ConfdReturnCode}) return ret.getValue()
def addKeyPathPrefix (self, value): for logFunc in pyconfdlib._log("add-key-path-prefix").debug4Func(): logFunc("addKeyPathPrefix called. self=%s, value=%s", str(self), str(value)) if self.getLen() == pyconfdlib.MAXDEPTH: for logFunc in pyconfdlib._log("add-key-path-prefix-too-long").errorFunc(): logFunc("addKeyPathPrefix: keypath is at max depth, cannot add a prefix. self=%s, value=%s", str(self), str(value)) return ReturnCodes.kGeneralError if isinstance(value, list): self._key.insert(0, copy.deepcopy(value)) else: self._key.insert(0, [copy.deepcopy(value)]) for logFunc in pyconfdlib._log("add-key-path-prefix-done").debug4Func(): logFunc("addKeyPathPrefix done. self=%s, value=%s", str(self), str(value)) return ReturnCodes.kOk
def insertToKeyPathAt (self, value, pos): for logFunc in pyconfdlib._log("insert-to-key-path-at").debug4Func(): logFunc("insertToKeyPathAt called. self=%s, value=%s, pos=%s", str(self), str(value), str(pos)) if self.getLen() == pyconfdlib.MAXDEPTH: for logFunc in pyconfdlib._log("add-key-path-postfix-too-long").errorFunc(): logFunc("addKeyPathPostfix: keypath is at max depth, cannot add a postfix. self=%s, value=%s", str(self), str(value)) return ReturnCodes.kGeneralError if isinstance(value, list): self._key.insert(pos, copy.deepcopy(value)) else: self._key.insert(pos, [copy.deepcopy(value)]) for logFunc in pyconfdlib._log("insert-to-key-path-at-done").debug4Func(): logFunc("insertToKeyPathAt done. self=%s, value=%s, pos=%s", str(self), str(value), str(pos)) return ReturnCodes.kOk
def deepConvertPyValueToConfdValue(pyValue, confdValuePtr, confdValIndex=0): """ This function performs a deep convertion of a python Value object to a confd_value_t object. It reallocates data memory, making the confd_value_t object its owner. Note: When using this function the it is NOT mandatory for the python Value object to exist as long as the confd_value_t object exists Note 2: confd_free_value MUST be activated on the confd_value_t object filled by this function as it is the owner of allocated memory confdValuePtr must be pre-allocated """ for logFunc in pyconfdlib._log( "deep-convert-pyvalue-to-confd-value").debug4Func(): logFunc( "deepConvertPyValueToConfdValue called. pyValue=%s, confdValuePtr=%s, confdValIndex=%d", pyValue, str(confdValuePtr), confdValIndex) if not pyValue or not confdValuePtr: for logFunc in pyconfdlib._log( "deep-convert-pyvalue-to-confd-value-invalid-args" ).errorFunc(): logFunc( "deepConvertPyValueToConfdValue invalid args: pyValue=%s, confdValuePtr=%s", pyValue, str(confdValuePtr)) return ReturnCodes.kGeneralError type_ = pyValue.getType() if (type_ == Value.kString): pyconfdlib.dll.py_CONFD_SET_STR_DUP(confdValuePtr, confdValIndex, pyValue._value) elif (type_ == Value.kBuf): (buf, len_) = pyValue._value pyconfdlib.dll.py_CONFD_SET_BUF_DUP(confdValuePtr, confdValIndex, buf, len_) elif (type_ == Value.kBinary): pyconfdlib.dll.py_CONFD_SET_BINARY_DUP(confdValuePtr, confdValIndex, pyValue._value, len(pyValue._value)) elif (type_ == Value.kOid): buf = pyValue._value arr = pyconfdlib.Int32ArrCreator(buf) pyconfdlib.dll.py_CONFD_SET_OID_DUP(confdValuePtr, confdValIndex, arr, len(buf)) else: ConfdValueLow.shallowConvertPyValueToConfdValue( pyValue, confdValuePtr, confdValIndex) for logFunc in pyconfdlib._log( "deep-convert-pyvalue-to-confd-value-done").debug4Func(): logFunc( "deepConvertPyValueToConfdValue done. pyValue=%s, confdValuePtr=%s, type=%d, confdValIndex=%d", pyValue, ConfdValueLow.ConfdValueToStr(confdValuePtr), ConfdValueLow.getConfdValueType(confdValuePtr), confdValIndex) return ReturnCodes.kOk
def func2 (self, userInfo, name, confdKeypathPtr, params, numParams): for logFunc in pyconfdlib._log("confd_register_data_cb-func2-called").debug2Func(): logFunc("confd_register_data_cb::func2() called: userInfo=%s, name=%s, confdKeypathPtr=%s, params=%s, numParams=%s", userInfo, name, confdKeypathPtr, params, numParams) pyKeyPath = key_path.KeyPath() ret = key_path.ConfdHKeyPathLow.deepConvertConfdHKeyPathToPyKeyPath(confdKeypathPtr, pyKeyPath) if ret != ReturnCodes.kOk: for logFunc in pyconfdlib._log("confd_register_data_cb-func2-failed-convert").errorFunc(): logFunc("confd_register_data_cb::func2() deepConvertConfdHKeyPathToPyKeyPath() failed: userInfo=%s, name=%s, confdKeypathPtr=%s, params=%s, numParams=%s, ret=%s", userInfo, name, confdKeypathPtr, params, numParams, ret) return pyconfdlib.CONFD_ERR ret=self.callBack(pyconfdlib.ConfdUserInfoCtx(userInfo), self.actionPoint, self.callBackData, name, pyKeyPath, params, numParams) pyconfdlib.checkTypes({ret : pyconfdlib.ConfdReturnCode}) return ret.getValue()
def getKeyPathPostfixFlattened (self, pathToRemove, leaveLowestKey): resKeyPath = KeyPath() for logFunc in pyconfdlib._log("get-key-path-postfix-flattened").debug4Func(): logFunc("getKeyPathPostfixFlattened called. self=%s, keyPathToRemove=%s, resKeyPath=%s, leaveLowestKey=%s", str(self), str(pathToRemove), str(resKeyPath), leaveLowestKey) for i, level in enumerate(self._key): if i < pathToRemove.getLen(): continue if level[0].isXmlTag(): resKeyPath._key.append(copy.deepcopy(level)) for logFunc in pyconfdlib._log("get-key-path-postfix-flattened-done").debug4Func(): logFunc("getKeyPathPostfixFlattened done. self=%s, keyPathToRemove=%s, resKeyPath=%s, leaveLowestKey=%s", str(self), str(pathToRemove), str(resKeyPath), leaveLowestKey) return resKeyPath
def isDescendantOf (self, other): for logFunc in pyconfdlib._log("is-descendant-of").debug4Func(): logFunc("isDescendantOf called. self=%s, other=%s", str(self), other) if self.getLen() >= other.getLen(): for logFunc in pyconfdlib._log("is-descendant-of-too-short").debug4Func(): logFunc("isDescendantOf False. self too short. self=%s, other=%s", str(self), other) return False if self.isEqualLen(other, self.getLen()): for logFunc in pyconfdlib._log("is-descendant-of-true").debug4Func(): logFunc("isDescendantOf True. self=%s, other=%s", str(self), other) return True for logFunc in pyconfdlib._log("is-descendant-of-false").debug4Func(): logFunc("isDescendantOf False. isEqualLen() returned False. self=%s, other=%s", str(self), other) return False
def validate(self, tctx, confdKeypathPtr, val): for logFunc in pyconfdlib._log("confd_register_range_valpoint_cb-validate-called").debug2Func(): logFunc("confd_register_range_valpoint_cb::validate() called: tctx=%s, confdKeypathPtr=%s, val=%s", tctx, confdKeypathPtr, val) pyKeyPath = key_path.KeyPath() ret = key_path.ConfdHKeyPathLow.deepConvertConfdHKeyPathToPyKeyPath(confdKeypathPtr, pyKeyPath) if ret != ReturnCodes.kOk: for logFunc in pyconfdlib._log("confd_register_range_valpoint_cb-validate-failed-convert").errorFunc(): logFunc("confd_register_range_valpoint_cb::validate() deepConvertConfdHKeyPathToPyKeyPath() failed: tctx=%s, confdKeypathPtr=%s, val=%s,ret=%s", tctx, confdKeypathPtr, val, ret) return pyconfdlib.CONFD_ERR valP=None if val: valP=ConfdValues(val) ret=self.callBack(pyconfdlib.ConfdTransContext(tctx), self.validationPoint, self.callBackData, pyKeyPath, valP) pyconfdlib.checkTypes({ret : pyconfdlib.ConfdReturnCode}) return ret.getValue()
def func1 (self, userInfo): for logFunc in pyconfdlib._log("confd_register_data_cb-func1-called").debug2Func(): logFunc("confd_register_data_cb::func1() called: userInfo=%s", userInfo) userInfoCtx = pyconfdlib.ConfdUserInfoCtx(userInfo) ret=self.callBack(userInfoCtx, self.actionPoint, self.callBackData) pyconfdlib.checkTypes({ret : pyconfdlib.ConfdReturnCode}) userInfoCtx.freeOpaque() return ret.getValue()
def confd_data_reply_next_key(tctx, val, next): """ values: a ConfdValues object, or None to signify no next key next: Value to supply as 'next' parameter in next callback invocation """ if not pyconfdlib.checkTypes({tctx : pyconfdlib.ConfdTransContext}): return pyconfdlib.CONFD_BAD_PYTHON_USAGE if val == None: return pyconfdlib.dll.py_confd_data_reply_next_key(tctx.getCtypePtr(), None, -1, -1) else: if not pyconfdlib.checkTypes({val : value.Value, next : int}): return pyconfdlib.CONFD_BAD_PYTHON_USAGE confdValPtr = value.ConfdValueLow.allocConfdValue() res = value.ConfdValueLow.shallowConvertPyValueToConfdValue(val, confdValPtr) if res != ReturnCodes.kOk: for logFunc in pyconfdlib._log("confd-data-reply-next-key-convert-failed").errorFunc(): logFunc("shallowConvertPyValueToConfdValue(val=%s, confdValPtr=%s) res=%s", val, str(confdValPtr), str(res)) return ReturnCodes.kGeneralError res = pyconfdlib.dll.py_confd_data_reply_next_key(tctx.getCtypePtr(), confdValPtr, 1, next) value.ConfdValueLow.deallocConfdValue(confdValPtr) return res
def allocConfdTagValues(numOfValues): confdTagValuePtr = pyconfdlib.dll.py_allocConfdTagValues(numOfValues) for logFunc in pyconfdlib._log("alloc-confd-tag-value").debug4Func(): logFunc( "allocConfdTagValue called. numOfValues=%d, confdTagValuePtr=%s", numOfValues, str(confdTagValuePtr)) return confdTagValuePtr
def allocSnmpVarbind(numOfSnmpVarbinds): snmpVarbindPtr = pyconfdlib.dll.py_allocSnmpVarbinds(numOfSnmpVarbinds) for logFunc in pyconfdlib._log("alloc-snmp-varbind").debug4Func(): logFunc( "allocSnmpVarbind() called. numOfSnmpVarbinds=%d, snmpVarbindPtr=%s", numOfSnmpVarbinds, str(snmpVarbindPtr)) return snmpVarbindPtr
def getAt (self, position): #for logFunc in pyconfdlib._log("get-at").debug4Func(): logFunc("getAt called. self=%s, position=%d", str(self), position) if (self.getLen() < position) or \ not len(self._key[position]): for logFunc in pyconfdlib._log("get-at-out-of-boundaries").errorFunc(): logFunc("getAt out-of-boundaries. self=%s, position=%d, len=%d", str(self), position, self.getLen()) return None #for logFunc in pyconfdlib._log("get-at-done").debug4Func(): logFunc("getAt done. self=%s, position=%d, value=%s", str(self), position, str(self._key[position][0])) return copy.copy(self._key[position][0])
def CONFD_GET_STR(self, index=0): self._raiseIfNullOrBadIndex(index) bufPtr=ctypes.c_char_p() pyconfdlib.dll.py_CONFD_GET_BUFPTR(self._myValuePtr, index, ctypes.byref(bufPtr)) # Null-terminated string, ctypes does all the work by itself ret=bufPtr.value for logFunc in pyconfdlib._log("get-buf").debug4Func(): logFunc("ConfdValues.CONFD_GET_STR(index=%s) returning %s.",index, ret) return ret
def CONFD_GET_BUF (self, index=0): self._raiseIfNullOrBadIndex(index) bufPtr=ctypes.pointer(ctypes.c_char()) pyconfdlib.dll.py_CONFD_GET_BUFPTR(self._myValuePtr, index, ctypes.cast(ctypes.byref(bufPtr), ctypes.POINTER(ctypes.c_char_p)) ) bufSize=pyconfdlib.Int64Type() pyconfdlib.dll.py_CONFD_GET_BUFSIZE(self._myValuePtr, index, ctypes.byref(bufSize)) ret=bufPtr[:bufSize.value] for logFunc in pyconfdlib._log("get-buf").debug4Func(): logFunc("ConfdValues.CONFD_GET_BUF(index=%s) returning %s.",index, ret) return ret
def asIPv6Prefix(self, index=0): self._raiseIfNullOrBadIndex(index) type_=self.getType() if (type_ == pyconfdlib.C_IPV6PREFIX): ret=str(self) else: errorMsg="ConfdValues::asIPv6Prefix() called, type is %s" for logFunc in pyconfdlib._log("as-ipv6-prefix-bad").errorFunc(): logFunc(errorMsg, type_) Captain().processFatal(errorMsg % type_) return ret
def asBool (self, index=0): self._raiseIfNullOrBadIndex(index) type_=self.getType() if type_==pyconfdlib.C_BOOL: ret=self.CONFD_GET_BOOL(index) else: errorMsg="ConfdValues::asBool() called, type is %s" for logFunc in pyconfdlib._log("as-bool-bad").errorFunc(): logFunc(errorMsg, type_) a.infra.process.processFatal(errorMsg % type_) return ret
def asBuf(self, index=0): self._raiseIfNullOrBadIndex(index) type_=self.getType() if (type_==pyconfdlib.C_BUF): ret=self.CONFD_GET_STR(index) else: errorMsg="ConfdValues::asBuf() called, type is %s" for logFunc in pyconfdlib._log("as-buf-bad").errorFunc(): logFunc(errorMsg, type_) Captain().processFatal(errorMsg % type_) return ret
def asIPv6Prefix(self, index=0): self._raiseIfNullOrBadIndex(index) type_ = self.getType() if (type_ == pyconfdlib.C_IPV6PREFIX): ret = str(self) else: errorMsg = "ConfdValues::asIPv6Prefix() called, type is %s" for logFunc in pyconfdlib._log("as-ipv6-prefix-bad").errorFunc(): logFunc(errorMsg, type_) Captain().processFatal(errorMsg % type_) return ret
def asBool(self, index=0): self._raiseIfNullOrBadIndex(index) type_ = self.getType() if type_ == pyconfdlib.C_BOOL: ret = self.CONFD_GET_BOOL(index) else: errorMsg = "ConfdValues::asBool() called, type is %s" for logFunc in pyconfdlib._log("as-bool-bad").errorFunc(): logFunc(errorMsg, type_) a.infra.process.processFatal(errorMsg % type_) return ret
def asBuf(self, index=0): self._raiseIfNullOrBadIndex(index) type_ = self.getType() if (type_ == pyconfdlib.C_BUF): ret = self.CONFD_GET_STR(index) else: errorMsg = "ConfdValues::asBuf() called, type is %s" for logFunc in pyconfdlib._log("as-buf-bad").errorFunc(): logFunc(errorMsg, type_) Captain().processFatal(errorMsg % type_) return ret
def copyStaticPartUpToLowestList (self, other): for logFunc in pyconfdlib._log("copy-static-part-up-to-lowest-list").debug4Func(): logFunc("called. self=%s, other=%s", str(self), str(other)) self._key = [] startCopying = False for level in reversed(other._key): if level: if startCopying: self._key.insert(0, copy.deepcopy(level)) if not level[0].isXmlTag(): startCopying = True """if level: if level[0].isXmlTag(): if startCopying: self._key.insert(0, copy.deepcopy(level)) else: startCopying = True""" for logFunc in pyconfdlib._log("copy-static-part-up-to-lowest-list-done").debug4Func(): logFunc("done. self=%s, other=%s", str(self), str(other))
def CONFD_GET_STR(self, index=0): self._raiseIfNullOrBadIndex(index) bufPtr = ctypes.c_char_p() pyconfdlib.dll.py_CONFD_GET_BUFPTR(self._myValuePtr, index, ctypes.byref(bufPtr)) # Null-terminated string, ctypes does all the work by itself ret = bufPtr.value for logFunc in pyconfdlib._log("get-buf").debug4Func(): logFunc("ConfdValues.CONFD_GET_STR(index=%s) returning %s.", index, ret) return ret
def isTagEqual(self, keyDepth, ns, tag): """ keyDepth : int ns : string or int tag: string or int """ pyconfdlib.checkTypes({ns: [int, str], tag: [int, str]}) for logFunc in pyconfdlib._log("is-tag-equal-called").debug3Func(): logFunc("ConfdHkeypath.isTagEqual(): ns=%s, tag=%s", ns, tag) if isinstance(ns, str): ns = pyconfdlib.strToHash(ns) if isinstance(tag, str): tag = pyconfdlib.strToHash(tag) if (keyDepth > self.getLen()): for logFunc in pyconfdlib._log( "is-tag-equal-too-short").debug3Func(): logFunc( "ConfdHkeypath.isTagEqual(): tag too short. self=%s, keyDepth=%s", self, keyDepth) return False searchKey = self.getLen() - keyDepth - 1 value = self.getValue(searchKey, 0) valueType = value.getType() valueNs = value.CONFD_GET_XMLTAG_NS() valueTag = value.CONFD_GET_XMLTAG() for logFunc in pyconfdlib._log("is-tag-equal-value").debug3Func(): logFunc( "ConfdHkeypath.isTagEqual(): value: type=%s, ns=%s (%d), tag=%s (%d)", valueType, pyconfdlib.hashToStr(valueNs), valueNs, pyconfdlib.hashToStr(valueTag), valueTag) if valueType != pyconfdlib.C_XMLTAG: for logFunc in pyconfdlib._log( "is-tag-equal-wrong-type").debug3Func(): logFunc( "ConfdHkeypath.isTagEqual(): wrong type. self=%s, value.getType()=%s", self, valueType) return False if valueNs != ns: for logFunc in pyconfdlib._log( "is-tag-equal-wrong-ns").debug3Func(): logFunc( "ConfdHkeypath.isTagEqual(): wrong ns. self=%s, value.ns()=%s, ns=%s", self, valueNs, ns) return False if valueTag != tag: for logFunc in pyconfdlib._log( "is-tag-equal-wrong-tag").debug3Func(): logFunc( "ConfdHkeypath.isTagEqual(): wrong tag. self=%s, value.tag=%s, tag=%s", self, valueTag, tag) return False for logFunc in pyconfdlib._log("is-tag-equal-true").debug3Func(): logFunc( "ConfdHkeypath.isTagEqual(): true. self=%s, keyDepth=%s, ns=%s, tag=%s", self, keyDepth, ns, tag) return True
def deepConvertConfdTagValuesToPyTagValues(confdTagValuePtr, numOfValues, pyTagValues): """ This function performs a deep convertion of an array of confd_tag_value_t objects to a python TagValues object. It reallocates data memory, making the python TagValues object its owner. Note: When using this function the it is NOT mandatory for the confd_tag_value_t object to exist as long as the python TagValues object exists pyTagValues must be pre-constructed """ for logFunc in pyconfdlib._log( "deep-convert-confd-tag-values-to-py-tagvalues").debug4Func(): logFunc( "deepConvertConfdTagValuesToPyTagValues called. pyTagValues=%s, numOfValues=%d, confdTagValuePtr=%s", str(pyTagValues), numOfValues, str(confdTagValuePtr)) if not pyTagValues or not confdTagValuePtr: for logFunc in pyconfdlib._log( "deep-convert-confd-tag-values-to-py-tagvalues-invalid-args" ).errorFunc(): logFunc( "deepConvertPyTagValuesToConfdTagValues invalid args: pyTagValues=%s, numOfValues=%d, confdTagValuePtr=%s", pyTagValues, numOfValues, str(confdTagValuePtr)) return ReturnCodes.kGeneralError confdTagVal = None for i in range(numOfValues): for logFunc in pyconfdlib._log( "deep-convert-confd-tag-values-to-py-tagvalues-iteration" ).debug4Func(): logFunc("iteration %d", i) confdVal = pyconfdlib.dll.py_getValPtrFromTagVal( confdTagValuePtr, i) pyValue = Value() rc = ConfdValueLow.deepConvertConfdValueToPyValue( confdVal, pyValue) if rc != ReturnCodes.kOk: for logFunc in pyconfdlib._log( "deep-convert-confd-tag-values-to-py-tagvalues-deep-convert-value-failed" ).errorFunc(): logFunc( "deepConvertConfdValueToPyValue() failed. confdVal=%s, i=%d", ConfdValueLow(ConfdValueToStr(confdVal), i)) return ReturnCodes.kGeneralError tag = pyconfdlib.dll.py_getTagFromTagVal(confdTagValuePtr, i) tagStr = pyconfdlib.hashToStr(tag) ns = pyconfdlib.dll.py_getNSFromTagVal(confdTagValuePtr, i) nsStr = pyconfdlib.hashToStr(ns) for logFunc in pyconfdlib._log( "deep-convert-confd-tag-values-to-py-tagvalues-adding" ).debug4Func(): logFunc("adding tag-value %d. pyValue=%s, tagStr=%s, nsStr=%s", i, pyValue, tagStr, nsStr) pyTagValues.push((tagStr, nsStr), pyValue) for logFunc in pyconfdlib._log( "deep-convert-confd-tag-values-to-py-tagvalues-done" ).debug4Func(): logFunc( "deepConvertPyTagValuesToConfdTagValues done. pyTagValues=%s, numOfValues=%d, confdTagValuePtr=%s", pyTagValues, numOfValues, str(confdTagValuePtr)) return ReturnCodes.kOk
def CONFD_GET_BUF(self, index=0): self._raiseIfNullOrBadIndex(index) bufPtr = ctypes.pointer(ctypes.c_char()) pyconfdlib.dll.py_CONFD_GET_BUFPTR( self._myValuePtr, index, ctypes.cast(ctypes.byref(bufPtr), ctypes.POINTER(ctypes.c_char_p))) bufSize = pyconfdlib.Int64Type() pyconfdlib.dll.py_CONFD_GET_BUFSIZE(self._myValuePtr, index, ctypes.byref(bufSize)) ret = bufPtr[:bufSize.value] for logFunc in pyconfdlib._log("get-buf").debug4Func(): logFunc("ConfdValues.CONFD_GET_BUF(index=%s) returning %s.", index, ret) return ret
def clone (self): """ Returns a new instance with the same values as this instance. The new instance owns the wrapped confd_value_t struct. """ # If we are wrapping a NULL pointer, create a similar object if not self._myValuePtr: newObject=ConfdValues(confdValueTPtr=pyconfdlib.ConfdValueTPtr(), numValues=self._mySize) else: newObject=ConfdValues(numValues=self._mySize) for i in range(0, self._mySize): pyconfdlib.dll.py_confd_value_dup_to(self._myValuePtr, i, newObject._myValuePtr, i) for logFunc in pyconfdlib._log("cloned-null").debug5Func(): logFunc("clone() done: self=%s, newObject=%s", self, newObject) return newObject
def asString (self, index=0): self._raiseIfNullOrBadIndex(index) type_=self.getType() if (type_==pyconfdlib.C_STR) or (type_==pyconfdlib.C_BUF): ret=self.CONFD_GET_STR(index) elif (type_ == pyconfdlib.C_IPV4) or \ (type_ == pyconfdlib.C_IPV6) or \ (type_ == pyconfdlib.C_IPV4PREFIX) or \ (type_ == pyconfdlib.C_IPV6PREFIX): ret=str(self) else: errorMsg="ConfdValues::asString() called, type is %s" for logFunc in pyconfdlib._log("as-string-bad").errorFunc(): logFunc(errorMsg, type_) return ret
def getValue (self, keyIndex=0): self._fatalIfNull() val=pyconfdlib.dll.py_maapiCursorGetValue(self._myMaapiCursorTPtr, keyIndex) if not val: msg="MaapiCursor.getValue(): Got a NULL pointer for getValue(keyIndex=%s)" % keyIndex for logFunc in pyconfdlib._log("maapi-cursor-null").errorFunc(): logFunc(msg) return None pyValue = value.Value() res = value.ConfdValueLow.deepConvertConfdValueToPyValue(val, pyValue) if res != ReturnCodes.kOk: for logFunc in self._log("maapi-cursor-get-value-deep-convert-old").errorFunc(): logFunc("deepConvertConfdValueToPyValue() failed. val=%s, res=%s", str(val), str(res)) return None return pyValue
def confd_data_reply_tag_value_array(tctx, tagValues): """ tagValues: a collection of tag values """ if not pyconfdlib.checkTypes({tctx : pyconfdlib.ConfdTransContext, tagValues : tag_values.TagValues}): return pyconfdlib.CONFD_BAD_PYTHON_USAGE confdTagValueTPtr = tag_values.TagValuesLow.allocConfdTagValues(tagValues.getLen()) res = tag_values.TagValuesLow.deepConvertPyTagValuesToConfdTagValues(tagValues, confdTagValueTPtr) if res != ReturnCodes.kOk: for logFunc in pyconfdlib._log("confd-data-reply-tag-value-array-deep-convert-failed").errorFunc(): logFunc( "deepConvertPyTagValuesToConfdTagValues(tagValues=%s, confdTagValueTPtr=%s) res=%s", tagValues, str(confdTagValueTPtr), str(res)) return ReturnCodes.kGeneralError for logFunc in pyconfdlib._log("confd-data-reply-tag-value-array-deep-convert-succeeded").debug2Func(): logFunc( "deepConvertPyTagValuesToConfdTagValues(tagValues=%s, confdTagValueTPtr=%s, len=%d) succeeded", tagValues, str(confdTagValueTPtr), tagValues.getLen()) res = pyconfdlib.dll.py_confd_data_reply_tag_value_array(tctx.getCtypePtr(), confdTagValueTPtr, tagValues.getLen()) tag_values.TagValuesLow.deallocConfdTagValue(confdTagValueTPtr) return res
def isEqualLen (self, other, compareLen): for logFunc in pyconfdlib._log("is-equal-len").debug4Func(): logFunc("isEqualLen called. self=%s, other=%s, len=%d", str(self), str(other), compareLen) if (self.getLen() < compareLen) or \ (other.getLen() < compareLen): return False for i, level in enumerate(self._key): if i < compareLen: if len(level) != len(other._key[i]): return False for j, val in enumerate(level): if not val.isEqual(other._key[i][j]): return False else: break return True
def asString(self, index=0): self._raiseIfNullOrBadIndex(index) type_ = self.getType() if (type_ == pyconfdlib.C_STR) or (type_ == pyconfdlib.C_BUF): ret = self.CONFD_GET_STR(index) elif (type_ == pyconfdlib.C_IPV4) or \ (type_ == pyconfdlib.C_IPV6) or \ (type_ == pyconfdlib.C_IPV4PREFIX) or \ (type_ == pyconfdlib.C_IPV6PREFIX): ret = str(self) else: errorMsg = "ConfdValues::asString() called, type is %s" for logFunc in pyconfdlib._log("as-string-bad").errorFunc(): logFunc(errorMsg, type_) return ret
def clone(self): """ Returns a new instance with the same values as this instance. The new instance owns the wrapped confd_value_t struct. """ # If we are wrapping a NULL pointer, create a similar object if not self._myValuePtr: newObject = ConfdValues(confdValueTPtr=pyconfdlib.ConfdValueTPtr(), numValues=self._mySize) else: newObject = ConfdValues(numValues=self._mySize) for i in range(0, self._mySize): pyconfdlib.dll.py_confd_value_dup_to(self._myValuePtr, i, newObject._myValuePtr, i) for logFunc in pyconfdlib._log("cloned-null").debug5Func(): logFunc("clone() done: self=%s, newObject=%s", self, newObject) return newObject
def deepConvertPyTagValuesToConfdTagValues(pyTagValues, confdTagValuePtr): """ This function performs a deep convertion of a python TagValues object to an array of confd_tag_value_t objects. It reallocates data memory, making the confd_tag_value_t object its owner. Note: When using this function the it is NOT mandatory for the python TagValues object to exist as long as the confd_tag_value_t object exists Note 2: confd_free_value MUST be activated on the confd_value_t object filled by this function as it is the owner of allocated memory confdTagValuePtr must be pre-allocated """ for logFunc in pyconfdlib._log( "deep-convert-py-tagvalues-to-confd-tag-values").debug4Func(): logFunc( "deepConvertPyTagValuesToConfdTagValues called. pyTagValues=%s, confdTagValuePtr=%s", str(pyTagValues), str(confdTagValuePtr)) if not pyTagValues or not confdTagValuePtr: for logFunc in pyconfdlib._log( "deep-convert-py-tagvalues-to-confd-tag-values-invalid-args" ).errorFunc(): logFunc( "deepConvertPyTagValuesToConfdTagValues invalid args: pyTagValues=%s, confdTagValuePtr=%s", pyTagValues, str(confdTagValuePtr)) return ReturnCodes.kGeneralError confdValPtr = None for (i, pyTV) in enumerate(pyTagValues._tagValues): (xmlTag, val) = pyTV (tag, ns) = xmlTag rc = pyconfdlib.dll.py_setTagToTagVal(confdTagValuePtr, i, pyconfdlib.hashIfString(tag)) if rc != pyconfdlib.CONFD_OK: for logFunc in pyconfdlib._log( "deep-convert-confd-value-to-pyvalue-set-tag-failed" ).errorFunc(): logFunc( "deepConvertConfdValueToPyValue py_setTagToTagVal() failed: confdTagValuePtr=%s, pyTagValues=%s, i=%d, tag=%d, rc=%s", ConfdValueLow.ConfdValueToStr(confdTagValuePtr), pyTagValues, i, tag, str(rc)) return ReturnCodes.kGeneralError rc = pyconfdlib.dll.py_setNSToTagVal(confdTagValuePtr, i, pyconfdlib.hashIfString(ns)) if rc != pyconfdlib.CONFD_OK: for logFunc in pyconfdlib._log( "deep-convert-confd-value-to-pyvalue-set-ns-failed" ).errorFunc(): logFunc( "deepConvertConfdValueToPyValue py_setTagToTagVal() failed: confdTagValuePtr=%s, pyTagValues=%s, i=%d, ns=%d, rc=%s", ConfdValueLow.ConfdValueToStr(confdTagValuePtr), pyTagValues, i, ns, str(rc)) return ReturnCodes.kGeneralError confdValPtr = pyconfdlib.dll.py_getValPtrFromTagVal( confdTagValuePtr, i) rc = ConfdValueLow.deepConvertPyValueToConfdValue(val, confdValPtr) if rc != ReturnCodes.kOk: for logFunc in pyconfdlib._log( "deep-convert-confd-value-to-pyvalue-deep-convert-value-failed" ).errorFunc(): logFunc( "deepConvertConfdValueToPyValue deepConvertPyValueToConfdValue() failed: confdTagValuePtr=%s, pyTagValues=%s, i=%d, rc=%s", ConfdValueLow.ConfdValueToStr(confdTagValuePtr), pyTagValues, i, str(rc)) return ReturnCodes.kGeneralError for logFunc in pyconfdlib._log( "deep-convert-py-tagvalues-to-confd-tag-values-done" ).debug4Func(): logFunc( "deepConvertPyTagValuesToConfdTagValues done. pyTagValues=%s, confdTagValuePtr=%s", pyTagValues, str(confdTagValuePtr)) return ReturnCodes.kOk
def addKeyPathPostfix(self, value): for logFunc in pyconfdlib._log("add-key-path-postfix").debug4Func(): logFunc("ConfdHkeypath.addKeyPathPostfix()(): old=%s, value=%s", self, value) if (self._myHkeypathPtr): # move each value column one step backwards len_ = self.getLen() if (len_ + 1 < pyconfdlib.MAXDEPTH): temp = ConfdHkeypath() value.copyTo(temp.getValue(0, 0, False)) temp.getValue(1, 0, False).CONFD_SET_NOEXISTS() temp.setLen(1) for i in range(len_): for j in range(pyconfdlib.MAXKEYLEN): for logFunc in pyconfdlib._log( "add-key-path-postfix-moving").debug4Func(): logFunc( "ConfdHkeypath.addKeyPathPostfix()(): moving value, i=%s, j=%s, v=%s", i, j, self.getValue(i, j)) self.getValue(i, j).copyTo(temp.getValue(i + 1, j, False)) temp.getValue(i + 1, j + 1, False).CONFD_SET_NOEXISTS() for logFunc in pyconfdlib._log( "add-key-path-postfix-after-moving" ).debug4Func(): logFunc( "ConfdHkeypath.addKeyPathPostfix()(): after moving value, i=%s, j=%s, v=%s", i, j, self.getValue(i, j)) if self.getValue(i, j + 1).getType() == pyconfdlib.C_NOEXISTS: break temp.setLen(temp.getLen() + 1) self._free() # Own the pointer instead of temp self._myHkeypathPtr = temp._myHkeypathPtr temp._myHkeypathPtr = None self._myIsMine = True else: # Cant add another level - the path is too deep already for logFunc in pyconfdlib._log( "add-key-path-postfix-too-deep").errorFunc(): logFunc( "ConfdHkeypath.addKeyPathPostfix() - too deep - fatal. myKeyPath=%s, value=%s", self._myHkeypathPtr, value) a.infra.process.processFatal( "ConfdHkeypath.addKeyPathPostfix() - too deep - fatal. myKeyPath=%s, value=%s" % (self._myHkeypathPtr, value)) else: # create a new key path temp = self.__class__() value.copyTo(temp.getValue(0, 0, False)) temp.getValue(1, 0, False).CONFD_SET_NOEXISTS() temp.setLen(1) # Own the pointer instead of temp self._myHkeypathPtr = temp._myHkeypathPtr temp._myHkeypathPtr = None self._myIsMine = True for logFunc in pyconfdlib._log( "add-key-path-postfix-new-key-path").debug3Func(): logFunc( "ConfdHkeypath.addKeyPathPostfix() - new keyPath. myKeyPath=%s, value=%s", self._myHkeypathPtr, value) for logFunc in pyconfdlib._log( "add-key-path-postfix-after").debug4Func(): logFunc( "ConfdHkeypath.addKeyPathPostfix() - after. myKeyPath=%s, value=%s", self._myHkeypathPtr, value)
def deallocSnmpVarbind(snmpVarbindPtr): for logFunc in pyconfdlib._log("dealloc-snmp-varbind").debug4Func(): logFunc("py_deallocSnmpVarbinds called. snmpVarbindPtr=%s", str(snmpVarbindPtr)) pyconfdlib.dll.py_deallocSnmpVarbinds(snmpVarbindPtr)
def deepConvertPySnmpVarbindToConfdSnmpVarbind(pySnmpVarbind, confdSnmpVarbindPtr): """ This function performs a deep convertion of a python SnmpVarbind object to an array of confd_snmp_varbind objects. It reallocates data memory, making the confd_snmp_varbind object its owner. Note: When using this function the it is NOT mandatory for the python SnmpVarbind object to exist as long as the confd_snmp_varbind object exists Note 2: confd_free_value MUST be activated on the confd_value_t object filled by this function as it is the owner of allocated memory confdTagValuePtr must be pre-allocated """ for logFunc in pyconfdlib._log( "deep-convert-py-snmp-varbind-to-confd-snmp-varbinds" ).debug4Func(): logFunc( "deepConvertPySnmpVarbindToConfdSnmpVarbind called. pySnmpVarbind=%s, confdSnmpVarbindPtr=%s", str(pySnmpVarbind), str(confdSnmpVarbindPtr)) if not pySnmpVarbind or not confdSnmpVarbindPtr: for logFunc in pyconfdlib._log( "deep-convert-py-snmp-varbinds-to-confd-snmp-varbinds-invalid-args" ).errorFunc(): logFunc( "deepConvertPySnmpVarbindToConfdSnmpVarbind invalid args: pySnmpVarbind=%s, confdSnmpVarbindPtr=%s", pySnmpVarbind, str(confdSnmpVarbindPtr)) return ReturnCodes.kGeneralError confdValPtr = None indexOffset = 0 for (i, v) in enumerate(pySnmpVarbind._variables): (var, val) = v rc = pyconfdlib.dll.py_setSnmpVarbindVariable( confdSnmpVarbindPtr, i + indexOffset, var) if rc != pyconfdlib.CONFD_OK: for logFunc in pyconfdlib._log( "deep-convert-py-snmp-varbinds-to-confd-snmp-varbinds-set-variable-failed" ).errorFunc(): logFunc( "deepConvertPySnmpVarbindToConfdSnmpVarbind py_setSnmpVarbindVariable() failed: pySnmpVarbind=%s, i=%d, indexOffset=%d, var=%d, rc=%s", pySnmpVarbind, i, indexOffset, var, str(rc)) return ReturnCodes.kGeneralError confdValPtr = pyconfdlib.dll.py_getValPtrFromSnmpVarbind( confdSnmpVarbindPtr, i + indexOffset) rc = ConfdValueLow.deepConvertPyValueToConfdValue(val, confdValPtr) if rc != ReturnCodes.kOk: for logFunc in pyconfdlib._log( "deep-convert-py-snmp-varbinds-to-confd-snmp-varbinds-deep-convert-value-failed" ).errorFunc(): logFunc( "deepConvertPySnmpVarbindToConfdSnmpVarbind deepConvertPyValueToConfdValue() failed: pySnmpVarbind=%s, i=%d, indexOffset=%d, val=%d, rc=%s", pySnmpVarbind, i, indexOffset, val, str(rc)) return ReturnCodes.kGeneralError indexOffset += len(pySnmpVarbind._variables) for (i, v) in enumerate(pySnmpVarbind._oids): (oid, val) = v oidArray = (pyconfdlib.Uint32Type * len(oid))() for index in range(len(oid)): oidArray[index] = oid[index] rc = pyconfdlib.dll.py_setSnmpVarbindOid(confdSnmpVarbindPtr, i + indexOffset, oidArray, len(oid)) if rc != pyconfdlib.CONFD_OK: for logFunc in pyconfdlib._log( "deep-convert-py-snmp-varbinds-to-confd-snmp-varbinds-set-oid-failed" ).errorFunc(): logFunc( "deepConvertPySnmpVarbindToConfdSnmpVarbind py_setSnmpVarbindOid() failed: pySnmpVarbind=%s, i=%d, indexOffset=%d, oid=%d, rc=%s", pySnmpVarbind, i, indexOffset, oid, str(rc)) return ReturnCodes.kGeneralError confdValPtr = pyconfdlib.dll.py_getValPtrFromSnmpVarbind( confdSnmpVarbindPtr, i + indexOffset) rc = ConfdValueLow.deepConvertPyValueToConfdValue(val, confdValPtr) if rc != ReturnCodes.kOk: for logFunc in pyconfdlib._log( "deep-convert-py-snmp-varbinds-to-confd-snmp-varbinds-deep-convert-value-failed" ).errorFunc(): logFunc( "deepConvertPySnmpVarbindToConfdSnmpVarbind deepConvertPyValueToConfdValue() failed: pySnmpVarbind=%s, i=%d, indexOffset=%d, val=%d, rc=%s", pySnmpVarbind, i, indexOffset, val, str(rc)) return ReturnCodes.kGeneralError indexOffset += len(pySnmpVarbind._oids) for (i, v) in enumerate(pySnmpVarbind._colRows): ((column, oid), val) = v oidArray = (pyconfdlib.Uint32Type * len(oid))() for index in range(len(oid)): oidArray[index] = oid[index] rc = pyconfdlib.dll.py_setSnmpVarbindColRow( confdSnmpVarbindPtr, i + indexOffset, column, oidArray, len(oid)) if rc != pyconfdlib.CONFD_OK: for logFunc in pyconfdlib._log( "deep-convert-py-snmp-varbinds-to-confd-snmp-varbinds-set-col -row-failed" ).errorFunc(): logFunc( "deepConvertPySnmpVarbindToConfdSnmpVarbind py_setSnmpVarbindColRow() failed: pySnmpVarbind=%s, i=%d, indexOffset=%d, oid=%d, rc=%s", pySnmpVarbind, i, indexOffset, oid, str(rc)) return ReturnCodes.kGeneralError confdValPtr = pyconfdlib.dll.py_getValPtrFromSnmpVarbind( confdSnmpVarbindPtr, i + indexOffset) rc = ConfdValueLow.deepConvertPyValueToConfdValue(val, confdValPtr) if rc != ReturnCodes.kOk: for logFunc in pyconfdlib._log( "deep-convert-py-snmp-varbinds-to-confd-snmp-varbinds-deep-convert-value-failed" ).errorFunc(): logFunc( "deepConvertPySnmpVarbindToConfdSnmpVarbind deepConvertPyValueToConfdValue() failed: pySnmpVarbind=%s, i=%d, indexOffset=%d, val=%d, rc=%s", pySnmpVarbind, i, indexOffset, val, str(rc)) return ReturnCodes.kGeneralError for logFunc in pyconfdlib._log( "deep-convert-py-snmp-varbinds-to-confd-snmp-varbinds-done" ).debug4Func(): logFunc( "deepConvertPySnmpVarbindToConfdSnmpVarbind done. pySnmpVarbind=%s, confdSnmpVarbindPtr=%s", pySnmpVarbind, str(confdSnmpVarbindPtr)) return ReturnCodes.kOk
def deallocConfdValue(confdValuePtr): for logFunc in pyconfdlib._log("dealloc-confd-value").debug4Func(): logFunc("deallocConfdValue called. confdValuePtr=%s", str(confdValuePtr)) pyconfdlib.dll.py_deallocConfdValue(confdValuePtr)
def deepConvertConfdValueToPyValue(confdValuePtr, pyValue, confdValIndex=0): """ This function performs a deep convertion of a confd_value_t object to a python Value object. It reallocates data memory, making the python Value object its owner. Note: When using this function the it is NOT mandatory for the confd_value_t object to exist as long as the python Value object exists pyValue must be pre-constructed """ #for logFunc in pyconfdlib._log("deep-convert-confd-value-to-pyvalue").debug4Func(): logFunc("deepConvertConfdValueToPyValue called. confdValuePtr=%s, pyValue=%s, confdValIndex=%d", ConfdValueLow.ConfdValueToStr(confdValuePtr), pyValue, confdValIndex) if not pyValue or not confdValuePtr: for logFunc in pyconfdlib._log( "deep-convert-confd-value-to-pyvalue-invalid-args" ).errorFunc(): logFunc( "deepConvertConfdValueToPyValue invalid args: confdValuePtr=%s, pyValue=%s", ConfdValueLow.ConfdValueToStr(confdValuePtr), pyValue) return ReturnCodes.kGeneralError type_ = pyconfdlib.dll.py_getValueType(confdValuePtr, confdValIndex) value = None if type_ == pyconfdlib.C_NOEXISTS: pyValue.setType(Value.kEmpty) value = None elif type_ == pyconfdlib.C_STR: pyValue.setType(Value.kString) strPtr = pyconfdlib.CharPType() rc = pyconfdlib.dll.py_CONFD_GET_STR(confdValuePtr, confdValIndex, pyconfdlib.byRef(strPtr)) if rc != pyconfdlib.CONFD_OK: for logFunc in pyconfdlib._log( "deep-convert-confd-value-to-pyvalue-get-str-failed" ).errorFunc(): logFunc( "deepConvertConfdValueToPyValue py_CONFD_GET_STR() failed: confdValuePtr=%s, pyValue=%s, rc=%s", ConfdValueLow.ConfdValueToStr(confdValuePtr), pyValue, str(rc)) return ReturnCodes.kGeneralError value = strPtr.value[:] elif type_ == pyconfdlib.C_BUF: pyValue.setType(Value.kBuf) bufPtr = pyconfdlib.CharPType() rc = pyconfdlib.dll.py_CONFD_GET_BUFPTR(confdValuePtr, confdValIndex, pyconfdlib.byRef(bufPtr)) if rc != pyconfdlib.CONFD_OK: for logFunc in pyconfdlib._log( "deep-convert-confd-value-to-pyvalue-get-bufptr-failed" ).errorFunc(): logFunc( "deepConvertConfdValueToPyValue py_CONFD_GET_BUFPTR() failed: confdValuePtr=%s, pyValue=%s, rc=%s", ConfdValueLow.ConfdValueToStr(confdValuePtr), pyValue, str(rc)) return ReturnCodes.kGeneralError bufLen = pyconfdlib.Int64Type() rc = pyconfdlib.dll.py_CONFD_GET_BUFSIZE(confdValuePtr, confdValIndex, pyconfdlib.byRef(bufLen)) if rc != pyconfdlib.CONFD_OK: for logFunc in pyconfdlib._log( "deep-convert-confd-value-to-pyvalue-get-bufsize-failed" ).errorFunc(): logFunc( "deepConvertConfdValueToPyValue py_CONFD_GET_BUFSIZW() failed: confdValuePtr=%s, pyValue=%s, rc=%s", ConfdValueLow.ConfdValueToStr(confdValuePtr), pyValue, str(rc)) return ReturnCodes.kGeneralError value = (bufPtr.value[:bufLen.value], bufLen.value) elif type_ == pyconfdlib.C_INT8: pyValue.setType(Value.kInt8) tempVal = pyconfdlib.Int8Type() rc = pyconfdlib.dll.py_CONFD_GET_INT8(confdValuePtr, confdValIndex, pyconfdlib.byRef(tempVal)) if rc != pyconfdlib.CONFD_OK: for logFunc in pyconfdlib._log( "deep-convert-confd-value-to-pyvalue-get-int8-failed" ).errorFunc(): logFunc( "deepConvertConfdValueToPyValue py_CONFD_GET_INT8() failed: confdValuePtr=%s, pyValue=%s, rc=%s", ConfdValueLow.ConfdValueToStr(confdValuePtr), pyValue, str(rc)) return ReturnCodes.kGeneralError value = tempVal.value elif type_ == pyconfdlib.C_INT16: pyValue.setType(Value.kInt16) tempVal = pyconfdlib.Int16Type() rc = pyconfdlib.dll.py_CONFD_GET_INT16(confdValuePtr, confdValIndex, pyconfdlib.byRef(tempVal)) if rc != pyconfdlib.CONFD_OK: for logFunc in pyconfdlib._log( "deep-convert-confd-value-to-pyvalue-get-int16-failed" ).errorFunc(): logFunc( "deepConvertConfdValueToPyValue py_CONFD_GET_INT16() failed: confdValuePtr=%s, pyValue=%s, rc=%s", ConfdValueLow.ConfdValueToStr(confdValuePtr), pyValue, str(rc)) return ReturnCodes.kGeneralError value = tempVal.value elif type_ == pyconfdlib.C_INT32: pyValue.setType(Value.kInt32) tempVal = pyconfdlib.Int32Type() rc = pyconfdlib.dll.py_CONFD_GET_INT32(confdValuePtr, confdValIndex, pyconfdlib.byRef(tempVal)) if rc != pyconfdlib.CONFD_OK: for logFunc in pyconfdlib._log( "deep-convert-confd-value-to-pyvalue-get-int32-failed" ).errorFunc(): logFunc( "deepConvertConfdValueToPyValue py_CONFD_GET_INT32() failed: confdValuePtr=%s, pyValue=%s, rc=%s", ConfdValueLow.ConfdValueToStr(confdValuePtr), pyValue, str(rc)) return ReturnCodes.kGeneralError value = tempVal.value elif type_ == pyconfdlib.C_INT64: pyValue.setType(Value.kInt64) tempVal = pyconfdlib.Int64Type() rc = pyconfdlib.dll.py_CONFD_GET_INT64(confdValuePtr, confdValIndex, pyconfdlib.byRef(tempVal)) if rc != pyconfdlib.CONFD_OK: for logFunc in pyconfdlib._log( "deep-convert-confd-value-to-pyvalue-get-int64-failed" ).errorFunc(): logFunc( "deepConvertConfdValueToPyValue py_CONFD_GET_INT64() failed: confdValuePtr=%s, pyValue=%s, rc=%s", ConfdValueLow.ConfdValueToStr(confdValuePtr), pyValue, str(rc)) return ReturnCodes.kGeneralError value = tempVal.value elif type_ == pyconfdlib.C_UINT8: pyValue.setType(Value.kUint8) tempVal = pyconfdlib.Uint8Type() rc = pyconfdlib.dll.py_CONFD_GET_UINT8(confdValuePtr, confdValIndex, pyconfdlib.byRef(tempVal)) if rc != pyconfdlib.CONFD_OK: for logFunc in pyconfdlib._log( "deep-convert-confd-value-to-pyvalue-get-uint8-failed" ).errorFunc(): logFunc( "deepConvertConfdValueToPyValue py_CONFD_GET_UINT8() failed: confdValuePtr=%s, pyValue=%s, rc=%s", ConfdValueLow.ConfdValueToStr(confdValuePtr), pyValue, str(rc)) return ReturnCodes.kGeneralError value = tempVal.value elif type_ == pyconfdlib.C_UINT16: pyValue.setType(Value.kUint16) tempVal = pyconfdlib.Uint16Type() rc = pyconfdlib.dll.py_CONFD_GET_UINT16(confdValuePtr, confdValIndex, pyconfdlib.byRef(tempVal)) if rc != pyconfdlib.CONFD_OK: for logFunc in pyconfdlib._log( "deep-convert-confd-value-to-pyvalue-get-uint16-failed" ).errorFunc(): logFunc( "deepConvertConfdValueToPyValue py_CONFD_GET_UINT16() failed: confdValuePtr=%s, pyValue=%s, rc=%s", ConfdValueLow.ConfdValueToStr(confdValuePtr), pyValue, str(rc)) return ReturnCodes.kGeneralError value = tempVal.value elif type_ == pyconfdlib.C_UINT32: pyValue.setType(Value.kUint32) tempVal = pyconfdlib.Uint32Type() rc = pyconfdlib.dll.py_CONFD_GET_UINT32(confdValuePtr, confdValIndex, pyconfdlib.byRef(tempVal)) if rc != pyconfdlib.CONFD_OK: for logFunc in pyconfdlib._log( "deep-convert-confd-value-to-pyvalue-get-uint32-failed" ).errorFunc(): logFunc( "deepConvertConfdValueToPyValue py_CONFD_GET_UINT32() failed: confdValuePtr=%s, pyValue=%s, rc=%s", ConfdValueLow.ConfdValueToStr(confdValuePtr), pyValue, str(rc)) return ReturnCodes.kGeneralError value = tempVal.value elif type_ == pyconfdlib.C_UINT64: pyValue.setType(Value.kUint64) tempVal = pyconfdlib.Uint64Type() rc = pyconfdlib.dll.py_CONFD_GET_UINT64(confdValuePtr, confdValIndex, pyconfdlib.byRef(tempVal)) if rc != pyconfdlib.CONFD_OK: for logFunc in pyconfdlib._log( "deep-convert-confd-value-to-pyvalue-get-uint64-failed" ).errorFunc(): logFunc( "deepConvertConfdValueToPyValue py_CONFD_GET_UINT64() failed: confdValuePtr=%s, pyValue=%s, rc=%s", ConfdValueLow.ConfdValueToStr(confdValuePtr), pyValue, str(rc)) return ReturnCodes.kGeneralError value = tempVal.value elif type_ == pyconfdlib.C_BOOL: pyValue.setType(Value.kBool) tempVal = pyconfdlib.Int64Type() rc = pyconfdlib.dll.py_CONFD_GET_BOOL(confdValuePtr, confdValIndex, pyconfdlib.byRef(tempVal)) if rc != pyconfdlib.CONFD_OK: for logFunc in pyconfdlib._log( "deep-convert-confd-value-to-pyvalue-get-bool-failed" ).errorFunc(): logFunc( "deepConvertConfdValueToPyValue py_CONFD_GET_BOOL() failed: confdValuePtr=%s, pyValue=%s, rc=%s", ConfdValueLow.ConfdValueToStr(confdValuePtr), pyValue, str(rc)) return ReturnCodes.kGeneralError if tempVal.value == 0: value = False else: value = True elif type_ == pyconfdlib.C_ENUM_HASH: pyValue.setType(Value.kEnum) tempVal = pyconfdlib.Int64Type() rc = pyconfdlib.dll.py_CONFD_GET_ENUM_HASH( confdValuePtr, confdValIndex, pyconfdlib.byRef(tempVal)) if rc != pyconfdlib.CONFD_OK: for logFunc in pyconfdlib._log( "deep-convert-confd-value-to-pyvalue-get-enum-hash-failed" ).errorFunc(): logFunc( "deepConvertConfdValueToPyValue py_CONFD_GET_ENUM_HASH() failed: confdValuePtr=%s, pyValue=%s, rc=%s", ConfdValueLow.ConfdValueToStr(confdValuePtr), pyValue, str(rc)) return ReturnCodes.kGeneralError value = tempVal.value elif type_ == pyconfdlib.C_BINARY: pyValue.setType(Value.kBinary) bufLen = pyconfdlib.Int64Type() rc = pyconfdlib.dll.py_CONFD_GET_BINARY_SIZE( confdValuePtr, confdValIndex, pyconfdlib.byRef(bufLen)) if rc != pyconfdlib.CONFD_OK: for logFunc in pyconfdlib._log( "deep-convert-confd-value-to-pyvalue-get-binary-size-failed" ).errorFunc(): logFunc( "deepConvertConfdValueToPyValue py_CONFD_GET_BINARY_SIZE() failed: confdValuePtr=%s, pyValue=%s, rc=%s", ConfdValueLow.ConfdValueToStr(confdValuePtr), pyValue, str(rc)) return ReturnCodes.kGeneralError buf = pyconfdlib.createStringBuffer(bufLen.value + 1) rc = pyconfdlib.dll.py_CONFD_GET_BINARY_PTR_DUP( confdValuePtr, confdValIndex, bufLen.value, buf) if rc != pyconfdlib.CONFD_OK: for logFunc in pyconfdlib._log( "deep-convert-confd-value-to-pyvalue-get-binary-ptr-dup-failed" ).errorFunc(): logFunc( "deepConvertConfdValueToPyValue py_CONFD_GET_BINARY_PTR_DUP() failed: confdValuePtr=%s, pyValue=%s, rc=%s", ConfdValueLow.ConfdValueToStr(confdValuePtr), pyValue, str(rc)) return ReturnCodes.kGeneralError for logFunc in pyconfdlib._log( "deep-convert-confd-value-to-pyvalue-get-binary-succeeded" ).debug2Func(): logFunc( "deepConvertConfdValueToPyValue py_CONFD_BINARY...(): bufLen=%s, confdValuePtr=%s, pyValue=%s, rc=%s, len(buf.raw[:bufLen.value]=%d)", bufLen.value, ConfdValueLow.ConfdValueToStr(confdValuePtr), pyValue, str(rc), len(buf.raw[:bufLen.value])) value = buf.raw[:bufLen.value] elif type_ == pyconfdlib.C_OID: pyValue.setType(Value.kOid) oidPtr = pyconfdlib.CharPType() rc = pyconfdlib.dll.py_CONFD_GET_OIDPTR(confdValuePtr, confdValIndex, pyconfdlib.byRef(oidPtr)) if rc != pyconfdlib.CONFD_OK: for logFunc in pyconfdlib._log( "deep-convert-confd-value-to-pyvalue-get-oidptr-failed" ).errorFunc(): logFunc( "deepConvertConfdValueToPyValue py_CONFD_GET_OIDPTR() failed: confdValuePtr=%s, pyValue=%s, rc=%s", ConfdValueLow.ConfdValueToStr(confdValuePtr), pyValue, str(rc)) return ReturnCodes.kGeneralError oidLen = pyconfdlib.Int64Type() rc = pyconfdlib.dll.py_CONFD_GET_OIDSIZE(confdValuePtr, confdValIndex, pyconfdlib.byRef(oidLen)) if rc != pyconfdlib.CONFD_OK: for logFunc in pyconfdlib._log( "deep-convert-confd-value-to-pyvalue-get-oidsize-failed" ).errorFunc(): logFunc( "deepConvertConfdValueToPyValue py_CONFD_GET_OIDSIZE() failed: confdValuePtr=%s, pyValue=%s, rc=%s", ConfdValueLow.ConfdValueToStr(confdValuePtr), pyValue, str(rc)) return ReturnCodes.kGeneralError value = (oidPtr.value[:oidLen.value], oidLen.value) elif type_ == pyconfdlib.C_IPV4: pyValue.setType(Value.kIPv4) tempVal = pyconfdlib.Uint32Type() rc = pyconfdlib.dll.py_CONFD_GET_IPV4(confdValuePtr, confdValIndex, pyconfdlib.byRef(tempVal)) if rc != pyconfdlib.CONFD_OK: for logFunc in pyconfdlib._log( "deep-convert-confd-value-to-pyvalue-get-ipv4-failed" ).errorFunc(): logFunc( "deepConvertConfdValueToPyValue py_CONFD_GET_IPV4() failed: confdValuePtr=%s, pyValue=%s, rc=%s", ConfdValueLow.ConfdValueToStr(confdValuePtr), pyValue, str(rc)) return ReturnCodes.kGeneralError value = tempVal.value elif type_ == pyconfdlib.C_IPV6: pyValue.setType(Value.kIPv6) bufPtr = buf = pyconfdlib.createStringBuffer(16) rc = pyconfdlib.dll.py_CONFD_GET_IPV6(confdValuePtr, confdValIndex, bufPtr) if rc != pyconfdlib.CONFD_OK: for logFunc in pyconfdlib._log( "deep-convert-confd-value-to-pyvalue-get-ipv6-failed" ).errorFunc(): logFunc( "deepConvertConfdValueToPyValue py_CONFD_GET_IPV6() failed: confdValuePtr=%s, pyValue=%s, rc=%s", ConfdValueLow.ConfdValueToStr(confdValuePtr), pyValue, str(rc)) return ReturnCodes.kGeneralError value = bufPtr.raw elif type_ == pyconfdlib.C_IPV4PREFIX: pyValue.setType(Value.kIPv4Prefix) tempAddr = pyconfdlib.Uint32Type() tempPrefixLen = pyconfdlib.Uint8Type() rc = pyconfdlib.dll.py_CONFD_GET_IPV4_PREFIX( confdValuePtr, confdValIndex, pyconfdlib.byRef(tempAddr), pyconfdlib.byRef(tempPrefixLen)) if rc != pyconfdlib.CONFD_OK: for logFunc in pyconfdlib._log( "deep-convert-confd-value-to-pyvalue-get-ipv4-failed" ).errorFunc(): logFunc( "deepConvertConfdValueToPyValue py_CONFD_GET_IPV4() failed: confdValuePtr=%s, pyValue=%s, rc=%s", ConfdValueLow.ConfdValueToStr(confdValuePtr), pyValue, str(rc)) return ReturnCodes.kGeneralError value = (tempAddr.value, tempPrefixLen.value) elif type_ == pyconfdlib.C_IPV6PREFIX: pyValue.setType(Value.kIPv6Prefix) bufPtr = buf = pyconfdlib.createStringBuffer(16) tempPrefixLen = pyconfdlib.Uint8Type() rc = pyconfdlib.dll.py_CONFD_GET_IPV6_PREFIX( confdValuePtr, confdValIndex, bufPtr, pyconfdlib.byRef(tempPrefixLen)) if rc != pyconfdlib.CONFD_OK: for logFunc in pyconfdlib._log( "deep-convert-confd-value-to-pyvalue-get-ipv6-failed" ).errorFunc(): logFunc( "deepConvertConfdValueToPyValue py_CONFD_GET_IPV6_PREFIX() failed: confdValuePtr=%s, pyValue=%s, rc=%s", ConfdValueLow.ConfdValueToStr(confdValuePtr), pyValue, str(rc)) return ReturnCodes.kGeneralError value = (bufPtr.raw, tempPrefixLen.value) elif type_ == pyconfdlib.C_XMLTAG: pyValue.setType(Value.kXmlTag) tag = pyconfdlib.Int64Type() ns = pyconfdlib.Int64Type() rc = pyconfdlib.dll.py_CONFD_GET_XMLTAG(confdValuePtr, confdValIndex, pyconfdlib.byRef(tag)) if rc != pyconfdlib.CONFD_OK: for logFunc in pyconfdlib._log( "deep-convert-confd-value-to-pyvalue-get-xmltag-failed" ).errorFunc(): logFunc( "deepConvertConfdValueToPyValue py_CONFD_GET_XMLTAG() failed: confdValuePtr=%s, pyValue=%s, rc=%s", ConfdValueLow.ConfdValueToStr(confdValuePtr), pyValue, str(rc)) return ReturnCodes.kGeneralError rc = pyconfdlib.dll.py_CONFD_GET_XMLTAG_NS(confdValuePtr, confdValIndex, pyconfdlib.byRef(ns)) if rc != pyconfdlib.CONFD_OK: for logFunc in pyconfdlib._log( "deep-convert-confd-value-to-pyvalue-get-xmltag-ns-failed" ).errorFunc(): logFunc( "deepConvertConfdValueToPyValue py_CONFD_GET_XMLTAG_NS() failed: confdValuePtr=%s, pyValue=%s, rc=%s", ConfdValueLow.ConfdValueToStr(confdValuePtr), pyValue, str(rc)) return ReturnCodes.kGeneralError tagStr = pyconfdlib.hashToStr(tag.value) nsStr = pyconfdlib.hashToStr(ns.value) prefix = pyconfdlib.nsToPrefix(ns.value) value = (tagStr, nsStr, prefix) elif type_ == pyconfdlib.C_XMLBEGIN: pyValue.setType(Value.kXmlBegin) tag = pyconfdlib.Int64Type() ns = pyconfdlib.Int64Type() rc = pyconfdlib.dll.py_CONFD_GET_XMLBEGIN(confdValuePtr, confdValIndex, pyconfdlib.byRef(tag)) if rc != pyconfdlib.CONFD_OK: for logFunc in pyconfdlib._log( "deep-convert-confd-value-to-pyvalue-get-xmlbegin-failed" ).errorFunc(): logFunc( "deepConvertConfdValueToPyValue py_CONFD_GET_XMLBEGIN() failed: confdValuePtr=%s, pyValue=%s, rc=%s", ConfdValueLow.ConfdValueToStr(confdValuePtr), pyValue, str(rc)) return ReturnCodes.kGeneralError rc = pyconfdlib.dll.py_CONFD_GET_XMLBEGIN_NS( confdValuePtr, confdValIndex, pyconfdlib.byRef(ns)) if rc != pyconfdlib.CONFD_OK: for logFunc in pyconfdlib._log( "deep-convert-confd-value-to-pyvalue-get-xmlbegin-ns-failed" ).errorFunc(): logFunc( "deepConvertConfdValueToPyValue py_CONFD_GET_XMLBEGIN_NS() failed: confdValuePtr=%s, pyValue=%s, rc=%s", ConfdValueLow.ConfdValueToStr(confdValuePtr), pyValue, str(rc)) return ReturnCodes.kGeneralError tagStr = pyconfdlib.hashToStr(tag.value) nsStr = pyconfdlib.hashToStr(ns.value) prefix = pyconfdlib.nsToPrefix(ns.value) value = (tagStr, nsStr, prefix) elif type_ == pyconfdlib.C_XMLEND: pyValue.setType(Value.kXmlEnd) tag = pyconfdlib.Int64Type() ns = pyconfdlib.Int64Type() rc = pyconfdlib.dll.py_CONFD_GET_XMLEND(confdValuePtr, confdValIndex, pyconfdlib.byRef(tag)) if rc != pyconfdlib.CONFD_OK: for logFunc in pyconfdlib._log( "deep-convert-confd-value-to-pyvalue-get-xmlend-failed" ).errorFunc(): logFunc( "deepConvertConfdValueToPyValue py_CONFD_GET_XMLEND() failed: confdValuePtr=%s, pyValue=%s, rc=%s", ConfdValueLow.ConfdValueToStr(confdValuePtr), pyValue, str(rc)) return ReturnCodes.kGeneralError rc = pyconfdlib.dll.py_CONFD_GET_XMLEND_NS(confdValuePtr, confdValIndex, pyconfdlib.byRef(ns)) if rc != pyconfdlib.CONFD_OK: for logFunc in pyconfdlib._log( "deep-convert-confd-value-to-pyvalue-get-xmlend-ns-failed" ).errorFunc(): logFunc( "deepConvertConfdValueToPyValue py_CONFD_GET_XMLEND_NS() failed: confdValuePtr=%s, pyValue=%s, rc=%s", ConfdValueLow.ConfdValueToStr(confdValuePtr), pyValue, str(rc)) return ReturnCodes.kGeneralError tagStr = pyconfdlib.hashToStr(tag.value) nsStr = pyconfdlib.hashToStr(ns.value) prefix = pyconfdlib.nsToPrefix(ns.value) value = (tagStr, nsStr, prefix) else: for logFunc in pyconfdlib._log( "deep-convert-confd-value-to-pyvalue-unsupported-type" ).errorFunc(): logFunc( "deepConvertConfdValueToPyValue unsupported type: %s. confdValuePtr=%s, pyValue=%s, confdValIndex=%d", str(type_), ConfdValueLow.ConfdValueToStr(confdValuePtr), pyValue, confdValIndex) return ReturnCodes.kGeneralError pyValue.setValue(value) for logFunc in pyconfdlib._log( "deep-convert-confd-value-to-pyvalue-done").debug4Func(): logFunc( "deepConvertConfdValueToPyValue done. confdValuePtr=%s, pyValue=%s, confdValIndex=%d", ConfdValueLow.ConfdValueToStr(confdValuePtr), pyValue, confdValIndex) return ReturnCodes.kOk
def shallowConvertPyValueToConfdValue(pyValue, confdValuePtr, confdValIndex=0): """ This function performs a shallow convertion of a python Value object to a confd_value_t object. It does not reallocate data memory, merely sets the confd_value_t members to point to it. confdValuePtr must be pre-allocated Note: When using this function the it is MANDATORY for the python Value object to exist as long as the confd_value_t object exists Note 2: DO NOT!!! activate confd_free_value on the confd_value_t object filled by this function as it is not responsible for any allocated memory """ for logFunc in pyconfdlib._log( "shallow-convert-pyvalue-to-confd-value").debug3Func(): logFunc( "shallowConvertPyValueToConfdValue called. pyValue=%s, confdValuePtr=%s, confdValIndex=%d", pyValue, str(confdValuePtr), confdValIndex) if not pyValue or not confdValuePtr: for logFunc in pyconfdlib._log( "shallow-convert-pyvalue-to-confd-value-invalid-args" ).errorFunc(): logFunc( "shallowConvertPyValueToConfdValue invalid args: pyValue=%s, confdValuePtr=%s", pyValue, str(confdValuePtr)) return ReturnCodes.kGeneralError type_ = pyValue.getType() if (type_ == Value.kEmpty): pyconfdlib.dll.py_CONFD_SET_NOEXISTS(confdValuePtr, confdValIndex) elif (type_ == Value.kString): pyconfdlib.dll.py_CONFD_SET_STR(confdValuePtr, confdValIndex, pyValue._value) elif (type_ == Value.kBuf): (buf, len_) = pyValue._value pyconfdlib.dll.py_CONFD_SET_BUF(confdValuePtr, confdValIndex, buf, len_) elif (type_ == Value.kInt8): pyconfdlib.dll.py_CONFD_SET_INT8(confdValuePtr, confdValIndex, pyValue._value) elif (type_ == Value.kInt16): pyconfdlib.dll.py_CONFD_SET_INT16(confdValuePtr, confdValIndex, pyValue._value) elif (type_ == Value.kInt32): pyconfdlib.dll.py_CONFD_SET_INT32(confdValuePtr, confdValIndex, pyValue._value) elif (type_ == Value.kInt64): pyconfdlib.dll.py_CONFD_SET_INT64(confdValuePtr, confdValIndex, pyValue._value) elif (type_ == Value.kUint8): pyconfdlib.dll.py_CONFD_SET_UINT8(confdValuePtr, confdValIndex, pyValue._value) elif (type_ == Value.kUint16): pyconfdlib.dll.py_CONFD_SET_UINT16(confdValuePtr, confdValIndex, pyValue._value) elif (type_ == Value.kUint32): pyconfdlib.dll.py_CONFD_SET_UINT32(confdValuePtr, confdValIndex, pyValue._value) elif (type_ == Value.kUint64): pyconfdlib.dll.py_CONFD_SET_UINT64(confdValuePtr, confdValIndex, pyValue._value) elif (type_ == Value.kBool): boolVal = 0 if pyValue._value: boolVal = 1 pyconfdlib.dll.py_CONFD_SET_BOOL(confdValuePtr, confdValIndex, boolVal) elif (type_ == Value.kEnum): pyconfdlib.dll.py_CONFD_SET_ENUM_HASH(confdValuePtr, confdValIndex, pyValue._value) elif (type_ == Value.kBinary): buf = pyValue._value pyconfdlib.dll.py_CONFD_SET_BINARY(confdValuePtr, confdValIndex, buf, len(buf)) elif (type_ == Value.kIPv4): pyconfdlib.dll.py_CONFD_SET_IPV4(confdValuePtr, confdValIndex, pyValue._value) elif (type_ == Value.kIPv6): pyconfdlib.dll.py_CONFD_SET_IPV6(confdValuePtr, confdValIndex, pyValue._value) elif (type_ == Value.kIPv4Prefix): (address, len_) = pyValue._value pyconfdlib.dll.py_CONFD_SET_IPV4_PREFIX(confdValuePtr, confdValIndex, address, len_) elif (type_ == Value.kIPv6Prefix): (address, len_) = pyValue._value pyconfdlib.dll.py_CONFD_SET_IPV6_PREFIX(confdValuePtr, confdValIndex, address, len_) elif (type_ == Value.kXmlTag): (tag, ns, prefix) = pyValue._value hashedTag = pyconfdlib.hashIfString(tag) hashedNs = pyconfdlib.hashIfString(ns) pyconfdlib.dll.py_CONFD_SET_XMLTAG(confdValuePtr, confdValIndex, hashedTag, hashedNs) elif (type_ == Value.kXmlBegin): (tag, ns, prefix) = pyValue._value hashedTag = pyconfdlib.hashIfString(tag) hashedNs = pyconfdlib.hashIfString(ns) pyconfdlib.dll.py_CONFD_SET_XMLBEGIN(confdValuePtr, confdValIndex, hashedTag, hashedNs) elif (type_ == Value.kXmlEnd): (tag, ns, prefix) = pyValue._value hashedTag = pyconfdlib.hashIfString(tag) hashedNs = pyconfdlib.hashIfString(ns) pyconfdlib.dll.py_CONFD_SET_XMLEND(confdValuePtr, confdValIndex, hashedTag, hashedNs) elif (type_ == Value.kOid): (buf, len_) = pyValue._value pyconfdlib.dll.py_CONFD_SET_OID(confdValuePtr, confdValIndex, buf, len_) else: for logFunc in pyconfdlib._log( "shallow-convert-pyvalue-to-confd-value-unsupported-type" ).errorFunc(): logFunc( "shallowConvertPyValueToConfdValue unsupported type: %s. pyValue=%s, confdValuePtr=%s, confdValIndex=%d", type_, pyValue, str(confdValuePtr), confdValIndex) return ReturnCodes.kGeneralError for logFunc in pyconfdlib._log( "shallow-convert-pyvalue-to-confd-value-done").debug3Func(): logFunc( "shallowConvertPyValueToConfdValue done. pyValue=%s, confdValuePtr=%s, type=%d, confdValIndex=%d", pyValue, ConfdValueLow.ConfdValueToStr(confdValuePtr), ConfdValueLow.getConfdValueType(confdValuePtr), confdValIndex) return ReturnCodes.kOk