Source code for tvb.interfaces.rest.commons.dtos
# -*- 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
#
#
from tvb.core.entities.model.model_datatype import DataType
from tvb.core.entities.model.model_operation import Algorithm
from tvb.core.entities.model.model_project import User, Project
from tvb.interfaces.rest.commons.decoders import CustomDecoder
[docs]class BaseDto:
[docs] def update(self, kwargs):
# type: ({}) -> None
"""
This method is setting object fields starting from a dictionary
:param kwargs: fields dictionary (rest server response)
"""
for key, value in kwargs.items():
kwargs[key] = CustomDecoder.custom_hook(value)
self.__dict__.update(kwargs)
[docs]class UserDto(BaseDto):
def __init__(self, user=None, **kwargs):
# type: (User, {}) -> None
"""
Create an UserDto instance starting from an User entity or from a dictionary.
For an UserDto object the unique identifier is the username field.
:param user: DB User model
:param kwargs: dictionary (rest server response)
"""
self.update(kwargs)
if user is not None:
self.gid = user.gid
self.display_name = user.display_name
self.email = user.email
[docs]class ProjectDto(BaseDto):
def __init__(self, project=None, **kwargs):
# type: (Project, {}) -> None
"""
Create a ProjectDto instance starting from a Project entity or from a dictionary.
For an ProjectDto object the unique identifier is the gid field.
:param project: DB Project model
:param kwargs: dictionary (rest server response)
"""
self.update(kwargs)
if project is not None:
self.gid = project.gid
self.name = project.name
self.description = project.description
self.last_updated = project.last_updated
self.version = project.version
[docs]class OperationDto(BaseDto):
def __init__(self, operation=None, **kwargs):
# type: ({}, {}) -> None
"""
Create an OperationDto instance starting from an operations dictionary or from another dictionary.
For an OperationDto object the unique identifier is the gid field.
:param operation: dictionary computed from db
:param kwargs: dictionary (rest server response)
"""
self.update(kwargs)
if hasattr(self, 'algorithm_dto'):
self.algorithm_dto = AlgorithmDto(None, **self.algorithm_dto)
if operation is not None:
self.user_gid = operation['user'].gid
self.algorithm_dto = AlgorithmDto(operation['algorithm'])
self.group = operation['group']
self.gid = operation['gid']
self.create_date = operation['create']
self.start_date = operation['start']
self.completion_date = operation['complete']
self.status = operation['status']
self.visible = operation['visible']
@property
def displayname(self):
return self.algorithm_dto.displayname
@property
def description(self):
return self.algorithm_dto.description
[docs]class AlgorithmDto(BaseDto):
def __init__(self, algorithm=None, **kwargs):
# type: (Algorithm, {}) -> None
"""
Create an AlgorithmDto instance starting from an Algorithm entity or from a dictionary.
For an OperationDto object the unique identifier is tuple (module,classname).
:param algorithm: DB Algorithm model
:param kwargs: dictionary (rest server response)
"""
self.update(kwargs)
if algorithm is not None:
self.module = algorithm.module
self.classname = algorithm.classname
self.displayname = algorithm.displayname
self.description = algorithm.description
[docs]class DataTypeDto(BaseDto):
def __init__(self, datatype=None, **kwargs):
# type: (DataType, {}) -> None
"""
Create a DataTypeDto instance starting from a DataType entity or from a dictionary.
For an DataTypeDto object the unique identifier is the gid field.
:param datatype: DB DataType model
:param kwargs: dictionary (rest server response)
"""
self.update(kwargs)
if datatype is not None:
self.gid = datatype.gid
self.name = datatype.display_name
self.type = datatype.display_type
self.create_date = datatype.create_date
self.subject = datatype.subject