68 lines
2.3 KiB
Python
68 lines
2.3 KiB
Python
"""Move dashboarddefaults.displayrole onto the kiosk's own role vocabulary
|
|
|
|
Core named the roles dashboard / lobby / partskiosk. The kiosks name them
|
|
Dashboard / Lobby / 3DPrintRoom - the literal values a person types into
|
|
C:\\Enrollment\\display-type.txt, which the GE-Enforce dispatcher reads to pick
|
|
a target. Two vocabularies meant a display could report a role core could not
|
|
store, and core could store 'partskiosk', a value no kiosk would ever match.
|
|
|
|
The machine's own file wins, so the stored values move to it. 'partskiosk'
|
|
becomes '3DPrintRoom'; the other two are a case change only. Anything else is
|
|
left alone - an unrecognised value is somebody's data, not ours to guess at.
|
|
|
|
Idempotent and reversible: matching is case-insensitive, so a re-run is a no-op
|
|
rather than a second rewrite, and downgrade puts the old spellings back.
|
|
|
|
Revision ID: 7d32_displayrole_kiosk_vocabulary
|
|
Revises: 7d31_dashboarddefault_fqdn
|
|
Create Date: 2026-08-13
|
|
"""
|
|
from alembic import op
|
|
import sqlalchemy as sa
|
|
|
|
|
|
revision = '7d32_displayrole_kiosk_vocabulary'
|
|
down_revision = '7d31_dashboarddefault_fqdn'
|
|
branch_labels = None
|
|
depends_on = None
|
|
|
|
|
|
# old spelling -> new spelling
|
|
FORWARD = {
|
|
'dashboard': 'Dashboard',
|
|
'lobby': 'Lobby',
|
|
'partskiosk': '3DPrintRoom',
|
|
}
|
|
BACKWARD = {new: old for old, new in FORWARD.items()}
|
|
|
|
|
|
def _rewrite(mapping, newdefault):
|
|
connection = op.get_bind()
|
|
inspector = sa.inspect(connection)
|
|
if 'dashboarddefaults' not in inspector.get_table_names():
|
|
return
|
|
columns = {col['name'] for col in inspector.get_columns('dashboarddefaults')}
|
|
if 'displayrole' not in columns:
|
|
return
|
|
|
|
for source, target in mapping.items():
|
|
connection.execute(
|
|
sa.text('UPDATE dashboarddefaults SET displayrole = :target'
|
|
' WHERE LOWER(displayrole) = :source'),
|
|
{'target': target, 'source': source.lower()})
|
|
|
|
# 7d28 created the column with server_default='dashboard'; keep the default
|
|
# spelled the same way as the values.
|
|
op.alter_column('dashboarddefaults', 'displayrole',
|
|
existing_type=sa.String(length=20),
|
|
existing_nullable=False,
|
|
server_default=newdefault)
|
|
|
|
|
|
def upgrade():
|
|
_rewrite(FORWARD, 'Dashboard')
|
|
|
|
|
|
def downgrade():
|
|
_rewrite(BACKWARD, 'dashboard')
|