9999import org .knime .python3 .arrow .PythonArrowDataUtils ;
100100import org .knime .python3 .arrow .PythonArrowTableConverter ;
101101import org .knime .python3 .nodes .CloseablePythonNodeProxyFactory .CloseableGatewayWithAttachments ;
102+ import org .knime .python3 .nodes .DelegatingNodeModel .ViewData .BackendViewData ;
102103import org .knime .python3 .nodes .callback .AuthCallbackUtils ;
103104import org .knime .python3 .nodes .extension .ExtensionNode ;
104105import org .knime .python3 .nodes .ports .PythonPortObjects .PurePythonTablePortObject ;
117118import org .knime .python3 .nodes .proxy .PythonNodeModelProxy .ExpiryDate ;
118119import org .knime .python3 .nodes .proxy .PythonNodeModelProxy .FileStoreBasedFile ;
119120import org .knime .python3 .nodes .proxy .PythonNodeProxy ;
121+ import org .knime .python3 .nodes .proxy .PythonNodeViewProxy .PythonDataServiceProxy .PythonViewData ;
120122import org .knime .python3 .nodes .proxy .model .NodeConfigurationProxy ;
121123import org .knime .python3 .nodes .proxy .model .NodeExecutionProxy ;
122124import org .knime .python3 .nodes .settings .JsonNodeSettings ;
@@ -368,7 +370,7 @@ private void initTableManager() {
368370 public ExecutionResult execute (final PortObject [] inData , final PortType [] outputPortTypes ,
369371 final ExecutionContext exec , final FlowVariablesProxy flowVariablesProxy ,
370372 final CredentialsProviderProxy credentialsProviderProxy , final WorkflowPropertiesProxy workflowPropertiesProxy ,
371- final WarningConsumer warningConsumer ) throws Exception {
373+ final WarningConsumer warningConsumer , final BackendViewData viewData ) throws Exception {
372374 initTableManager ();
373375 Map <String , FileStore > fileStoresByKey = new HashMap <>();
374376 final var executionResult = new PythonExecutionResult ();
@@ -551,8 +553,8 @@ public PythonToolResult execute_tool(final PurePythonTablePortObject toolTable,
551553 }
552554
553555 @ Override
554- public String get_internal_view_data () {
555- return (( DelegatingNodeModel ) getNode (). getNodeModel ()). getInternalViewData ( );
556+ public PythonViewData get_view_data () {
557+ return toPythonViewData ( viewData , fileStoresByKey , exec );
556558 }
557559
558560 };
@@ -924,7 +926,7 @@ private void throwIfFailure() throws InvalidSettingsException {
924926
925927 @ Override
926928 public DataServiceProxy getDataServiceProxy (final JsonNodeSettings settings , final PortObject [] portObjects ,
927- final String internalViewData , final PortMapProvider portMapProvider ,
929+ final BackendViewData viewData , final PortMapProvider portMapProvider ,
928930 final CredentialsProviderProxy credentialsProvider ) {
929931
930932 loadValidatedSettings (settings );
@@ -938,9 +940,11 @@ public DataServiceProxy getDataServiceProxy(final JsonNodeSettings settings, fin
938940 var fileStoreSwitcher = FileStoreSwitcher .create (nnc );
939941 var exec = fileStoreSwitcher .createExecutionContext ();
940942 var toolExecutor = new ToolExecutor (exec , nnc , m_tableManager );
941- var context = new DefaultViewContext (toolExecutor , portMapProvider , credentialsProvider , internalViewData );
942943
943944 var fileStoresByKey = new HashMap <String , FileStore >();
945+ var context = new DefaultViewContext (toolExecutor , portMapProvider , credentialsProvider ,
946+ toPythonViewData (viewData , fileStoresByKey , exec ));
947+
944948 final var knimeToPythonConversionContext =
945949 new PortObjectConversionContext (fileStoresByKey , m_tableManager , exec );
946950 var pythonPortObjects =
@@ -954,6 +958,17 @@ public String handleJsonRpcRequest(final String request) {
954958 return pythonDataService .handleJsonRpcRequest (request );
955959 }
956960
961+ @ Override
962+ public BackendViewData getViewData () {
963+ var viewData = pythonDataService .getViewData ();
964+ var conversionContext = new PortObjectConversionContext (fileStoresByKey , m_tableManager , exec );
965+ var ports = viewData .ports ();
966+ var portObjects = viewData .ports ().stream () //
967+ .map (po -> PythonPortTypeRegistry .convertPortObjectFromPython (po , conversionContext ))//
968+ .toArray (PortObject []::new );
969+ return new BackendViewData (viewData .data (), portObjects );
970+ }
971+
957972 @ Override
958973 public void close () throws Exception {
959974 toolExecutor .close ();
@@ -991,4 +1006,31 @@ public void close() {
9911006 }
9921007 }
9931008
1009+ private PythonViewData toPythonViewData (final BackendViewData viewData ,
1010+ final Map <String , FileStore > fileStoresByKey , final ExecutionContext exec ) {
1011+ if (viewData == null ) {
1012+ return null ;
1013+ }
1014+ var data = viewData .data ();
1015+ var ports = viewData .ports ();
1016+ var conversionContext = new PortObjectConversionContext (fileStoresByKey , m_tableManager , exec );
1017+ var pyPorts = Stream .of (ports )//
1018+ .map (po -> PythonPortTypeRegistry .convertPortObjectToPython (po , conversionContext ))//
1019+ .toList ();
1020+
1021+ return new PythonViewData () {
1022+
1023+ @ Override
1024+ public String data () {
1025+ return data ;
1026+ }
1027+
1028+ @ Override
1029+ public List <PythonPortObject > ports () {
1030+ return pyPorts ;
1031+ }
1032+
1033+ };
1034+ }
1035+
9941036}
0 commit comments