Skip to content
Snippets Groups Projects
Commit c4515e4f authored by AlQuemist's avatar AlQuemist Committed by Wuttke, Joachim
Browse files

GUI/View/Project/PyImportAssistant: Use PythonInterpreter functionality

Use PythonInterpreter functionality instead of using Python C-API directly.
parent 7a2d4ebd
No related branches found
No related tags found
1 merge request!1636PyCore: Re-implementation of embedded Python as a separate module (Major change)
...@@ -30,7 +30,8 @@ ...@@ -30,7 +30,8 @@
#include "GUI/View/Project/ProjectManager.h" #include "GUI/View/Project/ProjectManager.h"
#include "GUI/View/Tool/Globals.h" #include "GUI/View/Tool/Globals.h"
#include "Sample/Multilayer/MultiLayer.h" #include "Sample/Multilayer/MultiLayer.h"
#include "Sample/Multilayer/PyImport.h" #include "PyTools/Embed/PythonInterpreter.h" // listOfFunctions
#include "PyTools/Sample/Multilayer/ImportMultiLayer.h" // createMultiLayerFromPython
#include <QApplication> #include <QApplication>
#include <QFileDialog> #include <QFileDialog>
#include <QTextStream> #include <QTextStream>
...@@ -101,21 +102,23 @@ QString readFile(const QString& fileName) ...@@ -101,21 +102,23 @@ QString readFile(const QString& fileName)
std::unique_ptr<MultiLayer> createMultiLayer(const QString& snippet, const QString& funcName) std::unique_ptr<MultiLayer> createMultiLayer(const QString& snippet, const QString& funcName)
{ {
std::unique_ptr<MultiLayer> result;
QApplication::setOverrideCursor(Qt::WaitCursor); QApplication::setOverrideCursor(Qt::WaitCursor);
try {
result = Py::Import::createFromPython(snippet.toStdString(), funcName.toStdString(), Result<std::unique_ptr<MultiLayer>> result{
bornagainDir()); PythonInterpreter::createMultiLayerFromPython(
} catch (const std::exception& ex) { snippet.toStdString(), funcName.toStdString(),
bornagainDir())};
if (!result.valid()) {
QApplication::restoreOverrideCursor(); QApplication::restoreOverrideCursor();
QString message("Exception thrown while executing Python code to create sample.\n\n"); QString message("Exception thrown while executing Python code to create sample.\n\n");
QString details = QString::fromStdString(std::string(ex.what())); QString details = QString::fromStdString(result.status.message);
DetailedMessageBox(GUI::Global::mainWindow, "Python failure", message, details).exec(); DetailedMessageBox(GUI::Global::mainWindow, "Python failure", message, details).exec();
} }
QApplication::restoreOverrideCursor(); QApplication::restoreOverrideCursor();
return result; return std::move(result.val);
} }
//! Lets user select a function name which generates a MultiLayer. //! Lets user select a function name which generates a MultiLayer.
...@@ -148,22 +151,23 @@ QString selectPySampleFunction(const QStringList& funcNames) ...@@ -148,22 +151,23 @@ QString selectPySampleFunction(const QStringList& funcNames)
QString getPySampleFunctionName(const QString& snippet) QString getPySampleFunctionName(const QString& snippet)
{ {
QStringList funcList;
QApplication::setOverrideCursor(Qt::WaitCursor); QApplication::setOverrideCursor(Qt::WaitCursor);
try {
auto funcs = Py::Import::listOfFunctions(snippet.toStdString(), bornagainDir()); Result<std::vector<std::string>> funcs_res {
funcList = GUI::Util::String::fromStdStrings(funcs); PythonInterpreter::BornAgain::listOfFunctions(
} catch (const std::exception& ex) { snippet.toStdString(), bornagainDir())};
if(!funcs_res.valid())
{
QApplication::restoreOverrideCursor(); QApplication::restoreOverrideCursor();
QString message("Exception thrown while acquiring functions from Python code.\n\n"); QString message("Exception thrown while acquiring functions from Python code.\n\n");
QString details = QString::fromStdString(std::string(ex.what())); QString details = QString::fromStdString(funcs_res.status.message);
DetailedMessageBox(GUI::Global::mainWindow, "Python failure", message, details).exec(); DetailedMessageBox(GUI::Global::mainWindow, "Python failure", message, details).exec();
return ""; return "";
} }
QApplication::restoreOverrideCursor();
QApplication::restoreOverrideCursor();
QStringList funcList {GUI::Util::String::fromStdStrings(funcs_res.val)};
return selectPySampleFunction(funcList); return selectPySampleFunction(funcList);
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment