Scheduled maintenance on Saturday, 27 September 2025, from 07:00 AM to 4:00 PM GMT (09:00 AM to 6:00 PM CEST) - some services may be unavailable -

Skip to content
Snippets Groups Projects
OpticalLinkModel.py 3.83 KiB
Newer Older
  • Learn to ignore specific revisions
  • Mohammad Ismaeel's avatar
    Mohammad Ismaeel committed
    # Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
    #
    # 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.
    
    
    
    
    
    import operator
    from sqlalchemy import CheckConstraint, Column, DateTime, Float, ForeignKey, Integer, String ,Boolean
    from sqlalchemy.dialects.postgresql import UUID
    
    from sqlalchemy.types import  PickleType , TypeDecorator ,Integer
    
    from sqlalchemy.orm import relationship
    
    Mohammad Ismaeel's avatar
    Mohammad Ismaeel committed
    import json,logging
    
    from typing import Dict
    from ._Base import _Base
    
    from .Slot import C_Slot ,S_Slot , L_Slot
    from common.tools.object_factory.OpticalLink import order_dict
    
    class OpticalLinkModel(_Base):
        __tablename__ = 'opticallink'
    
    
    Mohammad Ismaeel's avatar
    Mohammad Ismaeel committed
        opticallink_uuid          = Column(UUID(as_uuid=False), primary_key=True)
        name                      = Column(String, nullable=False)
        created_at                = Column(DateTime, nullable=False)
        updated_at                = Column(DateTime, nullable=False)
        length                    = Column(Integer, nullable=True)
        src_port                  = Column(String, nullable=True)
        dst_port                  = Column(String, nullable=True)
        local_peer_port           = Column(String, nullable=True)
        remote_peer_port          = Column(String, nullable=True)
        used                      = Column(Boolean ,nullable=True)
    
        c_slots                   = Column (C_Slot,nullable=True)
        l_slots                   = Column (L_Slot,nullable=True)
        s_slots                   = Column (S_Slot,nullable=True)
    
    Mohammad Ismaeel's avatar
    Mohammad Ismaeel committed
        opticallink_endpoints     = relationship("OpticalLinkEndPointModel")
        topology_optical_links    = relationship('TopologyOpticalLinkModel', back_populates='optical_link')
       
    
    
     
       
    
        def dump_id(self) -> Dict:
    
    Mohammad Ismaeel's avatar
    Mohammad Ismaeel committed
            return {'link_uuid': {'uuid': self.opticallink_uuid}}
    
    
        def dump(self) -> Dict:
    
            result = {
    
    Mohammad Ismaeel's avatar
    Mohammad Ismaeel committed
                
                'link_id'            : self.dump_id(),
                'name'               : self.name,
                'optical_details'    :{
                     
                                    'length'           : self.length,
                                    "src_port"         : self.src_port,
                                    "dst_port"         : self.dst_port,
                                    "local_peer_port"  : self.local_peer_port,
                                    "remote_peer_port" : self.remote_peer_port,
                                    "used"             : self.used,
    
                                    "c_slots"          : order_dict(self.c_slots) if self.c_slots is not None else {} ,
                                    "l_slots"          : order_dict(self.l_slots) if self.l_slots is not None else {},
                                    "s_slots"          : order_dict(self.s_slots) if self.s_slots  is not None else {}
    
    Mohammad Ismaeel's avatar
    Mohammad Ismaeel committed
                    },
                "link_endpoint_ids" : [optical_endpoint.endpoint.dump_id() for optical_endpoint in self.opticallink_endpoints]
                
    
    Mohammad Ismaeel's avatar
    Mohammad Ismaeel committed
    
    
    
    class OpticalLinkEndPointModel(_Base):
        __tablename__ = 'opticallink_endpoint'
    
        link_uuid     = Column(ForeignKey('opticallink.opticallink_uuid',         ondelete='CASCADE' ), primary_key=True)
    
        endpoint_uuid = Column(ForeignKey('endpoint.endpoint_uuid', ondelete='RESTRICT'), primary_key=True, index=True)
    
        optical_link     = relationship('OpticalLinkModel',     back_populates='opticallink_endpoints') 
        endpoint = relationship('EndPointModel', lazy='selectin')