Skip to content

Commit

Permalink
Python support: merge duplicated code (#2225).
Browse files Browse the repository at this point in the history
  • Loading branch information
agarny committed Nov 26, 2019
1 parent f2accb6 commit 303cc0b
Show file tree
Hide file tree
Showing 3 changed files with 53 additions and 86 deletions.
49 changes: 49 additions & 0 deletions src/misc/opensimulation.cpp.inl
@@ -0,0 +1,49 @@
static PyObject * openSimulation(PyObject *pSelf, PyObject *pArgs)
{
Q_UNUSED(pSelf)

// Open a simulation

PyObject *bytes;

if (PyArg_ParseTuple(pArgs, "O&", PyUnicode_FSConverter, &bytes) == 0) { // NOLINT(cppcoreguidelines-pro-type-vararg)
#include "pythonbegin.h"
Py_RETURN_NONE;
#include "pythonend.h"
}

char *string;
Py_ssize_t len;

PyBytes_AsStringAndSize(bytes, &string, &len);

bool isLocalFile;
QString fileNameOrUrl;

Core::checkFileNameOrUrl(QString::fromUtf8(string, int(len)), isLocalFile, fileNameOrUrl);

#include "pythonbegin.h"
Py_DECREF(bytes);
#include "pythonend.h"

QString error = isLocalFile?
#ifdef GUI_SUPPORT
Core::centralWidget()->openFile(fileNameOrUrl,
Core::File::Type::Local,
QString(), false):
Core::centralWidget()->openRemoteFile(fileNameOrUrl, false);
#else
Core::openFile(fileNameOrUrl):
Core::openRemoteFile(fileNameOrUrl);
#endif

if (!error.isEmpty()) {
PyErr_SetString(PyExc_IOError, qPrintable(error));

return nullptr;
}

return initializeSimulation(isLocalFile?
fileNameOrUrl:
Core::FileManager::instance()->fileName(fileNameOrUrl));
}
Expand Up @@ -109,50 +109,9 @@ static PyObject * initializeSimulation(const QString &pFileName)

//==============================================================================

static PyObject * openSimulation(PyObject *pSelf, PyObject *pArgs)
{
Q_UNUSED(pSelf)

// Open a simulation

PyObject *bytes;

if (PyArg_ParseTuple(pArgs, "O&", PyUnicode_FSConverter, &bytes) == 0) { // NOLINT(cppcoreguidelines-pro-type-vararg)
#include "pythonbegin.h"
Py_RETURN_NONE;
#include "pythonend.h"
}

char *string;
Py_ssize_t len;

PyBytes_AsStringAndSize(bytes, &string, &len);

bool isLocalFile;
QString fileNameOrUrl;

Core::checkFileNameOrUrl(QString::fromUtf8(string, int(len)), isLocalFile, fileNameOrUrl);

#include "pythonbegin.h"
Py_DECREF(bytes);
#include "pythonend.h"

QString error = isLocalFile?
Core::centralWidget()->openFile(fileNameOrUrl,
Core::File::Type::Local,
QString(), false):
Core::centralWidget()->openRemoteFile(fileNameOrUrl, false);

if (!error.isEmpty()) {
PyErr_SetString(PyExc_IOError, qPrintable(error));

return nullptr;
}

return initializeSimulation(isLocalFile?
fileNameOrUrl:
Core::FileManager::instance()->fileName(fileNameOrUrl));
}
#define GUI_SUPPORT
#include "opensimulation.cpp.inl"
#undef GUI_SUPPORT

//==============================================================================

Expand Down
Expand Up @@ -194,48 +194,7 @@ static PyObject * initializeSimulation(const QString &pFileName)

//==============================================================================

static PyObject * openSimulation(PyObject *pSelf, PyObject *pArgs)
{
Q_UNUSED(pSelf)

// Open a simulation

PyObject *bytes;

if (PyArg_ParseTuple(pArgs, "O&", PyUnicode_FSConverter, &bytes) == 0) { // NOLINT(cppcoreguidelines-pro-type-vararg)
#include "pythonbegin.h"
Py_RETURN_NONE;
#include "pythonend.h"
}

char *string;
Py_ssize_t len;

PyBytes_AsStringAndSize(bytes, &string, &len);

bool isLocalFile;
QString fileNameOrUrl;

Core::checkFileNameOrUrl(QString::fromUtf8(string, int(len)), isLocalFile, fileNameOrUrl);

#include "pythonbegin.h"
Py_DECREF(bytes);
#include "pythonend.h"

QString error = isLocalFile?
Core::openFile(fileNameOrUrl):
Core::openRemoteFile(fileNameOrUrl);

if (!error.isEmpty()) {
PyErr_SetString(PyExc_IOError, qPrintable(error));

return nullptr;
}

return initializeSimulation(isLocalFile?
fileNameOrUrl:
Core::FileManager::instance()->fileName(fileNameOrUrl));
}
#include "opensimulation.cpp.inl"

//==============================================================================

Expand Down

0 comments on commit 303cc0b

Please sign in to comment.