コード例 #1
0
 def setValue(self, value, name, idx):
     try:
         if hasattr(self.syntax, 'setValue'):
             return self.syntax.setValue(value)
         else:
             return self.syntax.clone(value)
     except PyAsn1Error:
         exc_t, exc_v, exc_tb = sys.exc_info()
         debug.logger & debug.flagIns and debug.logger('setValue: %s=%r failed with traceback %s' % (self.name, value, traceback.format_exception(exc_t, exc_v, exc_tb)))
         if isinstance(exc_v, error.TableRowManagement):
             raise exc_v
         else:
             raise error.WrongValueError(idx=idx, name=name, msg=exc_v)
コード例 #2
0
ファイル: SNMPv2-SMI.py プロジェクト: vitali-shevtsov/pysnmp
 def createTest(self, name, val, idx, acInfo):
     if name == self.name:
         try:
             self.__newSyntax = self.setValue(val, name, idx)
         except error.MibOperationError:
             # SMI exceptions may carry additional content
             why = sys.exc_info()[1]
             if 'syntax' in why:
                 self.__newSyntax = why['syntax']
             else:
                 raise error.WrongValueError(idx=idx, name=name, msg=sys.exc_info()[1])
     else:
         raise error.NoSuchInstanceError(idx=idx, name=name)
コード例 #3
0
    def createTest(self, varBind, **context):
        name, val = varBind

        if name == self.name:
            try:
                self.__newSyntax = self.setValue(val, name, **context)

            except error.MibOperationError:
                # SMI exceptions may carry additional content
                why = sys.exc_info()[1]
                if 'syntax' in why:
                    self.__newSyntax = why['syntax']
                else:
                    raise error.WrongValueError(name=name, idx=context.get('idx'), msg=sys.exc_info()[1])
        else:
            raise error.NoSuchInstanceError(name=name, idx=context.get('idx'))
コード例 #4
0
ファイル: sql.py プロジェクト: xiar/vpduserv
def variate(oid, tag, value, **context):
    if 'dbConn' in moduleContext:
        dbConn = moduleContext['dbConn']
    else:
        raise error.SnmpsimError('variation module not initialized')

    cursor = dbConn.cursor()

    try:
        cursor.execute('set session transaction isolation level %s' %
                       moduleContext['isolationLevel'])
        cursor.fetchall()
    except:  # non-MySQL/Postgres
        pass

    if value:
        dbTable = value.split(',').pop(0)
    elif 'dbTable' in moduleContext:
        dbTable = moduleContext['dbTable']
    else:
        log.msg('SQL table not specified for OID %s' % (context['origOid'], ))
        return context['origOid'], tag, context['errorStatus']

    origOid = context['origOid']
    sqlOid = '.'.join(['%10s' % x for x in str(origOid).split('.')])
    if context['setFlag']:
        if 'hexvalue' in context:
            textTag = context['hextag']
            textValue = context['hexvalue']
        else:
            textTag = SnmprecGrammar().getTagByType(context['origValue'])
            textValue = str(context['origValue'])
        cursor.execute(
            'select maxaccess,tag,value from %s where oid=\'%s\' limit 1' %
            (dbTable, sqlOid))
        resultset = cursor.fetchone()
        if resultset:
            maxaccess = resultset[0]
            if maxaccess != 'read-write':
                return origOid, tag, context['errorStatus']

            value_written = textValue
            try:
                value_settings = {}
                value_settings = dict(
                    [split(x, '=') for x in split(resultset[2], ',')])
                print value_settings
                # if detected error mode, raise an error
                if 'mode' in value_settings and \
                        value_settings['mode'] == 'error':
                    raise Error.WrongValueError(
                        name=origOid,
                        idx=max(
                            0, context['varsTotal'] -
                            context['varsRemaining'] - 1))
                elif 'mode' in value_settings and \
                    value_settings['mode'] == 'normal':
                    value_written = "mode=" + value_settings['mode'] + \
                        ",value=" + textValue
                else:
                    return origOid, tag, context['errorStatus']
            except Error.WrongValueError:
                cursor.close()
                raise Error.WrongValueError(name=origOid,
                                            idx=max(
                                                0, context['varsTotal'] -
                                                context['varsRemaining'] - 1))
            except:
                pass

            cursor.execute(
                'update %s set tag=\'%s\',value=\'%s\' where oid=\'%s\'' %
                (dbTable, textTag, value_written, sqlOid))

            inform = moduleContext.get('inform')
            try:
                value = str(origOid) + " " + textValue
                written_len = os.write(inform, value)
                if written_len != len(value):
                    log.msg(
                        "--->Infrasim: Expected length %d, actual length %d\n"
                        % (len(str(origOid)), written_len))
                    cursor.close()
                    return origOid, tag, context['errorStatus']
            except Exception, ex:
                log.msg("--->Infrasim: {0}".format(ex))
                cursor.close()
                return origOid, tag, context['errorStatus']

        else:
            cursor.close()
            raise Error.NoSuchInstanceError(
                name=origOid,
                idx=max(0,
                        context['varsTotal'] - context['varsRemaining'] - 1))

        if context['varsRemaining'] == 0:  # last OID in PDU
            dbConn.commit()
        cursor.close()
        return origOid, textTag, context['origValue']