Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions tvb_contrib/tvb/contrib/cosimulation/cosim_monitors.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ def _sample_with_tvb_monitor(self, step, state):
This method provides output from TVB Monitor classes, and should be set to a TVB Monitor parent class.
Use the original signature.
"""
raise NotImplemented
raise NotImplementedError

def _get_sample(self, current_step, start_step, n_steps, history, cosim):
end_step = start_step + n_steps
Expand Down Expand Up @@ -79,7 +79,7 @@ def sample(self, current_step, start_step, n_steps, cosim_history, history):
This method provides monitor output, and should be overridden by subclasses.
Use the original signature.
"""
raise NotImplemented
raise NotImplementedError


class CosimMonitorFromCoupling(CosimMonitor):
Expand Down
15 changes: 9 additions & 6 deletions tvb_framework/tvb/adapters/forms/monitor_forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,9 @@
from tvb.datatypes.sensors import SensorTypesEnum
from tvb.simulator.monitors import DefaultMasks

PROJECTION_TYPE_KEY = '.projection_type'
SENSORS_TYPE_KEY = '.sensors_type'


def get_monitor_to_form_dict():
monitor_class_to_form = {
Expand Down Expand Up @@ -167,10 +170,10 @@ class EEGMonitorForm(ProjectionMonitorForm):
def __init__(self, session_stored_simulator=None, is_period_disabled=False):
super(EEGMonitorForm, self).__init__(session_stored_simulator, is_period_disabled)

sensor_filter = FilterChain(fields=[FilterChain.datatype + '.sensors_type'], operations=["=="],
sensor_filter = FilterChain(fields=[FilterChain.datatype + SENSORS_TYPE_KEY], operations=["=="],
values=[SensorTypesEnum.TYPE_EEG.value])

projection_filter = FilterChain(fields=[FilterChain.datatype + '.projection_type'], operations=["=="],
projection_filter = FilterChain(fields=[FilterChain.datatype + PROJECTION_TYPE_KEY], operations=["=="],
values=[ProjectionsTypeEnum.EEG.value])

self.projection = TraitDataTypeSelectField(EEGViewModel.projection, name='projection',
Expand All @@ -185,10 +188,10 @@ class MEGMonitorForm(ProjectionMonitorForm):
def __init__(self, session_stored_simulator=None, is_period_disabled=False):
super(MEGMonitorForm, self).__init__(session_stored_simulator, is_period_disabled)

sensor_filter = FilterChain(fields=[FilterChain.datatype + '.sensors_type'], operations=["=="],
sensor_filter = FilterChain(fields=[FilterChain.datatype + SENSORS_TYPE_KEY], operations=["=="],
values=[SensorTypesEnum.TYPE_MEG.value])

projection_filter = FilterChain(fields=[FilterChain.datatype + '.projection_type'], operations=["=="],
projection_filter = FilterChain(fields=[FilterChain.datatype + PROJECTION_TYPE_KEY], operations=["=="],
values=[ProjectionsTypeEnum.MEG.value])

self.projection = TraitDataTypeSelectField(MEGViewModel.projection, name='projection',
Expand All @@ -201,10 +204,10 @@ class iEEGMonitorForm(ProjectionMonitorForm):
def __init__(self, session_stored_simulator=None, is_period_disabled=False):
super(iEEGMonitorForm, self).__init__(session_stored_simulator, is_period_disabled)

sensor_filter = FilterChain(fields=[FilterChain.datatype + '.sensors_type'], operations=["=="],
sensor_filter = FilterChain(fields=[FilterChain.datatype + SENSORS_TYPE_KEY], operations=["=="],
values=[SensorTypesEnum.TYPE_INTERNAL.value])

projection_filter = FilterChain(fields=[FilterChain.datatype + '.projection_type'], operations=["=="],
projection_filter = FilterChain(fields=[FilterChain.datatype + PROJECTION_TYPE_KEY], operations=["=="],
values=[ProjectionsTypeEnum.SEEG.value])

self.projection = TraitDataTypeSelectField(iEEGViewModel.projection, name='projection',
Expand Down
8 changes: 5 additions & 3 deletions tvb_framework/tvb/adapters/visualizers/eeg_monitor.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,26 +41,28 @@
from tvb.core.neotraits.view_model import ViewModel, DataTypeGidAttr, replace_nan_values
from tvb.datatypes.time_series import TimeSeries

TIME_SERIES_TO_DISPLAY_ = 'Time series to display.'


class EegMonitorModel(ViewModel):
input_data = DataTypeGidAttr(
linked_datatype=TimeSeries,
label='Input Data',
doc='Time series to display.'
doc=TIME_SERIES_TO_DISPLAY_
)

data_2 = DataTypeGidAttr(
linked_datatype=TimeSeries,
required=False,
label='Input Data 2',
doc='Time series to display.'
doc=TIME_SERIES_TO_DISPLAY_
)

data_3 = DataTypeGidAttr(
linked_datatype=TimeSeries,
required=False,
label='Input Data 3',
doc='Time series to display.'
doc=TIME_SERIES_TO_DISPLAY_
)


Expand Down
18 changes: 11 additions & 7 deletions tvb_framework/tvb/adapters/visualizers/region_volume_mapping.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,10 @@
from tvb.datatypes.region_mapping import RegionVolumeMapping
from tvb.datatypes.structural import StructuralMRI

HAS_VOLUME_MAPPING_FILTER_ATTR = '.has_volume_mapping'
NDIM_FILTER_ATTR = '.ndim'
REGION_MAPPING_LABEL = 'Region mapping'


@add_metaclass(ABCMeta)
class _MappedArrayVolumeBase(ABCDisplayer):
Expand Down Expand Up @@ -293,7 +297,7 @@ class VolumeVisualizerModel(BaseVolumeVisualizerModel):
region_mapping_volume = DataTypeGidAttr(
linked_datatype=RegionVolumeMapping,
required=False,
label='Region mapping'
label=REGION_MAPPING_LABEL
)

data_slice = Attr(
Expand All @@ -319,8 +323,8 @@ def get_view_model():

@staticmethod
def get_filters():
return FilterChain(fields=[FilterChain.datatype + '.ndim',
FilterChain.datatype + '.has_volume_mapping',
return FilterChain(fields=[FilterChain.datatype + NDIM_FILTER_ATTR,
FilterChain.datatype + HAS_VOLUME_MAPPING_FILTER_ATTR,
FilterChain.datatype + '.subtype'],
operations=[">=", "==", "not in"],
values=[2, True, ["RegionVolumeMapping", "StructuralMRI"]])
Expand Down Expand Up @@ -372,7 +376,7 @@ class ConnectivityMeasureVolumeVisualizerModel(BaseVolumeVisualizerModel):
region_mapping_volume = DataTypeGidAttr(
linked_datatype=RegionVolumeMapping,
required=False,
label='Region mapping'
label=REGION_MAPPING_LABEL
)


Expand Down Expand Up @@ -400,7 +404,7 @@ def get_input_name():

@staticmethod
def get_filters():
return FilterChain(fields=[FilterChain.datatype + '.ndim', FilterChain.datatype + '.has_volume_mapping'],
return FilterChain(fields=[FilterChain.datatype + NDIM_FILTER_ATTR, FilterChain.datatype + HAS_VOLUME_MAPPING_FILTER_ATTR],
operations=["==", "=="], values=[1, True])


Expand Down Expand Up @@ -434,7 +438,7 @@ def launch(self, view_model):
class RegionVolumeMappingVisualiserModel(BaseVolumeVisualizerModel):
region_mapping_volume = DataTypeGidAttr(
linked_datatype=RegionVolumeMapping,
label='Region mapping'
label=REGION_MAPPING_LABEL
)

connectivity_measure = DataTypeGidAttr(
Expand All @@ -454,7 +458,7 @@ def __init__(self):
conditions=self.get_filters())

cm_conditions = FilterChain(
fields=[FilterChain.datatype + '.ndim', FilterChain.datatype + '.has_volume_mapping'],
fields=[FilterChain.datatype + NDIM_FILTER_ATTR, FilterChain.datatype + HAS_VOLUME_MAPPING_FILTER_ATTR],
operations=["==", "=="], values=[1, True])
self.connectivity_measure = TraitDataTypeSelectField(RegionVolumeMappingVisualiserModel.connectivity_measure,
name='connectivity_measure', conditions=cm_conditions)
Expand Down
8 changes: 5 additions & 3 deletions tvb_framework/tvb/adapters/visualizers/sensors.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,8 @@
from tvb.datatypes.sensors import SensorsInternal, SensorsEEG, SensorsMEG, Sensors
from tvb.datatypes.surfaces import Surface, SurfaceTypesEnum

SENSORS_CONTROLS_PAGE = "sensors/sensors_controls"

LOG = get_logger(__name__)


Expand Down Expand Up @@ -207,7 +209,7 @@ def _params_internal_sensors(self, internal_sensors, shell_surface=None):
params['shellObject'] = self.prepare_shell_surface_params(shell_surface, SurfaceURLGenerator)

return self.build_display_result('sensors/sensors_internal', params,
pages={"controlPage": "sensors/sensors_controls"})
pages={"controlPage": SENSORS_CONTROLS_PAGE})

def _params_eeg_sensors(self, eeg_sensors, eeg_cap=None, shell_surface=None):

Expand All @@ -228,7 +230,7 @@ def _params_eeg_sensors(self, eeg_sensors, eeg_cap=None, shell_surface=None):
params.update(self._compute_surface_params(eeg_cap_h5))

return self.build_display_result("sensors/sensors_eeg", params,
pages={"controlPage": "sensors/sensors_controls"})
pages={"controlPage": SENSORS_CONTROLS_PAGE})

def _params_meg_sensors(self, meg_sensors, projection_surface=None, shell_surface=None):

Expand All @@ -246,7 +248,7 @@ def _params_meg_sensors(self, meg_sensors, projection_surface=None, shell_surfac
params.update(self._compute_surface_params(projection_surface_h5))

return self.build_display_result("sensors/sensors_eeg", params,
pages={"controlPage": "sensors/sensors_controls"})
pages={"controlPage": SENSORS_CONTROLS_PAGE})

@staticmethod
def _compute_surface_params(surface_h5):
Expand Down
7 changes: 4 additions & 3 deletions tvb_framework/tvb/core/entities/model/model_datatype.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@
from tvb.core.entities.model.model_burst import BurstConfiguration
from tvb.core.neotraits.db import HasTraitsIndex, Base, from_ndarray

DATATYPE_ID_KEY = 'DataType.id'

LOG = get_logger(__name__)

Expand Down Expand Up @@ -108,7 +109,7 @@ class DataType(HasTraitsIndex):
# it should be a reference to a DataTypeGroup, but we can not create that FK
# because this two tables (DATA_TYPES, DATA_TYPES_GROUPS) will reference each
# other mutually and SQL-Alchemy complains about that.
fk_datatype_group = Column(Integer, ForeignKey('DataType.id'))
fk_datatype_group = Column(Integer, ForeignKey(DATATYPE_ID_KEY))

fk_from_operation = Column(Integer, ForeignKey('OPERATIONS.id', ondelete="CASCADE"))
parent_operation = relationship(Operation, backref=backref("DATA_TYPES", order_by=id, cascade="all,delete"))
Expand Down Expand Up @@ -284,7 +285,7 @@ class DataTypeGroup(DataType):
"""
__tablename__ = 'DATA_TYPES_GROUPS'

id = Column('id', Integer, ForeignKey('DataType.id', ondelete="CASCADE"), primary_key=True)
id = Column('id', Integer, ForeignKey(DATATYPE_ID_KEY, ondelete="CASCADE"), primary_key=True)
count_results = Column(Integer)
no_of_ranges = Column(Integer, default=0) # Number of ranged parameters
fk_operation_group = Column(Integer, ForeignKey('OPERATION_GROUPS.id', ondelete="CASCADE"))
Expand Down Expand Up @@ -322,7 +323,7 @@ class Links(Base):

id = Column(Integer, primary_key=True)
fk_to_project = Column(Integer, ForeignKey('PROJECTS.id', ondelete="CASCADE"))
fk_from_datatype = Column(Integer, ForeignKey('DataType.id', ondelete="CASCADE"))
fk_from_datatype = Column(Integer, ForeignKey(DATATYPE_ID_KEY, ondelete="CASCADE"))

referenced_project = relationship(Project, backref=backref('LINKS', order_by=id, cascade="delete, all"))
referenced_datatype = relationship(DataType, backref=backref('LINKS', order_by=id, cascade="delete, all"))
Expand Down
8 changes: 5 additions & 3 deletions tvb_framework/tvb/core/entities/model/model_operation.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,8 @@
from tvb.core.neotraits.db import Base
from tvb.core.utils import generate_guid, string2date, string2bool, date2string, LESS_COMPLEX_TIME_FORMAT

PROJECTS_ID_KEY = 'PROJECTS.id'

LOG = get_logger(__name__)


Expand Down Expand Up @@ -165,7 +167,7 @@ class OperationGroup(Base, Exportable):
range2 = Column(String)
range3 = Column(String)
gid = Column(String)
fk_launched_in = Column(Integer, ForeignKey('PROJECTS.id', ondelete="CASCADE"))
fk_launched_in = Column(Integer, ForeignKey(PROJECTS_ID_KEY, ondelete="CASCADE"))
project = relationship(Project, backref=backref('OPERATION_GROUPS', order_by=id, cascade="all,delete"))

def __init__(self, project_id, name='incomplete', ranges=None, gid=None):
Expand Down Expand Up @@ -235,7 +237,7 @@ class Operation(Base, Exportable):

id = Column(Integer, primary_key=True)
fk_launched_by = Column(Integer, ForeignKey('USERS.id'))
fk_launched_in = Column(Integer, ForeignKey('PROJECTS.id', ondelete="CASCADE"))
fk_launched_in = Column(Integer, ForeignKey(PROJECTS_ID_KEY, ondelete="CASCADE"))
fk_from_algo = Column(Integer, ForeignKey('ALGORITHMS.id'))
fk_operation_group = Column(Integer, ForeignKey('OPERATION_GROUPS.id', ondelete="CASCADE"), default=None)
gid = Column(String)
Expand Down Expand Up @@ -435,7 +437,7 @@ class ResultFigure(Base, Exportable):

id = Column(Integer, primary_key=True)
fk_for_user = Column(Integer, ForeignKey('USERS.id', ondelete="CASCADE"))
fk_in_project = Column(Integer, ForeignKey('PROJECTS.id', ondelete="CASCADE"))
fk_in_project = Column(Integer, ForeignKey(PROJECTS_ID_KEY, ondelete="CASCADE"))
project = relationship(Project, backref=backref('RESULT_FIGURES', order_by=id, cascade="delete"))
session_name = Column(String)
name = Column(String)
Expand Down
8 changes: 5 additions & 3 deletions tvb_framework/tvb/core/entities/model/model_project.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,8 @@
from tvb.core.entities.transient.structure_entities import DataTypeMetaData
from tvb.core.neotraits.db import Base

USERS_ID_KEY = 'USERS.id'

LOG = get_logger(__name__)

# Constants for User Roles.
Expand Down Expand Up @@ -152,7 +154,7 @@ class UserPreferences(Base):
ONLINE_HELP_ACTIVE = "online_help_active"
VIEWERS_COLOR_SCHEME = "viewers_color_scheme"
PROJECT_STRUCTURE_GROUPING = "project_structure_grouping"
fk_user = Column(Integer, ForeignKey('USERS.id'), primary_key=True)
fk_user = Column(Integer, ForeignKey(USERS_ID_KEY), primary_key=True)
key = Column(String, primary_key=True)
value = Column(String)

Expand All @@ -173,7 +175,7 @@ class Project(Base, Exportable):
name = Column(String, unique=True)
description = Column(String)
last_updated = Column(DateTime)
fk_admin = Column(Integer, ForeignKey('USERS.id'))
fk_admin = Column(Integer, ForeignKey(USERS_ID_KEY))
gid = Column(String, unique=True)
version = Column(Integer)
disable_imports = Column(Boolean, default=False)
Expand Down Expand Up @@ -235,7 +237,7 @@ class User_to_Project(Base):
__tablename__ = 'USERS_TO_PROJECTS'

id = Column(Integer, primary_key=True)
fk_user = Column(Integer, ForeignKey('USERS.id', ondelete="CASCADE"))
fk_user = Column(Integer, ForeignKey(USERS_ID_KEY, ondelete="CASCADE"))
fk_project = Column(Integer, ForeignKey('PROJECTS.id', ondelete="CASCADE"))

def __init__(self, user, case):
Expand Down
15 changes: 9 additions & 6 deletions tvb_framework/tvb/core/neotraits/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,9 @@
from tvb.core.neotraits.db import HasTraitsIndex
from tvb.core.neotraits.view_model import DataTypeGidAttr

FIELD_REQUIRED_ERROR = 'Field required'
STR_FIELD_TEMPLATE = 'form_fields/str_field.html'

# This setting is injected.
# The pattern might be confusing, but it is an interesting alternative to
# universal tvbprofile imports
Expand Down Expand Up @@ -78,7 +81,7 @@ def validate(self):

def _from_post(self):
if self.required and (self.unvalidated_data is None or len(str(self.unvalidated_data).strip()) == 0):
raise ValueError('Field required')
raise ValueError(FIELD_REQUIRED_ERROR)
self.data = self.unvalidated_data

@property
Expand Down Expand Up @@ -201,7 +204,7 @@ def _from_post(self):
self.unvalidated_data = None

if self.required and not self.unvalidated_data:
raise ValueError('Field required')
raise ValueError(FIELD_REQUIRED_ERROR)

# TODO: ensure is in choices
try:
Expand All @@ -214,11 +217,11 @@ def _from_post(self):


class StrField(TraitField):
template = 'form_fields/str_field.html'
template = STR_FIELD_TEMPLATE


class UserSessionStrField(TraitField):
template = 'form_fields/str_field.html'
template = STR_FIELD_TEMPLATE

def __init__(self, trait_attribute, name=None, disabled=False, key=None):
# type: (Attr, str, bool, str) -> None
Expand Down Expand Up @@ -261,7 +264,7 @@ def _from_post(self):


class ArrayField(TraitField):
template = 'form_fields/str_field.html'
template = STR_FIELD_TEMPLATE

def _from_post(self):
super(ArrayField, self)._from_post()
Expand Down Expand Up @@ -444,7 +447,7 @@ def options(self):
def _from_post(self):
if self.unvalidated_data is None:
if self.required:
raise ValueError('Field required')
raise ValueError(FIELD_REQUIRED_ERROR)
else:
return None

Expand Down
Loading
Loading