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 2.77 KiB
Newer Older
  • Learn to ignore specific revisions
  • 
    import operator
    from sqlalchemy import CheckConstraint, Column, DateTime, Float, ForeignKey, Integer, String ,Boolean
    from sqlalchemy.dialects.postgresql import UUID
    from sqlalchemy.types import ARRAY
    from sqlalchemy.orm import relationship
    from typing import Dict
    from ._Base import _Base
    
    class OpticalLinkModel(_Base):
        __tablename__ = 'opticallink'
    
        optical_link_uuid           = Column(UUID(as_uuid=False), primary_key=True)
        optical_link_name           = Column(String, nullable=False)
        length = Column(Integer, nullable=True)
        source  = Column(String, nullable=True)
        target  = Column(String, nullable=True)
        optical_link_fiber= relationship("FiberModel") 
        created_at          = Column(DateTime, nullable=False)
        updated_at          = Column(DateTime, nullable=False)
    
     
       
    
        def dump_id(self) -> Dict:
            return {'optical_link_uuid': {'uuid': self.link_uuid}}
    
        def dump(self) -> Dict:
            result = {
                'optical_link_id'   : self.dump_id(),
                'name'              : self.optical_link_name,
                'details': {
                    "length"        : self.length,
                    'source'        : self.source,
                    "target"        : self.target,
                    'fibers'        : [ fiber.dump() for fiber in self.optical_link_fiber ]
                }
              
            }
           
            return result
    
    class FiberModel(_Base):
        __tablename__ = 'fiber'
        fiber_uuid  = Column(UUID(as_uuid=False), primary_key=True)
        fiber_length = Column(Integer, nullable=True)
        source_port  = Column(String, nullable=True)
        destination_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 (ARRAY(Integer),nullable=True)
        l_slots = Column (ARRAY(Integer),nullable=True)
        s_slots = Column (ARRAY(Integer),nullable=True)
        optical_link_uuid     = Column(ForeignKey('opticallink.optical_link_uuid',  ondelete='CASCADE' ), primary_key=True)
    	optical_link     = relationship('OpticalLinkModel',     back_populates='optical_link_fibers')
     
     
     	def dump_id(self) -> Dict:
            return {'fiber_uuid': {'uuid': self.fiber_uuid}}
        
        
        def dump(self) -> Dict:
            result = {
            'ID'               : self.dump_id(),
            'length'           : self.fiber_length,
            "src_port"         : self.source_port,
            "dst_port"         : self.destination_port,
            "local_peer_port"  : self.local_peer_port,
            "remote_peer_port" : self.remote_peer_port,
            "used"             : self.used,
            "c_slots"          : self.c_slots ,
            "l_slots"          : self.l_slots,
            "s_slots"          : self.s_slots
              
            }
           
            return result