mirror of
https://github.com/parchlinux/calamares.git
synced 2025-06-30 02:45:37 -04:00
New GlobalStorage map. With Python API support.
This commit is contained in:
parent
4c88603872
commit
0753e6ccde
8 changed files with 295 additions and 7 deletions
|
@ -37,13 +37,13 @@ variantToPyObject( const QVariant& variant )
|
|||
{
|
||||
switch ( variant.type() )
|
||||
{
|
||||
case QVariant::Map:
|
||||
return variantMapToPyDict( variant.toMap() );
|
||||
|
||||
case QVariant::List:
|
||||
case QVariant::StringList:
|
||||
return variantListToPyList( variant.toList() );
|
||||
|
||||
case QVariant::Map:
|
||||
return variantMapToPyDict( variant.toMap() );
|
||||
|
||||
case QVariant::Int:
|
||||
return bp::object( variant.toInt() );
|
||||
|
||||
|
@ -51,7 +51,6 @@ variantToPyObject( const QVariant& variant )
|
|||
return bp::object( variant.toDouble() );
|
||||
|
||||
case QVariant::String:
|
||||
case QVariant::Char:
|
||||
return bp::object( variant.toString().toStdString() );
|
||||
|
||||
default:
|
||||
|
@ -60,6 +59,30 @@ variantToPyObject( const QVariant& variant )
|
|||
}
|
||||
|
||||
|
||||
QVariant
|
||||
variantFromPyObject( const boost::python::object& pyObject )
|
||||
{
|
||||
std::string pyType = bp::extract< std::string >( pyObject.attr( "__class__" ).attr( "__name__" ) );
|
||||
if ( pyType == "dict" )
|
||||
return variantMapFromPyDict( bp::extract< bp::dict >( pyObject ) );
|
||||
|
||||
else if ( pyType == "list" )
|
||||
return variantListFromPyList( bp::extract< bp::list >( pyObject ) );
|
||||
|
||||
else if ( pyType == "int" )
|
||||
return QVariant( bp::extract< int >( pyObject ) );
|
||||
|
||||
else if ( pyType == "float" )
|
||||
return QVariant( bp::extract< double >( pyObject ) );
|
||||
|
||||
else if ( pyType == "str" )
|
||||
return QVariant( QString::fromStdString( bp::extract< std::string >( pyObject ) ) );
|
||||
|
||||
else
|
||||
return QVariant();
|
||||
}
|
||||
|
||||
|
||||
boost::python::list
|
||||
variantListToPyList( const QVariantList& variantList )
|
||||
{
|
||||
|
@ -72,6 +95,18 @@ variantListToPyList( const QVariantList& variantList )
|
|||
}
|
||||
|
||||
|
||||
QVariantList
|
||||
variantListFromPyList( const boost::python::list& pyList )
|
||||
{
|
||||
QVariantList list;
|
||||
for ( int i = 0; i < bp::len( pyList ); ++i )
|
||||
{
|
||||
list.append( variantFromPyObject( pyList[ i ] ) );
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
|
||||
boost::python::dict
|
||||
variantMapToPyDict( const QVariantMap& variantMap )
|
||||
{
|
||||
|
@ -84,6 +119,30 @@ variantMapToPyDict( const QVariantMap& variantMap )
|
|||
}
|
||||
|
||||
|
||||
QVariantMap
|
||||
variantMapFromPyDict( const boost::python::dict& pyDict )
|
||||
{
|
||||
QVariantMap map;
|
||||
bp::list keys = pyDict.keys();
|
||||
for ( int i = 0; i < bp::len( keys ); ++i )
|
||||
{
|
||||
bp::extract< std::string > extracted_key( keys[ i ] );
|
||||
if ( !extracted_key.check() )
|
||||
{
|
||||
cDebug() << "Key invalid, map might be incomplete.";
|
||||
continue;
|
||||
}
|
||||
|
||||
std::string key = extracted_key;
|
||||
|
||||
bp::object obj = pyDict[ key ];
|
||||
|
||||
map.insert( QString::fromStdString( key ), variantFromPyObject( obj ) );
|
||||
}
|
||||
return map;
|
||||
}
|
||||
|
||||
|
||||
Helper* Helper::s_instance = nullptr;
|
||||
|
||||
Helper::Helper( QObject* parent )
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue