Source code for node_create_table
# This file is part of Sympathy for Data.
# Copyright (c) 2016-2017, Combine Control Systems AB
#
# Sympathy for Data is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, version 3 of the License.
#
# Sympathy for Data is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Sympathy for Data. If not, see <http://www.gnu.org/licenses/>.
import json
from sympathy.api import node as synode
from sympathy.api import dtypes
from sympathy.api.nodeconfig import Port, Ports, Tag, Tags
from sympathy.platform.editors.table_editor import TableWidget, JsonTableModel
class CreateTableConfigWidget(TableWidget):
"""
Makes CreateTableWidget usable as a configuration gui for sympathy nodes
hiding the parameters api from the CreateTableWidget implementation.
"""
def __init__(self, parameters):
self._parameters = parameters
data = json.loads(parameters['json_table'].value)
super().__init__(data)
def save_parameters(self):
data = [(name, dtypes.dtype(t).kind, rows) for name, t, rows in
self.model().get_data()]
self._parameters['json_table'].value = json.dumps(
data)
[docs]class CreateTable(synode.Node):
"""
By default the created Table will be empty so to add data to it you first
need to create at least one column and then add at least one row.
The name and type of a column can be changed at any time from the context
menu of the column header.
Cells can be masked or unmasked from the context menu of a cell or a
selection of many cells.
"""
name = 'Manually Create Table'
description = 'Create a Table from scratch in a configuration Gui.'
author = 'Magnus Sandén'
version = '1.0'
icon = 'create_table.svg'
tags = Tags(Tag.Input.Generate)
nodeid = 'org.sysess.sympathy.create.createtable'
outputs = Ports([Port.Table('Manually created table', name='port0')])
parameters = synode.parameters()
parameters.set_string(
'json_table', value='[]',
label='GUI', description='Configuration window')
def exec_parameter_view(self, node_context):
return CreateTableConfigWidget(node_context.parameters)
def execute(self, node_context):
out_table = node_context.output['port0']
json_data = node_context.parameters['json_table'].value
model = JsonTableModel(json.loads(json_data))
for name, data in model.numpy_columns():
out_table.set_column_from_array(name, data)