Skip to main content

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

doxystub-0.0.12.tar.gz (9.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

doxystub-0.0.12-py3-none-any.whl (8.9 kB view details)

Uploaded Python 3

File details

Details for the file doxystub-0.0.12.tar.gz.

File metadata

  • Download URL: doxystub-0.0.12.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

Hashes for doxystub-0.0.12.tar.gz
Algorithm Hash digest
SHA256 c4ab94a538706d40c646b3bdcdd8260aa9053689c5cb9aa81b3db9287d33dcc3
MD5 f0dc3bffe821e0b2db5e9cbf2a260830
BLAKE2b-256 deb8628072420989030d2cc9587622c5e6de2dc5ec9e3536612b2f1bedc274b7

See more details on using hashes here.

File details

Details for the file doxystub-0.0.12-py3-none-any.whl.

File metadata

  • Download URL: doxystub-0.0.12-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

Hashes for doxystub-0.0.12-py3-none-any.whl
Algorithm Hash digest
SHA256 eec945d2299799c2cbdbe2e2ed55b857476967a8f5a8d379d7d5f197da86178b
MD5 3fdb0e713507f0f9e82fc4d069a61319
BLAKE2b-256 c9a7a50d2cb10f7b626c6da060574bd8c96661058c4e0a929407029d48ff139b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page