From fb9d1fa3390c3771c1342c0c2e67454d9a720765 Mon Sep 17 00:00:00 2001 From: Teo Mrnjavac Date: Fri, 7 Oct 2016 18:41:05 +0200 Subject: [PATCH] Add PythonQtUtils.{h,cpp} with CalamaresUtils::lookupAndCall. --- src/libcalamaresui/CMakeLists.txt | 1 + src/libcalamaresui/utils/PythonQtUtils.cpp | 44 ++++++++++++++++++++++ src/libcalamaresui/utils/PythonQtUtils.h | 38 +++++++++++++++++++ 3 files changed, 83 insertions(+) create mode 100644 src/libcalamaresui/utils/PythonQtUtils.cpp create mode 100644 src/libcalamaresui/utils/PythonQtUtils.h diff --git a/src/libcalamaresui/CMakeLists.txt b/src/libcalamaresui/CMakeLists.txt index 451bc6a48..15d4b6578 100644 --- a/src/libcalamaresui/CMakeLists.txt +++ b/src/libcalamaresui/CMakeLists.txt @@ -45,6 +45,7 @@ if( WITH_PYTHONQT ) list( APPEND ${CALAMARESUI_LIBRARY_TARGET}_SOURCES modulesystem/PythonQtViewModule.cpp + utils/PythonQtUtils.cpp viewpages/PythonQtViewStep.cpp ) set( OPTIONAL_PRIVATE_LIBRARIES diff --git a/src/libcalamaresui/utils/PythonQtUtils.cpp b/src/libcalamaresui/utils/PythonQtUtils.cpp new file mode 100644 index 000000000..ee386c0fd --- /dev/null +++ b/src/libcalamaresui/utils/PythonQtUtils.cpp @@ -0,0 +1,44 @@ +/* === This file is part of Calamares - === + * + * Copyright 2016, Teo Mrnjavac + * + * Calamares is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Calamares is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Calamares. If not, see . + */ + +#include "PythonQtUtils.h" + +namespace CalamaresUtils +{ + +QVariant +lookupAndCall( PyObject* object, + const QStringList& candidateNames, + const QVariantList& args, + const QVariantMap& kwargs ) +{ + Q_ASSERT( object ); + Q_ASSERT( !candidateNames.isEmpty() ); + + for ( const QString& name : candidateNames ) + { + PythonQtObjectPtr callable = PythonQt::self()->lookupCallable( object, name ); + if ( callable ) + return callable.call( args, kwargs ); + } + + // If we haven't found a callable with the given names, we force an error: + return PythonQt::self()->call( object, candidateNames.first(), args, kwargs ); +} + +} diff --git a/src/libcalamaresui/utils/PythonQtUtils.h b/src/libcalamaresui/utils/PythonQtUtils.h new file mode 100644 index 000000000..a94cf25e5 --- /dev/null +++ b/src/libcalamaresui/utils/PythonQtUtils.h @@ -0,0 +1,38 @@ +/* === This file is part of Calamares - === + * + * Copyright 2016, Teo Mrnjavac + * + * Calamares is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Calamares is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Calamares. If not, see . + */ + +#ifndef PYTHONQTUTILS_H +#define PYTHONQTUTILS_H + +#include + +#include + + +namespace CalamaresUtils +{ +//NOTE: when running this, it is assumed that Python is initialized and +// PythonQt::self() is valid. +QVariant lookupAndCall( PyObject* object, + const QStringList& candidateNames, + const QVariantList& args = QVariantList(), + const QVariantMap& kwargs = QVariantMap() ); + +} //ns + +#endif // PYTHONQTUTILS_H