Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit e5b260b

Browse files
nyalldawsongithub-actions[bot]
authored andcommittedMar 15, 2021
[processing] Fix use of "Save log to file" algorithm in models
run from the qgis_process standalone tool
1 parent 8fcdf2f commit e5b260b

File tree

3 files changed

+157
-1
lines changed

3 files changed

+157
-1
lines changed
 

‎src/process/qgsprocess.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,9 +61,10 @@ void ConsoleFeedback::setProgressText( const QString &text )
6161
{
6262
if ( !mUseJson )
6363
std::cout << text.toLocal8Bit().constData() << '\n';
64+
QgsProcessingFeedback::setProgressText( text );
6465
}
6566

66-
void ConsoleFeedback::reportError( const QString &error, bool )
67+
void ConsoleFeedback::reportError( const QString &error, bool fatalError )
6768
{
6869
if ( !mUseJson )
6970
std::cerr << "ERROR:\t" << error.toLocal8Bit().constData() << '\n';
@@ -73,6 +74,7 @@ void ConsoleFeedback::reportError( const QString &error, bool )
7374
mJsonLog.insert( QStringLiteral( "errors" ), QStringList() );
7475
mJsonLog[ QStringLiteral( "errors" )] = mJsonLog.value( QStringLiteral( "errors" ) ).toStringList() << error;
7576
}
77+
QgsProcessingFeedback::reportError( error, fatalError );
7678
}
7779

7880
void ConsoleFeedback::pushWarning( const QString &warning )
@@ -85,6 +87,7 @@ void ConsoleFeedback::pushWarning( const QString &warning )
8587
mJsonLog.insert( QStringLiteral( "warning" ), QStringList() );
8688
mJsonLog[ QStringLiteral( "warning" )] = mJsonLog.value( QStringLiteral( "warning" ) ).toStringList() << warning;
8789
}
90+
QgsProcessingFeedback::pushWarning( warning );
8891
}
8992

9093
void ConsoleFeedback::pushInfo( const QString &info )
@@ -97,6 +100,7 @@ void ConsoleFeedback::pushInfo( const QString &info )
97100
mJsonLog.insert( QStringLiteral( "info" ), QStringList() );
98101
mJsonLog[ QStringLiteral( "info" )] = mJsonLog.value( QStringLiteral( "info" ) ).toStringList() << info;
99102
}
103+
QgsProcessingFeedback::pushInfo( info );
100104
}
101105

102106
void ConsoleFeedback::pushCommandInfo( const QString &info )
@@ -109,6 +113,7 @@ void ConsoleFeedback::pushCommandInfo( const QString &info )
109113
mJsonLog.insert( QStringLiteral( "info" ), QStringList() );
110114
mJsonLog[ QStringLiteral( "info" )] = mJsonLog.value( QStringLiteral( "info" ) ).toStringList() << info;
111115
}
116+
QgsProcessingFeedback::pushCommandInfo( info );
112117
}
113118

114119
void ConsoleFeedback::pushDebugInfo( const QString &info )
@@ -121,6 +126,7 @@ void ConsoleFeedback::pushDebugInfo( const QString &info )
121126
mJsonLog.insert( QStringLiteral( "info" ), QStringList() );
122127
mJsonLog[ QStringLiteral( "info" )] = mJsonLog.value( QStringLiteral( "info" ) ).toStringList() << info;
123128
}
129+
QgsProcessingFeedback::pushDebugInfo( info );
124130
}
125131

126132
void ConsoleFeedback::pushConsoleInfo( const QString &info )
@@ -133,6 +139,7 @@ void ConsoleFeedback::pushConsoleInfo( const QString &info )
133139
mJsonLog.insert( QStringLiteral( "info" ), QStringList() );
134140
mJsonLog[ QStringLiteral( "info" )] = mJsonLog.value( QStringLiteral( "info" ) ).toStringList() << info;
135141
}
142+
QgsProcessingFeedback::pushConsoleInfo( info );
136143
}
137144

138145
QVariantMap ConsoleFeedback::jsonLog() const

‎tests/src/python/test_qgsprocessexecutable.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -266,6 +266,20 @@ def testModelRunJson(self):
266266
self.assertEqual(res['algorithm_details']['id'], 'Test model')
267267
self.assertTrue(os.path.exists(output_file))
268268

269+
def testModelRunWithLog(self):
270+
output_file = self.TMP_DIR + '/model_log.log'
271+
rc, output, err = self.run_process(['run', TEST_DATA_DIR + '/test_logging_model.model3', '--', 'logfile={}'.format(output_file)])
272+
self.assertIn('Test logged message', err)
273+
self.assertEqual(rc, 0)
274+
self.assertIn('0...10...20...30...40...50...60...70...80...90', output.lower())
275+
self.assertIn('results', output.lower())
276+
self.assertTrue(os.path.exists(output_file))
277+
278+
with open(output_file, 'rt') as f:
279+
lines = '\n'.join(f.readlines())
280+
281+
self.assertIn('Test logged message', lines)
282+
269283

270284
if __name__ == '__main__':
271285
# look for qgis bin path
Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
1+
<!DOCTYPE model>
2+
<Option type="Map">
3+
<Option name="children" type="Map">
4+
<Option name="native:raisewarning_1" type="Map">
5+
<Option name="active" value="true" type="bool"/>
6+
<Option name="alg_config"/>
7+
<Option name="alg_id" value="native:raisewarning" type="QString"/>
8+
<Option name="color" value="" type="QString"/>
9+
<Option name="comment" type="Map">
10+
<Option name="color" value="" type="QString"/>
11+
<Option name="component_description" value="" type="QString"/>
12+
<Option name="component_height" value="60" type="double"/>
13+
<Option name="component_pos_x" value="467.5" type="double"/>
14+
<Option name="component_pos_y" value="48.5" type="double"/>
15+
<Option name="component_width" value="100" type="double"/>
16+
<Option name="outputs_collapsed" value="true" type="bool"/>
17+
<Option name="parameters_collapsed" value="true" type="bool"/>
18+
</Option>
19+
<Option name="component_description" value="Raise warning" type="QString"/>
20+
<Option name="component_height" value="30" type="double"/>
21+
<Option name="component_pos_x" value="267.5" type="double"/>
22+
<Option name="component_pos_y" value="93.5" type="double"/>
23+
<Option name="component_width" value="200" type="double"/>
24+
<Option name="dependencies"/>
25+
<Option name="id" value="native:raisewarning_1" type="QString"/>
26+
<Option name="outputs"/>
27+
<Option name="outputs_collapsed" value="true" type="bool"/>
28+
<Option name="parameters_collapsed" value="true" type="bool"/>
29+
<Option name="params" type="Map">
30+
<Option name="CONDITION" type="List">
31+
<Option type="Map">
32+
<Option name="source" value="2" type="int"/>
33+
<Option name="static_value" value="" type="QString"/>
34+
</Option>
35+
</Option>
36+
<Option name="MESSAGE" type="List">
37+
<Option type="Map">
38+
<Option name="source" value="2" type="int"/>
39+
<Option name="static_value" value="Test logged message" type="QString"/>
40+
</Option>
41+
</Option>
42+
</Option>
43+
</Option>
44+
<Option name="native:savelog_1" type="Map">
45+
<Option name="active" value="true" type="bool"/>
46+
<Option name="alg_config"/>
47+
<Option name="alg_id" value="native:savelog" type="QString"/>
48+
<Option name="color" value="" type="QString"/>
49+
<Option name="comment" type="Map">
50+
<Option name="color" value="" type="QString"/>
51+
<Option name="component_description" value="" type="QString"/>
52+
<Option name="component_height" value="60" type="double"/>
53+
<Option name="component_pos_x" value="571.5" type="double"/>
54+
<Option name="component_pos_y" value="139" type="double"/>
55+
<Option name="component_width" value="100" type="double"/>
56+
<Option name="outputs_collapsed" value="true" type="bool"/>
57+
<Option name="parameters_collapsed" value="true" type="bool"/>
58+
</Option>
59+
<Option name="component_description" value="Save log to file" type="QString"/>
60+
<Option name="component_height" value="30" type="double"/>
61+
<Option name="component_pos_x" value="371.5" type="double"/>
62+
<Option name="component_pos_y" value="184" type="double"/>
63+
<Option name="component_width" value="200" type="double"/>
64+
<Option name="dependencies" type="List">
65+
<Option type="Map">
66+
<Option name="child_id" value="native:raisewarning_1" type="QString"/>
67+
<Option name="conditional_branch" value="" type="QString"/>
68+
</Option>
69+
</Option>
70+
<Option name="id" value="native:savelog_1" type="QString"/>
71+
<Option name="outputs"/>
72+
<Option name="outputs_collapsed" value="true" type="bool"/>
73+
<Option name="parameters_collapsed" value="true" type="bool"/>
74+
<Option name="params" type="Map">
75+
<Option name="OUTPUT" type="List">
76+
<Option type="Map">
77+
<Option name="parameter_name" value="logfile" type="QString"/>
78+
<Option name="source" value="0" type="int"/>
79+
</Option>
80+
</Option>
81+
<Option name="USE_HTML" type="List">
82+
<Option type="Map">
83+
<Option name="source" value="2" type="int"/>
84+
<Option name="static_value" value="false" type="bool"/>
85+
</Option>
86+
</Option>
87+
</Option>
88+
</Option>
89+
</Option>
90+
<Option name="designerParameterValues" type="Map">
91+
<Option name="logfile" value="/tmp/test.log" type="QString"/>
92+
</Option>
93+
<Option name="groupBoxes"/>
94+
<Option name="help"/>
95+
<Option name="modelVariables"/>
96+
<Option name="model_group" value="" type="QString"/>
97+
<Option name="model_name" value="Test logger" type="QString"/>
98+
<Option name="parameterDefinitions" type="Map">
99+
<Option name="logfile" type="Map">
100+
<Option name="default" value="" type="QString"/>
101+
<Option name="defaultGui" type="invalid"/>
102+
<Option name="description" value="log_file" type="QString"/>
103+
<Option name="flags" value="0" type="int"/>
104+
<Option name="help" value="" type="QString"/>
105+
<Option name="metadata"/>
106+
<Option name="multiline" value="false" type="bool"/>
107+
<Option name="name" value="logfile" type="QString"/>
108+
<Option name="parameter_type" value="string" type="QString"/>
109+
</Option>
110+
</Option>
111+
<Option name="parameterOrder"/>
112+
<Option name="parameters" type="Map">
113+
<Option name="logfile" type="Map">
114+
<Option name="color" value="" type="QString"/>
115+
<Option name="comment" type="Map">
116+
<Option name="color" value="" type="QString"/>
117+
<Option name="component_description" value="" type="QString"/>
118+
<Option name="component_height" value="60" type="double"/>
119+
<Option name="component_pos_x" value="408" type="double"/>
120+
<Option name="component_pos_y" value="226" type="double"/>
121+
<Option name="component_width" value="100" type="double"/>
122+
<Option name="outputs_collapsed" value="true" type="bool"/>
123+
<Option name="parameters_collapsed" value="true" type="bool"/>
124+
</Option>
125+
<Option name="component_description" value="logfile" type="QString"/>
126+
<Option name="component_height" value="30" type="double"/>
127+
<Option name="component_pos_x" value="146" type="double"/>
128+
<Option name="component_pos_y" value="282" type="double"/>
129+
<Option name="component_width" value="200" type="double"/>
130+
<Option name="name" value="logfile" type="QString"/>
131+
<Option name="outputs_collapsed" value="true" type="bool"/>
132+
<Option name="parameters_collapsed" value="true" type="bool"/>
133+
</Option>
134+
</Option>
135+
</Option>

0 commit comments

Comments
 (0)
Please sign in to comment.