mirror of https://github.com/apache/nifi.git
NIFI-10287 ExecuteScript - Allow python scripts to use external modules
Co-authored-by: Nissim Shiman <nshiman@yahoo.com> Co-authored-by: dan-s1 <dstieg1@gmail.com> NIFI-10287 changes for code review NIFI-10287 modification based on reviewer comment Signed-off-by: Matthew Burgess <mattyb149@apache.org> This closes #6254
This commit is contained in:
parent
2afe2b36b9
commit
f4069ab77a
|
@ -265,7 +265,11 @@ public class ScriptingComponentHelper {
|
|||
scriptEngineName = context.getProperty(SCRIPT_ENGINE).getValue();
|
||||
scriptPath = context.getProperty(ScriptingComponentUtils.SCRIPT_FILE).evaluateAttributeExpressions().getValue();
|
||||
scriptBody = context.getProperty(ScriptingComponentUtils.SCRIPT_BODY).getValue();
|
||||
modules = context.getProperty(ScriptingComponentUtils.MODULES).evaluateAttributeExpressions().asResources().flattenRecursively();
|
||||
if ("python".equalsIgnoreCase(scriptEngineName)) {
|
||||
modules = context.getProperty(ScriptingComponentUtils.MODULES).evaluateAttributeExpressions().asResources();
|
||||
} else {
|
||||
modules = context.getProperty(ScriptingComponentUtils.MODULES).evaluateAttributeExpressions().asResources().flattenRecursively();
|
||||
}
|
||||
}
|
||||
|
||||
public void stop() {
|
||||
|
|
|
@ -61,6 +61,32 @@ public class TestExecuteJython extends BaseScriptTest {
|
|||
result.get(0).assertAttributeEquals("from-content", "test content");
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests a Jython script that references an outside python module
|
||||
*
|
||||
*/
|
||||
@Test
|
||||
public void testAccessModuleAndStoreInFlowFileAttributeWithScriptBody() {
|
||||
runner.setValidateExpressionUsage(false);
|
||||
runner.setProperty(scriptingComponent.getScriptingComponentHelper().SCRIPT_ENGINE, "python");
|
||||
runner.setProperty(ScriptingComponentUtils.MODULES, "target/test/resources/jython/");
|
||||
runner.setProperty(ScriptingComponentUtils.SCRIPT_BODY,
|
||||
"from org.apache.nifi.processors.script import ExecuteScript\n"
|
||||
+ "from test_external_module import ExternalModule\n"
|
||||
+ "externalModule = ExternalModule()\n"
|
||||
+ "flowFile = session.get()\n"
|
||||
+ "flowFile = session.putAttribute(flowFile, \"key\", externalModule.testHelloWorld())\n"
|
||||
+ "session.transfer(flowFile, ExecuteScript.REL_SUCCESS)");
|
||||
|
||||
runner.assertValid();
|
||||
runner.enqueue("test content".getBytes(StandardCharsets.UTF_8));
|
||||
runner.run();
|
||||
|
||||
runner.assertAllFlowFilesTransferred(ExecuteScript.REL_SUCCESS, 1);
|
||||
final List<MockFlowFile> result = runner.getFlowFilesForRelationship(ExecuteScript.REL_SUCCESS);
|
||||
result.get(0).assertAttributeEquals("key", "helloWorld");
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests a script that does not transfer or remove the original flow file, thereby causing an error during commit.
|
||||
*
|
||||
|
|
|
@ -0,0 +1,29 @@
|
|||
#! /usr/bin/python
|
||||
#
|
||||
# Licensed to the Apache Software Foundation (ASF) under one
|
||||
# or more contributor license agreements. See the NOTICE file
|
||||
# distributed with this work for additional information
|
||||
# regarding copyright ownership. The ASF licenses this file
|
||||
# to you under the Apache License, Version 2.0 (the
|
||||
# "License"); you may not use this file except in compliance
|
||||
# with the License. You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing,
|
||||
# software distributed under the License is distributed on an
|
||||
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
# KIND, either express or implied. See the License for the
|
||||
# specific language governing permissions and limitations
|
||||
# under the License.
|
||||
#
|
||||
|
||||
class ExternalModule :
|
||||
|
||||
def __init__(self) :
|
||||
pass
|
||||
|
||||
def testHelloWorld(self) :
|
||||
return "helloWorld"
|
||||
|
||||
|
Loading…
Reference in New Issue