Skip to content
Snippets Groups Projects
README.md 2.08 KiB
Newer Older
Nicolas Pope's avatar
Nicolas Pope committed
# Python API generator

Dependencies
 * python3-dev
 * python3-ply
Nicolas Pope's avatar
Nicolas Pope committed

Build system uses Pybind11 to generate a python module. Most of the bindings are
automatically generated by gen.py script which is automatically called by CMake
when necessary.

Headers included for automatic binding generation are defined in
SDK_AUTO_HEADERS variable in CMakeLists.txt. Included pybind headers are defined
in automatic_bindings.cpp.in, which to which generated code is inserted before
build. Several (empty) macros are used in headers to annoate Python API details.

 * PY_API function/method is to be included in Python API
 * PY_NO_SHARED_PTR shared_ptr<> is not used with instances of this class.
   See [pybind11 documentation](https://pybind11.readthedocs.io/en/latest/advanced/smart_ptrs.html?#std-shared-ptr)
   for techncal details. Shared pointers are not used for structs.
Nicolas Pope's avatar
Nicolas Pope committed
 * PY_RV_LIFETIME_PARENT lifetime of method's return valued is tied to
   lifetime of parent objects (this). ([return_value_policy::reference_internal](https://pybind11.readthedocs.io/en/latest/advanced/functions.html#return-value-policies)
Nicolas Pope's avatar
Nicolas Pope committed
   is set for this method)
 * PY_SINGLETON Singleton class, methods are exported to to module scope.
 * PY_SINGLETON_OBJECT Singleton instance is accessible as module attribute.
Nicolas Pope's avatar
Nicolas Pope committed

## Notes:
 * Binding to default constructor is generated for structs. Class constructors
   are not available via Python at the moment.
 * Keyword arguments are supported in Python when function arguments are named
   in the header.
 * Default arguments are supported (extracted from header).
 * Public class properties are available in python, read-only if const,
   otherwise read write.
 * Singletons have to be created in PyModule constructor and be available
   as class members.
 * Exceptions have to be included manually in module.cpp
 * C++ preprocessor is not used
Nicolas Pope's avatar
Nicolas Pope committed

## Not supported (yet) in automatic binding generation:
 * Nested classes
 * Static members
 * Constructors
 * Automatic documentation (Doxygen)
Sebastian Hahta's avatar
Sebastian Hahta committed
 * Generator does not verify that shared_ptr<> is used consistently/correctly
 * Member variables of singleton classes