summaryrefslogtreecommitdiffstats
path: root/sca-cpp/trunk/modules/python/eval.hpp
diff options
context:
space:
mode:
authorjsdelfino <jsdelfino@13f79535-47bb-0310-9956-ffa450edef68>2010-02-07 00:36:25 +0000
committerjsdelfino <jsdelfino@13f79535-47bb-0310-9956-ffa450edef68>2010-02-07 00:36:25 +0000
commitbb4b895471e3165c71bdfd1fdae5e1ffde8f1696 (patch)
tree57bec175bb5dbf43303f7334162b9b2b4bda03c6 /sca-cpp/trunk/modules/python/eval.hpp
parent00f9947613624b251551ba709824f97f1b6c2fb1 (diff)
Moved server configuration to HTTPD postConfig phase, to avoid running configuration commands twice and added a way for runtime modules and components to handle start/restart/stop events. Improved build scripts a little, to not depend on external environment variables.
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@907352 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'sca-cpp/trunk/modules/python/eval.hpp')
-rw-r--r--sca-cpp/trunk/modules/python/eval.hpp24
1 files changed, 19 insertions, 5 deletions
diff --git a/sca-cpp/trunk/modules/python/eval.hpp b/sca-cpp/trunk/modules/python/eval.hpp
index 1b9392aed7..09c2cba92d 100644
--- a/sca-cpp/trunk/modules/python/eval.hpp
+++ b/sca-cpp/trunk/modules/python/eval.hpp
@@ -39,16 +39,23 @@ namespace python {
*/
class PythonRuntime {
public:
- PythonRuntime() {
- Py_Initialize();
-
+ PythonRuntime() : owner(true) {
+ Py_InitializeEx(0);
setupIO();
}
+ PythonRuntime(unused const PythonRuntime& r) : owner(false) {
+ }
+
~PythonRuntime() {
+ if (!owner)
+ return;
+ //Py_Finalize();
}
-} pythonRuntime;
+private:
+ const bool owner;
+};
/**
* Declare conversion functions.
@@ -211,8 +218,15 @@ const failable<value> evalScript(const value& expr, PyObject* script) {
// Get the requested function
PyObject* func = PyObject_GetAttrString(script, c_str(car<value>(expr)));
- if (func == NULL)
+ if (func == NULL) {
+
+ // The start, stop, and restart functions are optional
+ const value fn = car<value>(expr);
+ if (fn == "start" || fn == "stop" || fn == "restart")
+ return value(false);
+
return mkfailure<value>(string("Couldn't find function: ") + car<value>(expr) + " : " + lastError());
+ }
if (!PyCallable_Check(func)) {
Py_DECREF(func);
return mkfailure<value>(string("Couldn't find callable function: ") + car<value>(expr));