Skip to content

Commit

Permalink
Merge pull request #178 from introlab/dev
Browse files Browse the repository at this point in the history
Main merge for 1.1.2 release
  • Loading branch information
SBriere committed May 3, 2022
2 parents 1a1c392 + d042df6 commit 1cc97d8
Show file tree
Hide file tree
Showing 47 changed files with 4,314 additions and 130 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -84,3 +84,4 @@ teraserver/python/services/BureauActif/uploads/
/teraserver/python/OpenTeraServerVersion.py
/teraserver/python/services/FileTransferService/upload
files
build-teraserver-Desktop_Qt_5_15_2_MSVC2019_64bit-Debug
2 changes: 1 addition & 1 deletion teraserver/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ endif(NOT CMAKE_BUILD_TYPE)
# Software version
SET(OPENTERA_VERSION_MAJOR "1")
SET(OPENTERA_VERSION_MINOR "1")
SET(OPENTERA_VERSION_PATCH "1")
SET(OPENTERA_VERSION_PATCH "2")

SET(OPENTERA_SERVER_VERSION OpenTera_v${OPENTERA_VERSION_MAJOR}.${OPENTERA_VERSION_MINOR}.${OPENTERA_VERSION_PATCH})

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
"""revised test types tables
Revision ID: dbe0ef5395eb
Revises: c903e55a7a4f
Create Date: 2022-03-28 15:01:21.497534
"""
from alembic import op
import sqlalchemy as sa
from sqlalchemy.schema import CreateSequence, DropSequence
from sqlalchemy.engine.reflection import Inspector
import time


# revision identifiers, used by Alembic.
revision = 'dbe0ef5395eb'
down_revision = 'c903e55a7a4f'
branch_labels = None
depends_on = None


def upgrade():
conn = op.get_bind()
inspector = Inspector.from_engine(conn)
tables = inspector.get_table_names()

if 't_tests_types_projects' in tables:
op.drop_table('t_tests_types_projects')

if 't_tests' in tables:
op.drop_table('t_tests')

if 't_tests_types' in tables:
op.drop_table('t_tests_types')

op.execute(DropSequence(sa.Sequence('id_test_type_sequence')))

op.create_table('t_tests_types',
sa.Column('version_id', sa.BigInteger, nullable=False, default=time.time() * 1000),
sa.Column('id_test_type', sa.Integer, sa.Sequence('id_test_type_sequence'),
primary_key=True, autoincrement=True),
sa.Column('id_service', sa.Integer, sa.ForeignKey('t_services.id_service', ondelete='cascade'),
nullable=False),
sa.Column('test_type_uuid', sa.String(36), nullable=False, unique=True),
sa.Column('test_type_name', sa.String, nullable=False, unique=False),
sa.Column('test_type_description', sa.String, nullable=True),
sa.Column('test_type_has_json_format', sa.Boolean, nullable=False, default=False),
sa.Column('test_type_has_web_format', sa.Boolean, nullable=False, default=False),
sa.Column('test_type_has_web_editor', sa.Boolean, nullable=False, default=False)
)
op.execute(CreateSequence(sa.Sequence('id_test_type_sequence')))

op.create_table('t_tests_types_sites',
sa.Column('version_id', sa.BigInteger, nullable=False, default=time.time() * 1000),
sa.Column('id_test_type_site', sa.Integer, sa.Sequence('id_test_type_site_sequence'),
primary_key=True, autoincrement=True),
sa.Column('id_test_type', sa.Integer, sa.ForeignKey('t_tests_types.id_test_type',
ondelete='cascade'), nullable=False),
sa.Column('id_site', sa.Integer, sa.ForeignKey('t_sites.id_site', ondelete='cascade'),
nullable=False))
op.execute(CreateSequence(sa.Sequence('id_test_type_site_sequence')))

op.create_table('t_tests_types_projects',
sa.Column('version_id', sa.BigInteger, nullable=False, default=time.time() * 1000),
sa.Column('id_test_type_project', sa.Integer, sa.Sequence('id_test_type_project_sequence'),
primary_key=True, autoincrement=True),
sa.Column('id_test_type', sa.Integer, sa.ForeignKey('t_tests_types.id_test_type',
ondelete='cascade'), nullable=False),
sa.Column('id_project', sa.Integer, sa.ForeignKey('t_projects.id_project', ondelete='cascade'),
nullable=False))
op.execute(CreateSequence(sa.Sequence('id_test_type_project_sequence')))


def downgrade():
# No way to downgrade...
pass
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
"""revised test table
Revision ID: f4b9e7081b18
Revises: dbe0ef5395eb
Create Date: 2022-04-01 07:36:25.422384
"""
from alembic import op
import sqlalchemy as sa
from sqlalchemy.schema import CreateSequence, DropSequence
from sqlalchemy.engine.reflection import Inspector
import time

# revision identifiers, used by Alembic.
revision = 'f4b9e7081b18'
down_revision = 'dbe0ef5395eb'
branch_labels = None
depends_on = None


def upgrade():
conn = op.get_bind()
inspector = Inspector.from_engine(conn)
tables = inspector.get_table_names()

if 't_tests' in tables:
op.drop_table('t_tests')

op.execute(DropSequence(sa.Sequence('id_test_sequence')))

op.create_table('t_tests',
sa.Column('version_id', sa.BigInteger, nullable=False, default=time.time() * 1000),
sa.Column('id_test', sa.Integer, sa.Sequence('id_test_sequence'), primary_key=True,
autoincrement=True),
sa.Column('id_test_type', sa.Integer, sa.ForeignKey('t_tests_types.id_test_type'), nullable=False),
sa.Column('id_session', sa.Integer, sa.ForeignKey('t_sessions.id_session', ondelete='cascade'),
nullable=False),
sa.Column('id_device', sa.Integer, sa.ForeignKey("t_devices.id_device"), nullable=True),
sa.Column('id_participant', sa.Integer, sa.ForeignKey("t_participants.id_participant"),
nullable=True),
sa.Column('id_user', sa.Integer, sa.ForeignKey("t_users.id_user"), nullable=True),
sa.Column('id_service', sa.Integer, sa.ForeignKey("t_services.id_service"), nullable=True),
sa.Column('test_uuid', sa.String(36), nullable=False, unique=True),
sa.Column('test_name', sa.String, nullable=False),
sa.Column('test_datetime', sa.TIMESTAMP(timezone=True), nullable=False),
sa.Column('test_status', sa.Integer, nullable=False, default=0),
sa.Column('test_summary', sa.String, nullable=True)
)
op.execute(CreateSequence(sa.Sequence('id_test_sequence')))

op.add_column(table_name='t_tests_types', column=sa.Column('test_type_key', sa.String, nullable=True, unique=True))


def downgrade():
pass
1 change: 1 addition & 0 deletions teraserver/python/env/requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -38,3 +38,4 @@ websocket-client==1.2.1
pytest==6.2.5
jsonschema==4.2.1
Jinja2==3.0.3
werkzeug==2.0.3
28 changes: 22 additions & 6 deletions teraserver/python/modules/DatabaseModule/DBManager.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from flask_sqlalchemy import event
from sqlalchemy.engine import Engine
from sqlalchemy.engine.reflection import Inspector
from sqlite3 import Connection as SQLite3Connection

from twisted.internet import task, reactor
Expand Down Expand Up @@ -39,6 +40,10 @@
from opentera.db.models.TeraUserUserGroup import TeraUserUserGroup
from opentera.db.models.TeraServiceAccess import TeraServiceAccess
from opentera.db.models.TeraServiceConfig import TeraServiceConfig
from opentera.db.models.TeraTestType import TeraTestType
from opentera.db.models.TeraTestTypeSite import TeraTestTypeSite
from opentera.db.models.TeraTestTypeProject import TeraTestTypeProject
from opentera.db.models.TeraTest import TeraTest

from opentera.config.ConfigManager import ConfigManager
from modules.FlaskModule.FlaskModule import flask_app
Expand Down Expand Up @@ -188,10 +193,6 @@ def create_defaults(self, config: ConfigManager, test=False):
print('No device types - creating defaults')
TeraDeviceType.create_defaults(test)

if TeraDeviceSubType.get_count() == 0:
print("No device sub types - creating defaults")
TeraDeviceSubType.create_defaults(test)

if TeraServiceProject.get_count() == 0:
print('No service - project association - creating defaults')
TeraServiceProject.create_defaults(test)
Expand Down Expand Up @@ -224,6 +225,7 @@ def create_defaults(self, config: ConfigManager, test=False):
TeraDeviceProject.create_defaults(test)
TeraDeviceParticipant.create_defaults(test)
TeraServiceAccess.create_defaults(test)
TeraDeviceSubType.create_defaults(test)

if TeraDeviceSite.get_count() == 0:
print('No device-site association - creating defaults')
Expand Down Expand Up @@ -251,6 +253,16 @@ def create_defaults(self, config: ConfigManager, test=False):
print('No service config - creating defaults')
TeraServiceConfig.create_defaults(test)

if TeraTestType.get_count() == 0:
print('No test types - creating defaults')
TeraTestType.create_defaults(test)
TeraTestTypeSite.create_defaults(test)
TeraTestTypeProject.create_defaults(test)

if TeraTest.get_count() == 0:
print('No test - creating defaults')
TeraTest.create_defaults(test)

def setup_events(self):
# TODO Add events that need to be sent through redis
# TODO Useful to specify event name, always get_model_name() ?
Expand All @@ -274,7 +286,9 @@ def open(self, echo=False):

# Init tables
# db.drop_all()
tables = db.engine.table_names()
inspector = Inspector.from_engine(db.engine)
tables = inspector.get_table_names()
# tables = db.engine.table_names()
if not tables:
# Create all tables
db.create_all()
Expand Down Expand Up @@ -308,7 +322,9 @@ def open_local(self, db_infos, echo=False, ram=True):
db.app = flask_app

# Init tables
tables = db.engine.table_names()
inspector = Inspector.from_engine(db.engine)
tables = inspector.get_table_names()
# tables = db.engine.table_names()
if not tables:
# Create all tables
db.create_all()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,17 @@ def get_accessible_sessions_types(self):
def get_accessible_sessions_types_ids(self):
return [st.id_session_type for st in self.get_accessible_sessions_types()]

def get_accessible_tests_types(self):
from opentera.db.models.TeraTestType import TeraTestType

query = TeraTestType.query.filter(TeraTestType.id_service == self.service.id_service)\
.order_by(TeraTestType.test_type_name.asc())

return query.all()

def get_accessible_tests_types_ids(self):
return [tt.id_test_type for tt in self.get_accessible_tests_types()]

def get_site_role(self, site_id: int, uuid_user: str):
user = self.get_user_with_uuid(uuid_user)
sites_roles = user.get_sites_roles()
Expand Down Expand Up @@ -205,3 +216,42 @@ def query_asset(self, asset_id: int):
return TeraAsset.query.filter(TeraAsset.id_session.in_(session_ids)).filter(TeraAsset.id_asset == asset_id)\
.all()
# .filter(or_(TeraAsset.id_service.in_(service_ids), TeraAsset.id_service == None)) \

def query_test(self, test_id: int = None, test_uuid: str = None):
from opentera.db.models.TeraTest import TeraTest

if not test_id and not test_uuid:
return None

test = None
if test_id:
test = TeraTest.get_test_by_id(test_id)
elif test_uuid:
test = TeraTest.get_test_by_uuid(test_uuid)

if not test:
return None

test_session = self.query_session(test.id_session)
if not test_session:
# No access to asset session
return None

return test

def query_session(self, session_id: int):
from opentera.db.models.TeraSession import TeraSession

session = TeraSession.get_session_by_id(session_id)

if session:
# Check if we are the creator of that session
if session.id_creator_service == self.service.id_service:
return session

# Check if we have access to the project of that session
accessible_projects = self.get_accessible_projects_ids()
if session.get_associated_project_id() in accessible_projects:
return session

return None

0 comments on commit 1cc97d8

Please sign in to comment.