- use same symbols names as app_python so these two modules cannot be used together - use GIL for thread management
<!-- Kamailio Pull Request Template -->
<!-- IMPORTANT: - for detailed contributing guidelines, read: https://github.com/kamailio/kamailio/blob/master/.github/CONTRIBUTING.md - pull requests must be done to master branch, unless they are backports of fixes from master branch to a stable branch - backports to stable branches must be done with 'git cherry-pick -x ...' - code is contributed under BSD for core and main components (tm, sl, auth, tls) - code is contributed GPLv2 or a compatible license for the other components - GPL code is contributed with OpenSSL licensing exception -->
#### Pre-Submission Checklist <!-- Go over all points below, and after creating the PR, tick all the checkboxes that apply --> <!-- All points should be verified, otherwise, read the CONTRIBUTING guidelines from above--> <!-- If you're unsure about any of these, don't hesitate to ask on sr-dev mailing list --> - [ ] Commit message has the format required by CONTRIBUTING guide - [ ] Commits are split per component (core, individual modules, libs, utils, ...) - [ ] Each component has a single commit (if not, squash them into one commit) - [ ] No commits to README files for modules (changes must be done to docbook files in `doc/` subfolder, the README file is autogenerated)
#### Type Of Change - [ ] Small bug fix (non-breaking change which fixes an issue) - [ ] New feature (non-breaking change which adds new functionality) - [ ] Breaking change (fix or feature that would change existing functionality)
#### Checklist: <!-- Go over all points below, and after creating the PR, tick the checkboxes that apply --> - [ ] PR should be backported to stable branches - [ ] Tested changes locally - [ ] Related to issue #XXXX (replace XXXX with an open issue number)
#### Description <!-- Describe your changes in detail --> #### Description - add app_python3 module - this is a direct port of app_python and aims for feature equivalence - script reload does not work yet - disable thread management; fortunately kamailio does not use threads; as the Py3 API is too different; trying to avoid deprecated APIs like PyEval_AcquireLock(). - TODO: need to reenable threads: use case is python extension module that uses native threads (e.g. gRPC)
You can view, comment on, or merge this pull request online at:
https://github.com/kamailio/kamailio/pull/1449
-- Commit Summary --
* app_python3: first release
-- File Changes --
A src/modules/app_python3/Makefile (29) A src/modules/app_python3/README (196) A src/modules/app_python3/README.TestCase-Loggers (16) A src/modules/app_python3/app_python_mod.c (544) A src/modules/app_python3/app_python_mod.h (31) A src/modules/app_python3/apy_kemi.c (1292) A src/modules/app_python3/apy_kemi.h (40) A src/modules/app_python3/apy_kemi_export.c (9288) A src/modules/app_python3/apy_kemi_export.h (42) A src/modules/app_python3/doc/Makefile (4) A src/modules/app_python3/doc/app_python.xml (34) A src/modules/app_python3/doc/app_python_admin.xml (212) A src/modules/app_python3/mod_Core.c (80) A src/modules/app_python3/mod_Core.h (36) A src/modules/app_python3/mod_Logger.c (271) A src/modules/app_python3/mod_Logger.h (37) A src/modules/app_python3/mod_Ranks.c (109) A src/modules/app_python3/mod_Ranks.h (35) A src/modules/app_python3/mod_Router.c (100) A src/modules/app_python3/mod_Router.h (36) A src/modules/app_python3/msgobj_struct.h (36) A src/modules/app_python3/python_examples/Loggers.py (107) A src/modules/app_python3/python_examples/TestCase_Traceback.py (46) A src/modules/app_python3/python_examples/handler.py (26) A src/modules/app_python3/python_exec.c (220) A src/modules/app_python3/python_exec.h (37) A src/modules/app_python3/python_iface.c (54) A src/modules/app_python3/python_iface.h (30) A src/modules/app_python3/python_msgobj.c (545) A src/modules/app_python3/python_msgobj.h (33) A src/modules/app_python3/python_support.c (277) A src/modules/app_python3/python_support.h (37) A src/modules/app_python3/utils/app_python_ctl (148)
-- Patch Links --
https://github.com/kamailio/kamailio/pull/1449.patch https://github.com/kamailio/kamailio/pull/1449.diff
Thanks for this work!
There are some bits that still need to be updated, as I could spot in the documentation the name of the module is app_python, but it should be app_python3.
Since we are here discussing about a new app_python implementation, I wonder if still make sense to keep the old modules like Router, Logger (not sure if there are other). The should be now redundant with the KSR, which has lot more methods exported. I am not a Python user, so I cannot assert if something in old modules is missing in KSR, but in long term, we should remove the old ones anyhow, adding whatever is missing to KSR.
As you are working on this these days, would you be able to make the RPC command to reload the script working? I did a poor attempt to implement it, but it fails badly.
Another aspect I wanted to discuss with the people being familiar with the Python and its embedded API is whether it makes sense to create a SIP msg object each time there is a SIP request/reply handled by Kamailio. It feels like adding a bit of overhead in terms of performances. The alternative is to have KSR as a static/global object, so it doesn't need a constructor to initialize for each SIP message. Then the KEMI callback functions like ksr_request_route() to be global, not part of an object. Again, just an idea, not sure it matches how Python interpreter can be embedded or how it fits with its object oriented model. But Python seems rather popular in the context of Kemi, so I am throwing some ideas that could improve the performances.
Anyhow, I think the way to go is:
* I am going to merge this PR, so if someone wants to keep using old modules, have a chance to revert if we go in a different direction * you will follow up with commits that will make `app_python3` be used everywhere it should be the module name * based on what people find acceptable/possible to implement, next steps will be to remove old modules and switch from a dynamic object for each SIP message to use of a static Kemi/KSR package.
Thanks @miconda! I'll wait until it is merged to rebase and follow-up.
The immediate tasks will be to fix documentation, and have a go at reload.
Will gather more developer and community feedback before proposing any refactoring.
Merged #1449.
Merged. Regarding the name app_python instead of app_python3, check also the source code, mainly the top comments -- not sure if there are any there, just a hint in order to have coherence with the module name.