aboutsummaryrefslogtreecommitdiffstats
path: root/library/cpp/pybind/module.cpp
diff options
context:
space:
mode:
authorrobot-piglet <robot-piglet@yandex-team.com>2023-10-03 15:02:38 +0300
committerrobot-piglet <robot-piglet@yandex-team.com>2023-10-03 16:04:35 +0300
commit5478b8f55cc7055a4861c4030e0c401b5c72714c (patch)
tree3d003e5b4c1800297fcc491faffc9a006d174289 /library/cpp/pybind/module.cpp
parentca778ad9bfb31839b0f05a4995753bc61db648ad (diff)
downloadydb-5478b8f55cc7055a4861c4030e0c401b5c72714c.tar.gz
Intermediate changes
Diffstat (limited to 'library/cpp/pybind/module.cpp')
-rw-r--r--library/cpp/pybind/module.cpp72
1 files changed, 0 insertions, 72 deletions
diff --git a/library/cpp/pybind/module.cpp b/library/cpp/pybind/module.cpp
deleted file mode 100644
index b7b003d3b08..00000000000
--- a/library/cpp/pybind/module.cpp
+++ /dev/null
@@ -1,72 +0,0 @@
-#include "module.h"
-#include "ptr.h"
-
-#include <util/generic/adaptor.h>
-
-namespace NPyBind {
-
-#if PY_MAJOR_VERSION >= 3
- namespace NPrivate {
- struct TFinCallBacksHolder {
- static TVector<TFinalizationCallBack>& GetCallBacks() {
- static TVector<TFinalizationCallBack> res;
- return res;
- }
- };
-
- TAtExitRegistrar::TAtExitRegistrar(TPyObjectPtr module) {
- TPyObjectPtr atExitModuleName(Py_BuildValue("s", "atexit"), true);
- TPyObjectPtr atExitModule(PyImport_Import(atExitModuleName.Get()));
- Y_VERIFY(atExitModule);
- TPyObjectPtr finalizerFunc(PyObject_GetAttrString(module.Get(), "finalizer"), true);
- Y_VERIFY(finalizerFunc);
- TPyObjectPtr registerName(Py_BuildValue("s", "register"), true);
- PyObject_CallMethodObjArgs(atExitModule.Get(), registerName.Get(), finalizerFunc.Get(), nullptr);
- }
-
- TPyBindModuleRegistrar::TPyBindModuleRegistrar() {
- TPyObjectPtr modules(PySys_GetObject("modules"));
- Y_ENSURE(modules.Get());
- if (Module = NPrivate::CreatePyBindModule()) {
- Y_VERIFY(0 == PyDict_SetItemString(modules.Get(), "pybind", Module.RefGet()));
- }
- AddFinalizationCallBack([this]() {
- auto ptr = Module;
- Y_UNUSED(ptr);
- TPyObjectPtr modules(PySys_GetObject("modules"));
- Y_ENSURE(modules.Get());
- TPyObjectPtr pyBindName(Py_BuildValue("s", "pybind"));
- if (PyDict_Contains(modules.Get(), pyBindName.Get()) == 1) {
- Y_VERIFY(0==PyDict_DelItemString(modules.Get(), "pybind"));
- }
- if (Module) {
- //We have to untrack the module because some refs from him refers to gc-leaked errors
- //see exceptions.cpp fore more info
- PyObject_GC_UnTrack(Module.Get());
- Module.Drop();
- }
- });
- }
-
- void AddFinalizationCallBack(TFinalizationCallBack callback) {
- TFinCallBacksHolder::GetCallBacks().push_back(callback);
- }
-
- int FinalizeAll() {
- for (auto callback: Reversed(NPrivate::TFinCallBacksHolder::GetCallBacks())) {
- callback();
- }
- return 0;
- }
- }
-#endif
-
-
- TModuleHolder::TModuleHolder()
- : Methods(1, new TVector<TMethodDef>)
- {
-#if PY_MAJOR_VERSION >= 3
- AddModuleMethod<TModuleMethodCaller<decltype(&NPrivate::FinalizeAll), &NPrivate::FinalizeAll>::Call>("finalizer");
-#endif
- }
-}//NPyBind