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>
91 lines
2.6 KiB
Python
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'}>"
|