Skip to content

Commit b216bd1

Browse files
committed
AP-25000: Make the 'internal view data' available to python
To the execution-function via the execution-context and the view's data service via the view-context. AP-25000 (Agent Chat View to output data - base version)
1 parent 047e7f5 commit b216bd1

File tree

8 files changed

+48
-7
lines changed

8 files changed

+48
-7
lines changed

org.knime.python3.nodes/src/main/java/org/knime/python3/nodes/CloseablePythonNodeProxy.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -550,6 +550,11 @@ public PythonToolResult execute_tool(final PurePythonTablePortObject toolTable,
550550
return m_toolExecutor.executeTool(toolTable, parameters, inputs, executionHints);
551551
}
552552

553+
@Override
554+
public String get_internal_view_data() {
555+
return ((DelegatingNodeModel)getNode().getNodeModel()).getInternalViewData();
556+
}
557+
553558
};
554559

555560
// Configure before execution whether the gateway should be left open, otherwise an exception thrown in Python
@@ -919,7 +924,8 @@ private void throwIfFailure() throws InvalidSettingsException {
919924

920925
@Override
921926
public DataServiceProxy getDataServiceProxy(final JsonNodeSettings settings, final PortObject[] portObjects,
922-
final PortMapProvider portMapProvider, final CredentialsProviderProxy credentialsProvider) {
927+
final String internalViewData, final PortMapProvider portMapProvider,
928+
final CredentialsProviderProxy credentialsProvider) {
923929

924930
loadValidatedSettings(settings);
925931

@@ -932,7 +938,7 @@ public DataServiceProxy getDataServiceProxy(final JsonNodeSettings settings, fin
932938
var fileStoreSwitcher = FileStoreSwitcher.create(nnc);
933939
var exec = fileStoreSwitcher.createExecutionContext();
934940
var toolExecutor = new ToolExecutor(exec, nnc, m_tableManager);
935-
var context = new DefaultViewContext(toolExecutor, portMapProvider, credentialsProvider);
941+
var context = new DefaultViewContext(toolExecutor, portMapProvider, credentialsProvider, internalViewData);
936942

937943
var fileStoresByKey = new HashMap<String, FileStore>();
938944
final var knimeToPythonConversionContext =

org.knime.python3.nodes/src/main/java/org/knime/python3/nodes/DefaultViewContext.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,11 +73,14 @@ final class DefaultViewContext implements PythonNodeViewProxy.PythonViewContext
7373

7474
private final CredentialsProviderProxy m_credentialsProvider;
7575

76+
private final String m_internalViewData;
77+
7678
DefaultViewContext(final ToolExecutor toolExecutor, final PortMapProvider portMapProvider,
77-
final CredentialsProviderProxy credentialsProvider) {
79+
final CredentialsProviderProxy credentialsProvider, final String internalViewData) {
7880
m_toolExecutor = toolExecutor;
7981
m_portMapProvider = portMapProvider;
8082
m_credentialsProvider = credentialsProvider;
83+
m_internalViewData = internalViewData;
8184
}
8285

8386
@Override
@@ -108,4 +111,8 @@ public PythonToolResult execute_tool(final PurePythonTablePortObject toolTable,
108111
return m_toolExecutor.executeTool(toolTable, parameters, inputs, executionHints);
109112
}
110113

111-
}
114+
@Override
115+
public String get_internal_view_data() {
116+
return m_internalViewData;
117+
}
118+
}

org.knime.python3.nodes/src/main/java/org/knime/python3/nodes/extension/ExtensionNodeSetFactory.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -298,7 +298,7 @@ public NodeView createNodeView(final DelegatingNodeModel nodeModel) {
298298
.canBeUsedInReport(nodeModel::canViewBeUsedInReport) //
299299
.build();
300300
} else {
301-
// The view is a static HTML file - we need a data service
301+
// The view is a static HTML file - we need data services
302302
Supplier<JsonRpcRequestHandler> dataServiceSupplier = () -> {
303303
return new JsonRpcRequestHandler() {
304304

@@ -311,7 +311,8 @@ public String handleRequest(final String jsonRpcRequest) {
311311
if (m_nodeViewProxy == null) {
312312
m_nodeViewProxy = m_proxyProvider.getNodeViewProxy();
313313
m_dataServiceProxy = m_nodeViewProxy.getDataServiceProxy(nodeModel.getSettings(),
314-
nodeModel.getInternalPortObjects(), nodeModel, nodeModel);
314+
nodeModel.getInternalPortObjects(), nodeModel.getInternalViewData(), nodeModel,
315+
nodeModel);
315316
}
316317
return m_dataServiceProxy.handleJsonRpcRequest(jsonRpcRequest);
317318
}

org.knime.python3.nodes/src/main/java/org/knime/python3/nodes/proxy/NodeViewProxy.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@
5050

5151
import org.knime.core.node.port.PortObject;
5252
import org.knime.core.util.asynclose.AsynchronousCloseable;
53+
import org.knime.python3.nodes.DelegatingNodeModel;
54+
import org.knime.python3.nodes.proxy.PythonNodeViewProxy.PythonViewContext;
5355
import org.knime.python3.nodes.proxy.model.NodeModelProxy.CredentialsProviderProxy;
5456
import org.knime.python3.nodes.proxy.model.NodeModelProxy.PortMapProvider;
5557
import org.knime.python3.nodes.settings.JsonNodeSettings;
@@ -83,12 +85,16 @@ interface ViewEnvironment extends PortMapProvider, CredentialsProviderProxy {
8385
*
8486
* @param settings of the node
8587
* @param portObjects provided as input to the node
88+
* @param internalViewData the internal view data of the node (see {@link DelegatingNodeModel#getInternalViewData()}
89+
* which is being made available to the python-side via the {@link PythonViewContext}; {@code null} if
90+
* there is no view data
8691
* @param portMapProvider provides the map from port groups to their indices
8792
* @param credentialsProvider provides access to credentials
8893
*
8994
* @return a data service that is powered by a remote proxy
9095
*/
9196
DataServiceProxy getDataServiceProxy(JsonNodeSettings settings, final PortObject[] portObjects,
92-
final PortMapProvider portMapProvider, final CredentialsProviderProxy credentialsProvider);
97+
String internalViewData, final PortMapProvider portMapProvider,
98+
final CredentialsProviderProxy credentialsProvider);
9399

94100
}

org.knime.python3.nodes/src/main/java/org/knime/python3/nodes/proxy/PythonNodeModelProxy.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555
import org.knime.core.data.filestore.FileStore;
5656
import org.knime.core.table.schema.AnnotatedColumnarSchema;
5757
import org.knime.python3.arrow.PythonArrowDataSink;
58+
import org.knime.python3.nodes.DelegatingNodeModel;
5859
import org.knime.python3.nodes.LogCallback;
5960
import org.knime.python3.nodes.callback.AuthCallback;
6061
import org.knime.python3.nodes.ports.PythonPortObjects.PythonPortObject;
@@ -346,6 +347,10 @@ interface PythonExecutionContext extends PythonConfigurationContext, PythonToolC
346347
*/
347348
String get_knime_home_dir(); // NOSONAR
348349

350+
/**
351+
* @return the internal view data of the node (see {@link DelegatingNodeModel#getInternalViewData()}
352+
*/
353+
String get_internal_view_data(); // NOSONAR
349354

350355
}
351356

org.knime.python3.nodes/src/main/java/org/knime/python3/nodes/proxy/PythonNodeViewProxy.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
import java.io.IOException;
5252

5353
import org.knime.python3.arrow.PythonArrowDataSink;
54+
import org.knime.python3.nodes.DelegatingNodeModel;
5455
import org.knime.python3.nodes.LogCallback;
5556
import org.knime.python3.nodes.callback.AuthCallback;
5657
import org.knime.python3.nodes.callback.FilestoreCallback;
@@ -122,6 +123,11 @@ default public String get_preferred_value_types_as_json(final String tableSchema
122123
*/
123124
interface PythonViewContext extends PythonBaseContext, PythonToolContext {
124125

126+
/**
127+
* @return the internal view data of the node (see {@link DelegatingNodeModel#getInternalViewData()}
128+
*/
129+
String get_internal_view_data();
130+
125131
}
126132

127133
}

org.knime.python3.nodes/src/main/python/_node_backend_launcher.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -474,6 +474,9 @@ def __init__(self, java_ctx, flow_variables, type_registry: "_PortTypeRegistry")
474474
def get_input_port_map(self) -> Dict[str, List[int]]:
475475
return self._java_ctx.get_input_port_map()
476476

477+
def get_internal_view_data(self) -> str:
478+
return self._java_ctx.get_internal_view_data()
479+
477480

478481
class _PortTypeRegistry:
479482
# One global dictionary for all connections

org.knime.python3.nodes/src/main/python/knime/extension/nodes.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -890,6 +890,13 @@ def get_knime_home_dir(self) -> str:
890890
"""
891891
return self._java_ctx.get_knime_home_dir()
892892

893+
def get_internal_view_data(self) -> str:
894+
"""
895+
Returns the internal view data for this node. I.e. data that updated when a node is
896+
re-executed (~widget re-execution) and persisted with the node's 'internals'.
897+
"""
898+
return self._java_ctx.get_internal_view_data()
899+
893900

894901
class PythonNode(ABC):
895902
"""

0 commit comments

Comments
 (0)