Python bindings for SAF-AIS APIs offer many advantages to middleware developers, application developers, tool developers and testers. The bindings help to speed up the software development lifecycle and enable rapid deployment of architecture-independent components and services.
This session will describe main principles guiding Python bindings implementation, and will have extensive in-depth application Python code examples using SAF-AIS services.
1. Python Bindings for the SAF-AIS APIs
Currie Reid
Linux Product Division
Wind River
2. Outline of Presentation
• Requirements
• What is Python?
• Mapping Python to Requirements
• Demo setup
• How Python bindings are implemented
• Demonstration
• Future Works
3. Requirements
• Enable testing in all phases of the software
lifecycle.
• Simplify development across different
architectures.
• Simplify presentation to developers and
engineers.
• Quickly create tools that make it easy to
investigate and monitor the system.
• Make it easy to create and modify prototypes.
4. What is Python?
• General purpose, high-level, interpreted
language.
• Design philosophy emphasizes code readability.
• Large, comprehensive standard library.
• Supports object-oriented, imperative, and (lesser
degree) functional programming paradigms.
• Dynamic type system, automatic memory
management.
• Free, open-source, many 3rd party packages.
5. Enable testing in all phases of software
lifecycle
• Test coverage more complete if easy to write
tests; test-driven development encouraged!
• Tests are portable across architectures.
• Built-in modules for testing include unittest and
doctest.
• Modules available for unit testing, mock testing,
fuzz testing, web testing, gui testing, etc.
• i.e.: nose, py.test, zope.testing.
6. Simplify development across different
architectures
• Python scripts are portable across different
architectures.
• Edit-compile-run cycle is greatly reduced.
• Python code can be edited on the target system
if required.
• Huge collection of native and 3rd-party bindings
available to aid/speed development.
7. Simplify presentation to developers and
engineers
• Python syntax reads like pseudo-code.
• Most Python programs much smaller than lower-
level implementations.
• Easier to examine the problem domain when
you abstract-away programming details and
challenges associated with the machine.
8. Make it easy to create and modify
prototypes
• Components and applications can be rapidly
prototyped in Python.
• Designs can then be hardened in another
implementation language.
• Ideal glue language.
• Working code can be developed much faster
than lower-level languages.
9. What Will be Demonstrated
• Unit tests written for every interface except SMF.
• AMF demo component written in Python.
• Admin-commands written in Python.
• Server implemented in Python: receives NTF
notifications, queries IMM and updates web-
client.
• Alarms resulting from admin-commands.
• Logging from AMF demo component.
10. Explanation of Demonstration System
• Virtual appliance; 2 system controllers
• OpenSAF framework
• Amf_demo: saAmf, saLog
• Immwebsocket: saImmOm, saNtf
• Immwebclient: HTML5 websockets, CSS,
Javascript, JSON
11. Ctypes module: Wrap Libraries in Python
• Advanced FFI (Foreign Function Interface) for
Python 2.3 and higher.
• Included in Python 2.5.
• Call functions from DLLs (shared libraries).
• Create, access and manipulate simple and
complicated C data types in Python.
• Enables C callbacks to be implemented in
Python.
12. Python Implementation
• Conversion of SAF types to ctypes
• Definition of Const
• Definition of Enumeration
• Definition of Structs
• Definition of Unions
• Dynamic Loading of Libraries and CDLL
• Definition of Functions
• Definition of callbacks and CFUNCTYPE
21. Concluding Demonstations
• Unit tests written for every interface except SMF.
• AMF demo component written in Python.
• Admin-commands written in Python.
• Server implemented in Python: receives NTF
notification, queries IMM and updates web-
client.
• Alarms resulting from admin-commands.
• Logging from AMF demo component.
22. Future Work
• Complete unit tests for all interfaces.
• Bind Python admin-commands into CLI.
• Complete SMF bindings.
• Create more tools to enhance system useability.
• Consider Pythonic interfaces, similar as what
was done for Java.
• Consider code-generation for Python bindings.
• Consider compiled Python: Cython, Psyco, etc.