Stubs generator based on Doxygen+Boost.Python
Project description
Doxystub
What is it ?
This package generates stubs (.pyi file) for a python module created with Boost Python, leveraging doxygen documentation.
Setting up
Requirement
doxystub needs to know the mapping between C++ and Python classes. To that end, you should wrap your calls to class_ as follow:
// doxystub.h
#pragma once
#include <boost/python.hpp>
/**
* This wrapper adds a __cxx_class__ method on the exposed class, allowing to retrieve the original
* C++ type of the object from Python.
*/
template <class W, class X1 = boost::python::detail::not_specified, class X2 = boost::python::detail::not_specified,
class X3 = boost::python::detail::not_specified, typename... Args>
boost::python::class_<W, X1, X2, X3> class__(Args... args)
{
return boost::python::class_<W, X1, X2>(args...).def(
"__cxx_class__", +[]() { return boost::core::demangle(typeid(W).name()); });
}
Simply keep the above snippet in a header file, and use class__ instead of class_ to expose your classes.
This will provide the __cxx_class__ method, used by doxystub to retrieve the mapping with C++ types.
Usage
You can install doxystub using pip:
pip install doxystub
And then use it as follows:
doxystub -m my_module -d path/to/doxygen -o my_module.pyi
In CMakeLists.txt
The following snippet can be used to trigger stubs generation at the end of your build
add_custom_command(
TARGET my_module POST_BUILD
COMMAND doxystub
--module my_module
--doxygen_directory "${CMAKE_CURRENT_SOURCE_DIR}"
--output "${CMAKE_BINARY_DIR}/${PYTHON_SITELIB}/my_module.pyi"
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/${PYTHON_SITELIB}"
COMMENT "Generating stubs..."
)
Behaviour and remarks
General process
doxystub will try, for each method, to find a method with corresponding name from doxygen parsing.
Custom methods and variables
If you define custom methods and variables, that doesn't exist in doxygen, you can specify the arguments types and the docstring manually. doxystub will parse the Boost.Python docstring to try to extract information:
class_<Something>("Something", init<>())
.def("my_method", +[](Something &s, int j) { return 42; }, args("self", "j"), "A custom method")
.add_property("my_property", +[]() { return 123; }, "My property [int]")
;
Note that type of non-doxygen properties is unknown. It can be overridden using [type] at the end of your description.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file doxystub-0.0.13.tar.gz.
File metadata
- Download URL: doxystub-0.0.13.tar.gz
- Upload date:
- Size: 9.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ba3958b4aede7287f9b755df256999e249cb8f20584ee33f60e7b6a76346ec40
|
|
| MD5 |
bad0c70845b2c32782a51be02ff2d904
|
|
| BLAKE2b-256 |
98e76a4b4b848a24c3ca1eac55032f9016ebb88f3b5699dc9aa277655732e90c
|
File details
Details for the file doxystub-0.0.13-py3-none-any.whl.
File metadata
- Download URL: doxystub-0.0.13-py3-none-any.whl
- Upload date:
- Size: 8.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
79b66c249ce738328380b07fea93bc95b8f10e6aed5d4f589935dc7539f880e3
|
|
| MD5 |
27eb2eac9bc8b1a042c617f2f79ca722
|
|
| BLAKE2b-256 |
d901e5d12a9093356c658e2c280ebe51b5625751c30b875285b12373e0f059c3
|