Source code for nexusLIMS.db.migrations.versions.v2_5_0b_remove_computer_fields

"""Remove unused fields and rename schema_name to display_name.

Removes computer_name, computer_ip, computer_mount (deprecated Session Logger App
fields) and calendar_name (unused field). Also renames schema_name to display_name
for clarity.

Revision ID: v2_5_0b
Revises: v2_5_0a
Create Date: 2026-02-08 14:30:00.000000

"""

from typing import Sequence, Union

import sqlalchemy as sa
from alembic import op

# revision identifiers, used by Alembic.
revision: str = "v2_5_0b"
down_revision: Union[str, Sequence[str], None] = "v2_5_0a"
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None


[docs] def upgrade() -> None: """Remove unused fields and rename schema_name to display_name.""" # Define the table structure for SQL mode support # This allows batch operations to work in offline/SQL mode without reflection instruments_table = sa.Table( "instruments", sa.MetaData(), sa.Column("instrument_pid", sa.String(length=100), primary_key=True), sa.Column("api_url", sa.String(), unique=True, nullable=False), sa.Column("calendar_name", sa.String(), nullable=True), sa.Column("calendar_url", sa.String(), nullable=False), sa.Column("location", sa.String(length=100), nullable=False), sa.Column("schema_name", sa.String(), nullable=False), sa.Column("property_tag", sa.String(length=20), nullable=False), sa.Column("filestore_path", sa.String(), nullable=False), sa.Column("harvester", sa.String(), nullable=False), sa.Column("timezone", sa.String(), nullable=False), sa.Column("computer_name", sa.String(), nullable=True), sa.Column("computer_ip", sa.String(length=15), nullable=True), sa.Column("computer_mount", sa.String(), nullable=True), ) with op.batch_alter_table( "instruments", schema=None, copy_from=instruments_table ) as batch_op: # Drop unused computer fields batch_op.drop_column("computer_mount") batch_op.drop_column("computer_ip") batch_op.drop_column("computer_name") # Drop unused calendar_name field batch_op.drop_column("calendar_name") # Rename schema_name to display_name batch_op.alter_column("schema_name", new_column_name="display_name")
[docs] def downgrade() -> None: """Restore removed fields and revert display_name to schema_name.""" # Define the table structure for SQL mode support (current state after upgrade) instruments_table = sa.Table( "instruments", sa.MetaData(), sa.Column("instrument_pid", sa.String(length=100), primary_key=True), sa.Column("api_url", sa.String(), unique=True, nullable=False), sa.Column("calendar_url", sa.String(), nullable=False), sa.Column("location", sa.String(length=100), nullable=False), sa.Column("display_name", sa.String(), nullable=False), sa.Column("property_tag", sa.String(length=20), nullable=False), sa.Column("filestore_path", sa.String(), nullable=False), sa.Column("harvester", sa.String(), nullable=False), sa.Column("timezone", sa.String(), nullable=False), ) with op.batch_alter_table( "instruments", schema=None, copy_from=instruments_table ) as batch_op: # Restore computer fields (all optional, no unique constraints for simplicity) batch_op.add_column(sa.Column("computer_name", sa.String(), nullable=True)) batch_op.add_column( sa.Column("computer_ip", sa.String(length=15), nullable=True) ) batch_op.add_column(sa.Column("computer_mount", sa.String(), nullable=True)) # Restore calendar_name field (nullable since we have no data to populate it) batch_op.add_column(sa.Column("calendar_name", sa.String(), nullable=True)) # Revert display_name to schema_name batch_op.alter_column("display_name", new_column_name="schema_name")