New GlobalStoragePythonWrapper is passed to the Python API.

This allows us to make GlobalStorage a QObject, with disabled copy
constructor. And thanks to this change, GlobalStorage now emits
changed() every time an insert or remove is performed.
main
Teo Mrnjavac 10 years ago
parent 060983279f
commit edb21e05af

@ -1,6 +1,6 @@
/* === This file is part of Calamares - <http://github.com/calamares> ===
*
* Copyright 2014, Teo Mrnjavac <teo@kde.org>
* Copyright 2014-2015, Teo Mrnjavac <teo@kde.org>
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -31,6 +31,7 @@ namespace bp = boost::python;
namespace Calamares {
GlobalStorage::GlobalStorage()
: QObject( nullptr )
{
}
@ -53,6 +54,7 @@ void
GlobalStorage::insert( const QString& key, const QVariant& value )
{
m.insert( key, value );
emit changed();
}
@ -67,6 +69,7 @@ int
GlobalStorage::remove( const QString& key )
{
return m.remove( key );
emit changed();
}
@ -76,47 +79,63 @@ GlobalStorage::value( const QString& key ) const
return m.value( key );
}
} // namespace Calamares
#ifdef WITH_PYTHON
namespace CalamaresPython
{
GlobalStoragePythonWrapper::GlobalStoragePythonWrapper( Calamares::GlobalStorage* gs )
: m_gs( gs )
{}
bool
GlobalStorage::python_contains( const std::string& key ) const
GlobalStoragePythonWrapper::contains( const std::string& key ) const
{
return contains( QString::fromStdString( key ) );
return m_gs->contains( QString::fromStdString( key ) );
}
int
GlobalStoragePythonWrapper::count() const
{
return m_gs->count();
}
void
GlobalStorage::python_insert( const std::string& key,
GlobalStoragePythonWrapper::insert( const std::string& key,
const bp::object& value )
{
insert( QString::fromStdString( key ),
CalamaresPython::variantFromPyObject( value ) );
m_gs->insert( QString::fromStdString( key ),
CalamaresPython::variantFromPyObject( value ) );
}
bp::list
GlobalStorage::python_keys() const
GlobalStoragePythonWrapper::keys() const
{
bp::list pyList;
foreach( const QString& key, keys() )
foreach( const QString& key, m_gs->keys() )
pyList.append( key.toStdString() );
return pyList;
}
int
GlobalStorage::python_remove( const std::string& key )
GlobalStoragePythonWrapper::remove( const std::string& key )
{
return remove( QString::fromStdString( key ) );
return m_gs->remove( QString::fromStdString( key ) );
}
bp::object
GlobalStorage::python_value( const std::string& key ) const
GlobalStoragePythonWrapper::value( const std::string& key ) const
{
return CalamaresPython::variantToPyObject( value( QString::fromStdString( key ) ) );
return CalamaresPython::variantToPyObject( m_gs->value( QString::fromStdString( key ) ) );
}
#endif // WITH_PYTHON
} // namespace CalamaresPython
} // namespace Calamares
#endif // WITH_PYTHON

@ -42,8 +42,9 @@ namespace Calamares
class DebugWindow;
class GlobalStorage
class GlobalStorage : public QObject
{
Q_OBJECT
public:
explicit GlobalStorage();
@ -56,13 +57,8 @@ public:
int remove( const QString& key );
QVariant value( const QString& key ) const;
#ifdef WITH_PYTHON
bool python_contains( const std::string& key ) const;
void python_insert( const std::string& key, const boost::python::api::object& value );
boost::python::list python_keys() const;
int python_remove( const std::string& key );
boost::python::api::object python_value( const std::string& key ) const;
#endif
signals:
void changed();
private:
QVariantMap m;
@ -72,4 +68,26 @@ private:
} // namespace Calamares
#ifdef WITH_PYTHON
namespace CalamaresPython
{
class GlobalStoragePythonWrapper
{
public:
explicit GlobalStoragePythonWrapper( Calamares::GlobalStorage* gs );
bool contains( const std::string& key ) const;
int count() const;
void insert( const std::string& key, const boost::python::api::object& value );
boost::python::list keys() const;
int remove( const std::string& key );
boost::python::api::object value( const std::string& key ) const;
private:
Calamares::GlobalStorage* m_gs;
};
} // namespace CalamaresPython
#endif
#endif // CALAMARES_GLOBALSTORAGE_H

@ -1,6 +1,6 @@
/* === This file is part of Calamares - <http://github.com/calamares> ===
*
* Copyright 2014, Teo Mrnjavac <teo@kde.org>
* Copyright 2014-2015, Teo Mrnjavac <teo@kde.org>
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -79,13 +79,13 @@ BOOST_PYTHON_MODULE( libcalamares )
"as a real number between 0 and 1."
);
bp::class_< Calamares::GlobalStorage >( "GlobalStorage", bp::init<>() )
.def( "contains", &Calamares::GlobalStorage::python_contains )
.def( "count", &Calamares::GlobalStorage::count )
.def( "insert", &Calamares::GlobalStorage::python_insert )
.def( "keys", &Calamares::GlobalStorage::python_keys )
.def( "remove", &Calamares::GlobalStorage::python_remove )
.def( "value", &Calamares::GlobalStorage::python_value );
bp::class_< CalamaresPython::GlobalStoragePythonWrapper >( "GlobalStorage", bp::init< Calamares::GlobalStorage* >() )
.def( "contains", &CalamaresPython::GlobalStoragePythonWrapper::contains )
.def( "count", &CalamaresPython::GlobalStoragePythonWrapper::count )
.def( "insert", &CalamaresPython::GlobalStoragePythonWrapper::insert )
.def( "keys", &CalamaresPython::GlobalStoragePythonWrapper::keys )
.def( "remove", &CalamaresPython::GlobalStoragePythonWrapper::remove )
.def( "value", &CalamaresPython::GlobalStoragePythonWrapper::value );
// libcalamares.utils submodule starts here
bp::object utilsModule( bp::handle<>( bp::borrowed( PyImport_AddModule( "libcalamares.utils" ) ) ) );
@ -271,7 +271,8 @@ PythonJob::exec()
bp::dict calamaresNamespace = bp::extract< bp::dict >( calamaresModule.attr( "__dict__" ) );
calamaresNamespace[ "job" ] = CalamaresPython::PythonJobInterface( this );
calamaresNamespace[ "globalstorage" ] = bp::ptr( JobQueue::instance()->globalStorage() );
calamaresNamespace[ "globalstorage" ] = CalamaresPython::GlobalStoragePythonWrapper(
JobQueue::instance()->globalStorage() );
bp::object execResult = bp::exec_file( scriptFI.absoluteFilePath().toLocal8Bit().data(),
scriptNamespace,

Loading…
Cancel
Save