Source code for tvb.interfaces.rest.server.facades.project_facade
# -*- 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.storage import CaseDAO
from tvb.core.services.exceptions import ProjectServiceException
from tvb.core.services.project_service import ProjectService
from tvb.core.services.user_service import UserService
from tvb.interfaces.rest.commons.dtos import ProjectDto, DataTypeDto, OperationDto
from tvb.interfaces.rest.commons.exceptions import InvalidIdentifierException, AuthorizationRequestException, \
InvalidInputException
[docs]class ProjectFacade:
def __init__(self):
self.project_service = ProjectService()
self.user_service = UserService()
self.project_dao = CaseDAO()
[docs] @staticmethod
def retrieve_logged_user_projects(logged_user_id):
projects = ProjectService.retrieve_all_user_projects(user_id=logged_user_id)
return [ProjectDto(project) for project in projects]
[docs] def create_project(self, logged_user, project_name, project_description):
self.project_service.store_project(logged_user, True, None, name=project_name,
description=project_description)
[docs] def get_datatypes_in_project(self, project_gid):
try:
project = self.project_service.find_project_lazy_by_gid(project_gid)
except ProjectServiceException:
raise InvalidIdentifierException()
datatypes = self.project_service.get_datatypes_in_project(project.id)
return [DataTypeDto(datatype) for datatype in datatypes]
[docs] def get_project_operations(self, project_gid, page_number):
try:
project = self.project_service.find_project_lazy_by_gid(project_gid)
except ProjectServiceException:
raise InvalidIdentifierException()
_, _, operations, pages = self.project_service.retrieve_project_full(project.id, current_page=int(page_number))
return [OperationDto(operation) for operation in operations], pages
[docs] def add_members_to_project(self, current_user_id, project_gid, new_members_gid):
try:
project = self.project_service.find_project_lazy_by_gid(project_gid)
except Exception:
raise InvalidIdentifierException("Invalid project identifier.")
if current_user_id != project.fk_admin:
raise AuthorizationRequestException("Your are not allowed to edit given project")
new_members_id = []
for gid in new_members_gid:
user = self.user_service.get_user_by_gid(gid)
if user is None:
raise InvalidInputException("Invalid user gid {}".format(gid))
new_members_id.append(user.id)
self.project_dao.add_members_to_project(project.id, new_members_id)