Skip to content
Snippets Groups Projects
ContextModel.py 2.11 KiB
Newer Older
# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
import logging
from typing import Dict, List
from sqlalchemy import Column
from sqlalchemy.dialects.postgresql import UUID
from context.service.database.Base import Base
from sqlalchemy.orm import relationship
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed

LOGGER = logging.getLogger(__name__)


class ContextModel(Base):
    __tablename__ = 'Context'
    context_uuid = Column(UUID(as_uuid=False), primary_key=True)
    # Relationships
    topology = relationship("TopologyModel", back_populates="context")

Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    def dump_id(self) -> Dict:
        return {'context_uuid': {'uuid': self.context_uuid}}

    def main_pk_name(self):
        return 'context_uuid'

Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
    def dump_service_ids(self) -> List[Dict]:
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
        from .ServiceModel import ServiceModel # pylint: disable=import-outside-toplevel
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
        db_service_pks = self.references(ServiceModel)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
        return [ServiceModel(self.database, pk).dump_id() for pk,_ in db_service_pks]
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed

    def dump_topology_ids(self) -> List[Dict]:
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
        from .TopologyModel import TopologyModel # pylint: disable=import-outside-toplevel
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
        db_topology_pks = self.references(TopologyModel)
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
        return [TopologyModel(self.database, pk).dump_id() for pk,_ in db_topology_pks]
    def dump(self, include_services=True, include_topologies=True) -> Dict:  # pylint: disable=arguments-differ
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
        result = {'context_id': self.dump_id()}
        # if include_services: result['service_ids'] = self.dump_service_ids()
        # if include_topologies: result['topology_ids'] = self.dump_topology_ids()
Lluis Gifre Renom's avatar
Lluis Gifre Renom committed
        return result