Welcome to mirror list, hosted at ThFree Co, Russian Federation.

local_namespace.diff « patches « mantaflow « extern - git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 41bc169677216dead9f2426765487c661e94d741 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
diff --git a/extern/mantaflow/helper/pwrapper/registry.cpp b/extern/mantaflow/helper/pwrapper/registry.cpp
index 5196c0409f8..b4206a41dea 100644
--- a/extern/mantaflow/helper/pwrapper/registry.cpp
+++ b/extern/mantaflow/helper/pwrapper/registry.cpp
@@ -115,7 +115,7 @@ class WrapperRegistry {
   void construct(const std::string &scriptname, const vector<string> &args);
   void cleanup();
   void renameObjects();
-  void runPreInit();
+  void runPreInit(PyObject *name_space);
   PyObject *initModule();
   ClassData *lookup(const std::string &name);
   bool canConvert(ClassData *from, ClassData *to);
@@ -505,7 +505,7 @@ void WrapperRegistry::addConstants(PyObject *module)
   }
 }
 
-void WrapperRegistry::runPreInit()
+void WrapperRegistry::runPreInit(PyObject *name_space)
 {
   // add python directories to path
   PyObject *sys_path = PySys_GetObject((char *)"path");
@@ -518,7 +518,15 @@ void WrapperRegistry::runPreInit()
   }
   if (!mCode.empty()) {
     mCode = "from manta import *\n" + mCode;
-    PyRun_SimpleString(mCode.c_str());
+    PyObject *return_value = PyRun_String(mCode.c_str(), Py_file_input, name_space, name_space);
+    if (return_value == nullptr) {
+      if (PyErr_Occurred()) {
+        PyErr_Print();
+      }
+    }
+    else {
+      Py_DECREF(return_value);
+    }
   }
 }
 
@@ -698,16 +706,23 @@ PyObject *WrapperRegistry::initModule()
 //******************************************************
 // Register members and exposed functions
 
-void setup(const std::string &filename, const std::vector<std::string> &args)
+void setup(const bool python_lifecycle,
+           const std::string &filename,
+           const std::vector<std::string> &args,
+           PyObject *name_space)
 {
   WrapperRegistry::instance().construct(filename, args);
-  Py_Initialize();
-  WrapperRegistry::instance().runPreInit();
+  if (python_lifecycle) {
+    Py_Initialize();
+  }
+  WrapperRegistry::instance().runPreInit(name_space);
 }
 
-void finalize()
+void finalize(const bool python_lifecycle)
 {
-  Py_Finalize();
+  if (python_lifecycle) {
+    Py_Finalize();
+  }
   WrapperRegistry::instance().cleanup();
 }
 
diff --git a/extern/mantaflow/helper/pwrapper/registry.h b/extern/mantaflow/helper/pwrapper/registry.h
index d9d2bbb624b..2273d0b9bb1 100644
--- a/extern/mantaflow/helper/pwrapper/registry.h
+++ b/extern/mantaflow/helper/pwrapper/registry.h
@@ -48,8 +48,11 @@ template<class T> struct Namify {
 namespace Pb {
 
 // internal registry access
-void setup(const std::string &filename, const std::vector<std::string> &args);
-void finalize();
+void setup(bool python_lifecycle,
+           const std::string &filename,
+           const std::vector<std::string> &args,
+           PyObject *name_space);
+void finalize(bool python_lifecycle);
 bool canConvert(PyObject *obj, const std::string &to);
 Manta::PbClass *objFromPy(PyObject *obj);
 Manta::PbClass *createPy(const std::string &classname,