Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Add method to copy QgsProcessingContext settings as a json map
  • Loading branch information
nyalldawson committed Dec 16, 2021
1 parent b4cb7ba commit 84cf46a
Show file tree
Hide file tree
Showing 4 changed files with 69 additions and 0 deletions.
Expand Up @@ -585,6 +585,13 @@ Sets the logging ``level`` for algorithms to use when pushing feedback messages
.. seealso:: :py:func:`logLevel`

.. versionadded:: 3.20
%End

QVariantMap exportToMap() const;
%Docstring
Exports the context's settings to a variant map.

.. versionadded:: 3.24
%End

enum class ProcessArgumentFlag
Expand Down
15 changes: 15 additions & 0 deletions src/core/processing/qgsprocessingcontext.cpp
Expand Up @@ -139,6 +139,21 @@ void QgsProcessingContext::setLogLevel( LogLevel level )
mLogLevel = level;
}

QVariantMap QgsProcessingContext::exportToMap() const
{
QVariantMap res;
if ( mDistanceUnit != QgsUnitTypes::DistanceUnknownUnit )
res.insert( QStringLiteral( "distance_units" ), QgsUnitTypes::encodeUnit( mDistanceUnit ) );
if ( mAreaUnit != QgsUnitTypes::AreaUnknownUnit )
res.insert( QStringLiteral( "area_units" ), QgsUnitTypes::encodeUnit( mAreaUnit ) );
if ( !mEllipsoid.isEmpty() )
res.insert( QStringLiteral( "ellipsoid" ), mEllipsoid );
if ( mProject )
res.insert( QStringLiteral( "project_path" ), mProject->fileName() );

return res;
}

QStringList QgsProcessingContext::asQgisProcessArguments( QgsProcessingContext::ProcessArgumentFlags flags ) const
{
QStringList res;
Expand Down
7 changes: 7 additions & 0 deletions src/core/processing/qgsprocessingcontext.h
Expand Up @@ -657,6 +657,13 @@ class CORE_EXPORT QgsProcessingContext
*/
void setLogLevel( LogLevel level );

/**
* Exports the context's settings to a variant map.
*
* \since QGIS 3.24
*/
QVariantMap exportToMap() const;

/**
* Flags controlling the results given by asQgisProcessArguments().
*
Expand Down
40 changes: 40 additions & 0 deletions tests/src/analysis/testqgsprocessing.cpp
Expand Up @@ -654,6 +654,7 @@ class TestQgsProcessing: public QObject
void normalizeLayerSource();
void context();
void contextToProcessArguments();
void contextToMap();
void feedback();
void mapLayers();
void mapLayerFromStore();
Expand Down Expand Up @@ -1338,6 +1339,45 @@ void TestQgsProcessing::contextToProcessArguments()
} ) );
}

void TestQgsProcessing::contextToMap()
{
// test converting QgsProcessingContext settings to a json map
QgsProcessingContext context;

QCOMPARE( context.exportToMap(), QVariantMap() );
context.setDistanceUnit( QgsUnitTypes::DistanceKilometers );
QCOMPARE( context.exportToMap(), QVariantMap( {{
QStringLiteral( "distance_units" ), QStringLiteral( "km" )
}} ) );

context.setAreaUnit( QgsUnitTypes::AreaHectares );
QCOMPARE( context.exportToMap(), QVariantMap(
{
{QStringLiteral( "distance_units" ), QStringLiteral( "km" )},
{QStringLiteral( "area_units" ), QStringLiteral( "ha" )}
} ) );

context.setEllipsoid( QStringLiteral( "EPSG:7019" ) );
QCOMPARE( context.exportToMap(), QVariantMap(
{
{QStringLiteral( "distance_units" ), QStringLiteral( "km" )},
{QStringLiteral( "area_units" ), QStringLiteral( "ha" )},
{QStringLiteral( "ellipsoid" ), QStringLiteral( "EPSG:7019" )},
} ) );

QgsProject p;
QgsProcessingContext context2;
QVERIFY( p.read( TEST_DATA_DIR + QStringLiteral( "/projects/custom_crs.qgs" ) ) );
context2.setProject( &p );
QCOMPARE( context2.exportToMap(), QVariantMap(
{
{QStringLiteral( "distance_units" ), QStringLiteral( "meters" )},
{QStringLiteral( "area_units" ), QStringLiteral( "m2" )},
{QStringLiteral( "ellipsoid" ), QStringLiteral( "NONE" )},
{QStringLiteral( "project_path" ), QString( TEST_DATA_DIR + QStringLiteral( "/projects/custom_crs.qgs" ) )}
} ) );
}

void TestQgsProcessing::feedback()
{
QgsProcessingFeedback f;
Expand Down

0 comments on commit 84cf46a

Please sign in to comment.