Loading src/context/service/database/ConnectionModel.py +23 −8 Original line number Diff line number Diff line Loading @@ -19,7 +19,6 @@ from common.orm.backend.Tools import key_to_str from common.orm.fields.ForeignKeyField import ForeignKeyField from common.orm.fields.IntegerField import IntegerField from common.orm.fields.PrimaryKeyField import PrimaryKeyField from common.orm.fields.StringField import StringField from common.orm.model.Model import Model from common.orm.HighLevel import get_object, get_or_create_object, get_related_objects, update_or_create_object from common.proto.context_pb2 import EndPointId Loading @@ -27,10 +26,24 @@ from .EndPointModel import EndPointModel from .ServiceModel import ServiceModel from .Tools import remove_dict_key from sqlalchemy import Column, Enum, ForeignKey, Integer, CheckConstraint from typing import Dict, List from common.orm.HighLevel import get_related_objects from common.proto.context_pb2 import ServiceStatusEnum, ServiceTypeEnum from .ConfigModel import ConfigModel from .ConstraintModel import ConstraintsModel from .ContextModel import ContextModel from .Tools import grpc_to_enum from sqlalchemy.dialects.postgresql import UUID from context.service.database.Base import Base import enum LOGGER = logging.getLogger(__name__) LOGGER = logging.getLogger(__name__) class PathModel(Model): # pylint: disable=abstract-method pk = PrimaryKeyField() path_uuid = Column(UUID(as_uuid=False), primary_key=True, unique=True) def delete(self) -> None: for db_path_hop_pk,_ in self.references(PathHopModel): Loading @@ -44,10 +57,10 @@ class PathModel(Model): # pylint: disable=abstract-method return [remove_dict_key(path_hop, 'position') for path_hop in path_hops] class PathHopModel(Model): # pylint: disable=abstract-method pk = PrimaryKeyField() path_fk = ForeignKeyField(PathModel) position = IntegerField(min_value=0, required=True) endpoint_fk = ForeignKeyField(EndPointModel) path_hop_uuid = Column(UUID(as_uuid=False), primary_key=True, unique=True) path_uuid = Column(UUID(as_uuid=False), ForeignKey("Path.path_uuid")) position = Column(Integer, CheckConstraint('position >= 0'), nullable=False) endpoint_uuid = Column(UUID(as_uuid=False), ForeignKey("EndPoint.endpoint_uuid")) def dump(self, include_position=True) -> Dict: # pylint: disable=arguments-differ db_endpoint : EndPointModel = EndPointModel(self.database, self.endpoint_fk) Loading @@ -57,8 +70,10 @@ class PathHopModel(Model): # pylint: disable=abstract-method class ConnectionModel(Model): pk = PrimaryKeyField() connection_uuid = StringField(required=True, allow_empty=False) service_fk = ForeignKeyField(ServiceModel, required=False) # connection_uuid = StringField(required=True, allow_empty=False) connection_uuid = Column(UUID(as_uuid=False), primary_key=True, unique=True) # service_fk = ForeignKeyField(ServiceModel, required=False) service_uuid = Column(UUID(as_uuid=False), ForeignKey("Service.service_uuid")) path_fk = ForeignKeyField(PathModel, required=True) def delete(self) -> None: Loading src/context/service/database/ConstraintModel.py +1 −0 Original line number Diff line number Diff line Loading @@ -144,6 +144,7 @@ class ConstraintModel(Base): # pylint: disable=abstract-method __tablename__ = 'Constraint' # pk = PrimaryKeyField() # constraints_fk = ForeignKeyField(ConstraintsModel) constraint_uuid = Column(UUID(as_uuid=False), primary_key=True, unique=True) constraints_uuid = Column(UUID(as_uuid=False), ForeignKey("Constraints.constraints_uuid"), primary_key=True) # kind = EnumeratedField(ConstraintKindEnum) kind = Column(Enum(ConstraintKindEnum, create_constraint=False, native_enum=False)) Loading src/context/service/grpc_server/ContextServiceServicerImpl.py +2 −1 Original line number Diff line number Diff line Loading @@ -683,6 +683,7 @@ class ContextServiceServicerImpl(ContextServiceServicer): # create specific constraint constraint_class, str_constraint_id, constraint_data, constraint_kind = parser(grpc_constraint) str_constraint_id = str(uuid.uuid4()) LOGGER.info('str_constraint_id: {}'.format(str_constraint_id)) # str_constraint_key_hash = fast_hasher(':'.join([constraint_kind.value, str_constraint_id])) # str_constraint_key = key_to_str([db_constraints.pk, str_constraint_key_hash], separator=':') Loading @@ -697,7 +698,7 @@ class ContextServiceServicerImpl(ContextServiceServicer): # create generic constraint # constraint_fk_field_name = 'constraint_uuid'.format(constraint_kind.value) constraint_data = { 'constraint_uuid': db_constraints.constraint_uuid, 'position': position, 'kind': constraint_kind 'constraints_uuid': db_constraints.constraints_uuid, 'position': position, 'kind': constraint_kind } db_new_constraint = ConstraintModel(**constraint_data) Loading src/context/tests/test_unitary.py +3 −2 Original line number Diff line number Diff line Loading @@ -747,6 +747,7 @@ def test_grpc_link( LOGGER.info(db_entry) LOGGER.info('-----------------------------------------------------------') assert len(db_entries) == 0 """ def test_grpc_service( context_client_grpc : ContextClient, # pylint: disable=redefined-outer-name Loading Loading @@ -936,9 +937,10 @@ def test_grpc_service( LOGGER.info(' [{:>4s}] {:40s} :: {:s}'.format(*db_entry)) # pragma: no cover LOGGER.info('-----------------------------------------------------------') assert len(db_entries) == 0 """ """ def test_grpc_connection( context_client_grpc : ContextClient, # pylint: disable=redefined-outer-name context_db_mb : Tuple[Database, MessageBroker]): # pylint: disable=redefined-outer-name Loading Loading @@ -1192,7 +1194,6 @@ def test_grpc_connection( LOGGER.info('-----------------------------------------------------------') assert len(db_entries) == 0 """ # ----- Test REST API methods ------------------------------------------------------------------------------------------ Loading Loading
src/context/service/database/ConnectionModel.py +23 −8 Original line number Diff line number Diff line Loading @@ -19,7 +19,6 @@ from common.orm.backend.Tools import key_to_str from common.orm.fields.ForeignKeyField import ForeignKeyField from common.orm.fields.IntegerField import IntegerField from common.orm.fields.PrimaryKeyField import PrimaryKeyField from common.orm.fields.StringField import StringField from common.orm.model.Model import Model from common.orm.HighLevel import get_object, get_or_create_object, get_related_objects, update_or_create_object from common.proto.context_pb2 import EndPointId Loading @@ -27,10 +26,24 @@ from .EndPointModel import EndPointModel from .ServiceModel import ServiceModel from .Tools import remove_dict_key from sqlalchemy import Column, Enum, ForeignKey, Integer, CheckConstraint from typing import Dict, List from common.orm.HighLevel import get_related_objects from common.proto.context_pb2 import ServiceStatusEnum, ServiceTypeEnum from .ConfigModel import ConfigModel from .ConstraintModel import ConstraintsModel from .ContextModel import ContextModel from .Tools import grpc_to_enum from sqlalchemy.dialects.postgresql import UUID from context.service.database.Base import Base import enum LOGGER = logging.getLogger(__name__) LOGGER = logging.getLogger(__name__) class PathModel(Model): # pylint: disable=abstract-method pk = PrimaryKeyField() path_uuid = Column(UUID(as_uuid=False), primary_key=True, unique=True) def delete(self) -> None: for db_path_hop_pk,_ in self.references(PathHopModel): Loading @@ -44,10 +57,10 @@ class PathModel(Model): # pylint: disable=abstract-method return [remove_dict_key(path_hop, 'position') for path_hop in path_hops] class PathHopModel(Model): # pylint: disable=abstract-method pk = PrimaryKeyField() path_fk = ForeignKeyField(PathModel) position = IntegerField(min_value=0, required=True) endpoint_fk = ForeignKeyField(EndPointModel) path_hop_uuid = Column(UUID(as_uuid=False), primary_key=True, unique=True) path_uuid = Column(UUID(as_uuid=False), ForeignKey("Path.path_uuid")) position = Column(Integer, CheckConstraint('position >= 0'), nullable=False) endpoint_uuid = Column(UUID(as_uuid=False), ForeignKey("EndPoint.endpoint_uuid")) def dump(self, include_position=True) -> Dict: # pylint: disable=arguments-differ db_endpoint : EndPointModel = EndPointModel(self.database, self.endpoint_fk) Loading @@ -57,8 +70,10 @@ class PathHopModel(Model): # pylint: disable=abstract-method class ConnectionModel(Model): pk = PrimaryKeyField() connection_uuid = StringField(required=True, allow_empty=False) service_fk = ForeignKeyField(ServiceModel, required=False) # connection_uuid = StringField(required=True, allow_empty=False) connection_uuid = Column(UUID(as_uuid=False), primary_key=True, unique=True) # service_fk = ForeignKeyField(ServiceModel, required=False) service_uuid = Column(UUID(as_uuid=False), ForeignKey("Service.service_uuid")) path_fk = ForeignKeyField(PathModel, required=True) def delete(self) -> None: Loading
src/context/service/database/ConstraintModel.py +1 −0 Original line number Diff line number Diff line Loading @@ -144,6 +144,7 @@ class ConstraintModel(Base): # pylint: disable=abstract-method __tablename__ = 'Constraint' # pk = PrimaryKeyField() # constraints_fk = ForeignKeyField(ConstraintsModel) constraint_uuid = Column(UUID(as_uuid=False), primary_key=True, unique=True) constraints_uuid = Column(UUID(as_uuid=False), ForeignKey("Constraints.constraints_uuid"), primary_key=True) # kind = EnumeratedField(ConstraintKindEnum) kind = Column(Enum(ConstraintKindEnum, create_constraint=False, native_enum=False)) Loading
src/context/service/grpc_server/ContextServiceServicerImpl.py +2 −1 Original line number Diff line number Diff line Loading @@ -683,6 +683,7 @@ class ContextServiceServicerImpl(ContextServiceServicer): # create specific constraint constraint_class, str_constraint_id, constraint_data, constraint_kind = parser(grpc_constraint) str_constraint_id = str(uuid.uuid4()) LOGGER.info('str_constraint_id: {}'.format(str_constraint_id)) # str_constraint_key_hash = fast_hasher(':'.join([constraint_kind.value, str_constraint_id])) # str_constraint_key = key_to_str([db_constraints.pk, str_constraint_key_hash], separator=':') Loading @@ -697,7 +698,7 @@ class ContextServiceServicerImpl(ContextServiceServicer): # create generic constraint # constraint_fk_field_name = 'constraint_uuid'.format(constraint_kind.value) constraint_data = { 'constraint_uuid': db_constraints.constraint_uuid, 'position': position, 'kind': constraint_kind 'constraints_uuid': db_constraints.constraints_uuid, 'position': position, 'kind': constraint_kind } db_new_constraint = ConstraintModel(**constraint_data) Loading
src/context/tests/test_unitary.py +3 −2 Original line number Diff line number Diff line Loading @@ -747,6 +747,7 @@ def test_grpc_link( LOGGER.info(db_entry) LOGGER.info('-----------------------------------------------------------') assert len(db_entries) == 0 """ def test_grpc_service( context_client_grpc : ContextClient, # pylint: disable=redefined-outer-name Loading Loading @@ -936,9 +937,10 @@ def test_grpc_service( LOGGER.info(' [{:>4s}] {:40s} :: {:s}'.format(*db_entry)) # pragma: no cover LOGGER.info('-----------------------------------------------------------') assert len(db_entries) == 0 """ """ def test_grpc_connection( context_client_grpc : ContextClient, # pylint: disable=redefined-outer-name context_db_mb : Tuple[Database, MessageBroker]): # pylint: disable=redefined-outer-name Loading Loading @@ -1192,7 +1194,6 @@ def test_grpc_connection( LOGGER.info('-----------------------------------------------------------') assert len(db_entries) == 0 """ # ----- Test REST API methods ------------------------------------------------------------------------------------------ Loading