Flask + Vue rewrite of the classic-ASP shopdb, built as a plugin framework so sister GE Aerospace sites can adopt it. Product version 0.7.0-pre-0.8.0, plugin contract 0.11.0, 966 backend tests. Key entry points: - docs/INSTALL-WINDOWS-IIS.md - tested Windows + IIS install runbook (own-site and subpath deployment methods) - docs/PILOT-DEPLOY.md - production pilot: stand up + import + verify - docs/IMPORT-API.md - schema-agnostic legacy data import contract - scripts/site_imports/wjf/ - West Jefferson reference import loader - docs/adr/ - twelve accepted architecture decision records
94 lines
2.7 KiB
Python
94 lines
2.7 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 an asset (or legacy machine).
|
|
Stores network config, serial settings, etc.
|
|
"""
|
|
__tablename__ = 'communications'
|
|
|
|
communicationid = db.Column(db.Integer, primary_key=True)
|
|
|
|
# New asset-based FK (preferred)
|
|
assetid = db.Column(
|
|
db.Integer,
|
|
db.ForeignKey('assets.assetid'),
|
|
nullable=True,
|
|
comment='FK to assets table (new architecture)'
|
|
)
|
|
|
|
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_asset', 'assetid'),
|
|
db.Index('idx_comm_ip', 'ipaddress'),
|
|
)
|
|
|
|
def __repr__(self):
|
|
return f"<Communication {self.assetid}:{self.comtype.comtype if self.comtype else 'Unknown'}>"
|