diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/vpp-api/python/vpp_papi.py | 58 |
1 files changed, 36 insertions, 22 deletions
diff --git a/src/vpp-api/python/vpp_papi.py b/src/vpp-api/python/vpp_papi.py index c2d12b5b8d5..35edd491085 100644 --- a/src/vpp-api/python/vpp_papi.py +++ b/src/vpp-api/python/vpp_papi.py @@ -56,6 +56,7 @@ void vac_set_error_handler(vac_error_callback_t); # Barfs on failure, no need to check success. vpp_api = ffi.dlopen('libvppapiclient.so') + def vpp_atexit(vpp_weakref): """Clean up VPP connection on shutdown.""" vpp_instance = vpp_weakref() @@ -63,6 +64,7 @@ def vpp_atexit(vpp_weakref): vpp_instance.logger.debug('Cleaning up VPP on exit') vpp_instance.disconnect() + vpp_object = None @@ -114,7 +116,8 @@ class VPP(): these messages in a background thread. """ def __init__(self, apifiles=None, testmode=False, async_thread=True, - logger=logging.getLogger('vpp_papi'), loglevel='debug', read_timeout=0): + logger=logging.getLogger('vpp_papi'), loglevel='debug', + read_timeout=0): """Create a VPP API object. apifiles is a list of files containing API @@ -173,7 +176,8 @@ class VPP(): # Support legacy CFFI # from_buffer supported from 1.8.0 - (major, minor, patch) = [int(s) for s in cffi.__version__.split('.', 3)] + (major, minor, patch) = [int(s) for s in + cffi.__version__.split('.', 3)] if major >= 1 and minor >= 8: self._write = self._write_new_cffi else: @@ -223,8 +227,8 @@ class VPP(): def dmatch(dir): """Match dir against right-hand components of the script dir""" d = dir.split('/') # param 'dir' assumes a / separator - l = len(d) - return len(localdir_s) > l and localdir_s[-l:] == d + length = len(d) + return len(localdir_s) > length and localdir_s[-length:] == d def sdir(srcdir, variant): """Build a path from srcdir to the staged API files of @@ -253,7 +257,6 @@ class VPP(): if srcdir: # we're in the source tree, try both the debug and release # variants. - x = 'vpp/share/vpp/api' dirs.append(sdir(srcdir, '_debug')) dirs.append(sdir(srcdir, '')) @@ -330,9 +333,8 @@ class VPP(): 'i32': 'i', 'u64': 'Q', 'f64': 'd', } - pack = None + if t in base_types: - pack = base_types[t] if not vl: if e > 0 and t == 'u8': # Fixed byte array @@ -393,9 +395,9 @@ class VPP(): for k in kwargs: if k not in msgdef['args']: - raise ValueError(1,'Non existing argument [' + k + ']' + \ - ' used in call to: ' + \ - self.id_names[kwargs['_vl_msg_id']] + '()' ) + raise ValueError(1, 'Non existing argument [' + k + ']' + + ' used in call to: ' + + self.id_names[kwargs['_vl_msg_id']] + '()') for k, v in vpp_iterator(msgdef['args']): off += size @@ -404,21 +406,28 @@ class VPP(): if callable(v[1]): e = kwargs[v[0]] if v[0] in kwargs else v[0] if e != len(kwargs[k]): - raise (ValueError(1, 'Input list length mismatch: %s (%s != %s)' % (k, e, len(kwargs[k])))) + raise (ValueError(1, + 'Input list length mismatch: ' + '%s (%s != %s)' % + (k, e, len(kwargs[k])))) size = 0 for i in range(e): size += v[1](self, True, buf, off + size, kwargs[k][i]) else: if v[0] in kwargs: - l = kwargs[v[0]] - if l != len(kwargs[k]): - raise ValueError(1, 'Input list length mismatch: %s (%s != %s)' % (k, l, len(kwargs[k]))) + kwargslen = kwargs[v[0]] + if kwargslen != len(kwargs[k]): + raise ValueError(1, + 'Input list length mismatch:' + ' %s (%s != %s)' % + (k, kwargslen, + len(kwargs[k]))) else: - l = len(kwargs[k]) + kwargslen = len(kwargs[k]) if v[1].size == 1: - buf[off:off + l] = bytearray(kwargs[k]) - size = l + buf[off:off + kwargslen] = bytearray(kwargs[k]) + size = kwargslen else: size = 0 for i in kwargs[k]: @@ -429,7 +438,10 @@ class VPP(): size = v(self, True, buf, off, kwargs[k]) else: if type(kwargs[k]) is str and v.size < len(kwargs[k]): - raise ValueError(1, 'Input list length mismatch: %s (%s < %s)' % (k, v.size, len(kwargs[k]))) + raise ValueError(1, + 'Input list length mismatch: ' + '%s (%s < %s)' % + (k, v.size, len(kwargs[k]))) v.pack_into(buf, off, kwargs[k]) size = v.size else: @@ -548,7 +560,8 @@ class VPP(): raise ValueError('Variable Length Array must be last: ' + name) size, s = self.__struct(*f) args[field_name] = s - if type(s) == list and type(s[0]) == int and type(s[1]) == struct.Struct: + if type(s) == list and type(s[0]) == int and \ + type(s[1]) == struct.Struct: if s[0] < 0: sizes[field_name] = size else: @@ -578,10 +591,11 @@ class VPP(): def make_function(self, name, i, msgdef, multipart, async): if (async): - f = lambda **kwargs: (self._call_vpp_async(i, msgdef, **kwargs)) + def f(**kwargs): + return self._call_vpp_async(i, msgdef, **kwargs) else: - f = lambda **kwargs: (self._call_vpp(i, msgdef, multipart, - **kwargs)) + def f(**kwargs): + return self._call_vpp(i, msgdef, multipart, **kwargs) args = self.messages[name]['args'] argtypes = self.messages[name]['argtypes'] f.__name__ = str(name) |