VPP Python language binding - plugin support
- Moved Python generator tool to tools directory
- Added build-vpp-api Makefile target
- Generator now only creates a Python representation of the .api
the rest of the framework is in the vpp_papi script
- Each plugin has its own namespace.
- Plugin Python files are installed in vpp_papi_plugins for easy
use inside the build tree.
Change-Id: I272c83bb7e5d5e416bdbd8a790a3cc35c5a04e38
Signed-off-by: Ole Troan <ot@cisco.com>
diff --git a/vpp-api/python/vpp_papi/vpp_api_base.py b/vpp-api/python/vpp_papi/vpp_api_base.py
new file mode 100644
index 0000000..a1ef87a
--- /dev/null
+++ b/vpp-api/python/vpp_papi/vpp_api_base.py
@@ -0,0 +1,97 @@
+#
+# Copyright (c) 2016 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+#
+# Module storing all global variables, shared between main module and plugins
+#
+import threading
+
+#
+# Global variables
+#
+results = {}
+waiting_for_reply = False
+plugins = {}
+
+class ContextId(object):
+ def __init__(self):
+ self.context = 0
+ def __call__(self, id):
+ self.context += 1
+ return self.context
+get_context = ContextId()
+
+def waiting_for_reply_clear():
+ global waiting_for_reply
+ waiting_for_reply = False
+
+def waiting_for_reply_set():
+ global waiting_for_reply
+ waiting_for_reply = True
+
+def is_waiting_for_reply():
+ return waiting_for_reply
+
+def event_callback_set(callback):
+ global event_callback
+ event_callback = callback
+
+def event_callback_call(r):
+ global event_callback
+ event_callback(r)
+
+def results_event_set(context):
+ results[context]['e'].set()
+
+def results_event_clear(context):
+ results[context]['e'].clear()
+
+def results_event_wait(context, timeout):
+ results[context]['e'].wait(timeout)
+
+def results_set(context, r):
+ results[context]['r'] = r
+
+def results_append(context, r):
+ results[context]['r'].append(r)
+
+def is_results_context(context):
+ return context in results
+
+def is_results_more(context):
+ return 'm' in results[context]
+
+def results_more_set(context):
+ results[context]['m'] = True
+
+def results_prepare(context):
+ results[context] = {}
+ results[context]['e'] = threading.Event()
+ results[context]['e'].clear()
+ results[context]['r'] = []
+
+def results_get(context):
+ return results[context]['r']
+
+def plugin_register(name, func_table, name_to_id_table, version, msg_id_base_set):
+ plugins[name] = {}
+ p = plugins[name]
+ p['func_table'] = func_table
+ p['name_to_id_table'] = name_to_id_table
+ p['version'] = version
+ p['msg_id_base_set'] = msg_id_base_set
+
+def plugin_show():
+ for p in plugins:
+ print(p)