SlideShare a Scribd company logo
1 of 24
Download to read offline
Python Bindings for SA Forum AIS APIs

                        Hans Feldt
                         Ericsson

                        Currie Reid
                   Linux Product Division
                        Wind River
Outline of Presentation

•   Objectives
•   What is Python?
•   Mapping Python to Objectives
•   How Python bindings are implemented
•   (Demonstration)
•   Future Works
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.
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.
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
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.
Simplify development across different
architectures
• 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.
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.
• Do more with less
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.
• Identify “hot spots” in application and possibly
  optimize by extending with C/C++
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.
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
Conversion of SAF types to ctypes

SaInt8T     =   c_char
SaInt16T    =   c_short
SaInt32T    =   c_int
SaInt64T    =   c_longlong
SaUint8T    =   c_ubyte
SaUint16T   =   c_ushort
SaUint32T   =   c_uint
SaUint64T   =   c_ulonglong
...

myuint = SaUint64T(12)
Definition of Const

saAis = Const()

saAis.SA_TIME_END = 0x7FFFFFFFFFFFFFFF
saAis.SA_TIME_BEGIN = 0x0
saAis.SA_TIME_UNKNOWN = 0x8000000000000000




time_start = saAis.SA_TIME_BEGIN
saAis.SA_TIME_BEGIN = 5 #ERROR: EXCEPTION
Definition of Enumeration

SaDispatchFlagsT = SaEnumT
eSaDispatchFlagsT = Enumeration((
  ('SA_DISPATCH_ONE', 1),
  ('SA_DISPATCH_ALL', 2),
  ('SA_DISPATCH_BLOCKING', 3),
))




flag = eSaDispatchFlagsT.SA_DISPATCH_ALL
flag_str = eSaDispatchFlagsT.whatis(flag)
Definition of Structs
class 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’)
Definition of Unions

class SaLimitValueT(Union):
   _fields_ = [('int64Value', SaInt64T),
      ('uint64Value', SaUint64T),
      ('timeValue', SaTimeT),
      ('floatValue', SaFloatT),
      ('doubleValue', SaDoubleT)]




un = SaLimitValueT()
un.timeValue = 5000000000
Dynamic Loading of Libraries using CDLL

amfdll = CDLL('libSaAmf.so.0')




  Functions in the library accessible as
  attributes of the amfdll object.
Definition of Functions

def saAmfInitialize(amfHandle,
   amfCallbacks, version):




  return amfdll.saAmfInitialize(
    BYREF(amfHandle),
    BYREF(amfCallbacks),
    BYREF(version))
Example usage

amfHandle = SaAmfHandleT()
amfCallbacks = None
version = SaVersionT(‘B’, 1, 1)

rc = saAmfInitialize(amfHandle,
   amfCallbacks, version)
Definition of callbacks and CFUNCTYPE

SaAmfCSISetCallbackT = CFUNCTYPE(None,
   SaInvocationT, POINTER(SaNameT),
   SaAmfHAStateT, SaAmfCSIDescriptorT)

def myCSISetCallback(invoc,
   comp, hastate, descr):
   …
callbacks = SaAmfCallbacksT()
callbacks.saAmfCSISetCallbackT(
   SaAmfCSISetCallbackT(myCSISetCallback))
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 for management
• Bindings for IMM A.02.11 – OpenSAF
  extensions
• Complete SMF bindings
Example of Pythonic Interface
def 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()
Questions?

More Related Content

What's hot

SWIM MasterClass - Building SWIM B2B web services using Open Standards
SWIM MasterClass - Building SWIM B2B web services using Open StandardsSWIM MasterClass - Building SWIM B2B web services using Open Standards
SWIM MasterClass - Building SWIM B2B web services using Open Standards
Debbie Wilson
 
Simulating metal coil handling
Simulating metal coil handlingSimulating metal coil handling
Simulating metal coil handling
jhjsmits
 
OpenSPARC T1 Processor
OpenSPARC T1 ProcessorOpenSPARC T1 Processor
OpenSPARC T1 Processor
DVClub
 

What's hot (19)

Linaro Connect 2016 (BKK16) - Introduction to LISA
Linaro Connect 2016 (BKK16) - Introduction to LISALinaro Connect 2016 (BKK16) - Introduction to LISA
Linaro Connect 2016 (BKK16) - Introduction to LISA
 
CICC 2001 - Reducing Multiple Design Flow Support Requirements with OLA
CICC 2001 - Reducing Multiple Design Flow Support Requirements with OLACICC 2001 - Reducing Multiple Design Flow Support Requirements with OLA
CICC 2001 - Reducing Multiple Design Flow Support Requirements with OLA
 
SWIM MasterClass - Building SWIM B2B web services using Open Standards
SWIM MasterClass - Building SWIM B2B web services using Open StandardsSWIM MasterClass - Building SWIM B2B web services using Open Standards
SWIM MasterClass - Building SWIM B2B web services using Open Standards
 
8 ert
8 ert8 ert
8 ert
 
OpenFlow
OpenFlowOpenFlow
OpenFlow
 
Sharam salamian
Sharam salamianSharam salamian
Sharam salamian
 
Irati goals and achievements - 3rd RINA Workshop
Irati goals and achievements - 3rd RINA WorkshopIrati goals and achievements - 3rd RINA Workshop
Irati goals and achievements - 3rd RINA Workshop
 
Real Time Support For Xen
Real Time Support For XenReal Time Support For Xen
Real Time Support For Xen
 
Right Availability in RAC environment. Playing with Oracle clusterware infras...
Right Availability in RAC environment. Playing with Oracle clusterware infras...Right Availability in RAC environment. Playing with Oracle clusterware infras...
Right Availability in RAC environment. Playing with Oracle clusterware infras...
 
Jython for embedded software validation
Jython for embedded software validationJython for embedded software validation
Jython for embedded software validation
 
Implement Checkpointing for Android
Implement Checkpointing for AndroidImplement Checkpointing for Android
Implement Checkpointing for Android
 
Simulating metal coil handling
Simulating metal coil handlingSimulating metal coil handling
Simulating metal coil handling
 
Barak Perlman, ConteXtream - SFC (Service Function Chaining) Using Openstack ...
Barak Perlman, ConteXtream - SFC (Service Function Chaining) Using Openstack ...Barak Perlman, ConteXtream - SFC (Service Function Chaining) Using Openstack ...
Barak Perlman, ConteXtream - SFC (Service Function Chaining) Using Openstack ...
 
OpenSPARC T1 Processor
OpenSPARC T1 ProcessorOpenSPARC T1 Processor
OpenSPARC T1 Processor
 
Next Generation MPICH: What to Expect - Lightweight Communication and More
Next Generation MPICH: What to Expect - Lightweight Communication and MoreNext Generation MPICH: What to Expect - Lightweight Communication and More
Next Generation MPICH: What to Expect - Lightweight Communication and More
 
OpenPOWER Application Optimization
OpenPOWER Application Optimization OpenPOWER Application Optimization
OpenPOWER Application Optimization
 
Dynamic Service Chaining
Dynamic Service Chaining Dynamic Service Chaining
Dynamic Service Chaining
 
Yang in OpenDaylight
Yang in OpenDaylightYang in OpenDaylight
Yang in OpenDaylight
 
Shalini xs10
Shalini xs10Shalini xs10
Shalini xs10
 

Similar to OpenSAF Symposium_Python Bindings_9.21.11

Python quick guide1
Python quick guide1Python quick guide1
Python quick guide1
Kanchilug
 
Dotnetintroduce 100324201546-phpapp02
Dotnetintroduce 100324201546-phpapp02Dotnetintroduce 100324201546-phpapp02
Dotnetintroduce 100324201546-phpapp02
Wei Sun
 
DotNet Introduction
DotNet IntroductionDotNet Introduction
DotNet Introduction
Wei Sun
 

Similar to OpenSAF Symposium_Python Bindings_9.21.11 (20)

Python-Yesterday Today Tomorrow(What's new?)
Python-Yesterday Today Tomorrow(What's new?)Python-Yesterday Today Tomorrow(What's new?)
Python-Yesterday Today Tomorrow(What's new?)
 
Travis Oliphant "Python for Speed, Scale, and Science"
Travis Oliphant "Python for Speed, Scale, and Science"Travis Oliphant "Python for Speed, Scale, and Science"
Travis Oliphant "Python for Speed, Scale, and Science"
 
Open Source Swift Under the Hood
Open Source Swift Under the HoodOpen Source Swift Under the Hood
Open Source Swift Under the Hood
 
Code Clash Python vs Java — Which Language Wins.pdf
Code Clash Python vs Java — Which Language Wins.pdfCode Clash Python vs Java — Which Language Wins.pdf
Code Clash Python vs Java — Which Language Wins.pdf
 
Python PPT 50.pptx
Python PPT 50.pptxPython PPT 50.pptx
Python PPT 50.pptx
 
Introduction to Python Programming
Introduction to Python ProgrammingIntroduction to Python Programming
Introduction to Python Programming
 
Python quick guide1
Python quick guide1Python quick guide1
Python quick guide1
 
2015 bioinformatics python_introduction_wim_vancriekinge_vfinal
2015 bioinformatics python_introduction_wim_vancriekinge_vfinal2015 bioinformatics python_introduction_wim_vancriekinge_vfinal
2015 bioinformatics python_introduction_wim_vancriekinge_vfinal
 
.NET Core, ASP.NET Core Course, Session 3
.NET Core, ASP.NET Core Course, Session 3.NET Core, ASP.NET Core Course, Session 3
.NET Core, ASP.NET Core Course, Session 3
 
Hot to build continuously processing for 24/7 real-time data streaming platform?
Hot to build continuously processing for 24/7 real-time data streaming platform?Hot to build continuously processing for 24/7 real-time data streaming platform?
Hot to build continuously processing for 24/7 real-time data streaming platform?
 
Understand the Trade-offs Using Compilers for Java Applications
Understand the Trade-offs Using Compilers for Java ApplicationsUnderstand the Trade-offs Using Compilers for Java Applications
Understand the Trade-offs Using Compilers for Java Applications
 
PyData Boston 2013
PyData Boston 2013PyData Boston 2013
PyData Boston 2013
 
Machine learning from software developers point of view
Machine learning from software developers point of viewMachine learning from software developers point of view
Machine learning from software developers point of view
 
Dotnetintroduce 100324201546-phpapp02
Dotnetintroduce 100324201546-phpapp02Dotnetintroduce 100324201546-phpapp02
Dotnetintroduce 100324201546-phpapp02
 
Mannu_Kumar_CV
Mannu_Kumar_CVMannu_Kumar_CV
Mannu_Kumar_CV
 
DotNet Introduction
DotNet IntroductionDotNet Introduction
DotNet Introduction
 
Building cloud-enabled genomics workflows with Luigi and Docker
Building cloud-enabled genomics workflows with Luigi and DockerBuilding cloud-enabled genomics workflows with Luigi and Docker
Building cloud-enabled genomics workflows with Luigi and Docker
 
MODULE 1.pptx
MODULE 1.pptxMODULE 1.pptx
MODULE 1.pptx
 
Inria Tech Talk : RIOT, l'OS libre pour vos objets connectés #IoT
Inria Tech Talk : RIOT, l'OS libre pour vos objets connectés #IoTInria Tech Talk : RIOT, l'OS libre pour vos objets connectés #IoT
Inria Tech Talk : RIOT, l'OS libre pour vos objets connectés #IoT
 
Python_final_print_vison_academy_9822506209.pdf
Python_final_print_vison_academy_9822506209.pdfPython_final_print_vison_academy_9822506209.pdf
Python_final_print_vison_academy_9822506209.pdf
 

Recently uploaded

Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
vu2urc
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
giselly40
 

Recently uploaded (20)

TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdf
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 

OpenSAF Symposium_Python Bindings_9.21.11

  • 1. Python Bindings for SA Forum AIS APIs Hans Feldt Ericsson Currie Reid Linux Product Division Wind River
  • 2. Outline of Presentation • Objectives • What is Python? • Mapping Python to Objectives • How Python bindings are implemented • (Demonstration) • Future Works
  • 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. 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. 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. 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.
  • 7. Simplify development across different architectures • 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. 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. • Do more with less
  • 9. 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. • Identify “hot spots” in application and possibly optimize by extending with C/C++
  • 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. 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. Conversion of SAF types to ctypes SaInt8T = c_char SaInt16T = c_short SaInt32T = c_int SaInt64T = c_longlong SaUint8T = c_ubyte SaUint16T = c_ushort SaUint32T = c_uint SaUint64T = c_ulonglong ... myuint = SaUint64T(12)
  • 13. Definition of Const saAis = Const() saAis.SA_TIME_END = 0x7FFFFFFFFFFFFFFF saAis.SA_TIME_BEGIN = 0x0 saAis.SA_TIME_UNKNOWN = 0x8000000000000000 time_start = saAis.SA_TIME_BEGIN saAis.SA_TIME_BEGIN = 5 #ERROR: EXCEPTION
  • 14. Definition of Enumeration SaDispatchFlagsT = SaEnumT eSaDispatchFlagsT = Enumeration(( ('SA_DISPATCH_ONE', 1), ('SA_DISPATCH_ALL', 2), ('SA_DISPATCH_BLOCKING', 3), )) flag = eSaDispatchFlagsT.SA_DISPATCH_ALL flag_str = eSaDispatchFlagsT.whatis(flag)
  • 15. Definition of Structs class 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. Definition of Unions class SaLimitValueT(Union): _fields_ = [('int64Value', SaInt64T), ('uint64Value', SaUint64T), ('timeValue', SaTimeT), ('floatValue', SaFloatT), ('doubleValue', SaDoubleT)] un = SaLimitValueT() un.timeValue = 5000000000
  • 17. Dynamic Loading of Libraries using CDLL amfdll = CDLL('libSaAmf.so.0') Functions in the library accessible as attributes of the amfdll object.
  • 18. Definition of Functions def saAmfInitialize(amfHandle, amfCallbacks, version): return amfdll.saAmfInitialize( BYREF(amfHandle), BYREF(amfCallbacks), BYREF(version))
  • 19. Example usage amfHandle = SaAmfHandleT() amfCallbacks = None version = SaVersionT(‘B’, 1, 1) rc = saAmfInitialize(amfHandle, amfCallbacks, version)
  • 20. Definition of callbacks and CFUNCTYPE SaAmfCSISetCallbackT = CFUNCTYPE(None, SaInvocationT, POINTER(SaNameT), SaAmfHAStateT, SaAmfCSIDescriptorT) def myCSISetCallback(invoc, comp, hastate, descr): … callbacks = SaAmfCallbacksT() callbacks.saAmfCSISetCallbackT( SaAmfCSISetCallbackT(myCSISetCallback))
  • 21. Bindings in 4.2 • A 1:1 mapping primarily aimed for OpenSAF services testing • Samples using the bindings
  • 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. Example of Pythonic Interface def 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()