"""Communication/network interface models.""" from shopdb.extensions import db from .base import BaseModel class CommunicationType(BaseModel): """Types of communication interfaces.""" __tablename__ = 'communicationtypes' comtypeid = db.Column(db.Integer, primary_key=True) comtype = db.Column(db.String(50), unique=True, nullable=False) description = db.Column(db.Text) # Types: IP, Serial, USB, VNC, FTP, DNC, Parallel, Network Interface def __repr__(self): return f"" class Communication(BaseModel): """ Communication interface for a machine. Stores network config, serial settings, etc. """ __tablename__ = 'communications' communicationid = db.Column(db.Integer, primary_key=True) machineid = db.Column( db.Integer, db.ForeignKey('machines.machineid'), nullable=False ) comtypeid = db.Column( db.Integer, db.ForeignKey('communicationtypes.comtypeid'), nullable=False ) # Network configuration (for IP type) ipaddress = db.Column(db.String(50)) subnetmask = db.Column(db.String(50)) gateway = db.Column(db.String(50)) dns1 = db.Column(db.String(50)) dns2 = db.Column(db.String(50)) macaddress = db.Column(db.String(50)) isdhcp = db.Column(db.Boolean, default=False) # Serial configuration (for Serial type) comport = db.Column(db.String(20)) baudrate = db.Column(db.Integer) databits = db.Column(db.Integer) stopbits = db.Column(db.String(10)) parity = db.Column(db.String(20)) flowcontrol = db.Column(db.String(20)) # VNC/FTP configuration port = db.Column(db.Integer) username = db.Column(db.String(100)) # Note: passwords should not be stored here - use secure vault # DNC configuration pathname = db.Column(db.String(255)) pathname2 = db.Column(db.String(255), comment='Secondary path for dualpath') # Flags isprimary = db.Column( db.Boolean, default=False, comment='Primary communication method' ) ismachinenetwork = db.Column( db.Boolean, default=False, comment='On machine network vs office network' ) notes = db.Column(db.Text) # Relationships comtype = db.relationship('CommunicationType', backref='communications') __table_args__ = ( db.Index('idx_comm_machine', 'machineid'), db.Index('idx_comm_ip', 'ipaddress'), ) def __repr__(self): return f""