Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Maintainability of a python wrapping of a C library

I have a poorly designed and big (> 300 public functions, >200 numeric constants defined with #define in the header file) that I have to wrap in Python. I have the dll and the h file. The library is updated yearly, till now in a backwards compatible way (i.e. just functions were added, a constant keep their numerical values, etc). But I have no guarantees as I do not control the library.

Using ctypes, I see two ways of wrapping this in Python:

  1. Mapping every constant and function to python, 1 to 1
  2. Redefining the API in Python and making calls to the library.

The first can be done in a (roughly) automatic way from the header file and therefore is easier to maintain and upgrade, the second requires a lot of python code but it will be easier to use.

I would appreciate some opinions based on your experience with this type of problem and some examples.

like image 524
user1726868 Avatar asked Oct 07 '12 15:10

user1726868


1 Answers

I recently used ctypesgen to create a ctypes wrapping for SDL, and complementary libraries (SDL_image, SDL_ttf, SDL_mixer).

For me, it worked fairly well. It generates Python 2.x, but I was able to get the desired 3.x code by using the "2to3" utility.

I think it's a good idea to use the ctypes wrapping as a foundation for a more "pythonic" api, and that's basically what I did (on a very simple level) with my pslab module.

So, if you're looking to do something similar, that would be one way.

like image 71
Goran Milovanovic Avatar answered Oct 13 '22 00:10

Goran Milovanovic