ctypes wrapping of libtoxcore into Python. Taken from the now abandoned https://github.com/toxygen-project/toxygen next_gen branch
Go to file
emdee@spm.plastiras.org 7759dbce8d
Some checks are pending
Gitea Actions Demo / Explore-Gitea-Actions (push) Waiting to run
rename
2024-02-05 13:30:49 +00:00
.gitea/workflows .gitea/workflows/demo.yaml 2023-12-15 02:38:43 +00:00
docs/toktok.ltd update 2024-02-05 13:11:36 +00:00
src rename 2024-02-05 13:30:49 +00:00
__init__.py add __init__.py 2022-09-24 04:35:33 +00:00
.gitignore update 2024-02-04 01:07:37 +00:00
.pyanal.sh update 2024-02-04 01:07:37 +00:00
.pylint.rc Added Makefile 2023-12-15 14:24:07 +00:00
.pylint.sh update 2024-02-04 01:07:37 +00:00
LICENSE update 2024-02-05 13:11:36 +00:00
LICENSE.md Update LICENSE.md from Toxygen 2022-09-26 09:55:58 +00:00
Makefile update 2024-02-05 13:11:36 +00:00
pyproject.toml update 2024-02-05 13:11:36 +00:00
README.md update 2024-02-04 01:07:37 +00:00
requirements.txt update 2024-02-05 13:11:36 +00:00
setup.cfg update 2024-02-05 13:11:36 +00:00
setup.py updates 2024-02-02 03:14:37 +00:00
tox_profile_examples.bash update 2024-02-05 13:11:36 +00:00
tox_profile_test.bash update 2024-02-05 13:11:36 +00:00
tox_profile.py update 2024-02-05 13:11:36 +00:00

toxygen_wrapper

ctypes wrapping of Tox libtoxcore into Python. Taken from the wrapper directory of the now abandoned https://github.com/toxygen-project/toxygen next_gen branch by Ingvar.

The basics of NGC groups are supported, as well as AV and toxencryptsave. There is no coverage of conferences as they are not used in toxygen and the list of still unwrapped calls as of Sept. 2022 can be found in tox.c-toxcore.missing. The code is typed so that every call in tox*.py should have the right signature, and it runs toxygen with no apparent issues.

It has been tested with UDP and TCP proxy (Tor). It has not been tested on Windows, and there may be some minor breakage, which should be easy to fix. There is a good coverage integration testsuite in tox_wrapper/tests. Change to that directory and run tests_wrapper.py --help; the test suite gives a good set of examples of usage.

Install

Run python3 setup.py install or put the parent of the wrapper directory on your PYTHONPATH and touch a file called __init__.py in its parent directory.

Then you need a libs directory beside the tox_wrapper directory and you need to link your libtoxcore.so and libtoxav.so and libtoxencryptsave.so into it. Link all 3 filenames to libtoxcore.so if you have only libtoxcore.so (which is usually the case if you built c-toxcore with cmake rather than autogen/configure). If you want to be different, the environment variable TOXCORE_LIBS overrides the location of libs; look in the file tox_wrapper/libtox.py for the details.

Tests

To test, run python3 tox_wrapper/tests/tests_wrapper.py --help

As is, the code in tox.py is very verbose. Edit the file to change

def LOG_ERROR(a): print('EROR> '+a)
def LOG_WARN(a): print('WARN> '+a)
def LOG_INFO(a): print('INFO> '+a)
def LOG_DEBUG(a): print('DBUG> '+a)
def LOG_TRACE(a): pass # print('TRAC> '+a)

to all pass # or use logging.logger to suite your tastes. logging.logger can be dangerous in callbacks in Qt applications, so we use simple print statements as default. The same applies to tox_wrapper/tests/tests_wrapper.py.

Prerequisites

No prerequisites in Python3.

Other wrappers

There are a number of other wrappings into Python of Tox core. This one uses ctypes which has its merits - there is no need to recompile anything as with Cython - change the Python file and it's done. And you can follow things in a Python debugger, or with the utterly stupendous Python feature of gdb (gdb -ex r --args /usr/bin/python3.9 <pyfile>).

CTYPES code can be brittle, segfaulting if you've got things wrong, but if your wrapping is right, it is very efficient and easy to work on. The faulthandler module can be helpful in debugging crashes (e.g. from segmentation faults produced by erroneous C library wrapping).

Others include:

To our point of view, the ability of CTYPEs to follow code in the debugger is a crucial advantage.

Up-to-date code is on https://git.plastiras.org/emdee/toxygen_wrapper

Work on this project is suspended until the MultiDevice problem is solved. Fork me!