Files
shopdb-flask/shopdb/core/models/communication.py
cproudlock 1196de6e88 Initial commit: Shop Database Flask Application
Flask backend with Vue 3 frontend for shop floor machine management.
Includes database schema export for MySQL shopdb_flask database.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-13 16:07:34 -05:00

91 lines
2.6 KiB
Python

"""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"<CommunicationType {self.comtype}>"
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"<Communication {self.machineid}:{self.comtype.comtype if self.comtype else 'Unknown'}>"