Python Bindings for SA Forum AIS APIs                        Hans Feldt                         Ericsson                  ...
Outline of Presentation•   Objectives•   What is Python?•   Mapping Python to Objectives•   How Python bindings are implem...
Objectives• Enable testing in all phases of the software  lifecycle.• Simplify development across different  architectures...
What is Python?• General purpose, high-level, interpreted  language.• Design philosophy emphasizes code readability.• Desi...
Popularity and Usage• Twice awarded as “Programming language of the  Year” by TIOBE (2007 & 2010)• Ranked number 8 in the ...
Enable testing in all phases of softwarelifecycle• Test coverage more complete if easy to write  tests; test-driven develo...
Simplify development across differentarchitectures• Python scripts are portable across different  architectures.• Edit-com...
Simplify presentation to developers andengineers• Python syntax reads like pseudo-code.• Most Python programs much smaller...
Make it easy to create and modifyprototypes• Components and applications can be rapidly  prototyped in Python.• Designs ca...
Ctypes module: Wrap Libraries in Python• Advanced FFI (Foreign Function Interface) for  Python 2.3 and higher.• Included i...
Python Bindings Implementation•   Conversion of SAF types to ctypes•   Definition of Const•   Definition of Enumeration•  ...
Conversion of SAF types to ctypesSaInt8T     =   c_charSaInt16T    =   c_shortSaInt32T    =   c_intSaInt64T    =   c_longl...
Definition of ConstsaAis = Const()saAis.SA_TIME_END = 0x7FFFFFFFFFFFFFFFsaAis.SA_TIME_BEGIN = 0x0saAis.SA_TIME_UNKNOWN = 0...
Definition of EnumerationSaDispatchFlagsT = SaEnumTeSaDispatchFlagsT = Enumeration((  (SA_DISPATCH_ONE, 1),  (SA_DISPATCH_...
Definition of Structsclass SaNameT(Structure):   _fields_ = [(length, SaUint16T),      (value,(SaInt8T*saAis.SA_MAX_NAME_L...
Definition of Unionsclass SaLimitValueT(Union):   _fields_ = [(int64Value, SaInt64T),      (uint64Value, SaUint64T),      ...
Dynamic Loading of Libraries using CDLLamfdll = CDLL(libSaAmf.so.0)  Functions in the library accessible as  attributes of...
Definition of Functionsdef saAmfInitialize(amfHandle,   amfCallbacks, version):  return amfdll.saAmfInitialize(    BYREF(a...
Example usageamfHandle = SaAmfHandleT()amfCallbacks = Noneversion = SaVersionT(‘B’, 1, 1)rc = saAmfInitialize(amfHandle,  ...
Definition of callbacks and CFUNCTYPESaAmfCSISetCallbackT = CFUNCTYPE(None,   SaInvocationT, POINTER(SaNameT),   SaAmfHASt...
Bindings in 4.2• A 1:1 mapping primarily aimed for OpenSAF  services testing• Samples using the bindings
Future Work• Pythonic interfaces (inspired by Java bindings?)• OpenSAF test framework using Python bindings• Simple GUI fo...
Example of Pythonic Interfacedef foo(parent, values, mods, dn1, dn2):  owner = SaImmOmOwner(‘Hans’)  owner.set(parent)  cc...
Questions?
Upcoming SlideShare
Loading in …5
×

OpenSAF Symposium_Python Bindings_9.21.11

2,588
-1

Published on

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.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
2,588
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
9
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

OpenSAF Symposium_Python Bindings_9.21.11

  1. 1. Python Bindings for SA Forum AIS APIs Hans Feldt Ericsson Currie Reid Linux Product Division Wind River
  2. 2. Outline of Presentation• Objectives• What is Python?• Mapping Python to Objectives• How Python bindings are implemented• (Demonstration)• Future Works
  3. 3. Objectives• 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. 4. What is Python?• General purpose, high-level, interpreted language.• Design philosophy emphasizes code readability.• Designed to be extensible• 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. 5. Popularity and Usage• Twice awarded as “Programming language of the Year” by TIOBE (2007 & 2010)• Ranked number 8 in the TIOBE popularity index• Used as a scripting language for web applications (Django, Pylons, …)• Used as an embedded scripting language in other programs (GIMP, GDB, ..)• OpenSAF related: Mercurial, Buildbot, Trac, Yum• Standard component in Linux distributions
  6. 6. Enable testing in all phases of softwarelifecycle• 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.
  7. 7. Simplify development across differentarchitectures• Python scripts are portable across different architectures.• Edit-compile-run cycle is greatly reduced.• Python code can be edited/patched on the target system if required.• Huge collection of native and 3rd-party bindings available to aid/speed development.
  8. 8. Simplify presentation to developers andengineers• 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.• Do more with less
  9. 9. Make it easy to create and modifyprototypes• 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.• Identify “hot spots” in application and possibly optimize by extending with C/C++
  10. 10. Ctypes module: Wrap Libraries in Python• Advanced FFI (Foreign Function Interface) for Python 2.3 and higher.• Included in Python 2.5• Provides C compatible data types• Call functions in shared libraries (DLLs).• Create, access and manipulate simple and complicated C data types in Python.• Enables C callbacks to be implemented in Python.
  11. 11. Python Bindings Implementation• Conversion of SAF types to ctypes• Definition of Const• Definition of Enumeration• Definition of Struct• Definition of Union• Dynamic Loading of Libraries and CDLL• Definition of Functions• Definition of callbacks and CFUNCTYPE
  12. 12. Conversion of SAF types to ctypesSaInt8T = c_charSaInt16T = c_shortSaInt32T = c_intSaInt64T = c_longlongSaUint8T = c_ubyteSaUint16T = c_ushortSaUint32T = c_uintSaUint64T = c_ulonglong...myuint = SaUint64T(12)
  13. 13. Definition of ConstsaAis = Const()saAis.SA_TIME_END = 0x7FFFFFFFFFFFFFFFsaAis.SA_TIME_BEGIN = 0x0saAis.SA_TIME_UNKNOWN = 0x8000000000000000time_start = saAis.SA_TIME_BEGINsaAis.SA_TIME_BEGIN = 5 #ERROR: EXCEPTION
  14. 14. Definition of EnumerationSaDispatchFlagsT = SaEnumTeSaDispatchFlagsT = Enumeration(( (SA_DISPATCH_ONE, 1), (SA_DISPATCH_ALL, 2), (SA_DISPATCH_BLOCKING, 3),))flag = eSaDispatchFlagsT.SA_DISPATCH_ALLflag_str = eSaDispatchFlagsT.whatis(flag)
  15. 15. Definition of Structsclass SaNameT(Structure): _fields_ = [(length, SaUint16T), (value,(SaInt8T*saAis.SA_MAX_NAME_LENGTH))] def __init__(self, name=): super(SaNameT, self).__init__(len(name), name)dn = SaNameT(‘safApp=OpenSAF’)
  16. 16. Definition of Unionsclass SaLimitValueT(Union): _fields_ = [(int64Value, SaInt64T), (uint64Value, SaUint64T), (timeValue, SaTimeT), (floatValue, SaFloatT), (doubleValue, SaDoubleT)]un = SaLimitValueT()un.timeValue = 5000000000
  17. 17. Dynamic Loading of Libraries using CDLLamfdll = CDLL(libSaAmf.so.0) Functions in the library accessible as attributes of the amfdll object.
  18. 18. Definition of Functionsdef saAmfInitialize(amfHandle, amfCallbacks, version): return amfdll.saAmfInitialize( BYREF(amfHandle), BYREF(amfCallbacks), BYREF(version))
  19. 19. Example usageamfHandle = SaAmfHandleT()amfCallbacks = Noneversion = SaVersionT(‘B’, 1, 1)rc = saAmfInitialize(amfHandle, amfCallbacks, version)
  20. 20. Definition of callbacks and CFUNCTYPESaAmfCSISetCallbackT = CFUNCTYPE(None, SaInvocationT, POINTER(SaNameT), SaAmfHAStateT, SaAmfCSIDescriptorT)def myCSISetCallback(invoc, comp, hastate, descr): …callbacks = SaAmfCallbacksT()callbacks.saAmfCSISetCallbackT( SaAmfCSISetCallbackT(myCSISetCallback))
  21. 21. Bindings in 4.2• A 1:1 mapping primarily aimed for OpenSAF services testing• Samples using the bindings
  22. 22. Future Work• Pythonic interfaces (inspired by Java bindings?)• OpenSAF test framework using Python bindings• Simple GUI for management• Bindings for IMM A.02.11 – OpenSAF extensions• Complete SMF bindings
  23. 23. Example of Pythonic Interfacedef foo(parent, values, mods, dn1, dn2): owner = SaImmOmOwner(‘Hans’) owner.set(parent) ccb = SaImmOmCcb(owner) ccb.objectCreate(‘TestClass’, parent, values) ccb.objectModify(dn1, mods) ccb.objectDelete(dn2) ccb.apply()
  24. 24. Questions?

×