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.
This commit is contained in:
parent
060983279f
commit
edb21e05af
@ -1,6 +1,6 @@
|
|||||||
/* === This file is part of Calamares - <http://github.com/calamares> ===
|
/* === 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
|
* Calamares is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -31,6 +31,7 @@ namespace bp = boost::python;
|
|||||||
namespace Calamares {
|
namespace Calamares {
|
||||||
|
|
||||||
GlobalStorage::GlobalStorage()
|
GlobalStorage::GlobalStorage()
|
||||||
|
: QObject( nullptr )
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -53,6 +54,7 @@ void
|
|||||||
GlobalStorage::insert( const QString& key, const QVariant& value )
|
GlobalStorage::insert( const QString& key, const QVariant& value )
|
||||||
{
|
{
|
||||||
m.insert( key, value );
|
m.insert( key, value );
|
||||||
|
emit changed();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -67,6 +69,7 @@ int
|
|||||||
GlobalStorage::remove( const QString& key )
|
GlobalStorage::remove( const QString& key )
|
||||||
{
|
{
|
||||||
return m.remove( key );
|
return m.remove( key );
|
||||||
|
emit changed();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -76,47 +79,63 @@ GlobalStorage::value( const QString& key ) const
|
|||||||
return m.value( key );
|
return m.value( key );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} // namespace Calamares
|
||||||
|
|
||||||
#ifdef WITH_PYTHON
|
#ifdef WITH_PYTHON
|
||||||
|
|
||||||
bool
|
namespace CalamaresPython
|
||||||
GlobalStorage::python_contains( const std::string& key ) const
|
|
||||||
{
|
{
|
||||||
return contains( QString::fromStdString( key ) );
|
|
||||||
|
GlobalStoragePythonWrapper::GlobalStoragePythonWrapper( Calamares::GlobalStorage* gs )
|
||||||
|
: m_gs( gs )
|
||||||
|
{}
|
||||||
|
|
||||||
|
bool
|
||||||
|
GlobalStoragePythonWrapper::contains( const std::string& key ) const
|
||||||
|
{
|
||||||
|
return m_gs->contains( QString::fromStdString( key ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int
|
||||||
|
GlobalStoragePythonWrapper::count() const
|
||||||
|
{
|
||||||
|
return m_gs->count();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
GlobalStorage::python_insert( const std::string& key,
|
GlobalStoragePythonWrapper::insert( const std::string& key,
|
||||||
const bp::object& value )
|
const bp::object& value )
|
||||||
{
|
{
|
||||||
insert( QString::fromStdString( key ),
|
m_gs->insert( QString::fromStdString( key ),
|
||||||
CalamaresPython::variantFromPyObject( value ) );
|
CalamaresPython::variantFromPyObject( value ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bp::list
|
bp::list
|
||||||
GlobalStorage::python_keys() const
|
GlobalStoragePythonWrapper::keys() const
|
||||||
{
|
{
|
||||||
bp::list pyList;
|
bp::list pyList;
|
||||||
foreach( const QString& key, keys() )
|
foreach( const QString& key, m_gs->keys() )
|
||||||
pyList.append( key.toStdString() );
|
pyList.append( key.toStdString() );
|
||||||
return pyList;
|
return pyList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int
|
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
|
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 DebugWindow;
|
||||||
|
|
||||||
class GlobalStorage
|
class GlobalStorage : public QObject
|
||||||
{
|
{
|
||||||
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
explicit GlobalStorage();
|
explicit GlobalStorage();
|
||||||
|
|
||||||
@ -56,13 +57,8 @@ public:
|
|||||||
int remove( const QString& key );
|
int remove( const QString& key );
|
||||||
QVariant value( const QString& key ) const;
|
QVariant value( const QString& key ) const;
|
||||||
|
|
||||||
#ifdef WITH_PYTHON
|
signals:
|
||||||
bool python_contains( const std::string& key ) const;
|
void changed();
|
||||||
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
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QVariantMap m;
|
QVariantMap m;
|
||||||
@ -72,4 +68,26 @@ private:
|
|||||||
|
|
||||||
} // namespace Calamares
|
} // 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
|
#endif // CALAMARES_GLOBALSTORAGE_H
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/* === This file is part of Calamares - <http://github.com/calamares> ===
|
/* === 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
|
* Calamares is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* 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."
|
"as a real number between 0 and 1."
|
||||||
);
|
);
|
||||||
|
|
||||||
bp::class_< Calamares::GlobalStorage >( "GlobalStorage", bp::init<>() )
|
bp::class_< CalamaresPython::GlobalStoragePythonWrapper >( "GlobalStorage", bp::init< Calamares::GlobalStorage* >() )
|
||||||
.def( "contains", &Calamares::GlobalStorage::python_contains )
|
.def( "contains", &CalamaresPython::GlobalStoragePythonWrapper::contains )
|
||||||
.def( "count", &Calamares::GlobalStorage::count )
|
.def( "count", &CalamaresPython::GlobalStoragePythonWrapper::count )
|
||||||
.def( "insert", &Calamares::GlobalStorage::python_insert )
|
.def( "insert", &CalamaresPython::GlobalStoragePythonWrapper::insert )
|
||||||
.def( "keys", &Calamares::GlobalStorage::python_keys )
|
.def( "keys", &CalamaresPython::GlobalStoragePythonWrapper::keys )
|
||||||
.def( "remove", &Calamares::GlobalStorage::python_remove )
|
.def( "remove", &CalamaresPython::GlobalStoragePythonWrapper::remove )
|
||||||
.def( "value", &Calamares::GlobalStorage::python_value );
|
.def( "value", &CalamaresPython::GlobalStoragePythonWrapper::value );
|
||||||
|
|
||||||
// libcalamares.utils submodule starts here
|
// libcalamares.utils submodule starts here
|
||||||
bp::object utilsModule( bp::handle<>( bp::borrowed( PyImport_AddModule( "libcalamares.utils" ) ) ) );
|
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__" ) );
|
bp::dict calamaresNamespace = bp::extract< bp::dict >( calamaresModule.attr( "__dict__" ) );
|
||||||
|
|
||||||
calamaresNamespace[ "job" ] = CalamaresPython::PythonJobInterface( this );
|
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(),
|
bp::object execResult = bp::exec_file( scriptFI.absoluteFilePath().toLocal8Bit().data(),
|
||||||
scriptNamespace,
|
scriptNamespace,
|
||||||
|
Loading…
Reference in New Issue
Block a user