Source code for tvb.core.adapters.inputs_processor
# -*- coding: utf-8 -*-
#
#
# TheVirtualBrain-Framework Package. This package holds all Data Management, and
# Web-UI helpful to run brain-simulations. To use it, you also need to download
# TheVirtualBrain-Scientific Package (for simulators). See content of the
# documentation-folder for more details. See also http://www.thevirtualbrain.org
#
# (c) 2012-2023, Baycrest Centre for Geriatric Care ("Baycrest") and others
#
# This program 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,
# either version 3 of the License, or (at your option) any later version.
# This program 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 this
# program. If not, see <http://www.gnu.org/licenses/>.
#
#
# CITATION:
# When using The Virtual Brain for scientific publications, please cite it as explained here:
# https://www.thevirtualbrain.org/tvb/zwei/neuroscience-publications
#
#
"""
.. moduleauthor:: Adrian Dordea <adrian.dordea@codemart.ro>
"""
import os
import numpy
from tvb.core.entities.load import load_entity_by_gid
from tvb.core.neotraits.forms import TraitDataTypeSelectField, TraitUploadField, UserSessionStrField
def _review_operation_inputs_for_adapter_model(form_fields, form_model, view_model):
changed_attr = {}
inputs_datatypes = []
for field in form_fields:
if not hasattr(view_model, field.name):
continue
attr_vm = getattr(view_model, field.name)
if attr_vm and type(field) == TraitUploadField:
attr_vm = os.path.basename(attr_vm)
if attr_vm and type(field) == UserSessionStrField:
# Don't show UserSession actual value, as these might contain a secret, instead show the env Variable
changed_attr[field.label] = "SECRET ${%s}" % field.name
continue
if isinstance(field, TraitDataTypeSelectField):
data_type = None
if attr_vm:
data_type = load_entity_by_gid(attr_vm)
changed_attr[field.label] = data_type.display_name if data_type else "None"
inputs_datatypes.append(data_type)
else:
attr_default = None
if hasattr(form_model, field.name):
attr_default = getattr(form_model, field.name)
if isinstance(attr_vm, numpy.ndarray):
check_for_changed = attr_vm.size != 0
else:
check_for_changed = attr_vm != attr_default
if check_for_changed:
if isinstance(attr_vm, float) or isinstance(attr_vm, int) or isinstance(attr_vm, str):
changed_attr[field.label] = attr_vm
elif isinstance(attr_vm, tuple) or isinstance(attr_vm, list):
changed_attr[field.label] = ', '.join([str(sub_attr) for sub_attr in attr_vm])
else:
# All HasTraits instances will show as being different than default, even if the same!! Is this ok?
changed_attr[field.label] = str(attr_vm)
return inputs_datatypes, changed_attr