provide python interpreter for mussa qui via a seperate thread
[mussa.git] / py / python.cpp
index fe2364eb529df5c44b24ae95bfd1381a841a5108..d43ee2f74334b1f5f396aaa47a01123944d42405 100644 (file)
@@ -14,6 +14,7 @@ MussaPython::MussaPython()
   try {
     // add our mussa module to our environment
     PyImport_AppendInittab("mussa", &initmussa);
+    PyImport_AppendInittab("mussaqui", &initmussaqui);
     // go ahead and finish initalizing python
     Py_Initialize();
     // get reference to the global namespace
@@ -24,7 +25,7 @@ MussaPython::MussaPython()
     // FIXME: this really should be a configuration file?
     run("import __main__\n"
         "import mussa\n"
-        "import webbrowser\n");
+        "import mussaqui");       
   } catch (py::error_already_set e) {
     PyErr_Print();
   }
@@ -58,7 +59,26 @@ py::object MussaPython::eval(std::string code)
 }
 
 
-void MussaPython::interpreter(FILE *fp)
+void MussaPython::interpreter() 
+{
+  try {
+    run("import sys\n"
+        "sys.argv = ['Mussa']\n"
+        "banner='Welcome to Mussa'\n"
+        "try:\n"
+        "  from IPython.Shell import IPShellEmbed\n"
+        "  ipshell = IPShellEmbed(banner=banner)\n"
+        "  ipshell()\n"
+        "except ImportError, e:\n"
+        "  import code\n"
+        "  code.interact(banner, local=globals())\n"
+        "print 'exiting interpreter'\n"
+    );
+  } catch (py::error_already_set e) {
+    PyErr_Print();
+  }
+}
+void MussaPython::simple_interpreter(FILE *fp)
 {
   try {
     PyRun_InteractiveLoop(fp, "mussa");
@@ -87,6 +107,9 @@ py::object MussaPython::operator[](std::string name)
 //! return a reference to a single mussa python interpreter
 MussaPython& get_py()
 {
-  static MussaPython py;
-  return py;
+  static MussaPython *py;
+  if (!py) {
+    py = new MussaPython;
+  }
+  return *py;
 }
\ No newline at end of file